public get()

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