import {isPresent, BaseException} from 'angular2/src/facade/lang'; import {ListWrapper, MapWrapper} from 'angular2/src/facade/collection'; export class Locals { constructor(public parent: Locals, public current: Map) {} contains(name: string): boolean { if (this.current.has(name)) { return true; } if (isPresent(this.parent)) { return this.parent.contains(name); } return false; } get(name: string) { if (this.current.has(name)) { return this.current.get(name); } if (isPresent(this.parent)) { return this.parent.get(name); } throw new BaseException(`Cannot find '${name}'`); } set(name: string, value): void { // TODO(rado): consider removing this check if we can guarantee this is not // exposed to the public API. // TODO: vsavkin maybe it should check only the local map if (this.current.has(name)) { this.current.set(name, value); } else { throw new BaseException( `Setting of new keys post-construction is not supported. Key: ${name}.`); } } clearValues(): void { MapWrapper.clearValues(this.current); } }