in lib/application.ts [133:197]
public constructor(
hostContext: ScopedObjectContext,
settings: ApplicationSettings) {
this._settings = settings;
this._perAppObjectContext = new ScopedObjectContext(
"./application",
settings.baseDir,
hostContext,
settings.objectContextDef);
// Create default execution stack.
this._defaultExecutionStack = [];
// Prepare default execution stack.
for (let interceptorName of this._settings.defaultExecutionStack) {
let interceptor = this.getInterceptor(interceptorName);
if (interceptor == null) {
throw new Error("Interceptor does not exisit: '" + interceptorName + "'.");
}
this._defaultExecutionStack.push(interceptor);
}
// Prepare per-entrypoint execution stack.
this._perEntryPointExecutionStack = new Map<string, Interceptor[]>();
this._perAppObjectContext.forEach(object => {
if (object.def.value._type === 'EntryPoint') {
let executionStack: Interceptor[] = this._defaultExecutionStack;
let customStack = object.def.value.executionStack;
// Entrypoint has specified executionStack.
if (customStack != null) {
executionStack = [];
for (let interceptorName of <string[]>(customStack)) {
let interceptor = this.getInterceptor(interceptorName);
if (interceptor == null) {
throw new Error("Interceptor does not exist: '" + interceptorName + "'");
}
executionStack.push(interceptor);
}
}
this._perEntryPointExecutionStack.set(
object.def.name,
executionStack);
}
});
// Create default template.
this._defaultRequestTemplate = new RequestTemplate(
this.id, // Use application id as fake template Uri.
this, // Application.
undefined, // No base template.
{
application: this.id,
overrideTypes: [],
overrideProviders: [],
overrideObjects: []
});
// Create metrics.
this._metrics = {};
if (settings.metrics != null) {
this._metrics = createMetricCollection(settings.metrics);
}
}