{"version":3,"file":"scope.mjs","names":[],"sources":["../../src/expression/scope.ts"],"sourcesContent":["import type {Expression} from './expression';\n\n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nexport class Scope {\n parent: Scope;\n bindings: {[_: string]: Expression};\n constructor(parent?: Scope, bindings: Array<[string, Expression]> = []) {\n this.parent = parent;\n this.bindings = {};\n for (const [name, expression] of bindings) {\n this.bindings[name] = expression;\n }\n }\n\n concat(bindings: Array<[string, Expression]>) {\n return new Scope(this, bindings);\n }\n\n get(name: string): Expression {\n if (this.bindings[name]) {\n return this.bindings[name];\n }\n if (this.parent) {\n return this.parent.get(name);\n }\n throw new Error(`${name} not found in scope.`);\n }\n\n has(name: string): boolean {\n if (this.bindings[name]) return true;\n return this.parent ? this.parent.has(name) : false;\n }\n}\n"],"mappings":";;;;;AAMA,IAAa,QAAb,MAAa,MAAM;CAGf,YAAY,QAAgB,WAAwC,CAAC,GAAG;EACpE,KAAK,SAAS;EACd,KAAK,WAAW,CAAC;EACjB,KAAK,MAAM,CAAC,MAAM,eAAe,UAC7B,KAAK,SAAS,QAAQ;CAE9B;CAEA,OAAO,UAAuC;EAC1C,OAAO,IAAI,MAAM,MAAM,QAAQ;CACnC;CAEA,IAAI,MAA0B;EAC1B,IAAI,KAAK,SAAS,OACd,OAAO,KAAK,SAAS;EAEzB,IAAI,KAAK,QACL,OAAO,KAAK,OAAO,IAAI,IAAI;EAE/B,MAAM,IAAI,MAAM,GAAG,KAAK,qBAAqB;CACjD;CAEA,IAAI,MAAuB;EACvB,IAAI,KAAK,SAAS,OAAO,OAAO;EAChC,OAAO,KAAK,SAAS,KAAK,OAAO,IAAI,IAAI,IAAI;CACjD;AACJ"}