UNPKG

@aurelia/expression-parser

Version:

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/) [![CircleCI](https://circleci.com/

2,203 lines (1,939 loc) 52.3 kB
"use strict"; var e = require("@aurelia/kernel"); const t = "AccessThis"; const r = "AccessBoundary"; const s = "AccessGlobal"; const n = "AccessScope"; const i = "ArrayLiteral"; const a = "ObjectLiteral"; const o = "PrimitiveLiteral"; const c = "New"; const u = "Template"; const l = "Unary"; const p = "CallScope"; const f = "CallMember"; const h = "CallFunction"; const x = "CallGlobal"; const d = "AccessMember"; const k = "AccessKeyed"; const w = "TaggedTemplate"; const E = "Binary"; const b = "Conditional"; const m = "Assign"; const g = "ArrowFunction"; const A = "ValueConverter"; const C = "BindingBehavior"; const T = "ArrayBindingPattern"; const $ = "ObjectBindingPattern"; const v = "BindingIdentifier"; const y = "ForOfStatement"; const I = "Interpolation"; const S = "ArrayDestructuring"; const B = "ObjectDestructuring"; const P = "DestructuringAssignmentLeaf"; const L = "Custom"; class CustomExpression { constructor(e) { this.value = e; this.$kind = L; } evaluate(...e) { return this.value; } assign(...e) { return e; } bind(...e) {} unbind(...e) {} accept(e) { return void 0; } } function createBindingBehaviorExpression(e, t, r) { return { $kind: C, key: `_bb_${t}`, expression: e, name: t, args: r }; } function createValueConverterExpression(e, t, r) { return { $kind: A, expression: e, name: t, args: r }; } function createAssignExpression(e, t, r = "=") { return { $kind: m, target: e, value: t, op: r }; } function createConditionalExpression(e, t, r) { return { $kind: b, condition: e, yes: t, no: r }; } function createAccessGlobalExpression(e) { return { $kind: s, name: e }; } function createAccessThisExpression(e = 0) { return { $kind: t, ancestor: e }; } const O = { $kind: r }; function createAccessBoundaryExpression() { return O; } function createAccessScopeExpression(e, t = 0) { return { $kind: n, name: e, ancestor: t }; } function isAccessGlobal(e) { return e.$kind === s || (e.$kind === d || e.$kind === k) && e.accessGlobal; } function createAccessMemberExpression(e, t, r = false) { return { $kind: d, accessGlobal: isAccessGlobal(e), object: e, name: t, optional: r }; } function createAccessKeyedExpression(e, t, r = false) { return { $kind: k, accessGlobal: isAccessGlobal(e), object: e, key: t, optional: r }; } function createNewExpression(e, t) { return { $kind: c, func: e, args: t }; } function createCallScopeExpression(e, t, r = 0, s = false) { return { $kind: p, name: e, args: t, ancestor: r, optional: s }; } function createCallMemberExpression(e, t, r, s = false, n = false) { return { $kind: f, object: e, name: t, args: r, optionalMember: s, optionalCall: n }; } function createCallFunctionExpression(e, t, r = false) { return { $kind: h, func: e, args: t, optional: r }; } function createCallGlobalExpression(e, t) { return { $kind: x, name: e, args: t }; } function createBinaryExpression(e, t, r) { return { $kind: E, operation: e, left: t, right: r }; } function createUnaryExpression(e, t, r = 0) { return { $kind: l, operation: e, expression: t, pos: r }; } const F = { $undefined: { $kind: o, value: undefined }, $null: { $kind: o, value: null }, $true: { $kind: o, value: true }, $false: { $kind: o, value: false }, $empty: { $kind: o, value: "" } }; function createPrimitiveLiteralExpression(e) { return { $kind: o, value: e }; } const M = { $empty: { $kind: i, elements: e.emptyArray } }; function createArrayLiteralExpression(e) { return { $kind: i, elements: e }; } const j = { $empty: { $kind: a, keys: e.emptyArray, values: e.emptyArray } }; function createObjectLiteralExpression(e, t) { return { $kind: a, keys: e, values: t }; } const D = { $empty: { $kind: u, cooked: [ "" ], expressions: e.emptyArray } }; function createTemplateExpression(t, r = e.emptyArray) { return { $kind: u, cooked: t, expressions: r }; } function createTaggedTemplateExpression(t, r, s, n = e.emptyArray) { t.raw = r; return { $kind: w, cooked: t, func: s, expressions: n }; } function createArrayBindingPattern(e) { return { $kind: T, elements: e }; } function createObjectBindingPattern(e, t) { return { $kind: $, keys: e, values: t }; } function createBindingIdentifier(e) { return { $kind: v, name: e }; } function createForOfStatement(e, t, r) { return { $kind: y, declaration: e, iterable: t, semiIdx: r }; } function createInterpolation(t, r = e.emptyArray) { return { $kind: I, isMulti: r.length > 1, firstExpression: r[0], parts: t, expressions: r }; } function createDestructuringAssignmentExpression(e, t, r, s) { return { $kind: e, list: t, source: r, initializer: s }; } function createDestructuringAssignmentSingleExpression(e, t, r) { return { $kind: P, target: e, source: t, initializer: r }; } function createDestructuringAssignmentRestExpression(e, t) { return { $kind: P, target: e, indexOrProperties: t }; } function createArrowFunction(e, t, r = false) { return { $kind: g, args: e, body: t, rest: r }; } const createError = e => new Error(e); const isString = e => typeof e === "string"; const N = String; const createLookup = () => Object.create(null); const astVisit = (e, s) => { switch (e.$kind) { case k: return s.visitAccessKeyed(e); case d: return s.visitAccessMember(e); case n: return s.visitAccessScope(e); case t: return s.visitAccessThis(e); case r: return s.visitAccessBoundary(e); case T: return s.visitArrayBindingPattern(e); case S: return s.visitDestructuringAssignmentExpression(e); case i: return s.visitArrayLiteral(e); case g: return s.visitArrowFunction(e); case m: return s.visitAssign(e); case E: return s.visitBinary(e); case C: return s.visitBindingBehavior(e); case v: return s.visitBindingIdentifier(e); case h: return s.visitCallFunction(e); case f: return s.visitCallMember(e); case p: return s.visitCallScope(e); case b: return s.visitConditional(e); case P: return s.visitDestructuringAssignmentSingleExpression(e); case y: return s.visitForOfStatement(e); case I: return s.visitInterpolation(e); case $: return s.visitObjectBindingPattern(e); case B: return s.visitDestructuringAssignmentExpression(e); case a: return s.visitObjectLiteral(e); case o: return s.visitPrimitiveLiteral(e); case w: return s.visitTaggedTemplate(e); case u: return s.visitTemplate(e); case l: return s.visitUnary(e); case A: return s.visitValueConverter(e); case L: return s.visitCustom(e); default: { throw createError(`Trying to visit unknown ast node ${JSON.stringify(e)}`); } } }; class Unparser { constructor() { this.text = ""; } static unparse(e) { const t = new Unparser; astVisit(e, t); return t.text; } visitAccessMember(e) { astVisit(e.object, this); this.text += `${e.optional ? "?" : ""}.${e.name}`; } visitAccessKeyed(e) { astVisit(e.object, this); this.text += `${e.optional ? "?." : ""}[`; astVisit(e.key, this); this.text += "]"; } visitAccessThis(e) { if (e.ancestor === 0) { this.text += "$this"; return; } this.text += "$parent"; let t = e.ancestor - 1; while (t--) { this.text += ".$parent"; } } visitAccessBoundary(e) { this.text += "this"; } visitAccessScope(e) { let t = e.ancestor; while (t--) { this.text += "$parent."; } this.text += e.name; } visitArrayLiteral(e) { const t = e.elements; this.text += "["; for (let e = 0, r = t.length; e < r; ++e) { if (e !== 0) { this.text += ","; } astVisit(t[e], this); } this.text += "]"; } visitArrowFunction(e) { const t = e.args; const r = t.length; let s = 0; let n = "("; let i; for (;s < r; ++s) { i = t[s].name; if (s > 0) { n += ", "; } if (s < r - 1) { n += i; } else { n += e.rest ? `...${i}` : i; } } this.text += `${n}) => `; astVisit(e.body, this); } visitObjectLiteral(e) { const t = e.keys; const r = e.values; this.text += "{"; for (let e = 0, s = t.length; e < s; ++e) { if (e !== 0) { this.text += ","; } this.text += `'${t[e]}':`; astVisit(r[e], this); } this.text += "}"; } visitPrimitiveLiteral(e) { this.text += "("; if (isString(e.value)) { const t = e.value.replace(/'/g, "\\'"); this.text += `'${t}'`; } else { this.text += `${e.value}`; } this.text += ")"; } visitCallFunction(e) { this.text += "("; astVisit(e.func, this); this.text += e.optional ? "?." : ""; this.writeArgs(e.args); this.text += ")"; } visitCallMember(e) { astVisit(e.object, this); this.text += `${e.optionalMember ? "?." : ""}.${e.name}${e.optionalCall ? "?." : ""}`; this.writeArgs(e.args); } visitCallScope(e) { let t = e.ancestor; while (t--) { this.text += "$parent."; } this.text += `${e.name}${e.optional ? "?." : ""}`; this.writeArgs(e.args); } visitTemplate(e) { const {cooked: t, expressions: r} = e; const s = r.length; this.text += "`"; this.text += t[0]; for (let e = 0; e < s; e++) { astVisit(r[e], this); this.text += t[e + 1]; } this.text += "`"; } visitTaggedTemplate(e) { const {cooked: t, expressions: r} = e; const s = r.length; astVisit(e.func, this); this.text += "`"; this.text += t[0]; for (let e = 0; e < s; e++) { astVisit(r[e], this); this.text += t[e + 1]; } this.text += "`"; } visitUnary(e) { this.text += `(${e.operation}`; if (e.operation.charCodeAt(0) >= 97) { this.text += " "; } astVisit(e.expression, this); this.text += ")"; } visitBinary(e) { this.text += "("; astVisit(e.left, this); if (e.operation.charCodeAt(0) === 105) { this.text += ` ${e.operation} `; } else { this.text += e.operation; } astVisit(e.right, this); this.text += ")"; } visitConditional(e) { this.text += "("; astVisit(e.condition, this); this.text += "?"; astVisit(e.yes, this); this.text += ":"; astVisit(e.no, this); this.text += ")"; } visitAssign(e) { this.text += "("; astVisit(e.target, this); this.text += "="; astVisit(e.value, this); this.text += ")"; } visitValueConverter(e) { const t = e.args; astVisit(e.expression, this); this.text += `|${e.name}`; for (let e = 0, r = t.length; e < r; ++e) { this.text += ":"; astVisit(t[e], this); } } visitBindingBehavior(e) { const t = e.args; astVisit(e.expression, this); this.text += `&${e.name}`; for (let e = 0, r = t.length; e < r; ++e) { this.text += ":"; astVisit(t[e], this); } } visitArrayBindingPattern(e) { const t = e.elements; this.text += "["; for (let e = 0, r = t.length; e < r; ++e) { if (e !== 0) { this.text += ","; } astVisit(t[e], this); } this.text += "]"; } visitObjectBindingPattern(e) { const t = e.keys; const r = e.values; this.text += "{"; for (let e = 0, s = t.length; e < s; ++e) { if (e !== 0) { this.text += ","; } this.text += `'${t[e]}':`; astVisit(r[e], this); } this.text += "}"; } visitBindingIdentifier(e) { this.text += e.name; } visitForOfStatement(e) { astVisit(e.declaration, this); this.text += " of "; astVisit(e.iterable, this); } visitInterpolation(e) { const {parts: t, expressions: r} = e; const s = r.length; this.text += "${"; this.text += t[0]; for (let e = 0; e < s; e++) { astVisit(r[e], this); this.text += t[e + 1]; } this.text += "}"; } visitDestructuringAssignmentExpression(e) { const t = e.$kind; const r = t === B; this.text += r ? "{" : "["; const s = e.list; const n = s.length; let i; let a; for (i = 0; i < n; i++) { a = s[i]; switch (a.$kind) { case P: astVisit(a, this); break; case S: case B: { const e = a.source; if (e) { astVisit(e, this); this.text += ":"; } astVisit(a, this); break; } } } this.text += r ? "}" : "]"; } visitDestructuringAssignmentSingleExpression(e) { astVisit(e.source, this); this.text += ":"; astVisit(e.target, this); const t = e.initializer; if (t !== void 0) { this.text += "="; astVisit(t, this); } } visitDestructuringAssignmentRestExpression(e) { this.text += "..."; astVisit(e.target, this); } visitCustom(e) { this.text += N(e.value); } writeArgs(e) { this.text += "("; for (let t = 0, r = e.length; t < r; ++t) { if (t !== 0) { this.text += ","; } astVisit(e[t], this); } this.text += ")"; } } const createMappedError = (e, ...t) => new Error(`AUR${N(e).padStart(4, "0")}:${t.map(N)}`); const U = /*@__PURE__*/ e.DI.createInterface("IExpressionParser"); class ExpressionParser { constructor() { this.t = createLookup(); this.i = createLookup(); this.u = createLookup(); } parse(e, t) { let r; switch (t) { case Z: return new CustomExpression(e); case q: r = this.u[e]; if (r === void 0) { r = this.u[e] = this.$parse(e, t); } return r; case Q: r = this.i[e]; if (r === void 0) { r = this.i[e] = this.$parse(e, t); } return r; default: { if (e.length === 0) { if (t === X || t === Y) { return F.$empty; } throw invalidEmptyExpression(); } r = this.t[e]; if (r === void 0) { r = this.t[e] = this.$parse(e, t); } return r; } } } $parse(e, t) { ee = e; te = 0; re = e.length; se = 0; ne = 0; ie = 6291456; ae = ""; oe = $charCodeAt(0); ce = true; ue = false; le = true; pe = -1; return parse(61, t === void 0 ? Y : t); } } ExpressionParser.register = e.createImplementationRegister(U); function unescapeCode(e) { switch (e) { case 98: return 8; case 116: return 9; case 110: return 10; case 118: return 11; case 102: return 12; case 114: return 13; case 34: return 34; case 39: return 39; case 92: return 92; default: return e; } } const G = F.$false; const K = F.$true; const R = F.$null; const H = F.$undefined; const V = createAccessThisExpression(0); const z = createAccessThisExpression(1); const J = createAccessBoundaryExpression(); const _ = "None"; const q = "Interpolation"; const Q = "IsIterator"; const W = "IsChainable"; const X = "IsFunction"; const Y = "IsProperty"; const Z = "IsCustom"; let ee = ""; let te = 0; let re = 0; let se = 0; let ne = 0; let ie = 6291456; let ae = ""; let oe; let ce = true; let ue = false; let le = true; let pe = -1; const fe = String.fromCharCode; const $charCodeAt = e => ee.charCodeAt(e); const $tokenRaw = () => ee.slice(ne, te); const he = ("Infinity NaN isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent" + " Array BigInt Boolean Date Map Number Object RegExp Set String JSON Math Intl").split(" "); function parseExpression(e, t) { ee = e; te = 0; re = e.length; se = 0; ne = 0; ie = 6291456; ae = ""; oe = $charCodeAt(0); ce = true; ue = false; le = true; pe = -1; return parse(61, t === void 0 ? Y : t); } function parse(e, r) { if (r === Z) { return new CustomExpression(ee); } if (te === 0) { if (r === q) { return parseInterpolation(); } nextToken(); if (ie & 4194304) { throw invalidStartOfExpression(); } } ce = 577 > e; ue = false; le = 579 > e; let i = false; let a = void 0; let o = 0; if (ie & 131072) { const e = de[ie & 63]; nextToken(); a = createUnaryExpression(e, parse(579, r)); ce = false; } else { e: switch (ie) { case 12296: o = se; ce = false; le = false; do { nextToken(); ++o; switch (ie) { case 65547: nextToken(); if ((ie & 12288) === 0) { throw expectedIdentifier(); } break; case 12: case 13: throw expectedIdentifier(); case 2162702: ue = true; nextToken(); if ((ie & 12288) === 0) { a = o === 0 ? V : o === 1 ? z : createAccessThisExpression(o); i = true; break e; } break; default: if (ie & 2097152) { a = o === 0 ? V : o === 1 ? z : createAccessThisExpression(o); break e; } throw invalidMemberExpression(); } } while (ie === 12296); case 4096: { const e = ae; if (r === Q) { a = createBindingIdentifier(e); } else if (le && he.includes(e)) { a = createAccessGlobalExpression(e); } else if (le && e === "import") { throw unexpectedImportKeyword(); } else { a = createAccessScopeExpression(e, o); } ce = !ue; nextToken(); if (consumeOpt(53)) { if (ie === 524298) { throw functionBodyInArrowFn(); } const t = ue; const r = se; ++se; const s = parse(62, _); ue = t; se = r; ce = false; a = createArrowFunction([ createBindingIdentifier(e) ], s); } break; } case 12: throw unexpectedDoubleDot(); case 13: throw invalidSpreadOp(); case 12293: ce = false; nextToken(); switch (se) { case 0: a = V; break; case 1: a = z; break; default: a = createAccessThisExpression(se); break; } break; case 12294: ce = false; nextToken(); a = J; break; case 2688009: a = parseCoverParenthesizedExpressionAndArrowParameterList(r); break; case 2688020: a = ee.search(/\s+of\s+/) > te ? parseArrayDestructuring() : parseArrayLiteralExpression(r); break; case 524298: a = parseObjectLiteralExpression(r); break; case 2163762: a = createTemplateExpression([ ae ]); ce = false; nextToken(); break; case 2163763: a = parseTemplate(r, a, false); break; case 16384: case 32768: a = createPrimitiveLiteralExpression(ae); ce = false; nextToken(); break; case 8194: case 8195: case 8193: case 8192: a = de[ie & 63]; ce = false; nextToken(); break; case 8196: { nextToken(); const e = parse(578, r); let t; if (ie === 2688009) { t = parseArguments(); } else { t = []; nextToken(); } a = createNewExpression(e, t); ce = false; break; } default: if (te >= re) { throw unexpectedEndOfExpression(); } else { throw unconsumedToken(); } } if (r === Q) { return parseForOfStatement(a); } switch (ie) { case 2228282: case 2228283: a = createUnaryExpression(de[ie & 63], a, 1); nextToken(); ce = false; break; } if (579 < e) { return a; } if (ie === 12 || ie === 13) { throw expectedIdentifier(); } if (a.$kind === t) { switch (ie) { case 2162702: ue = true; ce = false; nextToken(); if ((ie & 13312) === 0) { throw unexpectedTokenInOptionalChain(); } if (ie & 12288) { a = createAccessScopeExpression(ae, a.ancestor); nextToken(); } else if (ie === 2688009) { a = createCallFunctionExpression(a, parseArguments(), true); } else if (ie === 2688020) { a = parseKeyedExpression(a, true); } else { throw invalidTaggedTemplateOnOptionalChain(); } break; case 65547: ce = !ue; nextToken(); if ((ie & 12288) === 0) { throw expectedIdentifier(); } a = createAccessScopeExpression(ae, a.ancestor); nextToken(); break; case 12: case 13: throw expectedIdentifier(); case 2688009: a = createCallFunctionExpression(a, parseArguments(), i); break; case 2688020: a = parseKeyedExpression(a, i); break; case 2163762: a = createTemplateTail(a); break; case 2163763: a = parseTemplate(r, a, true); break; } } while ((ie & 65536) > 0) { switch (ie) { case 2162702: a = parseOptionalChainLHS(a); break; case 65547: nextToken(); if ((ie & 12288) === 0) { throw expectedIdentifier(); } a = parseMemberExpressionLHS(a, false); break; case 12: case 13: throw expectedIdentifier(); case 2688009: if (578 === e) { return a; } if (a.$kind === n) { a = createCallScopeExpression(a.name, parseArguments(), a.ancestor, false); } else if (a.$kind === d) { a = createCallMemberExpression(a.object, a.name, parseArguments(), a.optional, false); } else if (a.$kind === s) { a = createCallGlobalExpression(a.name, parseArguments()); } else { a = createCallFunctionExpression(a, parseArguments(), false); } break; case 2688020: a = parseKeyedExpression(a, false); break; case 2163762: if (ue) { throw invalidTaggedTemplateOnOptionalChain(); } a = createTemplateTail(a); break; case 2163763: if (ue) { throw invalidTaggedTemplateOnOptionalChain(); } a = parseTemplate(r, a, true); break; } } } if (ie === 12 || ie === 13) { throw expectedIdentifier(); } if (577 < e) { return a; } while ((ie & 262144) > 0) { const t = ie; if ((t & 960) <= e) { break; } nextToken(); a = createBinaryExpression(de[t & 63], a, parse(t & 960, r)); ce = false; } if (63 < e) { return a; } if (consumeOpt(6291480)) { const e = parse(62, r); consume(6291478); a = createConditionalExpression(a, e, parse(62, r)); ce = false; } if (62 < e) { return a; } switch (ie) { case 4194352: case 4194358: case 4194359: case 4194360: case 4194361: { if (!ce) { throw lhsNotAssignable(); } const e = de[ie & 63]; nextToken(); a = createAssignExpression(a, parse(62, r), e); break; } } if (61 < e) { return a; } while (consumeOpt(6291482)) { if (ie === 6291456) { throw expectedValueConverterIdentifier(); } const e = ae; nextToken(); const t = new Array; while (consumeOpt(6291478)) { t.push(parse(62, r)); } a = createValueConverterExpression(a, e, t); } while (consumeOpt(6291481)) { if (ie === 6291456) { throw expectedBindingBehaviorIdentifier(); } const e = ae; nextToken(); const t = new Array; while (consumeOpt(6291478)) { t.push(parse(62, r)); } a = createBindingBehaviorExpression(a, e, t); } if (ie !== 6291456) { if (r === q && ie === 7340047) { return a; } if (r === W && ie === 6291479) { if (te === re) { throw unconsumedToken(); } pe = te - 1; return a; } if ($tokenRaw() === "of") { throw unexpectedOfKeyword(); } throw unconsumedToken(); } return a; } function parseArrayDestructuring() { const e = []; let t = null; let r = true; let s = 0; while (r) { nextToken(); switch (ie) { case 7340053: r = false; addItem(); break; case 6291475: addItem(); break; case 4096: t = $tokenRaw(); break; default: throw unexpectedTokenInDestructuring(); } } consume(7340053); return createDestructuringAssignmentExpression(S, e, void 0, void 0); function addItem() { if (t !== null) { e.push(createDestructuringAssignmentSingleExpression(createAccessMemberExpression(V, t), createAccessKeyedExpression(V, createPrimitiveLiteralExpression(s++)), void 0)); t = null; } else { s++; } } } function parseArguments() { const e = ue; nextToken(); const t = []; while (ie !== 7340048) { t.push(parse(62, _)); if (!consumeOpt(6291475)) { break; } } consume(7340048); ce = false; ue = e; return t; } function parseKeyedExpression(e, t) { const r = ue; nextToken(); e = createAccessKeyedExpression(e, parse(62, _), t); consume(7340053); ce = !r; ue = r; return e; } function parseOptionalChainLHS(e) { ue = true; ce = false; nextToken(); if ((ie & 13312) === 0) { throw unexpectedTokenInOptionalChain(); } if (ie & 12288) { return parseMemberExpressionLHS(e, true); } if (ie === 2688009) { if (e.$kind === n) { return createCallScopeExpression(e.name, parseArguments(), e.ancestor, true); } else if (e.$kind === d) { return createCallMemberExpression(e.object, e.name, parseArguments(), e.optional, true); } else { return createCallFunctionExpression(e, parseArguments(), true); } } if (ie === 2688020) { return parseKeyedExpression(e, true); } throw invalidTaggedTemplateOnOptionalChain(); } function parseMemberExpressionLHS(e, t) { const r = ae; switch (ie) { case 2162702: { ue = true; ce = false; const s = te; const n = ne; const i = ie; const a = oe; const o = ae; const c = ce; const u = ue; nextToken(); if ((ie & 13312) === 0) { throw unexpectedTokenInOptionalChain(); } if (ie === 2688009) { return createCallMemberExpression(e, r, parseArguments(), t, true); } te = s; ne = n; ie = i; oe = a; ae = o; ce = c; ue = u; return createAccessMemberExpression(e, r, t); } case 2688009: { ce = false; return createCallMemberExpression(e, r, parseArguments(), t, false); } default: { ce = !ue; nextToken(); return createAccessMemberExpression(e, r, t); } } } function parseCoverParenthesizedExpressionAndArrowParameterList(e) { nextToken(); const t = te; const r = ne; const s = ie; const n = oe; const i = ae; const a = ue; const o = []; let c = 1; let u = false; e: while (true) { if (ie === 13) { nextToken(); if (ie !== 4096) { throw expectedIdentifier(); } o.push(createBindingIdentifier(ae)); nextToken(); if (ie === 6291475) { throw restParamsMustBeLastParam(); } if (ie !== 7340048) { throw invalidSpreadOp(); } nextToken(); if (ie !== 53) { throw invalidSpreadOp(); } nextToken(); const e = ue; const t = se; ++se; const r = parse(62, _); ue = e; se = t; ce = false; return createArrowFunction(o, r, true); } switch (ie) { case 4096: o.push(createBindingIdentifier(ae)); nextToken(); break; case 7340048: nextToken(); break e; case 524298: case 2688020: nextToken(); c = 4; break; case 6291475: c = 2; u = true; break e; case 2688009: c = 2; break e; default: nextToken(); c = 2; break; } switch (ie) { case 6291475: nextToken(); u = true; if (c === 1) { break; } break e; case 7340048: nextToken(); break e; case 4194352: if (c === 1) { c = 3; } break e; case 53: if (u) { throw invalidArrowParameterList(); } nextToken(); c = 2; break e; default: if (c === 1) { c = 2; } break e; } } if (ie === 53) { if (c === 1) { nextToken(); if (ie === 524298) { throw functionBodyInArrowFn(); } const e = ue; const t = se; ++se; const r = parse(62, _); ue = e; se = t; ce = false; return createArrowFunction(o, r); } throw invalidArrowParameterList(); } else if (c === 1 && o.length === 0) { throw missingExpectedToken(); } if (u) { switch (c) { case 2: throw invalidArrowParameterList(); case 3: throw defaultParamsInArrowFn(); case 4: throw destructuringParamsInArrowFn(); } } te = t; ne = r; ie = s; oe = n; ae = i; ue = a; const l = ue; const p = parse(62, e); ue = l; consume(7340048); if (ie === 53) { switch (c) { case 2: throw invalidArrowParameterList(); case 3: throw defaultParamsInArrowFn(); case 4: throw destructuringParamsInArrowFn(); } } return p; } function parseArrayLiteralExpression(e) { const t = ue; nextToken(); const r = new Array; while (ie !== 7340053) { if (consumeOpt(6291475)) { r.push(H); if (ie === 7340053) { break; } } else { r.push(parse(62, e === Q ? _ : e)); if (consumeOpt(6291475)) { if (ie === 7340053) { break; } } else { break; } } } ue = t; consume(7340053); if (e === Q) { return createArrayBindingPattern(r); } else { ce = false; return createArrayLiteralExpression(r); } } const xe = [ T, $, v, S, B ]; function parseForOfStatement(e) { if (!xe.includes(e.$kind)) { throw invalidLHSBindingIdentifierInForOf(e.$kind); } if (ie !== 4204596) { throw invalidLHSBindingIdentifierInForOf(e.$kind); } nextToken(); const t = e; const r = parse(61, W); return createForOfStatement(t, r, pe); } function parseObjectLiteralExpression(e) { const t = ue; const r = new Array; const s = new Array; nextToken(); while (ie !== 7340047) { r.push(ae); if (ie & 49152) { nextToken(); consume(6291478); s.push(parse(62, e === Q ? _ : e)); } else if (ie & 12288) { const t = oe; const r = ie; const n = te; nextToken(); if (consumeOpt(6291478)) { s.push(parse(62, e === Q ? _ : e)); } else { oe = t; ie = r; te = n; s.push(parse(580, e === Q ? _ : e)); } } else { throw invalidPropDefInObjLiteral(); } if (ie !== 7340047) { consume(6291475); } } ue = t; consume(7340047); if (e === Q) { return createObjectBindingPattern(r, s); } else { ce = false; return createObjectLiteralExpression(r, s); } } function parseInterpolation() { const e = []; const t = []; const r = re; let s = ""; while (te < r) { switch (oe) { case 36: if ($charCodeAt(te + 1) === 123) { e.push(s); s = ""; te += 2; oe = $charCodeAt(te); nextToken(); const r = parse(61, q); t.push(r); continue; } else { s += "$"; } break; case 92: s += fe(unescapeCode(nextChar())); break; default: s += fe(oe); } nextChar(); } if (t.length) { e.push(s); return createInterpolation(e, t); } return null; } function parseTemplate(e, t, r) { const s = ue; const n = [ ae ]; consume(2163763); const i = [ parse(62, e) ]; while ((ie = scanTemplateTail()) !== 2163762) { n.push(ae); consume(2163763); i.push(parse(62, e)); } n.push(ae); ce = false; ue = s; if (r) { nextToken(); return createTaggedTemplateExpression(n, n, t, i); } else { nextToken(); return createTemplateExpression(n, i); } } function createTemplateTail(e) { ce = false; const t = [ ae ]; nextToken(); return createTaggedTemplateExpression(t, t, e); } function nextToken() { while (te < re) { ne = te; if ((ie = we[oe]()) != null) { return; } } ie = 6291456; } function nextChar() { return oe = $charCodeAt(++te); } function scanIdentifier() { while (Ee[nextChar()]) ; const e = ke[ae = $tokenRaw()]; return e === undefined ? 4096 : e; } function scanNumber(e) { let t = oe; if (e === false) { do { t = nextChar(); } while (t <= 57 && t >= 48); if (t !== 46) { ae = parseInt($tokenRaw(), 10); return 32768; } t = nextChar(); if (te >= re) { ae = parseInt($tokenRaw().slice(0, -1), 10); return 32768; } } if (t <= 57 && t >= 48) { do { t = nextChar(); } while (t <= 57 && t >= 48); } else { oe = $charCodeAt(--te); } ae = parseFloat($tokenRaw()); return 32768; } function scanString() { const e = oe; nextChar(); let t = 0; const r = new Array; let s = te; while (oe !== e) { if (oe === 92) { r.push(ee.slice(s, te)); nextChar(); t = unescapeCode(oe); nextChar(); r.push(fe(t)); s = te; } else if (te >= re) { throw unterminatedStringLiteral(); } else { nextChar(); } } const n = ee.slice(s, te); nextChar(); r.push(n); const i = r.join(""); ae = i; return 16384; } function scanTemplate() { let e = true; let t = ""; while (nextChar() !== 96) { if (oe === 36) { if (te + 1 < re && $charCodeAt(te + 1) === 123) { te++; e = false; break; } else { t += "$"; } } else if (oe === 92) { t += fe(unescapeCode(nextChar())); } else { if (te >= re) { throw unterminatedTemplateLiteral(); } t += fe(oe); } } nextChar(); ae = t; if (e) { return 2163762; } return 2163763; } const scanTemplateTail = () => { if (te >= re) { throw unterminatedTemplateLiteral(); } te--; return scanTemplate(); }; const consumeOpt = e => { if (ie === e) { nextToken(); return true; } return false; }; const consume = e => { if (ie === e) { nextToken(); } else { throw missingExpectedToken(); } }; const invalidStartOfExpression = () => createMappedError(151, ee); const invalidSpreadOp = () => createMappedError(152, ee); const expectedIdentifier = () => createMappedError(153, ee); const invalidMemberExpression = () => createMappedError(154, ee); const unexpectedEndOfExpression = () => createMappedError(155, ee); const unconsumedToken = () => createMappedError(156, $tokenRaw(), te, ee); const invalidEmptyExpression = () => createMappedError(157); const lhsNotAssignable = () => createMappedError(158, ee); const expectedValueConverterIdentifier = () => createMappedError(159, ee); const expectedBindingBehaviorIdentifier = () => createMappedError(160, ee); const unexpectedOfKeyword = () => createMappedError(161, ee); const unexpectedImportKeyword = () => createMappedError(162, ee); const invalidLHSBindingIdentifierInForOf = e => createMappedError(163, ee, e); const invalidPropDefInObjLiteral = () => createMappedError(164, ee); const unterminatedStringLiteral = () => createMappedError(165, ee); const unterminatedTemplateLiteral = () => createMappedError(166, ee); const missingExpectedToken = e => createMappedError(167, ee); const unexpectedTokenInDestructuring = () => createMappedError(170, ee); const unexpectedTokenInOptionalChain = () => createMappedError(171, ee); const invalidTaggedTemplateOnOptionalChain = () => createMappedError(172, ee); const invalidArrowParameterList = () => createMappedError(173, ee); const defaultParamsInArrowFn = () => createMappedError(174, ee); const destructuringParamsInArrowFn = () => createMappedError(175, ee); const restParamsMustBeLastParam = () => createMappedError(176, ee); const functionBodyInArrowFn = () => createMappedError(178, ee); const unexpectedDoubleDot = () => createMappedError(179, ee); const de = [ G, K, R, H, "new", "this", "$this", null, "$parent", "(", "{", ".", "..", "...", "?.", "}", ")", ",", "[", "]", ":", ";", "?", "'", '"', "&", "|", "??", "||", "&&", "==", "!=", "===", "!==", "<", ">", "<=", ">=", "in", "instanceof", "+", "-", "typeof", "void", "*", "%", "/", "**", "=", "!", 2163762, 2163763, "of", "=>", "+=", "-=", "*=", "/=", "++", "--" ]; const ke = /*@__PURE__*/ Object.assign(createLookup(), { true: 8193, null: 8194, false: 8192, undefined: 8195, new: 8196, this: 12294, $this: 12293, $parent: 12296, in: 6562214, instanceof: 6562215, typeof: 139306, void: 139307, of: 4204596 }); const {CharScanners: we, IdParts: Ee} = /*@__PURE__*/ (() => { const unexpectedCharacter = () => { throw createMappedError(168, ee); }; unexpectedCharacter.notMapped = true; const e = { AsciiIdPart: [ 36, 0, 48, 58, 65, 91, 95, 0, 97, 123 ], IdStart: [ 36, 0, 65, 91, 95, 0, 97, 123, 170, 0, 186, 0, 192, 215, 216, 247, 248, 697, 736, 741, 7424, 7462, 7468, 7517, 7522, 7526, 7531, 7544, 7545, 7615, 7680, 7936, 8305, 0, 8319, 0, 8336, 8349, 8490, 8492, 8498, 0, 8526, 0, 8544, 8585, 11360, 11392, 42786, 42888, 42891, 42927, 42928, 42936, 42999, 43008, 43824, 43867, 43868, 43877, 64256, 64263, 65313, 65339, 65345, 65371 ], Digit: [ 48, 58 ], Skip: [ 0, 33, 127, 161 ] }; const decompress = (e, t, r, s) => { const n = r.length; for (let t = 0; t < n; t += 2) { const n = r[t]; let i = r[t + 1]; i = i > 0 ? i : n + 1; if (e) { e.fill(s, n, i); } } }; const t = /*@__PURE__*/ (t => { decompress(t, null, e.IdStart, 1); decompress(t, null, e.Digit, 1); return t; })(new Uint8Array(65535)); const returnToken = e => () => { nextChar(); return e; }; const r = new Array(65535); r.fill(unexpectedCharacter, 0, 65535); decompress(r, null, e.Skip, () => { nextChar(); return null; }); decompress(r, null, e.IdStart, scanIdentifier); decompress(r, null, e.Digit, () => scanNumber(false)); r[34] = r[39] = () => scanString(); r[96] = () => scanTemplate(); r[33] = () => { if (nextChar() !== 61) { return 131121; } if (nextChar() !== 61) { return 6553951; } nextChar(); return 6553953; }; r[61] = () => { if (nextChar() === 62) { nextChar(); return 53; } if (oe !== 61) { return 4194352; } if (nextChar() !== 61) { return 6553950; } nextChar(); return 6553952; }; r[38] = () => { if (nextChar() !== 38) { return 6291481; } nextChar(); return 6553885; }; r[124] = () => { if (nextChar() !== 124) { return 6291482; } nextChar(); return 6553820; }; r[63] = () => { if (nextChar() === 46) { const e = $charCodeAt(te + 1); if (e <= 48 || e >= 57) { nextChar(); return 2162702; } return 6291480; } if (oe !== 63) { return 6291480; } nextChar(); return 6553755; }; r[46] = () => { if (nextChar() <= 57 && oe >= 48) { return scanNumber(true); } if (oe === 46) { if (nextChar() !== 46) { return 12; } nextChar(); return 13; } return 65547; }; r[60] = () => { if (nextChar() !== 61) { return 6554018; } nextChar(); return 6554020; }; r[62] = () => { if (nextChar() !== 61) { return 6554019; } nextChar(); return 6554021; }; r[37] = returnToken(6554157); r[40] = returnToken(2688009); r[41] = returnToken(7340048); r[42] = () => { if (nextChar() === 61) { nextChar(); return 4194360; } if (oe === 42) { nextChar(); return 6554223; } return 6554156; }; r[43] = () => { if (nextChar() === 43) { nextChar(); return 2228282; } if (oe !== 61) { return 2490856; } nextChar(); return 4194358; }; r[44] = returnToken(6291475); r[45] = () => { if (nextChar() === 45) { nextChar(); return 2228283; } if (oe !== 61) { return 2490857; } nextChar(); return 4194359; }; r[47] = () => { if (nextChar() !== 61) { return 6554158; } nextChar(); return 4194361; }; r[58] = returnToken(6291478); r[59] = returnToken(6291479); r[91] = returnToken(2688020); r[93] = returnToken(7340053); r[123] = returnToken(524298); r[125] = returnToken(7340047); return { CharScanners: r, IdParts: t }; })(); exports.AccessBoundary = O; exports.ArrayLiteral = M; exports.CustomExpression = CustomExpression; exports.ExpressionParser = ExpressionParser; exports.IExpressionParser = U; exports.ObjectL