private loadInternal()

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);
    }