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