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,191 lines (1,933 loc) 50.9 kB
import { emptyArray as e, createImplementationRegister as t, DI as r } from "@aurelia/kernel"; const s = "AccessThis"; const n = "AccessBoundary"; const i = "AccessGlobal"; const a = "AccessScope"; const o = "ArrayLiteral"; const c = "ObjectLiteral"; const u = "PrimitiveLiteral"; const l = "New"; const f = "Template"; const h = "Unary"; const p = "CallScope"; const x = "CallMember"; const d = "CallFunction"; const k = "CallGlobal"; const w = "AccessMember"; const E = "AccessKeyed"; const b = "TaggedTemplate"; const m = "Binary"; const g = "Conditional"; const A = "Assign"; const C = "ArrowFunction"; const T = "ValueConverter"; const $ = "BindingBehavior"; const v = "ArrayBindingPattern"; const y = "ObjectBindingPattern"; const I = "BindingIdentifier"; const S = "ForOfStatement"; const B = "Interpolation"; const P = "ArrayDestructuring"; const L = "ObjectDestructuring"; const O = "DestructuringAssignmentLeaf"; const F = "Custom"; class CustomExpression { constructor(e) { this.value = e; this.$kind = F; } 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: $, key: `_bb_${t}`, expression: e, name: t, args: r }; } function createValueConverterExpression(e, t, r) { return { $kind: T, expression: e, name: t, args: r }; } function createAssignExpression(e, t, r = "=") { return { $kind: A, target: e, value: t, op: r }; } function createConditionalExpression(e, t, r) { return { $kind: g, condition: e, yes: t, no: r }; } function createAccessGlobalExpression(e) { return { $kind: i, name: e }; } function createAccessThisExpression(e = 0) { return { $kind: s, ancestor: e }; } const M = { $kind: n }; function createAccessBoundaryExpression() { return M; } function createAccessScopeExpression(e, t = 0) { return { $kind: a, name: e, ancestor: t }; } function isAccessGlobal(e) { return e.$kind === i || (e.$kind === w || e.$kind === E) && e.accessGlobal; } function createAccessMemberExpression(e, t, r = false) { return { $kind: w, accessGlobal: isAccessGlobal(e), object: e, name: t, optional: r }; } function createAccessKeyedExpression(e, t, r = false) { return { $kind: E, accessGlobal: isAccessGlobal(e), object: e, key: t, optional: r }; } function createNewExpression(e, t) { return { $kind: l, 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: x, object: e, name: t, args: r, optionalMember: s, optionalCall: n }; } function createCallFunctionExpression(e, t, r = false) { return { $kind: d, func: e, args: t, optional: r }; } function createCallGlobalExpression(e, t) { return { $kind: k, name: e, args: t }; } function createBinaryExpression(e, t, r) { return { $kind: m, operation: e, left: t, right: r }; } function createUnaryExpression(e, t, r = 0) { return { $kind: h, operation: e, expression: t, pos: r }; } const j = { $undefined: { $kind: u, value: undefined }, $null: { $kind: u, value: null }, $true: { $kind: u, value: true }, $false: { $kind: u, value: false }, $empty: { $kind: u, value: "" } }; function createPrimitiveLiteralExpression(e) { return { $kind: u, value: e }; } const D = { $empty: { $kind: o, elements: e } }; function createArrayLiteralExpression(e) { return { $kind: o, elements: e }; } const N = { $empty: { $kind: c, keys: e, values: e } }; function createObjectLiteralExpression(e, t) { return { $kind: c, keys: e, values: t }; } const U = { $empty: { $kind: f, cooked: [ "" ], expressions: e } }; function createTemplateExpression(t, r = e) { return { $kind: f, cooked: t, expressions: r }; } function createTaggedTemplateExpression(t, r, s, n = e) { t.raw = r; return { $kind: b, cooked: t, func: s, expressions: n }; } function createArrayBindingPattern(e) { return { $kind: v, elements: e }; } function createObjectBindingPattern(e, t) { return { $kind: y, keys: e, values: t }; } function createBindingIdentifier(e) { return { $kind: I, name: e }; } function createForOfStatement(e, t, r) { return { $kind: S, declaration: e, iterable: t, semiIdx: r }; } function createInterpolation(t, r = e) { return { $kind: B, 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: O, target: e, source: t, initializer: r }; } function createDestructuringAssignmentRestExpression(e, t) { return { $kind: O, target: e, indexOrProperties: t }; } function createArrowFunction(e, t, r = false) { return { $kind: C, args: e, body: t, rest: r }; } const createError = e => new Error(e); const isString = e => typeof e === "string"; const G = String; const createLookup = () => Object.create(null); const astVisit = (e, t) => { switch (e.$kind) { case E: return t.visitAccessKeyed(e); case w: return t.visitAccessMember(e); case a: return t.visitAccessScope(e); case s: return t.visitAccessThis(e); case n: return t.visitAccessBoundary(e); case v: return t.visitArrayBindingPattern(e); case P: return t.visitDestructuringAssignmentExpression(e); case o: return t.visitArrayLiteral(e); case C: return t.visitArrowFunction(e); case A: return t.visitAssign(e); case m: return t.visitBinary(e); case $: return t.visitBindingBehavior(e); case I: return t.visitBindingIdentifier(e); case d: return t.visitCallFunction(e); case x: return t.visitCallMember(e); case p: return t.visitCallScope(e); case g: return t.visitConditional(e); case O: return t.visitDestructuringAssignmentSingleExpression(e); case S: return t.visitForOfStatement(e); case B: return t.visitInterpolation(e); case y: return t.visitObjectBindingPattern(e); case L: return t.visitDestructuringAssignmentExpression(e); case c: return t.visitObjectLiteral(e); case u: return t.visitPrimitiveLiteral(e); case b: return t.visitTaggedTemplate(e); case f: return t.visitTemplate(e); case h: return t.visitUnary(e); case T: return t.visitValueConverter(e); case F: return t.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 === L; 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 O: astVisit(a, this); break; case P: case L: { 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 += G(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${G(e).padStart(4, "0")}:${t.map(G)}`); const K = /*@__PURE__*/ r.createInterface("IExpressionParser"); class ExpressionParser { constructor() { this.t = createLookup(); this.i = createLookup(); this.u = createLookup(); } parse(e, t) { let r; switch (t) { case te: return new CustomExpression(e); case W: r = this.u[e]; if (r === void 0) { r = this.u[e] = this.$parse(e, t); } return r; case X: 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 === Z || t === ee) { return j.$empty; } throw invalidEmptyExpression(); } r = this.t[e]; if (r === void 0) { r = this.t[e] = this.$parse(e, t); } return r; } } } $parse(e, t) { re = e; se = 0; ne = e.length; ie = 0; ae = 0; oe = 6291456; ce = ""; ue = $charCodeAt(0); le = true; fe = false; he = true; pe = -1; return parse(61, t === void 0 ? ee : t); } } ExpressionParser.register = t(K); 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 R = j.$false; const H = j.$true; const V = j.$null; const z = j.$undefined; const J = createAccessThisExpression(0); const _ = createAccessThisExpression(1); const q = createAccessBoundaryExpression(); const Q = "None"; const W = "Interpolation"; const X = "IsIterator"; const Y = "IsChainable"; const Z = "IsFunction"; const ee = "IsProperty"; const te = "IsCustom"; let re = ""; let se = 0; let ne = 0; let ie = 0; let ae = 0; let oe = 6291456; let ce = ""; let ue; let le = true; let fe = false; let he = true; let pe = -1; const xe = String.fromCharCode; const $charCodeAt = e => re.charCodeAt(e); const $tokenRaw = () => re.slice(ae, se); const de = ("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) { re = e; se = 0; ne = e.length; ie = 0; ae = 0; oe = 6291456; ce = ""; ue = $charCodeAt(0); le = true; fe = false; he = true; pe = -1; return parse(61, t === void 0 ? ee : t); } function parse(e, t) { if (t === te) { return new CustomExpression(re); } if (se === 0) { if (t === W) { return parseInterpolation(); } nextToken(); if (oe & 4194304) { throw invalidStartOfExpression(); } } le = 577 > e; fe = false; he = 579 > e; let r = false; let n = void 0; let o = 0; if (oe & 131072) { const e = we[oe & 63]; nextToken(); n = createUnaryExpression(e, parse(579, t)); le = false; } else { e: switch (oe) { case 12296: o = ie; le = false; he = false; do { nextToken(); ++o; switch (oe) { case 65547: nextToken(); if ((oe & 12288) === 0) { throw expectedIdentifier(); } break; case 12: case 13: throw expectedIdentifier(); case 2162702: fe = true; nextToken(); if ((oe & 12288) === 0) { n = o === 0 ? J : o === 1 ? _ : createAccessThisExpression(o); r = true; break e; } break; default: if (oe & 2097152) { n = o === 0 ? J : o === 1 ? _ : createAccessThisExpression(o); break e; } throw invalidMemberExpression(); } } while (oe === 12296); case 4096: { const e = ce; if (t === X) { n = createBindingIdentifier(e); } else if (he && de.includes(e)) { n = createAccessGlobalExpression(e); } else if (he && e === "import") { throw unexpectedImportKeyword(); } else { n = createAccessScopeExpression(e, o); } le = !fe; nextToken(); if (consumeOpt(53)) { if (oe === 524298) { throw functionBodyInArrowFn(); } const t = fe; const r = ie; ++ie; const s = parse(62, Q); fe = t; ie = r; le = false; n = createArrowFunction([ createBindingIdentifier(e) ], s); } break; } case 12: throw unexpectedDoubleDot(); case 13: throw invalidSpreadOp(); case 12293: le = false; nextToken(); switch (ie) { case 0: n = J; break; case 1: n = _; break; default: n = createAccessThisExpression(ie); break; } break; case 12294: le = false; nextToken(); n = q; break; case 2688009: n = parseCoverParenthesizedExpressionAndArrowParameterList(t); break; case 2688020: n = re.search(/\s+of\s+/) > se ? parseArrayDestructuring() : parseArrayLiteralExpression(t); break; case 524298: n = parseObjectLiteralExpression(t); break; case 2163762: n = createTemplateExpression([ ce ]); le = false; nextToken(); break; case 2163763: n = parseTemplate(t, n, false); break; case 16384: case 32768: n = createPrimitiveLiteralExpression(ce); le = false; nextToken(); break; case 8194: case 8195: case 8193: case 8192: n = we[oe & 63]; le = false; nextToken(); break; case 8196: { nextToken(); const e = parse(578, t); let r; if (oe === 2688009) { r = parseArguments(); } else { r = []; nextToken(); } n = createNewExpression(e, r); le = false; break; } default: if (se >= ne) { throw unexpectedEndOfExpression(); } else { throw unconsumedToken(); } } if (t === X) { return parseForOfStatement(n); } switch (oe) { case 2228282: case 2228283: n = createUnaryExpression(we[oe & 63], n, 1); nextToken(); le = false; break; } if (579 < e) { return n; } if (oe === 12 || oe === 13) { throw expectedIdentifier(); } if (n.$kind === s) { switch (oe) { case 2162702: fe = true; le = false; nextToken(); if ((oe & 13312) === 0) { throw unexpectedTokenInOptionalChain(); } if (oe & 12288) { n = createAccessScopeExpression(ce, n.ancestor); nextToken(); } else if (oe === 2688009) { n = createCallFunctionExpression(n, parseArguments(), true); } else if (oe === 2688020) { n = parseKeyedExpression(n, true); } else { throw invalidTaggedTemplateOnOptionalChain(); } break; case 65547: le = !fe; nextToken(); if ((oe & 12288) === 0) { throw expectedIdentifier(); } n = createAccessScopeExpression(ce, n.ancestor); nextToken(); break; case 12: case 13: throw expectedIdentifier(); case 2688009: n = createCallFunctionExpression(n, parseArguments(), r); break; case 2688020: n = parseKeyedExpression(n, r); break; case 2163762: n = createTemplateTail(n); break; case 2163763: n = parseTemplate(t, n, true); break; } } while ((oe & 65536) > 0) { switch (oe) { case 2162702: n = parseOptionalChainLHS(n); break; case 65547: nextToken(); if ((oe & 12288) === 0) { throw expectedIdentifier(); } n = parseMemberExpressionLHS(n, false); break; case 12: case 13: throw expectedIdentifier(); case 2688009: if (578 === e) { return n; } if (n.$kind === a) { n = createCallScopeExpression(n.name, parseArguments(), n.ancestor, false); } else if (n.$kind === w) { n = createCallMemberExpression(n.object, n.name, parseArguments(), n.optional, false); } else if (n.$kind === i) { n = createCallGlobalExpression(n.name, parseArguments()); } else { n = createCallFunctionExpression(n, parseArguments(), false); } break; case 2688020: n = parseKeyedExpression(n, false); break; case 2163762: if (fe) { throw invalidTaggedTemplateOnOptionalChain(); } n = createTemplateTail(n); break; case 2163763: if (fe) { throw invalidTaggedTemplateOnOptionalChain(); } n = parseTemplate(t, n, true); break; } } } if (oe === 12 || oe === 13) { throw expectedIdentifier(); } if (577 < e) { return n; } while ((oe & 262144) > 0) { const r = oe; if ((r & 960) <= e) { break; } nextToken(); n = createBinaryExpression(we[r & 63], n, parse(r & 960, t)); le = false; } if (63 < e) { return n; } if (consumeOpt(6291480)) { const e = parse(62, t); consume(6291478); n = createConditionalExpression(n, e, parse(62, t)); le = false; } if (62 < e) { return n; } switch (oe) { case 4194352: case 4194358: case 4194359: case 4194360: case 4194361: { if (!le) { throw lhsNotAssignable(); } const e = we[oe & 63]; nextToken(); n = createAssignExpression(n, parse(62, t), e); break; } } if (61 < e) { return n; } while (consumeOpt(6291482)) { if (oe === 6291456) { throw expectedValueConverterIdentifier(); } const e = ce; nextToken(); const r = new Array; while (consumeOpt(6291478)) { r.push(parse(62, t)); } n = createValueConverterExpression(n, e, r); } while (consumeOpt(6291481)) { if (oe === 6291456) { throw expectedBindingBehaviorIdentifier(); } const e = ce; nextToken(); const r = new Array; while (consumeOpt(6291478)) { r.push(parse(62, t)); } n = createBindingBehaviorExpression(n, e, r); } if (oe !== 6291456) { if (t === W && oe === 7340047) { return n; } if (t === Y && oe === 6291479) { if (se === ne) { throw unconsumedToken(); } pe = se - 1; return n; } if ($tokenRaw() === "of") { throw unexpectedOfKeyword(); } throw unconsumedToken(); } return n; } function parseArrayDestructuring() { const e = []; let t = null; let r = true; let s = 0; while (r) { nextToken(); switch (oe) { case 7340053: r = false; addItem(); break; case 6291475: addItem(); break; case 4096: t = $tokenRaw(); break; default: throw unexpectedTokenInDestructuring(); } } consume(7340053); return createDestructuringAssignmentExpression(P, e, void 0, void 0); function addItem() { if (t !== null) { e.push(createDestructuringAssignmentSingleExpression(createAccessMemberExpression(J, t), createAccessKeyedExpression(J, createPrimitiveLiteralExpression(s++)), void 0)); t = null; } else { s++; } } } function parseArguments() { const e = fe; nextToken(); const t = []; while (oe !== 7340048) { t.push(parse(62, Q)); if (!consumeOpt(6291475)) { break; } } consume(7340048); le = false; fe = e; return t; } function parseKeyedExpression(e, t) { const r = fe; nextToken(); e = createAccessKeyedExpression(e, parse(62, Q), t); consume(7340053); le = !r; fe = r; return e; } function parseOptionalChainLHS(e) { fe = true; le = false; nextToken(); if ((oe & 13312) === 0) { throw unexpectedTokenInOptionalChain(); } if (oe & 12288) { return parseMemberExpressionLHS(e, true); } if (oe === 2688009) { if (e.$kind === a) { return createCallScopeExpression(e.name, parseArguments(), e.ancestor, true); } else if (e.$kind === w) { return createCallMemberExpression(e.object, e.name, parseArguments(), e.optional, true); } else { return createCallFunctionExpression(e, parseArguments(), true); } } if (oe === 2688020) { return parseKeyedExpression(e, true); } throw invalidTaggedTemplateOnOptionalChain(); } function parseMemberExpressionLHS(e, t) { const r = ce; switch (oe) { case 2162702: { fe = true; le = false; const s = se; const n = ae; const i = oe; const a = ue; const o = ce; const c = le; const u = fe; nextToken(); if ((oe & 13312) === 0) { throw unexpectedTokenInOptionalChain(); } if (oe === 2688009) { return createCallMemberExpression(e, r, parseArguments(), t, true); } se = s; ae = n; oe = i; ue = a; ce = o; le = c; fe = u; return createAccessMemberExpression(e, r, t); } case 2688009: { le = false; return createCallMemberExpression(e, r, parseArguments(), t, false); } default: { le = !fe; nextToken(); return createAccessMemberExpression(e, r, t); } } } function parseCoverParenthesizedExpressionAndArrowParameterList(e) { nextToken(); const t = se; const r = ae; const s = oe; const n = ue; const i = ce; const a = fe; const o = []; let c = 1; let u = false; e: while (true) { if (oe === 13) { nextToken(); if (oe !== 4096) { throw expectedIdentifier(); } o.push(createBindingIdentifier(ce)); nextToken(); if (oe === 6291475) { throw restParamsMustBeLastParam(); } if (oe !== 7340048) { throw invalidSpreadOp(); } nextToken(); if (oe !== 53) { throw invalidSpreadOp(); } nextToken(); const e = fe; const t = ie; ++ie; const r = parse(62, Q); fe = e; ie = t; le = false; return createArrowFunction(o, r, true); } switch (oe) { case 4096: o.push(createBindingIdentifier(ce)); 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 (oe) { 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 (oe === 53) { if (c === 1) { nextToken(); if (oe === 524298) { throw functionBodyInArrowFn(); } const e = fe; const t = ie; ++ie; const r = parse(62, Q); fe = e; ie = t; le = 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(); } } se = t; ae = r; oe = s; ue = n; ce = i; fe = a; const l = fe; const f = parse(62, e); fe = l; consume(7340048); if (oe === 53) { switch (c) { case 2: throw invalidArrowParameterList(); case 3: throw defaultParamsInArrowFn(); case 4: throw destructuringParamsInArrowFn(); } } return f; } function parseArrayLiteralExpression(e) { const t = fe; nextToken(); const r = new Array; while (oe !== 7340053) { if (consumeOpt(6291475)) { r.push(z); if (oe === 7340053) { break; } } else { r.push(parse(62, e === X ? Q : e)); if (consumeOpt(6291475)) { if (oe === 7340053) { break; } } else { break; } } } fe = t; consume(7340053); if (e === X) { return createArrayBindingPattern(r); } else { le = false; return createArrayLiteralExpression(r); } } const ke = [ v, y, I, P, L ]; function parseForOfStatement(e) { if (!ke.includes(e.$kind)) { throw invalidLHSBindingIdentifierInForOf(e.$kind); } if (oe !== 4204596) { throw invalidLHSBindingIdentifierInForOf(e.$kind); } nextToken(); const t = e; const r = parse(61, Y); return createForOfStatement(t, r, pe); } function parseObjectLiteralExpression(e) { const t = fe; const r = new Array; const s = new Array; nextToken(); while (oe !== 7340047) { r.push(ce); if (oe & 49152) { nextToken(); consume(6291478); s.push(parse(62, e === X ? Q : e)); } else if (oe & 12288) { const t = ue; const r = oe; const n = se; nextToken(); if (consumeOpt(6291478)) { s.push(parse(62, e === X ? Q : e)); } else { ue = t; oe = r; se = n; s.push(parse(580, e === X ? Q : e)); } } else { throw invalidPropDefInObjLiteral(); } if (oe !== 7340047) { consume(6291475); } } fe = t; consume(7340047); if (e === X) { return createObjectBindingPattern(r, s); } else { le = false; return createObjectLiteralExpression(r, s); } } function parseInterpolation() { const e = []; const t = []; const r = ne; let s = ""; while (se < r) { switch (ue) { case 36: if ($charCodeAt(se + 1) === 123) { e.push(s); s = ""; se += 2; ue = $charCodeAt(se); nextToken(); const r = parse(61, W); t.push(r); continue; } else { s += "$"; } break; case 92: s += xe(unescapeCode(nextChar())); break; default: s += xe(ue); } nextChar(); } if (t.length) { e.push(s); return createInterpolation(e, t); } return null; } function parseTemplate(e, t, r) { const s = fe; const n = [ ce ]; consume(2163763); const i = [ parse(62, e) ]; while ((oe = scanTemplateTail()) !== 2163762) { n.push(ce); consume(2163763); i.push(parse(62, e)); } n.push(ce); le = false; fe = s; if (r) { nextToken(); return createTaggedTemplateExpression(n, n, t, i); } else { nextToken(); return createTemplateExpression(n, i); } } function createTemplateTail(e) { le = false; const t = [ ce ]; nextToken(); return createTaggedTemplateExpression(t, t, e); } function nextToken() { while (se < ne) { ae = se; if ((oe = be[ue]()) != null) { return; } } oe = 6291456; } function nextChar() { return ue = $charCodeAt(++se); } function scanIdentifier() { while (me[nextChar()]) ; const e = Ee[ce = $tokenRaw()]; return e === undefined ? 4096 : e; } function scanNumber(e) { let t = ue; if (e === false) { do { t = nextChar(); } while (t <= 57 && t >= 48); if (t !== 46) { ce = parseInt($tokenRaw(), 10); return 32768; } t = nextChar(); if (se >= ne) { ce = parseInt($tokenRaw().slice(0, -1), 10); return 32768; } } if (t <= 57 && t >= 48) { do { t = nextChar(); } while (t <= 57 && t >= 48); } else { ue = $charCodeAt(--se); } ce = parseFloat($tokenRaw()); return 32768; } function scanString() { const e = ue; nextChar(); let t = 0; const r = new Array; let s = se; while (ue !== e) { if (ue === 92) { r.push(re.slice(s, se)); nextChar(); t = unescapeCode(ue); nextChar(); r.push(xe(t)); s = se; } else if (se >= ne) { throw unterminatedStringLiteral(); } else { nextChar(); } } const n = re.slice(s, se); nextChar(); r.push(n); const i = r.join(""); ce = i; return 16384; } function scanTemplate() { let e = true; let t = ""; while (nextChar() !== 96) { if (ue === 36) { if (se + 1 < ne && $charCodeAt(se + 1) === 123) { se++; e = false; break; } else { t += "$"; } } else if (ue === 92) { t += xe(unescapeCode(nextChar())); } else { if (se >= ne) { throw unterminatedTemplateLiteral(); } t += xe(ue); } } nextChar(); ce = t; if (e) { return 2163762; } return 2163763; } const scanTemplateTail = () => { if (se >= ne) { throw unterminatedTemplateLiteral(); } se--; return scanTemplate(); }; const consumeOpt = e => { if (oe === e) { nextToken(); return true; } return false; }; const consume = e => { if (oe === e) { nextToken(); } else { throw missingExpectedToken(); } }; const invalidStartOfExpression = () => createMappedError(151, re); const invalidSpreadOp = () => createMappedError(152, re); const expectedIdentifier = () => createMappedError(153, re); const invalidMemberExpression = () => createMappedError(154, re); const unexpectedEndOfExpression = () => createMappedError(155, re); const unconsumedToken = () => createMappedError(156, $tokenRaw(), se, re); const invalidEmptyExpression = () => createMappedError(157); const lhsNotAssignable = () => createMappedError(158, re); const expectedValueConverterIdentifier = () => createMappedError(159, re); const expectedBindingBehaviorIdentifier = () => createMappedError(160, re); const unexpectedOfKeyword = () => createMappedError(161, re); const unexpectedImportKeyword = () => createMappedError(162, re); const invalidLHSBindingIdentifierInForOf = e => createMappedError(163, re, e); const invalidPropDefInObjLiteral = () => createMappedError(164, re); const unterminatedStringLiteral = () => createMappedError(165, re); const unterminatedTemplateLiteral = () => createMappedError(166, re); const missingExpectedToken = e => createMappedError(167, re); const unexpectedTokenInDestructuring = () => createMappedError(170, re); const unexpectedTokenInOptionalChain = () => createMappedError(171, re); const invalidTaggedTemplateOnOptionalChain = () => createMappedError(172, re); const invalidArrowParameterList = () => createMappedError(173, re); const defaultParamsInArrowFn = () => createMappedError(174, re); const destructuringParamsInArrowFn = () => createMappedError(175, re); const restParamsMustBeLastParam = () => createMappedError(176, re); const functionBodyInArrowFn = () => createMappedError(178, re); const unexpectedDoubleDot = () => createMappedError(179, re); const we = [ R, H, V, z, "new", "this", "$this", null, "$parent", "(", "{", ".", "..", "...", "?.", "}", ")", ",", "[", "]", ":", ";", "?", "'", '"', "&", "|", "??", "||", "&&", "==", "!=", "===", "!==", "<", ">", "<=", ">=", "in", "instanceof", "+", "-", "typeof", "void", "*", "%", "/", "**", "=", "!", 2163762, 2163763, "of", "=>", "+=", "-=", "*=", "/=", "++", "--" ]; const Ee = /*@__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: be, IdParts: me} = /*@__PURE__*/ (() => { const unexpectedCharacter = () => { throw createMappedError(168, re); }; 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 (ue !== 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(se + 1); if (e <= 48 || e >= 57) { nextChar(); return 2162702; } return 6291480; } if (ue !== 63) { return 6291480; } nextChar(); return 6553755; }; r[46] = () => { if (nextChar() <= 57 && ue >= 48) { return scanNumber(true); } if (ue === 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 (ue === 42) { nextChar(); return 6554223; } return 6554156; }; r[43] = () => { if (nextChar() === 43) { nextChar(); return 2228282; } if (ue !== 61) { return 2490856; } nextChar(); return 4194358; }; r[44] = returnToken(6291475); r[45] = () => { if (nextChar() === 45) { nextChar(); return 2228283; } if (ue !== 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 }; })(); export { M as AccessBoundary, D as ArrayLiteral, CustomExpression, ExpressionParser, K as IExpressionParser, N as ObjectLiteral, j as PrimitiveLiteral, U as Template, Unparser, astVisit, createAccessBoundaryExpression, createAccessGlobalExpression, crea