in lib/request-template.ts [141:182]
private loadInternal(uri: string,
appGetter: (app: string) => Application,
baseTemplateGetter: (baseUri: string) => RequestTemplate,
seenUris: {[uri: string] : boolean}) : RequestTemplate {
let lcUri = uri.toLowerCase();
if (seenUris[lcUri] != null) {
throw new Error(`Circle found in template inheritance. Uri: "${uri}"`);
}
seenUris[lcUri] = true;
let def = <RequestTemplateDef>utils.readConfig(uri, RequestTemplateFileLoader.REQUEST_TEMPLATE_SCHEMA);
let baseDir = path.dirname(uri);
let base: RequestTemplate = undefined;
let app: Application = undefined;
if (def.base != null) {
let basePath = def.base;
if (def.base.startsWith('.')) {
basePath = path.resolve(baseDir, def.base);
} else {
basePath = require.resolve(def.base);
}
base = this.loadInternal(
basePath,
appGetter,
baseTemplateGetter,
seenUris);
app = base.application;
}
else {
if (def.application == null) {
throw new Error(`Property "application" or "base" must be present in Request Template definition.`);
}
app = appGetter(def.application);
if (app == null) {
throw new Error(`Application "${def.application}" is not registered in current host.`);
}
}
return new RequestTemplate(uri, app, base, def);
}