@aurelia/expression-parser
Version:
[](https://opensource.org/licenses/MIT) [](http://www.typescriptlang.org/) [ • 52.3 kB
JavaScript
"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