in lib/object-context.ts [215:246]
public get(name: string): NamedObject {
// We only support 2 level of scopes for now (app + per request)
let namedObject = this._namedObjects.get(name);
if (namedObject != null) {
return namedObject;
}
// Not found at current level, try to find in parent.
let depth = 1;
let parent = this._parent;
while (parent != null) {
namedObject = parent._namedObjects.get(name);
if (namedObject != null) {
// We check if the named object returned from parent scope needs
// to be invalidated in current scope. In that case we will re-create
// it and insert into cache in current scope.
if (this.needsUpdate(namedObject, depth)) {
namedObject = {
def: namedObject.def,
value: this.create(namedObject.def.value),
scope: this._scope
};
this._namedObjects.insert(namedObject);
}
return namedObject;
}
parent = parent._parent;
++depth;
}
return null;
}