n8n-editor-ui
Version:
Workflow Editor UI for n8n
5,006 lines • 179 kB
JavaScript
import { i as __require, o as __toESM, t as __commonJSMin } from "./chunk-6z4oVpB-.js";
import { C as computed, Cn as toDisplayString, D as createElementBlock, Dn as init_dist, En as global, Gt as unref, It as ref, M as createVNode, P as defineComponent, T as createBlock, bt as withCtx, et as openBlock, j as createTextVNode, vn as normalizeClass, w as createBaseVNode, z as inject } from "./vue.runtime.esm-bundler-tP5dCd7J.js";
import { _t as useI18n } from "./_MapCache-ficiegRb.js";
import { Mt as ElDropdownItem, Nt as ElDropdownMenu, jt as ElDropdown, xt as N8nIconButton_default } from "./src-DgvumQTi.js";
import "./en-CF30SCh2.js";
import "./preload-helper-CR0ecmWK.js";
import { t as __plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BwBpWJRZ.js";
import { v as useRoute } from "./truncate-B1HVeveJ.js";
import { Gn as useNodeHelpers, Li as clearJsonKey, M as useNDVStore, N as useWorkflowsStore, O as useTelemetry, Ri as convertPath, fi as executionDataToJson, v as useToast } from "./builder.store-sBTWwxRU.js";
import "./empty-BuGRxzl4.js";
import "./sanitize-html-Cc45ZKm8.js";
import "./CalendarDate-zWqgZMlk.js";
import "./path-browserify-BtCDmZ3_.js";
import { Ua as NodeConnectionTypes, tc as PopOutWindowKey, z as nonExistingJsonPath } from "./constants-BbpucWL4.js";
import "./merge-k8vSyyXH.js";
import "./_baseOrderBy-B_6CV8x6.js";
import "./dateformat-CM9k0--B.js";
import "./useDebounce-Bnb8W2LR.js";
import { t as usePinnedData } from "./usePinnedData-CL2qWhwp.js";
import { t as useClipboard } from "./useClipboard-CyG-SBdG.js";
var import_jsonpath = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
init_dist();
/*! jsonpath 1.1.1 */
(function(f) {
if (typeof exports === "object" && typeof module !== "undefined") module.exports = f();
else if (typeof define === "function" && define.amd) define([], f);
else {
var g;
if (typeof window !== "undefined") g = window;
else if (typeof global !== "undefined") g = global;
else if (typeof self !== "undefined") g = self;
else g = this;
g.jsonpath = f();
}
})(function() {
var define$1;
return (function e(t, n, r) {
function s(o$1, u) {
if (!n[o$1]) {
if (!t[o$1]) {
var a = typeof __require == "function" && __require;
if (!u && a) return a(o$1, !0);
if (i) return i(o$1, !0);
var f = /* @__PURE__ */ new Error("Cannot find module '" + o$1 + "'");
throw f.code = "MODULE_NOT_FOUND", f;
}
var l = n[o$1] = { exports: {} };
t[o$1][0].call(l.exports, function(e$1) {
var n$1 = t[o$1][1][e$1];
return s(n$1 ? n$1 : e$1);
}, l, l.exports, e, t, n, r);
}
return n[o$1].exports;
}
var i = typeof __require == "function" && __require;
for (var o = 0; o < r.length; o++) s(r[o]);
return s;
})({
"./aesprim": [function(require$1, module$1, exports$1) {
(function(root, factory) {
/* istanbul ignore next */
if (typeof define$1 === "function" && define$1.amd) define$1(["exports"], factory);
else if (typeof exports$1 !== "undefined") factory(exports$1);
else factory(root.esprima = {});
})(this, function(exports$2) {
var Token = {
BooleanLiteral: 1,
EOF: 2,
Identifier: 3,
Keyword: 4,
NullLiteral: 5,
NumericLiteral: 6,
Punctuator: 7,
StringLiteral: 8,
RegularExpression: 9
}, TokenName = {}, FnExprTokens, Syntax, PropertyKind, Messages, Regex, SyntaxTreeDelegate, source, strict, index, lineNumber, lineStart, length, delegate, lookahead, state, extra;
TokenName[Token.BooleanLiteral] = "Boolean";
TokenName[Token.EOF] = "<end>";
TokenName[Token.Identifier] = "Identifier";
TokenName[Token.Keyword] = "Keyword";
TokenName[Token.NullLiteral] = "Null";
TokenName[Token.NumericLiteral] = "Numeric";
TokenName[Token.Punctuator] = "Punctuator";
TokenName[Token.StringLiteral] = "String";
TokenName[Token.RegularExpression] = "RegularExpression";
FnExprTokens = [
"(",
"{",
"[",
"in",
"typeof",
"instanceof",
"new",
"return",
"case",
"delete",
"throw",
"void",
"=",
"+=",
"-=",
"*=",
"/=",
"%=",
"<<=",
">>=",
">>>=",
"&=",
"|=",
"^=",
",",
"+",
"-",
"*",
"/",
"%",
"++",
"--",
"<<",
">>",
">>>",
"&",
"|",
"^",
"!",
"~",
"&&",
"||",
"?",
":",
"===",
"==",
">=",
"<=",
"<",
">",
"!=",
"!=="
];
Syntax = {
AssignmentExpression: "AssignmentExpression",
ArrayExpression: "ArrayExpression",
BlockStatement: "BlockStatement",
BinaryExpression: "BinaryExpression",
BreakStatement: "BreakStatement",
CallExpression: "CallExpression",
CatchClause: "CatchClause",
ConditionalExpression: "ConditionalExpression",
ContinueStatement: "ContinueStatement",
DoWhileStatement: "DoWhileStatement",
DebuggerStatement: "DebuggerStatement",
EmptyStatement: "EmptyStatement",
ExpressionStatement: "ExpressionStatement",
ForStatement: "ForStatement",
ForInStatement: "ForInStatement",
FunctionDeclaration: "FunctionDeclaration",
FunctionExpression: "FunctionExpression",
Identifier: "Identifier",
IfStatement: "IfStatement",
Literal: "Literal",
LabeledStatement: "LabeledStatement",
LogicalExpression: "LogicalExpression",
MemberExpression: "MemberExpression",
NewExpression: "NewExpression",
ObjectExpression: "ObjectExpression",
Program: "Program",
Property: "Property",
ReturnStatement: "ReturnStatement",
SequenceExpression: "SequenceExpression",
SwitchStatement: "SwitchStatement",
SwitchCase: "SwitchCase",
ThisExpression: "ThisExpression",
ThrowStatement: "ThrowStatement",
TryStatement: "TryStatement",
UnaryExpression: "UnaryExpression",
UpdateExpression: "UpdateExpression",
VariableDeclaration: "VariableDeclaration",
VariableDeclarator: "VariableDeclarator",
WhileStatement: "WhileStatement",
WithStatement: "WithStatement"
};
PropertyKind = {
Data: 1,
Get: 2,
Set: 4
};
Messages = {
UnexpectedToken: "Unexpected token %0",
UnexpectedNumber: "Unexpected number",
UnexpectedString: "Unexpected string",
UnexpectedIdentifier: "Unexpected identifier",
UnexpectedReserved: "Unexpected reserved word",
UnexpectedEOS: "Unexpected end of input",
NewlineAfterThrow: "Illegal newline after throw",
InvalidRegExp: "Invalid regular expression",
UnterminatedRegExp: "Invalid regular expression: missing /",
InvalidLHSInAssignment: "Invalid left-hand side in assignment",
InvalidLHSInForIn: "Invalid left-hand side in for-in",
MultipleDefaultsInSwitch: "More than one default clause in switch statement",
NoCatchOrFinally: "Missing catch or finally after try",
UnknownLabel: "Undefined label '%0'",
Redeclaration: "%0 '%1' has already been declared",
IllegalContinue: "Illegal continue statement",
IllegalBreak: "Illegal break statement",
IllegalReturn: "Illegal return statement",
StrictModeWith: "Strict mode code may not include a with statement",
StrictCatchVariable: "Catch variable may not be eval or arguments in strict mode",
StrictVarName: "Variable name may not be eval or arguments in strict mode",
StrictParamName: "Parameter name eval or arguments is not allowed in strict mode",
StrictParamDupe: "Strict mode function may not have duplicate parameter names",
StrictFunctionName: "Function name may not be eval or arguments in strict mode",
StrictOctalLiteral: "Octal literals are not allowed in strict mode.",
StrictDelete: "Delete of an unqualified identifier in strict mode.",
StrictDuplicateProperty: "Duplicate data property in object literal not allowed in strict mode",
AccessorDataProperty: "Object literal may not have data and accessor property with the same name",
AccessorGetSet: "Object literal may not have multiple get/set accessors with the same name",
StrictLHSAssignment: "Assignment to eval or arguments is not allowed in strict mode",
StrictLHSPostfix: "Postfix increment/decrement may not have eval or arguments operand in strict mode",
StrictLHSPrefix: "Prefix increment/decrement may not have eval or arguments operand in strict mode",
StrictReservedWord: "Use of future reserved word in strict mode"
};
Regex = {
NonAsciiIdentifierStart: /* @__PURE__ */ new RegExp("[ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]"),
NonAsciiIdentifierPart: /* @__PURE__ */ new RegExp("[ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮ̀-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁ҃-҇Ҋ-ԧԱ-Ֆՙա-և֑-ׇֽֿׁׂׅׄא-תװ-ײؐ-ؚؠ-٩ٮ-ۓە-ۜ۟-۪ۨ-ۼۿܐ-݊ݍ-ޱ߀-ߵߺࠀ-࠭ࡀ-࡛ࢠࢢ-ࢬࣤ-ࣾऀ-ॣ०-९ॱ-ॷॹ-ॿঁ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗড়ঢ়য়-ৣ০-ৱਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-ੵઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૯ଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ଼-ୄେୈୋ-୍ୖୗଡ଼ଢ଼ୟ-ୣ୦-୯ୱஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-்ௐௗ௦-௯ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-హఽ-ౄె-ైొ-్ౕౖౘౙౠ-ౣ౦-౯ಂಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೞೠ-ೣ೦-೯ೱೲംഃഅ-ഌഎ-ഐഒ-ഺഽ-ൄെ-ൈൊ-ൎൗൠ-ൣ൦-൯ൺ-ൿංඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟෲෳก-ฺเ-๎๐-๙ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ູົ-ຽເ-ໄໆ່-ໍ໐-໙ໜ-ໟༀ༘༙༠-༩༹༵༷༾-ཇཉ-ཬཱ-྄྆-ྗྙ-ྼ࿆က-၉ၐ-ႝႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፟ᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-᜔ᜠ-᜴ᝀ-ᝓᝠ-ᝬᝮ-ᝰᝲᝳក-៓ៗៜ៝០-៩᠋-᠍᠐-᠙ᠠ-ᡷᢀ-ᢪᢰ-ᣵᤀ-ᤜᤠ-ᤫᤰ-᤻᥆-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉ᧐-᧙ᨀ-ᨛᨠ-ᩞ᩠-᩿᩼-᪉᪐-᪙ᪧᬀ-ᭋ᭐-᭙᭫-᭳ᮀ-᯳ᰀ-᰷᱀-᱉ᱍ-ᱽ᳐-᳔᳒-ᳶᴀ-ᷦ᷼-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ‿⁀⁔ⁱⁿₐ-ₜ⃐-⃥⃜⃡-⃰ℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯ⵿-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⷠ-ⷿⸯ々-〇〡-〯〱-〵〸-〼ぁ-ゖ゙゚ゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘫꙀ-꙯ꙴ-꙽ꙿ-ꚗꚟ-꛱ꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠧꡀ-ꡳꢀ-꣄꣐-꣙꣠-ꣷꣻ꤀-꤭ꤰ-꥓ꥠ-ꥼꦀ-꧀ꧏ-꧙ꨀ-ꨶꩀ-ꩍ꩐-꩙ꩠ-ꩶꩺꩻꪀ-ꫂꫛ-ꫝꫠ-ꫯꫲ-꫶ꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯪ꯬꯭꯰-꯹가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻ︀-️︠-︦︳︴﹍-﹏ﹰ-ﹴﹶ-ﻼ0-9A-Z_a-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]")
};
function assert(condition, message) {
/* istanbul ignore if */
if (!condition) throw new Error("ASSERT: " + message);
}
function isDecimalDigit(ch) {
return ch >= 48 && ch <= 57;
}
function isHexDigit(ch) {
return "0123456789abcdefABCDEF".indexOf(ch) >= 0;
}
function isOctalDigit(ch) {
return "01234567".indexOf(ch) >= 0;
}
function isWhiteSpace(ch) {
return ch === 32 || ch === 9 || ch === 11 || ch === 12 || ch === 160 || ch >= 5760 && [
5760,
6158,
8192,
8193,
8194,
8195,
8196,
8197,
8198,
8199,
8200,
8201,
8202,
8239,
8287,
12288,
65279
].indexOf(ch) >= 0;
}
function isLineTerminator(ch) {
return ch === 10 || ch === 13 || ch === 8232 || ch === 8233;
}
function isIdentifierStart(ch) {
return ch == 64 || ch === 36 || ch === 95 || ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch === 92 || ch >= 128 && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch));
}
function isIdentifierPart(ch) {
return ch === 36 || ch === 95 || ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 48 && ch <= 57 || ch === 92 || ch >= 128 && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch));
}
function isFutureReservedWord(id) {
switch (id) {
case "class":
case "enum":
case "export":
case "extends":
case "import":
case "super": return true;
default: return false;
}
}
function isStrictModeReservedWord(id) {
switch (id) {
case "implements":
case "interface":
case "package":
case "private":
case "protected":
case "public":
case "static":
case "yield":
case "let": return true;
default: return false;
}
}
function isRestrictedWord(id) {
return id === "eval" || id === "arguments";
}
function isKeyword(id) {
if (strict && isStrictModeReservedWord(id)) return true;
switch (id.length) {
case 2: return id === "if" || id === "in" || id === "do";
case 3: return id === "var" || id === "for" || id === "new" || id === "try" || id === "let";
case 4: return id === "this" || id === "else" || id === "case" || id === "void" || id === "with" || id === "enum";
case 5: return id === "while" || id === "break" || id === "catch" || id === "throw" || id === "const" || id === "yield" || id === "class" || id === "super";
case 6: return id === "return" || id === "typeof" || id === "delete" || id === "switch" || id === "export" || id === "import";
case 7: return id === "default" || id === "finally" || id === "extends";
case 8: return id === "function" || id === "continue" || id === "debugger";
case 10: return id === "instanceof";
default: return false;
}
}
function addComment(type, value, start, end, loc) {
var comment;
assert(typeof start === "number", "Comment must have valid position");
if (state.lastCommentStart >= start) return;
state.lastCommentStart = start;
comment = {
type,
value
};
if (extra.range) comment.range = [start, end];
if (extra.loc) comment.loc = loc;
extra.comments.push(comment);
if (extra.attachComment) {
extra.leadingComments.push(comment);
extra.trailingComments.push(comment);
}
}
function skipSingleLineComment(offset) {
var start = index - offset, loc = { start: {
line: lineNumber,
column: index - lineStart - offset
} }, ch, comment;
while (index < length) {
ch = source.charCodeAt(index);
++index;
if (isLineTerminator(ch)) {
if (extra.comments) {
comment = source.slice(start + offset, index - 1);
loc.end = {
line: lineNumber,
column: index - lineStart - 1
};
addComment("Line", comment, start, index - 1, loc);
}
if (ch === 13 && source.charCodeAt(index) === 10) ++index;
++lineNumber;
lineStart = index;
return;
}
}
if (extra.comments) {
comment = source.slice(start + offset, index);
loc.end = {
line: lineNumber,
column: index - lineStart
};
addComment("Line", comment, start, index, loc);
}
}
function skipMultiLineComment() {
var start, loc, ch, comment;
if (extra.comments) {
start = index - 2;
loc = { start: {
line: lineNumber,
column: index - lineStart - 2
} };
}
while (index < length) {
ch = source.charCodeAt(index);
if (isLineTerminator(ch)) {
if (ch === 13 && source.charCodeAt(index + 1) === 10) ++index;
++lineNumber;
++index;
lineStart = index;
if (index >= length) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
} else if (ch === 42) {
if (source.charCodeAt(index + 1) === 47) {
++index;
++index;
if (extra.comments) {
comment = source.slice(start + 2, index - 2);
loc.end = {
line: lineNumber,
column: index - lineStart
};
addComment("Block", comment, start, index, loc);
}
return;
}
++index;
} else ++index;
}
throwError({}, Messages.UnexpectedToken, "ILLEGAL");
}
function skipComment() {
var ch, start = index === 0;
while (index < length) {
ch = source.charCodeAt(index);
if (isWhiteSpace(ch)) ++index;
else if (isLineTerminator(ch)) {
++index;
if (ch === 13 && source.charCodeAt(index) === 10) ++index;
++lineNumber;
lineStart = index;
start = true;
} else if (ch === 47) {
ch = source.charCodeAt(index + 1);
if (ch === 47) {
++index;
++index;
skipSingleLineComment(2);
start = true;
} else if (ch === 42) {
++index;
++index;
skipMultiLineComment();
} else break;
} else if (start && ch === 45) if (source.charCodeAt(index + 1) === 45 && source.charCodeAt(index + 2) === 62) {
index += 3;
skipSingleLineComment(3);
} else break;
else if (ch === 60) if (source.slice(index + 1, index + 4) === "!--") {
++index;
++index;
++index;
++index;
skipSingleLineComment(4);
} else break;
else break;
}
}
function scanHexEscape(prefix) {
var i, len, ch, code = 0;
len = prefix === "u" ? 4 : 2;
for (i = 0; i < len; ++i) if (index < length && isHexDigit(source[index])) {
ch = source[index++];
code = code * 16 + "0123456789abcdef".indexOf(ch.toLowerCase());
} else return "";
return String.fromCharCode(code);
}
function getEscapedIdentifier() {
var ch = source.charCodeAt(index++), id = String.fromCharCode(ch);
if (ch === 92) {
if (source.charCodeAt(index) !== 117) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
++index;
ch = scanHexEscape("u");
if (!ch || ch === "\\" || !isIdentifierStart(ch.charCodeAt(0))) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
id = ch;
}
while (index < length) {
ch = source.charCodeAt(index);
if (!isIdentifierPart(ch)) break;
++index;
id += String.fromCharCode(ch);
if (ch === 92) {
id = id.substr(0, id.length - 1);
if (source.charCodeAt(index) !== 117) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
++index;
ch = scanHexEscape("u");
if (!ch || ch === "\\" || !isIdentifierPart(ch.charCodeAt(0))) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
id += ch;
}
}
return id;
}
function getIdentifier() {
var start = index++, ch;
while (index < length) {
ch = source.charCodeAt(index);
if (ch === 92) {
index = start;
return getEscapedIdentifier();
}
if (isIdentifierPart(ch)) ++index;
else break;
}
return source.slice(start, index);
}
function scanIdentifier() {
var start = index, id = source.charCodeAt(index) === 92 ? getEscapedIdentifier() : getIdentifier(), type;
if (id.length === 1) type = Token.Identifier;
else if (isKeyword(id)) type = Token.Keyword;
else if (id === "null") type = Token.NullLiteral;
else if (id === "true" || id === "false") type = Token.BooleanLiteral;
else type = Token.Identifier;
return {
type,
value: id,
lineNumber,
lineStart,
start,
end: index
};
}
function scanPunctuator() {
var start = index, code = source.charCodeAt(index), code2, ch1 = source[index], ch2, ch3, ch4;
switch (code) {
case 46:
case 40:
case 41:
case 59:
case 44:
case 123:
case 125:
case 91:
case 93:
case 58:
case 63:
case 126:
++index;
if (extra.tokenize) {
if (code === 40) extra.openParenToken = extra.tokens.length;
else if (code === 123) extra.openCurlyToken = extra.tokens.length;
}
return {
type: Token.Punctuator,
value: String.fromCharCode(code),
lineNumber,
lineStart,
start,
end: index
};
default:
code2 = source.charCodeAt(index + 1);
if (code2 === 61) switch (code) {
case 43:
case 45:
case 47:
case 60:
case 62:
case 94:
case 124:
case 37:
case 38:
case 42:
index += 2;
return {
type: Token.Punctuator,
value: String.fromCharCode(code) + String.fromCharCode(code2),
lineNumber,
lineStart,
start,
end: index
};
case 33:
case 61:
index += 2;
if (source.charCodeAt(index) === 61) ++index;
return {
type: Token.Punctuator,
value: source.slice(start, index),
lineNumber,
lineStart,
start,
end: index
};
}
}
ch4 = source.substr(index, 4);
if (ch4 === ">>>=") {
index += 4;
return {
type: Token.Punctuator,
value: ch4,
lineNumber,
lineStart,
start,
end: index
};
}
ch3 = ch4.substr(0, 3);
if (ch3 === ">>>" || ch3 === "<<=" || ch3 === ">>=") {
index += 3;
return {
type: Token.Punctuator,
value: ch3,
lineNumber,
lineStart,
start,
end: index
};
}
ch2 = ch3.substr(0, 2);
if (ch1 === ch2[1] && "+-<>&|".indexOf(ch1) >= 0 || ch2 === "=>") {
index += 2;
return {
type: Token.Punctuator,
value: ch2,
lineNumber,
lineStart,
start,
end: index
};
}
if ("<>=!+-*%&|^/".indexOf(ch1) >= 0) {
++index;
return {
type: Token.Punctuator,
value: ch1,
lineNumber,
lineStart,
start,
end: index
};
}
throwError({}, Messages.UnexpectedToken, "ILLEGAL");
}
function scanHexLiteral(start) {
var number = "";
while (index < length) {
if (!isHexDigit(source[index])) break;
number += source[index++];
}
if (number.length === 0) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
if (isIdentifierStart(source.charCodeAt(index))) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
return {
type: Token.NumericLiteral,
value: parseInt("0x" + number, 16),
lineNumber,
lineStart,
start,
end: index
};
}
function scanOctalLiteral(start) {
var number = "0" + source[index++];
while (index < length) {
if (!isOctalDigit(source[index])) break;
number += source[index++];
}
if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
return {
type: Token.NumericLiteral,
value: parseInt(number, 8),
octal: true,
lineNumber,
lineStart,
start,
end: index
};
}
function scanNumericLiteral() {
var number, start, ch = source[index];
assert(isDecimalDigit(ch.charCodeAt(0)) || ch === ".", "Numeric literal must start with a decimal digit or a decimal point");
start = index;
number = "";
if (ch !== ".") {
number = source[index++];
ch = source[index];
if (number === "0") {
if (ch === "x" || ch === "X") {
++index;
return scanHexLiteral(start);
}
if (isOctalDigit(ch)) return scanOctalLiteral(start);
if (ch && isDecimalDigit(ch.charCodeAt(0))) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
}
while (isDecimalDigit(source.charCodeAt(index))) number += source[index++];
ch = source[index];
}
if (ch === ".") {
number += source[index++];
while (isDecimalDigit(source.charCodeAt(index))) number += source[index++];
ch = source[index];
}
if (ch === "e" || ch === "E") {
number += source[index++];
ch = source[index];
if (ch === "+" || ch === "-") number += source[index++];
if (isDecimalDigit(source.charCodeAt(index))) while (isDecimalDigit(source.charCodeAt(index))) number += source[index++];
else throwError({}, Messages.UnexpectedToken, "ILLEGAL");
}
if (isIdentifierStart(source.charCodeAt(index))) throwError({}, Messages.UnexpectedToken, "ILLEGAL");
return {
type: Token.NumericLiteral,
value: parseFloat(number),
lineNumber,
lineStart,
start,
end: index
};
}
function scanStringLiteral() {
var str = "", quote, start, ch, code, unescaped, restore, octal = false, startLineNumber = lineNumber, startLineStart = lineStart;
quote = source[index];
assert(quote === "'" || quote === "\"", "String literal must starts with a quote");
start = index;
++index;
while (index < length) {
ch = source[index++];
if (ch === quote) {
quote = "";
break;
} else if (ch === "\\") {
ch = source[index++];
if (!ch || !isLineTerminator(ch.charCodeAt(0))) switch (ch) {
case "u":
case "x":
restore = index;
unescaped = scanHexEscape(ch);
if (unescaped) str += unescaped;
else {
index = restore;
str += ch;
}
break;
case "n":
str += "\n";
break;
case "r":
str += "\r";
break;
case "t":
str += " ";
break;
case "b":
str += "\b";
break;
case "f":
str += "\f";
break;
case "v":
str += "\v";
break;
default:
if (isOctalDigit(ch)) {
code = "01234567".indexOf(ch);
if (code !== 0) octal = true;
if (index < length && isOctalDigit(source[index])) {
octal = true;
code = code * 8 + "01234567".indexOf(source[index++]);
if ("0123".indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) code = code * 8 + "01234567".indexOf(source[index++]);
}
str += String.fromCharCode(code);
} else str += ch;
break;
}
else {
++lineNumber;
if (ch === "\r" && source[index] === "\n") ++index;
lineStart = index;
}
} else if (isLineTerminator(ch.charCodeAt(0))) break;
else str += ch;
}
if (quote !== "") throwError({}, Messages.UnexpectedToken, "ILLEGAL");
return {
type: Token.StringLiteral,
value: str,
octal,
startLineNumber,
startLineStart,
lineNumber,
lineStart,
start,
end: index
};
}
function testRegExp(pattern, flags) {
var value;
try {
value = new RegExp(pattern, flags);
} catch (e) {
throwError({}, Messages.InvalidRegExp);
}
return value;
}
function scanRegExpBody() {
var ch = source[index], str, classMarker, terminated, body;
assert(ch === "/", "Regular expression literal must start with a slash");
str = source[index++];
classMarker = false;
terminated = false;
while (index < length) {
ch = source[index++];
str += ch;
if (ch === "\\") {
ch = source[index++];
if (isLineTerminator(ch.charCodeAt(0))) throwError({}, Messages.UnterminatedRegExp);
str += ch;
} else if (isLineTerminator(ch.charCodeAt(0))) throwError({}, Messages.UnterminatedRegExp);
else if (classMarker) {
if (ch === "]") classMarker = false;
} else if (ch === "/") {
terminated = true;
break;
} else if (ch === "[") classMarker = true;
}
if (!terminated) throwError({}, Messages.UnterminatedRegExp);
body = str.substr(1, str.length - 2);
return {
value: body,
literal: str
};
}
function scanRegExpFlags() {
var ch, str = "", flags = "", restore;
while (index < length) {
ch = source[index];
if (!isIdentifierPart(ch.charCodeAt(0))) break;
++index;
if (ch === "\\" && index < length) {
ch = source[index];
if (ch === "u") {
++index;
restore = index;
ch = scanHexEscape("u");
if (ch) {
flags += ch;
for (str += "\\u"; restore < index; ++restore) str += source[restore];
} else {
index = restore;
flags += "u";
str += "\\u";
}
throwErrorTolerant({}, Messages.UnexpectedToken, "ILLEGAL");
} else {
str += "\\";
throwErrorTolerant({}, Messages.UnexpectedToken, "ILLEGAL");
}
} else {
flags += ch;
str += ch;
}
}
return {
value: flags,
literal: str
};
}
function scanRegExp() {
var start, body, flags, value;
lookahead = null;
skipComment();
start = index;
body = scanRegExpBody();
flags = scanRegExpFlags();
value = testRegExp(body.value, flags.value);
if (extra.tokenize) return {
type: Token.RegularExpression,
value,
lineNumber,
lineStart,
start,
end: index
};
return {
literal: body.literal + flags.literal,
value,
start,
end: index
};
}
function collectRegex() {
var pos, loc, regex, token;
skipComment();
pos = index;
loc = { start: {
line: lineNumber,
column: index - lineStart
} };
regex = scanRegExp();
loc.end = {
line: lineNumber,
column: index - lineStart
};
/* istanbul ignore next */
if (!extra.tokenize) {
if (extra.tokens.length > 0) {
token = extra.tokens[extra.tokens.length - 1];
if (token.range[0] === pos && token.type === "Punctuator") {
if (token.value === "/" || token.value === "/=") extra.tokens.pop();
}
}
extra.tokens.push({
type: "RegularExpression",
value: regex.literal,
range: [pos, index],
loc
});
}
return regex;
}
function isIdentifierName(token) {
return token.type === Token.Identifier || token.type === Token.Keyword || token.type === Token.BooleanLiteral || token.type === Token.NullLiteral;
}
function advanceSlash() {
var prevToken = extra.tokens[extra.tokens.length - 1], checkToken;
if (!prevToken) return collectRegex();
if (prevToken.type === "Punctuator") {
if (prevToken.value === "]") return scanPunctuator();
if (prevToken.value === ")") {
checkToken = extra.tokens[extra.openParenToken - 1];
if (checkToken && checkToken.type === "Keyword" && (checkToken.value === "if" || checkToken.value === "while" || checkToken.value === "for" || checkToken.value === "with")) return collectRegex();
return scanPunctuator();
}
if (prevToken.value === "}") {
if (extra.tokens[extra.openCurlyToken - 3] && extra.tokens[extra.openCurlyToken - 3].type === "Keyword") {
checkToken = extra.tokens[extra.openCurlyToken - 4];
if (!checkToken) return scanPunctuator();
} else if (extra.tokens[extra.openCurlyToken - 4] && extra.tokens[extra.openCurlyToken - 4].type === "Keyword") {
checkToken = extra.tokens[extra.openCurlyToken - 5];
if (!checkToken) return collectRegex();
} else return scanPunctuator();
if (FnExprTokens.indexOf(checkToken.value) >= 0) return scanPunctuator();
return collectRegex();
}
return collectRegex();
}
if (prevToken.type === "Keyword") return collectRegex();
return scanPunctuator();
}
function advance() {
var ch;
skipComment();
if (index >= length) return {
type: Token.EOF,
lineNumber,
lineStart,
start: index,
end: index
};
ch = source.charCodeAt(index);
if (isIdentifierStart(ch)) return scanIdentifier();
if (ch === 40 || ch === 41 || ch === 59) return scanPunctuator();
if (ch === 39 || ch === 34) return scanStringLiteral();
if (ch === 46) {
if (isDecimalDigit(source.charCodeAt(index + 1))) return scanNumericLiteral();
return scanPunctuator();
}
if (isDecimalDigit(ch)) return scanNumericLiteral();
if (extra.tokenize && ch === 47) return advanceSlash();
return scanPunctuator();
}
function collectToken() {
var loc, token, value;
skipComment();
loc = { start: {
line: lineNumber,
column: index - lineStart
} };
token = advance();
loc.end = {
line: lineNumber,
column: index - lineStart
};
if (token.type !== Token.EOF) {
value = source.slice(token.start, token.end);
extra.tokens.push({
type: TokenName[token.type],
value,
range: [token.start, token.end],
loc
});
}
return token;
}
function lex() {
var token = lookahead;
index = token.end;
lineNumber = token.lineNumber;
lineStart = token.lineStart;
lookahead = typeof extra.tokens !== "undefined" ? collectToken() : advance();
index = token.end;
lineNumber = token.lineNumber;
lineStart = token.lineStart;
return token;
}
function peek() {
var pos = index, line = lineNumber, start = lineStart;
lookahead = typeof extra.tokens !== "undefined" ? collectToken() : advance();
index = pos;
lineNumber = line;
lineStart = start;
}
function Position(line, column) {
this.line = line;
this.column = column;
}
function SourceLocation(startLine, startColumn, line, column) {
this.start = new Position(startLine, startColumn);
this.end = new Position(line, column);
}
SyntaxTreeDelegate = {
name: "SyntaxTree",
processComment: function(node) {
var lastChild, trailingComments;
if (node.type === Syntax.Program) {
if (node.body.length > 0) return;
}
if (extra.trailingComments.length > 0) if (extra.trailingComments[0].range[0] >= node.range[1]) {
trailingComments = extra.trailingComments;
extra.trailingComments = [];
} else extra.trailingComments.length = 0;
else if (extra.bottomRightStack.length > 0 && extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments && extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments[0].range[0] >= node.range[1]) {
trailingComments = extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;
delete extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;
}
while (extra.bottomRightStack.length > 0 && extra.bottomRightStack[extra.bottomRightStack.length - 1].range[0] >= node.range[0]) lastChild = extra.bottomRightStack.pop();
if (lastChild) {
if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) {
node.leadingComments = lastChild.leadingComments;
delete lastChild.leadingComments;
}
} else if (extra.leadingComments.length > 0 && extra.leadingComments[extra.leadingComments.length - 1].range[1] <= node.range[0]) {
node.leadingComments = extra.leadingComments;
extra.leadingComments = [];
}
if (trailingComments) node.trailingComments = trailingComments;
extra.bottomRightStack.push(node);
},
markEnd: function(node, startToken) {
if (extra.range) node.range = [startToken.start, index];
if (extra.loc) {
node.loc = new SourceLocation(startToken.startLineNumber === void 0 ? startToken.lineNumber : startToken.startLineNumber, startToken.start - (startToken.startLineStart === void 0 ? startToken.lineStart : startToken.startLineStart), lineNumber, index - lineStart);
this.postProcess(node);
}
if (extra.attachComment) this.processComment(node);
return node;
},
postProcess: function(node) {
if (extra.source) node.loc.source = extra.source;
return node;
},
createArrayExpression: function(elements) {
return {
type: Syntax.ArrayExpression,
elements
};
},
createAssignmentExpression: function(operator, left, right) {
return {
type: Syntax.AssignmentExpression,
operator,
left,
right
};
},
createBinaryExpression: function(operator, left, right) {
return {
type: operator === "||" || operator === "&&" ? Syntax.LogicalExpression : Syntax.BinaryExpression,
operator,
left,
right
};
},
createBlockStatement: function(body) {
return {
type: Syntax.BlockStatement,
body
};
},
createBreakStatement: function(label) {
return {
type: Syntax.BreakStatement,
label
};
},
createCallExpression: function(callee, args) {
return {
type: Syntax.CallExpression,
callee,
"arguments": args
};
},
createCatchClause: function(param, body) {
return {
type: Syntax.CatchClause,
param,
body
};
},
createConditionalExpression: function(test, consequent, alternate) {
return {
type: Syntax.ConditionalExpression,
test,
consequent,
alternate
};
},
createContinueStatement: function(label) {
return {
type: Syntax.ContinueStatement,
label
};
},
createDebuggerStatement: function() {
return { type: Syntax.DebuggerStatement };
},
createDoWhileStatement: function(body, test) {
return {
type: Syntax.DoWhileStatement,
body,
test
};
},
createEmptyStatement: function() {
return { type: Syntax.EmptyStatement };
},
createExpressionStatement: function(expression) {
return {
type: Syntax.ExpressionStatement,
expression
};
},
createForStatement: function(init, test, update, body) {
return {
type: Syntax.ForStatement,
init,
test,
update,
body
};
},
createForInStatement: function(left, right, body) {
return {
type: Syntax.ForInStatement,
left,
right,
body,
each: false
};
},
createFunctionDeclaration: function(id, params, defaults, body) {
return {
type: Syntax.FunctionDeclaration,
id,
params,
defaults,
body,
rest: null,
generator: false,
expression: false
};
},
createFunctionExpression: function(id, params, defaults, body) {
return {
type: Syntax.FunctionExpression,
id,
params,
defaults,
body,
rest: null,
generator: false,
expression: false
};
},
createIdentifier: function(name) {
return {
type: Syntax.Identifier,
name
};
},
createIfStatement: function(test, consequent, alternate) {
return {
type: Syntax.IfStatement,
test,
consequent,
alternate
};
},
createLabeledStatement: function(label, body) {
return {
type: Syntax.LabeledStatement,
label,
body
};
},
createLiteral: function(token) {
return {
type: Syntax.Literal,
value: token.value,
raw: source.slice(token.start, token.end)
};
},
createMemberExpression: function(accessor, object, property) {
return {
type: Syntax.MemberExpression,
computed: accessor === "[",
object,
property
};
},
createNewExpression: function(callee, args) {
return {
type: Syntax.NewExpression,
callee,
"arguments": args
};
},
createObjectExpression: function(properties) {
return {
type: Syntax.ObjectExpression,
properties
};
},
createPostfixExpression: function(operator, argument) {
return {
type: Syntax.UpdateExpression,
operator,
argument,
prefix: false
};
},
createProgram: function(body) {
return {
type: Syntax.Program,
body
};
},
createProperty: function(kind, key, value) {
return {
type: Syntax.Property,
key,
value,
kind
};
},
createReturnStatement: function(argument) {
return {
type: Syntax.ReturnStatement,
argument
};
},
createSequenceExpression: function(expressions) {
return {
type: Syntax.SequenceExpression,
expressions
};
},
createSwitchCase: function(test, consequent) {
return {
type: Syntax.SwitchCase,
test,
consequent
};
},
createSwitchStatement: function(discriminant, cases) {
return {
type: Syntax.SwitchStatement,
discriminant,
cases
};
},
createThisExpression: function() {
return { type: Syntax.ThisExpression };
},
createThrowStatement: function(argument) {
return {
type: Syntax.ThrowStatement,
argument
};
},
createTryStatement: function(block, guardedHandlers, handlers, finalizer) {
return {
type: Syntax.TryStatement,
block,
guardedHandlers,
handlers,
finalizer
};
},
createUnaryExpression: function(operator, argument) {
if (operator === "++" || operator === "--") return {
type: Syntax.UpdateExpression,
operator,
argument,
prefix: true
};
return {
type: Syntax.UnaryExpression,
operator,
argument,
prefix: true
};
},
createVariableDeclaration: function(declarations, kind) {
return {
type: Syntax.VariableDeclaration,
declarations,
kind
};
},
createVariableDeclarator: function(id, init) {
return {
type: Syntax.VariableDeclarator,
id,
init
};
},
createWhileStatement: function(test, body) {
return {
type: Syntax.WhileStatement,
test,
body
};
},
createWithStatement: function(object, body) {
return {
type: Syntax.WithStatement,
object,
body
};
}
};
function peekLineTerminator() {
var pos = index, line = lineNumber, start = lineStart, found;
skipComment();
found = lineNumber !== line;
index = pos;
lineNumber = line;
lineStart = start;
return found;
}
function throwError(token, messageFormat) {
var error, args = Array.prototype.slice.call(arguments, 2), msg = messageFormat.replace(/%(\d)/g, function(whole, index$1) {
assert(index$1 < args.length, "Message reference must be in range");
return args[index$1];
});
if (typeof token.lineNumber === "number") {
error = /* @__PURE__ */ new Error("Line " + token.lineNumber + ": " + msg);
error.index = token.start;
error.lineNumber = token.lineNumber;
error.column = token.start - lineStart + 1;
} else {
error = /* @__PURE__ */ new Error("Line " + lineNumber + ": " + msg);
error.index = index;
error.lineNumber = lineNumber;
error.column = index - lineStart + 1;
}
error.description = msg;
throw error;
}
function throwErrorTolerant() {
try {
throwError.apply(null, arguments);
} catch (e) {
if (extra.errors) extra.errors.push(e);
else throw e;
}
}
function throwUnexpected(token) {
if (token.type === Token.EOF) throwError(token, Messages.UnexpectedEOS);
if (token.type === Token.NumericLiteral) throwError(token, Messages.UnexpectedNumber);
if (token.type === Token.StringLiteral) throwError(token, Messages.UnexpectedString);
if (token.type === Token.Identifier) throwError(token, Messages.UnexpectedIdentifier);
if (token.type === Token.Keyword) {
if (isFutureReservedWord(token.value)) throwError(token, Messages.UnexpectedReserved);
else if (strict && isStrictModeReservedWord(token.value)) {
throwErrorTolerant(token, Messages.StrictReservedWord);
return;
}
throwError(token, Messages.UnexpectedToken, token.value);
}
throwError(token, Messages.UnexpectedToken, token.value);
}
function expect(value) {
var token = lex();
if (token.type !== Token.Punctuator || token.value !== value) throwUnexpected(token);
}
function expectKeyword(keyword) {
var token = lex();
if (token.type !== Token.Keyword || token.value !== keyword) throwUnexpected(token);
}
function match(value) {
return lookahead.type === Token.Punctuator && lookahead.value === value;
}
function matchKeyword(keyword) {
return lookahead.type === Token.Keyword && lookahead.value === keyword;
}
function matchAssign() {
var op;
if (lookahead.type !== Token.Punctuator) return false;
op = lookahead.value;
return op === "=" || op === "*=" || op === "/=" || op === "%=" || op === "+=" || op === "-=" || op === "<<=" || op === ">>=" || op === ">>>=" || op === "&=" || op === "^=" || op === "|=";
}
function consumeSemicolon() {
var line;
if (source.charCodeAt(index) === 59 || match(";")) {
lex();
return;
}
line = lineNumber;
skipComment();
if (lineNumber !== line) return;
if (lookahead.type !== Token.EOF && !match("}")) throwUnexpected(lookahead);
}
function isLeftHandSide(expr) {
return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;
}
function parseArrayInitialiser() {
var elements = [], startToken = lookahead;
expect("[");
while (!match("]")) if (match(",")) {
lex();
elements.push(null);
} else {
elements.push(parseAssignmentExpression());
if (!match("]")) expect(",");
}
lex();
return delegate.markEnd(delegate.createArrayExpression(elements), startToken);
}
function parsePropertyFunction(param, first) {
var previousStrict = strict, body, startToken = lookahead;
body = parseFunctionSourceElements();
if (first && strict && isRestrictedWord(param[0].name)) throwErrorTolerant(first, Messages.StrictParamName);
strict = previousStrict;
return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body), startToken);
}
function parseObjectPropertyKey() {
var token, startToken = lookahead;
token = lex();
if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {
if (strict && token.octal) throwErrorTolerant(token, Messages.StrictOctalLiteral);
return delegate.markEnd(delegate.createLiteral(token), startToken);
}
return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
}
function parseObjectProperty() {
var token = lookahead, key, id, value, param, startToken = lookahead;
if (token.type === Token.Identifier) {
id = parseObjectPropertyKey();
if (token.value === "get" && !match(":")) {
key = parseObjectPropertyKey();
expect("(");
expect(")");
value = parsePropertyFunction([]);
return delegate.markEnd(delegate.createProperty("get", key, value), startToken);
}
if (token.value === "set" && !match(":")) {
key = parseObjectPropertyKey();
expect("(");
token = lookahead;
if (token.type !== Token.Identifier) {
expect(")");
throwErrorTolerant(token, Messages.UnexpectedToken, token.value);
value = parsePropertyFunction([]);
} else {
param = [parseVariableIdentifier()];
expect(")");
value = parsePropertyFunction(param, token);
}
return delegate.markEnd(delegate.createProperty("set", key, value), startToken);
}
expect(":");
value = parseAssignmentExpression();
return delegate.markEnd(delegate.createProperty("init", id, value), startToken);
}
if (token.type === Token.EOF || token.type === Token.Punctuator) throwUnexpected(token);
else {
key = parseObjectPropertyKey();
expect(":");
value = parseAssignmentExpression();
return delegate.markEnd(delegate.createProperty("init", key, value), startToken);
}
}
function parseObjectInitialiser() {
var properties = [], property, name, key, kind, map = {}, toString = String, startToken = lookahead;
expect("{");
while (!match("}")) {
property = parseObjectProperty();
if (property.key.type === Syntax.Identifier) name = property.key.name;
else name = toString(property.key.value);
kind = property.kind === "init" ? PropertyKind.Data : property.kind === "get" ? PropertyKind.Get : PropertyKind.Set;
key = "$" + name;
if (Object.prototype.hasOwnProperty.call(map, key)) {
if (map[key] === PropertyKind.Data) {
if (strict && kind === PropertyKind.Data) throwErrorTolerant({}, Messages.StrictDuplicateProperty);
else if (kind !== PropertyKind.Data) throwErrorTolerant({}, Messages.AccessorDataProperty);
} else if (kind === PropertyKind.Data) throwErrorTolerant({}, Messages.AccessorDataProperty);
else if (map[key] & kind) throwErrorTolerant({}, Messages.AccessorGetSet);
map[key] |= kind;
} else map[key] = kind;
properties.push(property);
if (!match("}")) expect(",");
}
expect("}");
return delegate.markEnd(delegate.createObjectExpression(properties), startToken);
}
function parseGroupExpression() {
var expr;
expect("(");
expr = parseExpression();
expect(")");
return expr;
}
function parsePrimaryExpression() {
var type, token, expr, startToken;
if (match("(")) return parseGroupExpression();
if (match("[")) return parseArrayInitialiser();
if (match("{")) return parseObjectInitialiser();
type = lookahead.type;
startToken = lookahead;
if (type === Token.Identifier) expr = delegate.createIdentifier(lex().value);
else if (type === Token.StringLiteral || type === Token.NumericLiteral) {
if (strict && lookahead.octal) throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);
expr = delegate.createLiteral(lex());
} else if (type === Token.Keyword) {
if (matchKeyword("function")) return parseFunctionExpression();
if (matchKeyword("this")) {
lex();
expr = delegate.createThisExpression();
} else throwUnexpected(lex());
} else if (type === Token.BooleanLiteral) {
token = lex();
token.value = token.value === "true";
expr = delegate.createLiteral(token);
} else if (type === Token.NullLiteral) {
token = lex();
token.value = null;
expr = delegate.createLiteral(token);
} else if (match("/") || match("/=")) {
if (typeof extra.tokens !== "undefined") expr = delegate.createLiteral(collectRegex());
else expr = delegate.createLiteral(scanRegExp());
peek();
} else throwUnexpected(lex());
return delegate.markEnd(expr, startToken);
}
function parseArguments() {
var args = [];
expect("(");
if (!match(")")) while (index < length) {
args.push(parseAssignmentExpression());
if (match(")")) break;
expect(",");
}
expect(")");
return args;
}
function parseNonComputedProperty() {
var token, startToken = lookahead;
token = lex();
if (!isIdentifierName(token)) throwUnexpected(token);
return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
}
function parseNonComputedMember() {
expect(".");
return parseNonComputedProperty();
}
function parseComputedMember() {
var expr;
expect("[");
expr = parseExpression();
expect("]");
return expr;
}
function parseNewExpression() {
var callee, args, startToken = lookahead;
expectKeyword("new");
callee = parseLeftHandSideExpression();
args = match("(") ? parseArguments() : [];
return delegate.markEnd(delegate.createNewExpression(callee, args), startToken);
}
function parseLeftHandSideExpressionAllowCall() {
var previousAllowIn, expr, args, property, startToken = lookahead;
previousAllowIn = state.allowIn;
state.allowIn = true;
expr = matchKeyword("new") ? parseNewExpression() : parsePrimaryExpression();
state.allowIn = previousAllowIn;
for (;;) {
if (match(".")) {
property = parseNonComputedMember();
expr = delegate.createMemberExpression(".", expr, property);
} else if (match("(")) {
args = parseArguments();
expr = delegate.createCallExpression(expr, args);
} else if (match("[")) {
property = parseComputedMember();
expr = delegate.createMemberExpression("[", expr, property);
} else break;
delegate.markEnd(expr, startToken);
}
return expr;
}
function parseLeftHandSideExpression() {
var previousAllowIn, expr, property, startToken = lookahead;
previousAllowIn = state.allowIn;
expr = matchKeyword("new") ? parseNewExpression() : parsePrimaryExpression();
state.allowIn = previousAllowIn;
while (match(".") || match("[")) {
if (match("[")) {
property = parseComputedMember();
expr = delegate.createMemberExpression("[", expr, property);
} else {
property = parseNonComputedMember();
expr = delegate.createMemberExpression(".", expr, property);
}
delegate.markEnd(expr, startToken);
}
return expr;
}
function parsePostfixExpression() {
var expr, token, startToken = lookahead;
expr = parseLeftHandSideExpressionAllowCall();
if (lookahead.type === Token.Punctuator) {
if ((match("++") || match("--")) && !peekLineTerminator()) {
if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) throwErrorTolerant({}, Messages.StrictLHSPostfix);
if (!isLeftHandSide(expr)) throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
token = lex();
expr = delegate.markEnd(delegate.createPostfixExpression(token.value, expr), startToken);
}
}
return expr;
}
function parseUnaryExpression() {
var token, expr, startToken;
if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) expr = parsePostfixExpression();
else if (match("++") || match("--")) {
startToken = lookahead;
token = lex();
expr = parseUnaryExpression();
if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) throwErrorTolerant({}, Messages.StrictLHSPrefix);
if (!isLeftHandSide(expr)) throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
expr = delegate.createUnaryExpression(token.value, expr);
expr = delegate.markEnd(expr, startToken);
} else if (match("+") || match("-") || match("~") || match("!")) {
startToken = lookahead;
token = lex();
expr = parseUnaryExpression();
expr = delegate.createUnaryExpression(token.value, expr);
expr = delegate.markEnd(expr, startToken);
} else if (matchKeyword("delete") || matchKeyword("void") || matchKeyword("typeof")) {
startToken = lookahead;
token = lex();
expr = parseUnaryExpression();
expr = delegate.createUnaryExpression(token.value, expr);
expr = delegate.markEnd(expr, startToken);
if (strict && expr.operator === "delete" && expr.argument.type === Syntax.Identifier) throwErrorTolerant({}, Messages.StrictDelete);
} else expr = parsePostfixExpression();
return expr;
}
function binaryPrecedence(token, allowIn) {
var prec = 0;
if (token.type !== Token.Punctuator && token.type !== Token.Keyword) return 0;
switch (token.value) {
case "||":
prec = 1;
break;
case "&&":
prec = 2;
break;
case "|":
prec = 3;
break;
case "^":
prec = 4;
break;
case "&":
prec = 5;
break;
case "==":
case "!=":
case "===":
case "!==":
prec = 6;
break;
case "<":
case ">":
case "<=":
case ">=":
case "instanceof":
prec = 7;
break;
case "in":
prec = allowIn ? 7 : 0;
break;
case "<<":
case ">>":
case ">>>":
prec = 8;
break;
case "+":
case "-":
prec = 9;
break;
case "*":
case "/":
case "%":
prec = 11;
break;
default: break;
}
return prec;
}
function parseBinaryExpression() {
var marker = lookahead, markers, expr, token, prec, stack, right, operator, left = parseUnaryExpression(), i;
token = lookahead;
prec = binaryPrecedence(token, state.allowIn);
if (prec === 0) return left;
token.prec = prec;
lex();
markers = [marker, lookahead];
right = parseUnaryExpression();
stack = [
left,
token,
right
];
while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {
while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {
right = stack.pop();
operator = stack.pop().value;
left = stack.pop();
expr = delegate.createBinaryExpression(operator, left, right);
markers.pop();
marker = markers[markers.length - 1];
delegate.markEnd(expr, marker);
stack.push(expr);
}
token = lex();
token.prec = prec;
stack.push(token);
markers.push(lookahead);
expr = parseUnaryExpression();
stack.push(expr);
}
i = stack.length - 1;
expr = stack[i];
markers.pop();
while (i > 1) {
expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);
i -= 2;
marker = markers.pop();
delegate.markEnd(expr, marker);
}
return expr;
}
function parseConditionalExpression() {
var expr, previousAllowIn, consequent, alternate, startToken = lookahead;
expr = parseBinaryExpression();
if (match("?")) {
lex();
previousAllowIn = state.allowIn;
state.allowIn = true;
consequent = parseAssignmentExpression();
state.allowIn = previousAllowIn;
expect(":");
alternate = parseAssignmentExpression();
expr = delegate.createConditionalExpression(expr, consequent, alternate);
delegate.markEnd(expr, startToken);
}
return expr;
}
function parseAssignmentExpression() {
var token = lookahead, left, right, node, startToken = lookahead;
node = left = parseConditionalExpression();
if (matchAssign()) {
if (!isLeftHandSide(left)) throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) throwErrorTolerant(token, Messages.StrictLHSAssignment);
token = lex();
right = parseAssignmentExpression();
node = delegate.markEnd(delegate.createAssignmentExpression(token.value, left, right), startToken);
}
return node;
}
function parseExpression() {
var expr, startToken = lookahead;
expr = parseAssignmentExpression();
if (match(",")) {
expr = delegate.createSequenceExpression([expr]);
while (index < length) {
if (!match(",")) break;
lex();
expr.expressions.push(parseAssignmentExpression());
}
delegate.markEnd(expr, startToken);
}
return expr;
}
function parseStatementList() {
var list = [], statement;
while (index < length) {
if (match("}")) break;
statement = parseSourceElement();
if (typeof statement === "undefined") break;
list.push(statement);
}
return list;
}
function parseBlock() {
var block, startToken = lookahead;
expect("{");
block = parseStatementList();
expect("}");
return delegate.markEnd(delegate.createBlockStatement(block), startToken);
}
function parseVariableIdentifier() {
var token, startToken = lookahead;
token = lex();
if (token.type !== Token.Identifier) throwUnexpected(token);
return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
}
function parseVariableDeclaration(kind) {
var init = null, id, startToken = lookahead;
id = parseVariableIdentifier();
if (strict && isRestrictedWord(id.name)) throwErrorTolerant({}, Messages.StrictVarName);
if (kind === "const") {
expect("=");
init = parseAssignmentExpression();
} else if (match("=")) {
lex();
init = parseAssignmentExpression();
}
return delegate.markEnd(delegate.createVariableDeclarator(id, init), startToken);
}
function parseVariableDeclarationList(kind) {
var list = [];
do {
list.push(parseVariableDeclaration(kind));
if (!match(",")) break;
lex();
} while (index < length);
return list;
}
function parseVariableStatement() {
var declarations;
expectKeyword("var");
declarations = parseVariableDeclarationList();
consumeSemicolon();
return delegate.createVariableDeclaration(declarations, "var");
}
function parseConstLetDeclaration(kind) {
var declarations, startToken = lookahead;
expectKeyword(kind);
declarations = parseVariableDeclarationList(kind);
consumeSemicolon();
return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind), startToken);
}
function parseEmptyStatement() {
expect(";");
return delegate.createEmptyStatement();
}
function parseExpressionStatement() {
var expr = parseExpression();
consumeSemicolon();
return delegate.createExpressionStatement(expr);
}
function parseIfStatement() {
var test, consequent, alternate;
expectKeyword("if");
expect("(");
test = parseExpression();
expect(")");
consequent = parseStatement();
if (matchKeyword("else")) {
lex();
alternate = parseStatement();
} else alternate = null;
return delegate.createIfStatement(test, consequent, alternate);
}
function parseDoWhileStatement() {
var body, test, oldInIteration;
expectKeyword("do");
oldInIteration = state.inIteration;
state.inIteration = true;
body = parseStatement();
state.inIteration = oldInIteration;
expectKeyword("while");
expect("(");
test = parseExpression();
expect(")");
if (match(";")) lex();
return delegate.createDoWhileStatement(body, test);
}
function parseWhileStatement() {
var test, body, oldInIteration;
expectKeyword("while");
expect("(");
test = parseExpression();
expect(")");
oldInIteration = state.inIteration;
state.inIteration = true;
body = parseStatement();
state.inIteration = oldInIteration;
return delegate.createWhileStatement(test, body);
}
function parseForVariableDeclaration() {
var token, declarations, startToken = lookahead;
token = lex();
declarations = parseVariableDeclarationList();
return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value), startToken);
}
function parseForStatement() {
var init = test = update = null, test, update, left, right, body, oldInIteration;
expectKeyword("for");
expect("(");
if (match(";")) lex();
else {
if (matchKeyword("var") || matchKeyword("let")) {
state.allowIn = false;
init = parseForVariableDeclaration();
state.allowIn = true;
if (init.declarations.length === 1 && matchKeyword("in")) {
lex();
left = init;
right = parseExpression();
init = null;
}
} else {
state.allowIn = false;
init = parseExpression();
state.allowIn = true;
if (matchKeyword("in")) {
if (!isLeftHandSide(init)) throwErrorTolerant({}, Messages.InvalidLHSInForIn);
lex();
left = init;
right = parseExpression();
init = null;
}
}
if (typeof left === "undefined") expect(";");
}
if (typeof left === "undefined") {
if (!match(";")) test = parseExpression();
expect(";");
if (!match(")")) update = parseExpression();
}
expect(")");
oldInIteration = state.inIteration;
state.inIteration = true;
body = parseStatement();
state.inIteration = oldInIteration;
return typeof left === "undefined" ? delegate.createForStatement(init, test, update, body) : delegate.createForInStatement(left, right, body);
}
function parseContinueStatement() {
var label = null, key;
expectKeyword("continue");
if (source.charCodeAt(index) === 59) {
lex();
if (!state.inIteration) throwError({}, Messages.IllegalContinue);
return delegate.createContinueStatement(null);
}
if (peekLineTerminator()) {
if (!state.inIteration) throwError({}, Messages.IllegalContinue);
return delegate.createContinueStatement(null);
}
if (lookahead.type === Token.Identifier) {
label = parseVariableIdentifier();
key = "$" + label.name;
if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) throwError({}, Messages.UnknownLabel, label.name);
}
consumeSemicolon();
if (label === null && !state.inIteration) throwError({}, Messages.IllegalContinue);
return delegate.createContinueStatement(label);
}
function parseBreakStatement() {
var label = null, key;
expectKeyword("break");
if (source.charCodeAt(index) === 59) {
lex();
if (!(state.inIteration || state.inSwitch)) throwError({}, Messages.IllegalBreak);
return delegate.createBreakStatement(null);
}
if (peekLineTerminator()) {
if (!(state.inIteration || state.inSwitch)) throwError({}, Messages.IllegalBreak);
return delegate.createBreakStatement(null);
}
if (lookahead.type === Token.Identifier) {
label = parseVariableIdentifier();
key = "$" + label.name;
if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) throwError({}, Messages.UnknownLabel, label.name);
}
consumeSemicolon();
if (label === null && !(state.inIteration || state.inSwitch)) throwError({}, Messages.IllegalBreak);
return delegate.createBreakStatement(label);
}
function parseReturnStatement() {
var argument = null;
expectKeyword("return");
if (!state.inFunctionBody) throwErrorTolerant({}, Messages.IllegalReturn);
if (source.charCodeAt(index) === 32) {
if (isIdentifierStart(source.charCodeAt(index + 1))) {
argument = parseExpression();
consumeSemicolon();
return delegate.createReturnStatement(argument);
}
}
if (peekLineTerminator()) return delegate.createReturnStatement(null);
if (!match(";")) {
if (!match("}") && lookahead.type !== Token.EOF) argument = parseExpression();
}
consumeSemicolon();
return delegate.createReturnStatement(argument);
}
function parseWithStatement() {
var object, body;
if (strict) {
skipComment();
throwErrorTolerant({}, Messages.StrictModeWith);
}
expectKeyword("with");
expect("(");
object = parseExpression();
expect(")");
body = parseStatement();
return delegate.createWithStatement(object, body);
}
function parseSwitchCase() {
var test, consequent = [], statement, startToken = lookahead;
if (matchKeyword("default")) {
lex();
test = null;
} else {
expectKeyword("case");
test = parseExpression();
}
expect(":");
while (index < length) {
if (match("}") || matchKeyword("default") || matchKeyword("case")) break;
statement = parseStatement();
consequent.push(statement);
}
return delegate.markEnd(delegate.createSwitchCase(test, consequent), startToken);
}
function parseSwitchStatement() {
var discriminant, cases, clause, oldInSwitch, defaultFound;
expectKeyword("switch");
expect("(");
discriminant = parseExpression();
expect(")");
expect("{");
cases = [];
if (match("}")) {
lex();
return delegate.createSwitchStatement(discriminant, cases);
}
oldInSwitch = state.inSwitch;
state.inSwitch = true;
defaultFound = false;
while (index < length) {
if (match("}")) break;
clause = parseSwitchCase();
if (clause.test === null) {
if (defaultFound) throwError({}, Messages.MultipleDefaultsInSwitch);
defaultFound = true;
}
cases.push(clause);
}
state.inSwitch = oldInSwitch;
expect("}");
return delegate.createSwitchStatement(discriminant, cases);
}
function parseThrowStatement() {
var argument;
expectKeyword("throw");
if (peekLineTerminator()) throwError({}, Messages.NewlineAfterThrow);
argument = parseExpression();
consumeSemicolon();
return delegate.createThrowStatement(argument);
}
function parseCatchClause() {
var param, body, startToken = lookahead;
expectKeyword("catch");
expect("(");
if (match(")")) throwUnexpected(lookahead);
param = parseVariableIdentifier();
if (strict && isRestrictedWord(param.name)) throwErrorTolerant({}, Messages.StrictCatchVariable);
expect(")");
body = parseBlock();
return delegate.markEnd(delegate.createCatchClause(param, body), startToken);
}
function parseTryStatement() {
var block, handlers = [], finalizer = null;
expectKeyword("try");
block = parseBlock();
if (matchKeyword("catch")) handlers.push(parseCatchClause());
if (matchKeyword("finally")) {
lex();
finalizer = parseBlock();
}
if (handlers.length === 0 && !finalizer) throwError({}, Messages.NoCatchOrFinally);
return delegate.createTryStatement(block, [], handlers, finalizer);
}
function parseDebuggerStatement() {
expectKeyword("debugger");
consumeSemicolon();
return delegate.createDebuggerStatement();
}
function parseStatement() {
var type = lookahead.type, expr, labeledBody, key, startToken;
if (type === Token.EOF) throwUnexpected(lookahead);
if (type === Token.Punctuator && lookahead.value === "{") return parseBlock();
startToken = lookahead;
if (type === Token.Punctuator) switch (lookahead.value) {
case ";": return delegate.markEnd(parseEmptyStatement(), startToken);
case "(": return delegate.markEnd(parseExpressionStatement(), startToken);
default: break;
}
if (type === Token.Keyword) switch (lookahead.value) {
case "break": return delegate.markEnd(parseBreakStatement(), startToken);
case "continue": return delegate.markEnd(parseContinueStatement(), startToken);
case "debugger": return delegate.markEnd(parseDebuggerStatement(), startToken);
case "do": return delegate.markEnd(parseDoWhileStatement(), startToken);
case "for": return delegate.markEnd(parseForStatement(), startToken);
case "function": return delegate.markEnd(parseFunctionDeclaration(), startToken);
case "if": return delegate.markEnd(parseIfStatement(), startToken);
case "return": return delegate.markEnd(parseReturnStatement(), startToken);
case "switch": return delegate.markEnd(parseSwitchStatement(), startToken);
case "throw": return delegate.markEnd(parseThrowStatement(), startToken);
case "try": return delegate.markEnd(parseTryStatement(), startToken);
case "var": return delegate.markEnd(parseVariableStatement(), startToken);
case "while": return delegate.markEnd(parseWhileStatement(), startToken);
case "with": return delegate.markEnd(parseWithStatement(), startToken);
default: break;
}
expr = parseExpression();
if (expr.type === Syntax.Identifier && match(":")) {
lex();
key = "$" + expr.name;
if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) throwError({}, Messages.Redeclaration, "Label", expr.name);
state.labelSet[key] = true;
labeledBody = parseStatement();
delete state.labelSet[key];
return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody), startToken);
}
consumeSemicolon();
return delegate.markEnd(delegate.createExpressionStatement(expr), startToken);
}
function parseFunctionSourceElements() {
var sourceElement, sourceElements = [], token, directive, firstRestricted, oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, startToken = lookahead;
expect("{");
while (index < length) {
if (lookahead.type !== Token.StringLiteral) break;
token = lookahead;
sourceElement = parseSourceElement();
sourceElements.push(sourceElement);
if (sourceElement.expression.type !== Syntax.Literal) break;
directive = source.slice(token.start + 1, token.end - 1);
if (directive === "use strict") {
strict = true;
if (firstRestricted) throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
} else if (!firstRestricted && token.octal) firstRestricted = token;
}
oldLabelSet = state.labelSet;
oldInIteration = state.inIteration;
oldInSwitch = state.inSwitch;
oldInFunctionBody = state.inFunctionBody;
state.labelSet = {};
state.inIteration = false;
state.inSwitch = false;
state.inFunctionBody = true;
while (index < length) {
if (match("}")) break;
sourceElement = parseSourceElement();
if (typeof sourceElement === "undefined") break;
sourceElements.push(sourceElement);
}
expect("}");
state.labelSet = oldLabelSet;
state.inIteration = oldInIteration;
state.inSwitch = oldInSwitch;
state.inFunctionBody = oldInFunctionBody;
return delegate.markEnd(delegate.createBlockStatement(sourceElements), startToken);
}
function parseParams(firstRestricted) {
var param, params = [], token, stricted, paramSet, key, message;
expect("(");
if (!match(")")) {
paramSet = {};
while (index < length) {
token = lookahead;
param = parseVariableIdentifier();
key = "$" + token.value;
if (strict) {
if (isRestrictedWord(token.value)) {
stricted = token;
message = Messages.StrictParamName;
}
if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
stricted = token;
message = Messages.StrictParamDupe;
}
} else if (!firstRestricted) {
if (isRestrictedWord(token.value)) {
firstRestricted = token;
message = Messages.StrictParamName;
} else if (isStrictModeReservedWord(token.value)) {
firstRestricted = token;
message = Messages.StrictReservedWord;
} else if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
firstRestricted = token;
message = Messages.StrictParamDupe;
}
}
params.push(param);
paramSet[key] = true;
if (match(")")) break;
expect(",");
}
}
expect(")");
return {
params,
stricted,
firstRestricted,
message
};
}
function parseFunctionDeclaration() {
var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict, startToken = lookahead;
expectKeyword("function");
token = lookahead;
id = parseVariableIdentifier();
if (strict) {
if (isRestrictedWord(token.value)) throwErrorTolerant(token, Messages.StrictFunctionName);
} else if (isRestrictedWord(token.value)) {
firstRestricted = token;
message = Messages.StrictFunctionName;
} else if (isStrictModeReservedWord(token.value)) {
firstRestricted = token;
message = Messages.StrictReservedWord;
}
tmp = parseParams(firstRestricted);
params = tmp.params;
stricted = tmp.stricted;
firstRestricted = tmp.firstRestricted;
if (tmp.message) message = tmp.message;
previousStrict = strict;
body = parseFunctionSourceElements();
if (strict && firstRestricted) throwError(firstRestricted, message);
if (strict && stricted) throwErrorTolerant(stricted, message);
strict = previousStrict;
return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body), startToken);
}
function parseFunctionExpression() {
var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict, startToken = lookahead;
expectKeyword("function");
if (!match("(")) {
token = lookahead;
id = parseVariableIdentifier();
if (strict) {
if (isRestrictedWord(token.value)) throwErrorTolerant(token, Messages.StrictFunctionName);
} else if (isRestrictedWord(token.value)) {
firstRestricted = token;
message = Messages.StrictFunctionName;
} else if (isStrictModeReservedWord(token.value)) {
firstRestricted = token;
message = Messages.StrictReservedWord;
}
}
tmp = parseParams(firstRestricted);
params = tmp.params;
stricted = tmp.stricted;
firstRestricted = tmp.firstRestricted;
if (tmp.message) message = tmp.message;
previousStrict = strict;
body = parseFunctionSourceElements();
if (strict && firstRestricted) throwError(firstRestricted, message);
if (strict && stricted) throwErrorTolerant(stricted, message);
strict = previousStrict;
return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body), startToken);
}
function parseSourceElement() {
if (lookahead.type === Token.Keyword) switch (lookahead.value) {
case "const":
case "let": return parseConstLetDeclaration(lookahead.value);
case "function": return parseFunctionDeclaration();
default: return parseStatement();
}
if (lookahead.type !== Token.EOF) return parseStatement();
}
function parseSourceElements() {
var sourceElement, sourceElements = [], token, directive, firstRestricted;
while (index < length) {
token = lookahead;
if (token.type !== Token.StringLiteral) break;
sourceElement = parseSourceElement();
sourceElements.push(sourceElement);
if (sourceElement.expression.type !== Syntax.Literal) break;
directive = source.slice(token.start + 1, token.end - 1);
if (directive === "use strict") {
strict = true;
if (firstRestricted) throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
} else if (!firstRestricted && token.octal) firstRestricted = token;
}
while (index < length) {
sourceElement = parseSourceElement();
/* istanbul ignore if */
if (typeof sourceElement === "undefined") break;
sourceElements.push(sourceElement);
}
return sourceElements;
}
function parseProgram() {
var body, startToken;
skipComment();
peek();
startToken = lookahead;
strict = false;
body = parseSourceElements();
return delegate.markEnd(delegate.createProgram(body), startToken);
}
function filterTokenLocation() {
var i, entry, token, tokens = [];
for (i = 0; i < extra.tokens.length; ++i) {
entry = extra.tokens[i];
token = {
type: entry.type,
value: entry.value
};
if (extra.range) token.range = entry.range;
if (extra.loc) token.loc = entry.loc;
tokens.push(token);
}
extra.tokens = tokens;
}
function tokenize(code, options) {
var toString = String, tokens;
if (typeof code !== "string" && !(code instanceof String)) code = toString(code);
delegate = SyntaxTreeDelegate;
source = code;
index = 0;
lineNumber = source.length > 0 ? 1 : 0;
lineStart = 0;
length = source.length;
lookahead = null;
state = {
allowIn: true,
labelSet: {},
inFunctionBody: false,
inIteration: false,
inSwitch: false,
lastCommentStart: -1
};
extra = {};
options = options || {};
options.tokens = true;
extra.tokens = [];
extra.tokenize = true;
extra.openParenToken = -1;
extra.openCurlyToken = -1;
extra.range = typeof options.range === "boolean" && options.range;
extra.loc = typeof options.loc === "boolean" && options.loc;
if (typeof options.comment === "boolean" && options.comment) extra.comments = [];
if (typeof options.tolerant === "boolean" && options.tolerant) extra.errors = [];
try {
peek();
if (lookahead.type === Token.EOF) return extra.tokens;
lex();
while (lookahead.type !== Token.EOF) try {
lex();
} catch (lexError) {
if (extra.errors) {
extra.errors.push(lexError);
break;
} else throw lexError;
}
filterTokenLocation();
tokens = extra.tokens;
if (typeof extra.comments !== "undefined") tokens.comments = extra.comments;
if (typeof extra.errors !== "undefined") tokens.errors = extra.errors;
} catch (e) {
throw e;
} finally {
extra = {};
}
return tokens;
}
function parse(code, options) {
var program, toString = String;
if (typeof code !== "string" && !(code instanceof String)) code = toString(code);
delegate = SyntaxTreeDelegate;
source = code;
index = 0;
lineNumber = source.length > 0 ? 1 : 0;
lineStart = 0;
length = source.length;
lookahead = null;
state = {
allowIn: true,
labelSet: {},
inFunctionBody: false,
inIteration: false,
inSwitch: false,
lastCommentStart: -1
};
extra = {};
if (typeof options !== "undefined") {
extra.range = typeof options.range === "boolean" && options.range;
extra.loc = typeof options.loc === "boolean" && options.loc;
extra.attachComment = typeof options.attachComment === "boolean" && options.attachComment;
if (extra.loc && options.source !== null && options.source !== void 0) extra.source = toString(options.source);
if (typeof options.tokens === "boolean" && options.tokens) extra.tokens = [];
if (typeof options.comment === "boolean" && options.comment) extra.comments = [];
if (typeof options.tolerant === "boolean" && options.tolerant) extra.errors = [];
if (extra.attachComment) {
extra.range = true;
extra.comments = [];
extra.bottomRightStack = [];
extra.trailingComments = [];
extra.leadingComments = [];
}
}
try {
program = parseProgram();
if (typeof extra.comments !== "undefined") program.comments = extra.comments;
if (typeof extra.tokens !== "undefined") {
filterTokenLocation();
program.tokens = extra.tokens;
}
if (typeof extra.errors !== "undefined") program.errors = extra.errors;
} catch (e) {
throw e;
} finally {
extra = {};
}
return program;
}
exports$2.version = "1.2.2";
exports$2.tokenize = tokenize;
exports$2.parse = parse;
/* istanbul ignore next */
exports$2.Syntax = function() {
var name, types = {};
if (typeof Object.create === "function") types = Object.create(null);
for (name in Syntax) if (Syntax.hasOwnProperty(name)) types[name] = Syntax[name];
if (typeof Object.freeze === "function") Object.freeze(types);
return types;
}();
});
}, {}],
1: [function(require$1, module$1, exports$1) {
(function(process) {
var parser = (function() {
var parser$1 = {
trace: function trace() {},
yy: {},
symbols_: {
"error": 2,
"JSON_PATH": 3,
"DOLLAR": 4,
"PATH_COMPONENTS": 5,
"LEADING_CHILD_MEMBER_EXPRESSION": 6,
"PATH_COMPONENT": 7,
"MEMBER_COMPONENT": 8,
"SUBSCRIPT_COMPONENT": 9,
"CHILD_MEMBER_COMPONENT": 10,
"DESCENDANT_MEMBER_COMPONENT": 11,
"DOT": 12,
"MEMBER_EXPRESSION": 13,
"DOT_DOT": 14,
"STAR": 15,
"IDENTIFIER": 16,
"SCRIPT_EXPRESSION": 17,
"INTEGER": 18,
"END": 19,
"CHILD_SUBSCRIPT_COMPONENT": 20,
"DESCENDANT_SUBSCRIPT_COMPONENT": 21,
"[": 22,
"SUBSCRIPT": 23,
"]": 24,
"SUBSCRIPT_EXPRESSION": 25,
"SUBSCRIPT_EXPRESSION_LIST": 26,
"SUBSCRIPT_EXPRESSION_LISTABLE": 27,
",": 28,
"STRING_LITERAL": 29,
"ARRAY_SLICE": 30,
"FILTER_EXPRESSION": 31,
"QQ_STRING": 32,
"Q_STRING": 33,
"$accept": 0,
"$end": 1
},
terminals_: {
2: "error",
4: "DOLLAR",
12: "DOT",
14: "DOT_DOT",
15: "STAR",
16: "IDENTIFIER",
17: "SCRIPT_EXPRESSION",
18: "INTEGER",
19: "END",
22: "[",
24: "]",
28: ",",
30: "ARRAY_SLICE",
31: "FILTER_EXPRESSION",
32: "QQ_STRING",
33: "Q_STRING"
},
productions_: [
0,
[3, 1],
[3, 2],
[3, 1],
[3, 2],
[5, 1],
[5, 2],
[7, 1],
[7, 1],
[8, 1],
[8, 1],
[10, 2],
[6, 1],
[11, 2],
[13, 1],
[13, 1],
[13, 1],
[13, 1],
[13, 1],
[9, 1],
[9, 1],
[20, 3],
[21, 4],
[23, 1],
[23, 1],
[26, 1],
[26, 3],
[27, 1],
[27, 1],
[27, 1],
[25, 1],
[25, 1],
[25, 1],
[29, 1],
[29, 1]
],
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
if (!yy.ast) {
yy.ast = _ast;
_ast.initialize();
}
var $0 = $$.length - 1;
switch (yystate) {
case 1:
yy.ast.set({ expression: {
type: "root",
value: $$[$0]
} });
yy.ast.unshift();
return yy.ast.yield();
case 2:
yy.ast.set({ expression: {
type: "root",
value: $$[$0 - 1]
} });
yy.ast.unshift();
return yy.ast.yield();
case 3:
yy.ast.unshift();
return yy.ast.yield();
case 4:
yy.ast.set({
operation: "member",
scope: "child",
expression: {
type: "identifier",
value: $$[$0 - 1]
}
});
yy.ast.unshift();
return yy.ast.yield();
case 5: break;
case 6: break;
case 7:
yy.ast.set({ operation: "member" });
yy.ast.push();
break;
case 8:
yy.ast.set({ operation: "subscript" });
yy.ast.push();
break;
case 9:
yy.ast.set({ scope: "child" });
break;
case 10:
yy.ast.set({ scope: "descendant" });
break;
case 11: break;
case 12:
yy.ast.set({
scope: "child",
operation: "member"
});
break;
case 13: break;
case 14:
yy.ast.set({ expression: {
type: "wildcard",
value: $$[$0]
} });
break;
case 15:
yy.ast.set({ expression: {
type: "identifier",
value: $$[$0]
} });
break;
case 16:
yy.ast.set({ expression: {
type: "script_expression",
value: $$[$0]
} });
break;
case 17:
yy.ast.set({ expression: {
type: "numeric_literal",
value: parseInt($$[$0])
} });
break;
case 18: break;
case 19:
yy.ast.set({ scope: "child" });
break;
case 20:
yy.ast.set({ scope: "descendant" });
break;
case 21: break;
case 22: break;
case 23: break;
case 24:
$$[$0].length > 1 ? yy.ast.set({ expression: {
type: "union",
value: $$[$0]
} }) : this.$ = $$[$0];
break;
case 25:
this.$ = [$$[$0]];
break;
case 26:
this.$ = $$[$0 - 2].concat($$[$0]);
break;
case 27:
this.$ = { expression: {
type: "numeric_literal",
value: parseInt($$[$0])
} };
yy.ast.set(this.$);
break;
case 28:
this.$ = { expression: {
type: "string_literal",
value: $$[$0]
} };
yy.ast.set(this.$);
break;
case 29:
this.$ = { expression: {
type: "slice",
value: $$[$0]
} };
yy.ast.set(this.$);
break;
case 30:
this.$ = { expression: {
type: "wildcard",
value: $$[$0]
} };
yy.ast.set(this.$);
break;
case 31:
this.$ = { expression: {
type: "script_expression",
value: $$[$0]
} };
yy.ast.set(this.$);
break;
case 32:
this.$ = { expression: {
type: "filter_expression",
value: $$[$0]
} };
yy.ast.set(this.$);
break;
case 33:
this.$ = $$[$0];
break;
case 34:
this.$ = $$[$0];
break;
}
},
table: [
{
3: 1,
4: [1, 2],
6: 3,
13: 4,
15: [1, 5],
16: [1, 6],
17: [1, 7],
18: [1, 8],
19: [1, 9]
},
{ 1: [3] },
{
1: [2, 1],
5: 10,
7: 11,
8: 12,
9: 13,
10: 14,
11: 15,
12: [1, 18],
14: [1, 19],
20: 16,
21: 17,
22: [1, 20]
},
{
1: [2, 3],
5: 21,
7: 11,
8: 12,
9: 13,
10: 14,
11: 15,
12: [1, 18],
14: [1, 19],
20: 16,
21: 17,
22: [1, 20]
},
{
1: [2, 12],
12: [2, 12],
14: [2, 12],
22: [2, 12]
},
{
1: [2, 14],
12: [2, 14],
14: [2, 14],
22: [2, 14]
},
{
1: [2, 15],
12: [2, 15],
14: [2, 15],
22: [2, 15]
},
{
1: [2, 16],
12: [2, 16],
14: [2, 16],
22: [2, 16]
},
{
1: [2, 17],
12: [2, 17],
14: [2, 17],
22: [2, 17]
},
{
1: [2, 18],
12: [2, 18],
14: [2, 18],
22: [2, 18]
},
{
1: [2, 2],
7: 22,
8: 12,
9: 13,
10: 14,
11: 15,
12: [1, 18],
14: [1, 19],
20: 16,
21: 17,
22: [1, 20]
},
{
1: [2, 5],
12: [2, 5],
14: [2, 5],
22: [2, 5]
},
{
1: [2, 7],
12: [2, 7],
14: [2, 7],
22: [2, 7]
},
{
1: [2, 8],
12: [2, 8],
14: [2, 8],
22: [2, 8]
},
{
1: [2, 9],
12: [2, 9],
14: [2, 9],
22: [2, 9]
},
{
1: [2, 10],
12: [2, 10],
14: [2, 10],
22: [2, 10]
},
{
1: [2, 19],
12: [2, 19],
14: [2, 19],
22: [2, 19]
},
{
1: [2, 20],
12: [2, 20],
14: [2, 20],
22: [2, 20]
},
{
13: 23,
15: [1, 5],
16: [1, 6],
17: [1, 7],
18: [1, 8],
19: [1, 9]
},
{
13: 24,
15: [1, 5],
16: [1, 6],
17: [1, 7],
18: [1, 8],
19: [1, 9],
22: [1, 25]
},
{
15: [1, 29],
17: [1, 30],
18: [1, 33],
23: 26,
25: 27,
26: 28,
27: 32,
29: 34,
30: [1, 35],
31: [1, 31],
32: [1, 36],
33: [1, 37]
},
{
1: [2, 4],
7: 22,
8: 12,
9: 13,
10: 14,
11: 15,
12: [1, 18],
14: [1, 19],
20: 16,
21: 17,
22: [1, 20]
},
{
1: [2, 6],
12: [2, 6],
14: [2, 6],
22: [2, 6]
},
{
1: [2, 11],
12: [2, 11],
14: [2, 11],
22: [2, 11]
},
{
1: [2, 13],
12: [2, 13],
14: [2, 13],
22: [2, 13]
},
{
15: [1, 29],
17: [1, 30],
18: [1, 33],
23: 38,
25: 27,
26: 28,
27: 32,
29: 34,
30: [1, 35],
31: [1, 31],
32: [1, 36],
33: [1, 37]
},
{ 24: [1, 39] },
{ 24: [2, 23] },
{
24: [2, 24],
28: [1, 40]
},
{ 24: [2, 30] },
{ 24: [2, 31] },
{ 24: [2, 32] },
{
24: [2, 25],
28: [2, 25]
},
{
24: [2, 27],
28: [2, 27]
},
{
24: [2, 28],
28: [2, 28]
},
{
24: [2, 29],
28: [2, 29]
},
{
24: [2, 33],
28: [2, 33]
},
{
24: [2, 34],
28: [2, 34]
},
{ 24: [1, 41] },
{
1: [2, 21],
12: [2, 21],
14: [2, 21],
22: [2, 21]
},
{
18: [1, 33],
27: 42,
29: 34,
30: [1, 35],
32: [1, 36],
33: [1, 37]
},
{
1: [2, 22],
12: [2, 22],
14: [2, 22],
22: [2, 22]
},
{
24: [2, 26],
28: [2, 26]
}
],
defaultActions: {
27: [2, 23],
29: [2, 30],
30: [2, 31],
31: [2, 32]
},
parseError: function parseError(str, hash) {
if (hash.recoverable) this.trace(str);
else throw new Error(str);
},
parse: function parse(input) {
var self$1 = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
var args = lstack.slice.call(arguments, 1);
this.lexer.setInput(input);
this.lexer.yy = this.yy;
this.yy.lexer = this.lexer;
this.yy.parser = this;
if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {};
var yyloc = this.lexer.yylloc;
lstack.push(yyloc);
var ranges = this.lexer.options && this.lexer.options.ranges;
if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError;
else this.parseError = Object.getPrototypeOf(this).parseError;
function lex() {
var token = self$1.lexer.lex() || EOF;
if (typeof token !== "number") token = self$1.symbols_[token] || token;
return token;
}
var symbol, preErrorSymbol, state, action, r, yyval = {}, p, len, newState, expected;
while (true) {
state = stack[stack.length - 1];
if (this.defaultActions[state]) action = this.defaultActions[state];
else {
if (symbol === null || typeof symbol == "undefined") symbol = lex();
action = table[state] && table[state][symbol];
}
if (typeof action === "undefined" || !action.length || !action[0]) {
var errStr = "";
expected = [];
for (p in table[state]) if (this.terminals_[p] && p > TERROR) expected.push("'" + this.terminals_[p] + "'");
if (this.lexer.showPosition) errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
else errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
this.parseError(errStr, {
text: this.lexer.match,
token: this.terminals_[symbol] || symbol,
line: this.lexer.yylineno,
loc: yyloc,
expected
});
}
if (action[0] instanceof Array && action.length > 1) throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
switch (action[0]) {
case 1:
stack.push(symbol);
vstack.push(this.lexer.yytext);
lstack.push(this.lexer.yylloc);
stack.push(action[1]);
symbol = null;
if (!preErrorSymbol) {
yyleng = this.lexer.yyleng;
yytext = this.lexer.yytext;
yylineno = this.lexer.yylineno;
yyloc = this.lexer.yylloc;
if (recovering > 0) recovering--;
} else {
symbol = preErrorSymbol;
preErrorSymbol = null;
}
break;
case 2:
len = this.productions_[action[1]][1];
yyval.$ = vstack[vstack.length - len];
yyval._$ = {
first_line: lstack[lstack.length - (len || 1)].first_line,
last_line: lstack[lstack.length - 1].last_line,
first_column: lstack[lstack.length - (len || 1)].first_column,
last_column: lstack[lstack.length - 1].last_column
};
if (ranges) yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
r = this.performAction.apply(yyval, [
yytext,
yyleng,
yylineno,
this.yy,
action[1],
vstack,
lstack
].concat(args));
if (typeof r !== "undefined") return r;
if (len) {
stack = stack.slice(0, -1 * len * 2);
vstack = vstack.slice(0, -1 * len);
lstack = lstack.slice(0, -1 * len);
}
stack.push(this.productions_[action[1]][0]);
vstack.push(yyval.$);
lstack.push(yyval._$);
newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
stack.push(newState);
break;
case 3: return true;
}
}
return true;
}
};
var _ast = {
initialize: function() {
this._nodes = [];
this._node = {};
this._stash = [];
},
set: function(props) {
for (var k in props) this._node[k] = props[k];
return this._node;
},
node: function(obj) {
if (arguments.length) this._node = obj;
return this._node;
},
push: function() {
this._nodes.push(this._node);
this._node = {};
},
unshift: function() {
this._nodes.unshift(this._node);
this._node = {};
},
yield: function() {
var _nodes = this._nodes;
this.initialize();
return _nodes;
}
};
parser$1.lexer = (function() {
return {
EOF: 1,
parseError: function parseError(str, hash) {
if (this.yy.parser) this.yy.parser.parseError(str, hash);
else throw new Error(str);
},
setInput: function(input) {
this._input = input;
this._more = this._backtrack = this.done = false;
this.yylineno = this.yyleng = 0;
this.yytext = this.matched = this.match = "";
this.conditionStack = ["INITIAL"];
this.yylloc = {
first_line: 1,
first_column: 0,
last_line: 1,
last_column: 0
};
if (this.options.ranges) this.yylloc.range = [0, 0];
this.offset = 0;
return this;
},
input: function() {
var ch = this._input[0];
this.yytext += ch;
this.yyleng++;
this.offset++;
this.match += ch;
this.matched += ch;
if (ch.match(/(?:\r\n?|\n).*/g)) {
this.yylineno++;
this.yylloc.last_line++;
} else this.yylloc.last_column++;
if (this.options.ranges) this.yylloc.range[1]++;
this._input = this._input.slice(1);
return ch;
},
unput: function(ch) {
var len = ch.length;
var lines = ch.split(/(?:\r\n?|\n)/g);
this._input = ch + this._input;
this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);
this.offset -= len;
var oldLines = this.match.split(/(?:\r\n?|\n)/g);
this.match = this.match.substr(0, this.match.length - 1);
this.matched = this.matched.substr(0, this.matched.length - 1);
if (lines.length - 1) this.yylineno -= lines.length - 1;
var r = this.yylloc.range;
this.yylloc = {
first_line: this.yylloc.first_line,
last_line: this.yylineno + 1,
first_column: this.yylloc.first_column,
last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
};
if (this.options.ranges) this.yylloc.range = [r[0], r[0] + this.yyleng - len];
this.yyleng = this.yytext.length;
return this;
},
more: function() {
this._more = true;
return this;
},
reject: function() {
if (this.options.backtrack_lexer) this._backtrack = true;
else return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
text: "",
token: null,
line: this.yylineno
});
return this;
},
less: function(n) {
this.unput(this.match.slice(n));
},
pastInput: function() {
var past = this.matched.substr(0, this.matched.length - this.match.length);
return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
},
upcomingInput: function() {
var next = this.match;
if (next.length < 20) next += this._input.substr(0, 20 - next.length);
return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
},
showPosition: function() {
var pre = this.pastInput();
var c = new Array(pre.length + 1).join("-");
return pre + this.upcomingInput() + "\n" + c + "^";
},
test_match: function(match, indexed_rule) {
var token, lines, backup;
if (this.options.backtrack_lexer) {
backup = {
yylineno: this.yylineno,
yylloc: {
first_line: this.yylloc.first_line,
last_line: this.last_line,
first_column: this.yylloc.first_column,
last_column: this.yylloc.last_column
},
yytext: this.yytext,
match: this.match,
matches: this.matches,
matched: this.matched,
yyleng: this.yyleng,
offset: this.offset,
_more: this._more,
_input: this._input,
yy: this.yy,
conditionStack: this.conditionStack.slice(0),
done: this.done
};
if (this.options.ranges) backup.yylloc.range = this.yylloc.range.slice(0);
}
lines = match[0].match(/(?:\r\n?|\n).*/g);
if (lines) this.yylineno += lines.length;
this.yylloc = {
first_line: this.yylloc.last_line,
last_line: this.yylineno + 1,
first_column: this.yylloc.last_column,
last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
};
this.yytext += match[0];
this.match += match[0];
this.matches = match;
this.yyleng = this.yytext.length;
if (this.options.ranges) this.yylloc.range = [this.offset, this.offset += this.yyleng];
this._more = false;
this._backtrack = false;
this._input = this._input.slice(match[0].length);
this.matched += match[0];
token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
if (this.done && this._input) this.done = false;
if (token) return token;
else if (this._backtrack) {
for (var k in backup) this[k] = backup[k];
return false;
}
return false;
},
next: function() {
if (this.done) return this.EOF;
if (!this._input) this.done = true;
var token, match, tempMatch, index;
if (!this._more) {
this.yytext = "";
this.match = "";
}
var rules = this._currentRules();
for (var i = 0; i < rules.length; i++) {
tempMatch = this._input.match(this.rules[rules[i]]);
if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
match = tempMatch;
index = i;
if (this.options.backtrack_lexer) {
token = this.test_match(tempMatch, rules[i]);
if (token !== false) return token;
else if (this._backtrack) {
match = false;
continue;
} else return false;
} else if (!this.options.flex) break;
}
}
if (match) {
token = this.test_match(match, rules[index]);
if (token !== false) return token;
return false;
}
if (this._input === "") return this.EOF;
else return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
text: "",
token: null,
line: this.yylineno
});
},
lex: function lex() {
var r = this.next();
if (r) return r;
else return this.lex();
},
begin: function begin(condition) {
this.conditionStack.push(condition);
},
popState: function popState() {
if (this.conditionStack.length - 1 > 0) return this.conditionStack.pop();
else return this.conditionStack[0];
},
_currentRules: function _currentRules() {
if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
else return this.conditions["INITIAL"].rules;
},
topState: function topState(n) {
n = this.conditionStack.length - 1 - Math.abs(n || 0);
if (n >= 0) return this.conditionStack[n];
else return "INITIAL";
},
pushState: function pushState(condition) {
this.begin(condition);
},
stateStackSize: function stateStackSize() {
return this.conditionStack.length;
},
options: {},
performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
switch ($avoiding_name_collisions) {
case 0: return 4;
case 1: return 14;
case 2: return 12;
case 3: return 15;
case 4: return 16;
case 5: return 22;
case 6: return 24;
case 7: return 28;
case 8: return 30;
case 9: return 18;
case 10:
yy_.yytext = yy_.yytext.substr(1, yy_.yyleng - 2);
return 32;
case 11:
yy_.yytext = yy_.yytext.substr(1, yy_.yyleng - 2);
return 33;
case 12: return 17;
case 13: return 31;
}
},
rules: [
/^(?:\$)/,
/^(?:\.\.)/,
/^(?:\.)/,
/^(?:\*)/,
/^(?:[a-zA-Z_]+[a-zA-Z0-9_]*)/,
/^(?:\[)/,
/^(?:\])/,
/^(?:,)/,
/^(?:((-?(?:0|[1-9][0-9]*)))?\:((-?(?:0|[1-9][0-9]*)))?(\:((-?(?:0|[1-9][0-9]*)))?)?)/,
/^(?:(-?(?:0|[1-9][0-9]*)))/,
/^(?:"(?:\\["bfnrt/\\]|\\u[a-fA-F0-9]{4}|[^"\\])*")/,
/^(?:'(?:\\['bfnrt/\\]|\\u[a-fA-F0-9]{4}|[^'\\])*')/,
/^(?:\(.+?\)(?=\]))/,
/^(?:\?\(.+?\)(?=\]))/
],
conditions: { "INITIAL": {
"rules": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13
],
"inclusive": true
} }
};
})();
function Parser() {
this.yy = {};
}
Parser.prototype = parser$1;
parser$1.Parser = Parser;
return new Parser();
})();
if (typeof require$1 !== "undefined" && typeof exports$1 !== "undefined") {
exports$1.parser = parser;
exports$1.Parser = parser.Parser;
exports$1.parse = function() {
return parser.parse.apply(parser, arguments);
};
exports$1.main = function commonjsMain(args) {
if (!args[1]) {
console.log("Usage: " + args[0] + " FILE");
process.exit(1);
}
var source = require$1("fs").readFileSync(require$1("path").normalize(args[1]), "utf8");
return exports$1.parser.parse(source);
};
if (typeof module$1 !== "undefined" && require$1.main === module$1) exports$1.main(process.argv.slice(1));
}
}).call(this, require$1("_process"));
}, {
"_process": 14,
"fs": 12,
"path": 13
}],
2: [function(require$1, module$1, exports$1) {
module$1.exports = {
identifier: "[a-zA-Z_]+[a-zA-Z0-9_]*",
integer: "-?(?:0|[1-9][0-9]*)",
qq_string: "\"(?:\\\\[\"bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\"\\\\])*\"",
q_string: "'(?:\\\\['bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^'\\\\])*'"
};
}, {}],
3: [function(require$1, module$1, exports$1) {
var dict = require$1("./dict");
var fs = require$1("fs");
var grammar = {
lex: {
macros: {
esc: "\\\\",
int: dict.integer
},
rules: [
["\\$", "return 'DOLLAR'"],
["\\.\\.", "return 'DOT_DOT'"],
["\\.", "return 'DOT'"],
["\\*", "return 'STAR'"],
[dict.identifier, "return 'IDENTIFIER'"],
["\\[", "return '['"],
["\\]", "return ']'"],
[",", "return ','"],
["({int})?\\:({int})?(\\:({int})?)?", "return 'ARRAY_SLICE'"],
["{int}", "return 'INTEGER'"],
[dict.qq_string, "yytext = yytext.substr(1,yyleng-2); return 'QQ_STRING';"],
[dict.q_string, "yytext = yytext.substr(1,yyleng-2); return 'Q_STRING';"],
["\\(.+?\\)(?=\\])", "return 'SCRIPT_EXPRESSION'"],
["\\?\\(.+?\\)(?=\\])", "return 'FILTER_EXPRESSION'"]
]
},
start: "JSON_PATH",
bnf: {
JSON_PATH: [
["DOLLAR", "yy.ast.set({ expression: { type: \"root\", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()"],
["DOLLAR PATH_COMPONENTS", "yy.ast.set({ expression: { type: \"root\", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()"],
["LEADING_CHILD_MEMBER_EXPRESSION", "yy.ast.unshift(); return yy.ast.yield()"],
["LEADING_CHILD_MEMBER_EXPRESSION PATH_COMPONENTS", "yy.ast.set({ operation: \"member\", scope: \"child\", expression: { type: \"identifier\", value: $1 }}); yy.ast.unshift(); return yy.ast.yield()"]
],
PATH_COMPONENTS: [["PATH_COMPONENT", ""], ["PATH_COMPONENTS PATH_COMPONENT", ""]],
PATH_COMPONENT: [["MEMBER_COMPONENT", "yy.ast.set({ operation: \"member\" }); yy.ast.push()"], ["SUBSCRIPT_COMPONENT", "yy.ast.set({ operation: \"subscript\" }); yy.ast.push() "]],
MEMBER_COMPONENT: [["CHILD_MEMBER_COMPONENT", "yy.ast.set({ scope: \"child\" })"], ["DESCENDANT_MEMBER_COMPONENT", "yy.ast.set({ scope: \"descendant\" })"]],
CHILD_MEMBER_COMPONENT: [["DOT MEMBER_EXPRESSION", ""]],
LEADING_CHILD_MEMBER_EXPRESSION: [["MEMBER_EXPRESSION", "yy.ast.set({ scope: \"child\", operation: \"member\" })"]],
DESCENDANT_MEMBER_COMPONENT: [["DOT_DOT MEMBER_EXPRESSION", ""]],
MEMBER_EXPRESSION: [
["STAR", "yy.ast.set({ expression: { type: \"wildcard\", value: $1 } })"],
["IDENTIFIER", "yy.ast.set({ expression: { type: \"identifier\", value: $1 } })"],
["SCRIPT_EXPRESSION", "yy.ast.set({ expression: { type: \"script_expression\", value: $1 } })"],
["INTEGER", "yy.ast.set({ expression: { type: \"numeric_literal\", value: parseInt($1) } })"],
["END", ""]
],
SUBSCRIPT_COMPONENT: [["CHILD_SUBSCRIPT_COMPONENT", "yy.ast.set({ scope: \"child\" })"], ["DESCENDANT_SUBSCRIPT_COMPONENT", "yy.ast.set({ scope: \"descendant\" })"]],
CHILD_SUBSCRIPT_COMPONENT: [["[ SUBSCRIPT ]", ""]],
DESCENDANT_SUBSCRIPT_COMPONENT: [["DOT_DOT [ SUBSCRIPT ]", ""]],
SUBSCRIPT: [["SUBSCRIPT_EXPRESSION", ""], ["SUBSCRIPT_EXPRESSION_LIST", "$1.length > 1? yy.ast.set({ expression: { type: \"union\", value: $1 } }) : $$ = $1"]],
SUBSCRIPT_EXPRESSION_LIST: [["SUBSCRIPT_EXPRESSION_LISTABLE", "$$ = [$1]"], ["SUBSCRIPT_EXPRESSION_LIST , SUBSCRIPT_EXPRESSION_LISTABLE", "$$ = $1.concat($3)"]],
SUBSCRIPT_EXPRESSION_LISTABLE: [
["INTEGER", "$$ = { expression: { type: \"numeric_literal\", value: parseInt($1) } }; yy.ast.set($$)"],
["STRING_LITERAL", "$$ = { expression: { type: \"string_literal\", value: $1 } }; yy.ast.set($$)"],
["ARRAY_SLICE", "$$ = { expression: { type: \"slice\", value: $1 } }; yy.ast.set($$)"]
],
SUBSCRIPT_EXPRESSION: [
["STAR", "$$ = { expression: { type: \"wildcard\", value: $1 } }; yy.ast.set($$)"],
["SCRIPT_EXPRESSION", "$$ = { expression: { type: \"script_expression\", value: $1 } }; yy.ast.set($$)"],
["FILTER_EXPRESSION", "$$ = { expression: { type: \"filter_expression\", value: $1 } }; yy.ast.set($$)"]
],
STRING_LITERAL: [["QQ_STRING", "$$ = $1"], ["Q_STRING", "$$ = $1"]]
}
};
if (fs.readFileSync) {
grammar.moduleInclude = fs.readFileSync(require$1.resolve("../include/module.js"));
grammar.actionInclude = fs.readFileSync(require$1.resolve("../include/action.js"));
}
module$1.exports = grammar;
}, {
"./dict": 2,
"fs": 12
}],
4: [function(require$1, module$1, exports$1) {
var aesprim = require$1("./aesprim");
var slice = require$1("./slice");
var _evaluate = require$1("static-eval");
var _uniq = require$1("underscore").uniq;
var Handlers = function() {
return this.initialize.apply(this, arguments);
};
Handlers.prototype.initialize = function() {
this.traverse = traverser(true);
this.descend = traverser();
};
Handlers.prototype.keys = Object.keys;
Handlers.prototype.resolve = function(component) {
var key = [
component.operation,
component.scope,
component.expression.type
].join("-");
var method = this._fns[key];
if (!method) throw new Error("couldn't resolve key: " + key);
return method.bind(this);
};
Handlers.prototype.register = function(key, handler) {
if (!handler instanceof Function) throw new Error("handler must be a function");
this._fns[key] = handler;
};
Handlers.prototype._fns = {
"member-child-identifier": function(component, partial) {
var key = component.expression.value;
var value = partial.value;
if (value instanceof Object && key in value) return [{
value: value[key],
path: partial.path.concat(key)
}];
},
"member-descendant-identifier": _traverse(function(key, value, ref$1) {
return key == ref$1;
}),
"subscript-child-numeric_literal": _descend(function(key, value, ref$1) {
return key === ref$1;
}),
"member-child-numeric_literal": _descend(function(key, value, ref$1) {
return String(key) === String(ref$1);
}),
"subscript-descendant-numeric_literal": _traverse(function(key, value, ref$1) {
return key === ref$1;
}),
"member-child-wildcard": _descend(function() {
return true;
}),
"member-descendant-wildcard": _traverse(function() {
return true;
}),
"subscript-descendant-wildcard": _traverse(function() {
return true;
}),
"subscript-child-wildcard": _descend(function() {
return true;
}),
"subscript-child-slice": function(component, partial) {
if (is_array(partial.value)) {
var args = component.expression.value.split(":").map(_parse_nullable_int);
var values = partial.value.map(function(v, i) {
return {
value: v,
path: partial.path.concat(i)
};
});
return slice.apply(null, [values].concat(args));
}
},
"subscript-child-union": function(component, partial) {
var results = [];
component.expression.value.forEach(function(component$1) {
var _component = {
operation: "subscript",
scope: "child",
expression: component$1.expression
};
var _results = this.resolve(_component)(_component, partial);
if (_results) results = results.concat(_results);
}, this);
return unique(results);
},
"subscript-descendant-union": function(component, partial, count) {
var jp$1 = require$1("..");
var self$1 = this;
var results = [];
jp$1.nodes(partial, "$..*").slice(1).forEach(function(node) {
if (results.length >= count) return;
component.expression.value.forEach(function(component$1) {
var _component = {
operation: "subscript",
scope: "child",
expression: component$1.expression
};
var _results = self$1.resolve(_component)(_component, node);
results = results.concat(_results);
});
});
return unique(results);
},
"subscript-child-filter_expression": function(component, partial, count) {
var src = component.expression.value.slice(2, -1);
var ast = aesprim.parse(src).body[0].expression;
var passable = function(key, value) {
return evaluate(ast, { "@": value });
};
return this.descend(partial, null, passable, count);
},
"subscript-descendant-filter_expression": function(component, partial, count) {
var src = component.expression.value.slice(2, -1);
var ast = aesprim.parse(src).body[0].expression;
var passable = function(key, value) {
return evaluate(ast, { "@": value });
};
return this.traverse(partial, null, passable, count);
},
"subscript-child-script_expression": function(component, partial) {
return eval_recurse(partial, component.expression.value.slice(1, -1), "$[{{value}}]");
},
"member-child-script_expression": function(component, partial) {
return eval_recurse(partial, component.expression.value.slice(1, -1), "$.{{value}}");
},
"member-descendant-script_expression": function(component, partial) {
return eval_recurse(partial, component.expression.value.slice(1, -1), "$..value");
}
};
Handlers.prototype._fns["subscript-child-string_literal"] = Handlers.prototype._fns["member-child-identifier"];
Handlers.prototype._fns["member-descendant-numeric_literal"] = Handlers.prototype._fns["subscript-descendant-string_literal"] = Handlers.prototype._fns["member-descendant-identifier"];
function eval_recurse(partial, src, template) {
var jp$1 = require$1("./index");
var ast = aesprim.parse(src).body[0].expression;
var value = evaluate(ast, { "@": partial.value });
var path = template.replace(/\{\{\s*value\s*\}\}/g, value);
var results = jp$1.nodes(partial.value, path);
results.forEach(function(r) {
r.path = partial.path.concat(r.path.slice(1));
});
return results;
}
function is_array(val) {
return Array.isArray(val);
}
function is_object(val) {
return val && !(val instanceof Array) && val instanceof Object;
}
function traverser(recurse) {
return function(partial, ref$1, passable, count) {
var value = partial.value;
var path = partial.path;
var results = [];
var descend = function(value$1, path$1) {
if (is_array(value$1)) {
value$1.forEach(function(element, index) {
if (results.length >= count) return;
if (passable(index, element, ref$1)) results.push({
path: path$1.concat(index),
value: element
});
});
value$1.forEach(function(element, index) {
if (results.length >= count) return;
if (recurse) descend(element, path$1.concat(index));
});
} else if (is_object(value$1)) {
this.keys(value$1).forEach(function(k) {
if (results.length >= count) return;
if (passable(k, value$1[k], ref$1)) results.push({
path: path$1.concat(k),
value: value$1[k]
});
});
this.keys(value$1).forEach(function(k) {
if (results.length >= count) return;
if (recurse) descend(value$1[k], path$1.concat(k));
});
}
}.bind(this);
descend(value, path);
return results;
};
}
function _descend(passable) {
return function(component, partial, count) {
return this.descend(partial, component.expression.value, passable, count);
};
}
function _traverse(passable) {
return function(component, partial, count) {
return this.traverse(partial, component.expression.value, passable, count);
};
}
function evaluate() {
try {
return _evaluate.apply(this, arguments);
} catch (e) {}
}
function unique(results) {
results = results.filter(function(d) {
return d;
});
return _uniq(results, function(r) {
return r.path.map(function(c) {
return String(c).replace("-", "--");
}).join("-");
});
}
function _parse_nullable_int(val) {
var sval = String(val);
return sval.match(/^-?[0-9]+$/) ? parseInt(sval) : null;
}
module$1.exports = Handlers;
}, {
"..": "jsonpath",
"./aesprim": "./aesprim",
"./index": 5,
"./slice": 7,
"static-eval": 15,
"underscore": 12
}],
5: [function(require$1, module$1, exports$1) {
var assert = require$1("assert");
var dict = require$1("./dict");
var Parser = require$1("./parser");
var Handlers = require$1("./handlers");
var JSONPath = function() {
this.initialize.apply(this, arguments);
};
JSONPath.prototype.initialize = function() {
this.parser = new Parser();
this.handlers = new Handlers();
};
JSONPath.prototype.parse = function(string) {
assert.ok(_is_string(string), "we need a path");
return this.parser.parse(string);
};
JSONPath.prototype.parent = function(obj, string) {
assert.ok(obj instanceof Object, "obj needs to be an object");
assert.ok(string, "we need a path");
var node = this.nodes(obj, string)[0];
node.path.pop();
return this.value(obj, node.path);
};
JSONPath.prototype.apply = function(obj, string, fn) {
assert.ok(obj instanceof Object, "obj needs to be an object");
assert.ok(string, "we need a path");
assert.equal(typeof fn, "function", "fn needs to be function");
var nodes = this.nodes(obj, string).sort(function(a, b) {
return b.path.length - a.path.length;
});
nodes.forEach(function(node) {
var key = node.path.pop();
var parent = this.value(obj, this.stringify(node.path));
parent[key] = node.value = fn.call(obj, parent[key]);
}, this);
return nodes;
};
JSONPath.prototype.value = function(obj, path, value) {
assert.ok(obj instanceof Object, "obj needs to be an object");
assert.ok(path, "we need a path");
if (arguments.length >= 3) {
var node = this.nodes(obj, path).shift();
if (!node) return this._vivify(obj, path, value);
var key = node.path.slice(-1).shift();
var parent = this.parent(obj, this.stringify(node.path));
parent[key] = value;
}
return this.query(obj, this.stringify(path), 1).shift();
};
JSONPath.prototype._vivify = function(obj, string, value) {
var self$1 = this;
assert.ok(obj instanceof Object, "obj needs to be an object");
assert.ok(string, "we need a path");
var path = this.parser.parse(string).map(function(component) {
return component.expression.value;
});
var setValue = function(path$1, value$1) {
var key = path$1.pop();
var node = self$1.value(obj, path$1);
if (!node) {
setValue(path$1.concat(), typeof key === "string" ? {} : []);
node = self$1.value(obj, path$1);
}
node[key] = value$1;
};
setValue(path, value);
return this.query(obj, string)[0];
};
JSONPath.prototype.query = function(obj, string, count) {
assert.ok(obj instanceof Object, "obj needs to be an object");
assert.ok(_is_string(string), "we need a path");
return this.nodes(obj, string, count).map(function(r) {
return r.value;
});
};
JSONPath.prototype.paths = function(obj, string, count) {
assert.ok(obj instanceof Object, "obj needs to be an object");
assert.ok(string, "we need a path");
return this.nodes(obj, string, count).map(function(r) {
return r.path;
});
};
JSONPath.prototype.nodes = function(obj, string, count) {
assert.ok(obj instanceof Object, "obj needs to be an object");
assert.ok(string, "we need a path");
if (count === 0) return [];
var path = this.parser.parse(string);
var handlers = this.handlers;
var partials = [{
path: ["$"],
value: obj
}];
var matches = [];
if (path.length && path[0].expression.type == "root") path.shift();
if (!path.length) return partials;
path.forEach(function(component, index) {
if (matches.length >= count) return;
var handler = handlers.resolve(component);
var _partials = [];
partials.forEach(function(p) {
if (matches.length >= count) return;
var results = handler(component, p, count);
if (index == path.length - 1) matches = matches.concat(results || []);
else _partials = _partials.concat(results || []);
});
partials = _partials;
});
return count ? matches.slice(0, count) : matches;
};
JSONPath.prototype.stringify = function(path) {
assert.ok(path, "we need a path");
var string = "$";
var templates = {
"descendant-member": "..{{value}}",
"child-member": ".{{value}}",
"descendant-subscript": "..[{{value}}]",
"child-subscript": "[{{value}}]"
};
path = this._normalize(path);
path.forEach(function(component) {
if (component.expression.type == "root") return;
var key = [component.scope, component.operation].join("-");
var template = templates[key];
var value;
if (component.expression.type == "string_literal") value = JSON.stringify(component.expression.value);
else value = component.expression.value;
if (!template) throw new Error("couldn't find template " + key);
string += template.replace(/{{value}}/, value);
});
return string;
};
JSONPath.prototype._normalize = function(path) {
assert.ok(path, "we need a path");
if (typeof path == "string") return this.parser.parse(path);
else if (Array.isArray(path) && typeof path[0] == "string") {
var _path = [{ expression: {
type: "root",
value: "$"
} }];
path.forEach(function(component, index) {
if (component == "$" && index === 0) return;
if (typeof component == "string" && component.match("^" + dict.identifier + "$")) _path.push({
operation: "member",
scope: "child",
expression: {
value: component,
type: "identifier"
}
});
else {
var type = typeof component == "number" ? "numeric_literal" : "string_literal";
_path.push({
operation: "subscript",
scope: "child",
expression: {
value: component,
type
}
});
}
});
return _path;
} else if (Array.isArray(path) && typeof path[0] == "object") return path;
throw new Error("couldn't understand path " + path);
};
function _is_string(obj) {
return Object.prototype.toString.call(obj) == "[object String]";
}
JSONPath.Handlers = Handlers;
JSONPath.Parser = Parser;
var instance = new JSONPath();
instance.JSONPath = JSONPath;
module$1.exports = instance;
}, {
"./dict": 2,
"./handlers": 4,
"./parser": 6,
"assert": 8
}],
6: [function(require$1, module$1, exports$1) {
var grammar = require$1("./grammar");
var gparser = require$1("../generated/parser");
var Parser = function() {
var parser = new gparser.Parser();
var _parseError = parser.parseError;
parser.yy.parseError = function() {
if (parser.yy.ast) parser.yy.ast.initialize();
_parseError.apply(parser, arguments);
};
return parser;
};
Parser.grammar = grammar;
module$1.exports = Parser;
}, {
"../generated/parser": 1,
"./grammar": 3
}],
7: [function(require$1, module$1, exports$1) {
module$1.exports = function(arr, start, end, step) {
if (typeof start == "string") throw new Error("start cannot be a string");
if (typeof end == "string") throw new Error("end cannot be a string");
if (typeof step == "string") throw new Error("step cannot be a string");
var len = arr.length;
if (step === 0) throw new Error("step cannot be zero");
step = step ? integer(step) : 1;
start = start < 0 ? len + start : start;
end = end < 0 ? len + end : end;
start = integer(start === 0 ? 0 : !start ? step > 0 ? 0 : len - 1 : start);
end = integer(end === 0 ? 0 : !end ? step > 0 ? len : -1 : end);
start = step > 0 ? Math.max(0, start) : Math.min(len, start);
end = step > 0 ? Math.min(end, len) : Math.max(-1, end);
if (step > 0 && end <= start) return [];
if (step < 0 && start <= end) return [];
var result = [];
for (var i = start; i != end; i += step) {
if (step < 0 && i <= end || step > 0 && i >= end) break;
result.push(arr[i]);
}
return result;
};
function integer(val) {
return String(val).match(/^[0-9]+$/) ? parseInt(val) : Number.isFinite(val) ? parseInt(val, 10) : 0;
}
}, {}],
8: [function(require$1, module$1, exports$1) {
var util = require$1("util/");
var pSlice = Array.prototype.slice;
var hasOwn = Object.prototype.hasOwnProperty;
var assert = module$1.exports = ok;
assert.AssertionError = function AssertionError(options) {
this.name = "AssertionError";
this.actual = options.actual;
this.expected = options.expected;
this.operator = options.operator;
if (options.message) {
this.message = options.message;
this.generatedMessage = false;
} else {
this.message = getMessage(this);
this.generatedMessage = true;
}
var stackStartFunction = options.stackStartFunction || fail;
if (Error.captureStackTrace) Error.captureStackTrace(this, stackStartFunction);
else {
var err = /* @__PURE__ */ new Error();
if (err.stack) {
var out = err.stack;
var fn_name = stackStartFunction.name;
var idx = out.indexOf("\n" + fn_name);
if (idx >= 0) {
var next_line = out.indexOf("\n", idx + 1);
out = out.substring(next_line + 1);
}
this.stack = out;
}
}
};
util.inherits(assert.AssertionError, Error);
function replacer(key, value) {
if (util.isUndefined(value)) return "" + value;
if (util.isNumber(value) && !isFinite(value)) return value.toString();
if (util.isFunction(value) || util.isRegExp(value)) return value.toString();
return value;
}
function truncate(s, n) {
if (util.isString(s)) return s.length < n ? s : s.slice(0, n);
else return s;
}
function getMessage(self$1) {
return truncate(JSON.stringify(self$1.actual, replacer), 128) + " " + self$1.operator + " " + truncate(JSON.stringify(self$1.expected, replacer), 128);
}
function fail(actual, expected, message, operator, stackStartFunction) {
throw new assert.AssertionError({
message,
actual,
expected,
operator,
stackStartFunction
});
}
assert.fail = fail;
function ok(value, message) {
if (!value) fail(value, true, message, "==", assert.ok);
}
assert.ok = ok;
assert.equal = function equal(actual, expected, message) {
if (actual != expected) fail(actual, expected, message, "==", assert.equal);
};
assert.notEqual = function notEqual(actual, expected, message) {
if (actual == expected) fail(actual, expected, message, "!=", assert.notEqual);
};
assert.deepEqual = function deepEqual(actual, expected, message) {
if (!_deepEqual(actual, expected)) fail(actual, expected, message, "deepEqual", assert.deepEqual);
};
function _deepEqual(actual, expected) {
if (actual === expected) return true;
else if (util.isBuffer(actual) && util.isBuffer(expected)) {
if (actual.length != expected.length) return false;
for (var i = 0; i < actual.length; i++) if (actual[i] !== expected[i]) return false;
return true;
} else if (util.isDate(actual) && util.isDate(expected)) return actual.getTime() === expected.getTime();
else if (util.isRegExp(actual) && util.isRegExp(expected)) return actual.source === expected.source && actual.global === expected.global && actual.multiline === expected.multiline && actual.lastIndex === expected.lastIndex && actual.ignoreCase === expected.ignoreCase;
else if (!util.isObject(actual) && !util.isObject(expected)) return actual == expected;
else return objEquiv(actual, expected);
}
function isArguments(object) {
return Object.prototype.toString.call(object) == "[object Arguments]";
}
function objEquiv(a, b) {
if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) return false;
if (a.prototype !== b.prototype) return false;
if (util.isPrimitive(a) || util.isPrimitive(b)) return a === b;
var aIsArgs = isArguments(a), bIsArgs = isArguments(b);
if (aIsArgs && !bIsArgs || !aIsArgs && bIsArgs) return false;
if (aIsArgs) {
a = pSlice.call(a);
b = pSlice.call(b);
return _deepEqual(a, b);
}
var ka = objectKeys(a), kb = objectKeys(b), key, i;
if (ka.length != kb.length) return false;
ka.sort();
kb.sort();
for (i = ka.length - 1; i >= 0; i--) if (ka[i] != kb[i]) return false;
for (i = ka.length - 1; i >= 0; i--) {
key = ka[i];
if (!_deepEqual(a[key], b[key])) return false;
}
return true;
}
assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
if (_deepEqual(actual, expected)) fail(actual, expected, message, "notDeepEqual", assert.notDeepEqual);
};
assert.strictEqual = function strictEqual(actual, expected, message) {
if (actual !== expected) fail(actual, expected, message, "===", assert.strictEqual);
};
assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
if (actual === expected) fail(actual, expected, message, "!==", assert.notStrictEqual);
};
function expectedException(actual, expected) {
if (!actual || !expected) return false;
if (Object.prototype.toString.call(expected) == "[object RegExp]") return expected.test(actual);
else if (actual instanceof expected) return true;
else if (expected.call({}, actual) === true) return true;
return false;
}
function _throws(shouldThrow, block, expected, message) {
var actual;
if (util.isString(expected)) {
message = expected;
expected = null;
}
try {
block();
} catch (e) {
actual = e;
}
message = (expected && expected.name ? " (" + expected.name + ")." : ".") + (message ? " " + message : ".");
if (shouldThrow && !actual) fail(actual, expected, "Missing expected exception" + message);
if (!shouldThrow && expectedException(actual, expected)) fail(actual, expected, "Got unwanted exception" + message);
if (shouldThrow && actual && expected && !expectedException(actual, expected) || !shouldThrow && actual) throw actual;
}
assert.throws = function(block, error, message) {
_throws.apply(this, [true].concat(pSlice.call(arguments)));
};
assert.doesNotThrow = function(block, message) {
_throws.apply(this, [false].concat(pSlice.call(arguments)));
};
assert.ifError = function(err) {
if (err) throw err;
};
var objectKeys = Object.keys || function(obj) {
var keys = [];
for (var key in obj) if (hasOwn.call(obj, key)) keys.push(key);
return keys;
};
}, { "util/": 11 }],
9: [function(require$1, module$1, exports$1) {
if (typeof Object.create === "function") module$1.exports = function inherits(ctor, superCtor) {
ctor.super_ = superCtor;
ctor.prototype = Object.create(superCtor.prototype, { constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
} });
};
else module$1.exports = function inherits(ctor, superCtor) {
ctor.super_ = superCtor;
var TempCtor = function() {};
TempCtor.prototype = superCtor.prototype;
ctor.prototype = new TempCtor();
ctor.prototype.constructor = ctor;
};
}, {}],
10: [function(require$1, module$1, exports$1) {
module$1.exports = function isBuffer(arg) {
return arg && typeof arg === "object" && typeof arg.copy === "function" && typeof arg.fill === "function" && typeof arg.readUInt8 === "function";
};
}, {}],
11: [function(require$1, module$1, exports$1) {
(function(process, global$1) {
var formatRegExp = /%[sdj%]/g;
exports$1.format = function(f) {
if (!isString(f)) {
var objects = [];
for (var i = 0; i < arguments.length; i++) objects.push(inspect(arguments[i]));
return objects.join(" ");
}
var i = 1;
var args = arguments;
var len = args.length;
var str = String(f).replace(formatRegExp, function(x$1) {
if (x$1 === "%%") return "%";
if (i >= len) return x$1;
switch (x$1) {
case "%s": return String(args[i++]);
case "%d": return Number(args[i++]);
case "%j": try {
return JSON.stringify(args[i++]);
} catch (_) {
return "[Circular]";
}
default: return x$1;
}
});
for (var x = args[i]; i < len; x = args[++i]) if (isNull(x) || !isObject(x)) str += " " + x;
else str += " " + inspect(x);
return str;
};
exports$1.deprecate = function(fn, msg) {
if (isUndefined(global$1.process)) return function() {
return exports$1.deprecate(fn, msg).apply(this, arguments);
};
if (process.noDeprecation === true) return fn;
var warned = false;
function deprecated() {
if (!warned) {
if (process.throwDeprecation) throw new Error(msg);
else if (process.traceDeprecation) console.trace(msg);
else console.error(msg);
warned = true;
}
return fn.apply(this, arguments);
}
return deprecated;
};
var debugs = {};
var debugEnviron;
exports$1.debuglog = function(set) {
if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || "";
set = set.toUpperCase();
if (!debugs[set]) if (new RegExp("\\b" + set + "\\b", "i").test(debugEnviron)) {
var pid = process.pid;
debugs[set] = function() {
var msg = exports$1.format.apply(exports$1, arguments);
console.error("%s %d: %s", set, pid, msg);
};
} else debugs[set] = function() {};
return debugs[set];
};
function inspect(obj, opts) {
var ctx = {
seen: [],
stylize: stylizeNoColor
};
if (arguments.length >= 3) ctx.depth = arguments[2];
if (arguments.length >= 4) ctx.colors = arguments[3];
if (isBoolean(opts)) ctx.showHidden = opts;
else if (opts) exports$1._extend(ctx, opts);
if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
if (isUndefined(ctx.depth)) ctx.depth = 2;
if (isUndefined(ctx.colors)) ctx.colors = false;
if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
if (ctx.colors) ctx.stylize = stylizeWithColor;
return formatValue(ctx, obj, ctx.depth);
}
exports$1.inspect = inspect;
inspect.colors = {
"bold": [1, 22],
"italic": [3, 23],
"underline": [4, 24],
"inverse": [7, 27],
"white": [37, 39],
"grey": [90, 39],
"black": [30, 39],
"blue": [34, 39],
"cyan": [36, 39],
"green": [32, 39],
"magenta": [35, 39],
"red": [31, 39],
"yellow": [33, 39]
};
inspect.styles = {
"special": "cyan",
"number": "yellow",
"boolean": "yellow",
"undefined": "grey",
"null": "bold",
"string": "green",
"date": "magenta",
"regexp": "red"
};
function stylizeWithColor(str, styleType) {
var style = inspect.styles[styleType];
if (style) return "\x1B[" + inspect.colors[style][0] + "m" + str + "\x1B[" + inspect.colors[style][1] + "m";
else return str;
}
function stylizeNoColor(str, styleType) {
return str;
}
function arrayToHash(array) {
var hash = {};
array.forEach(function(val, idx) {
hash[val] = true;
});
return hash;
}
function formatValue(ctx, value, recurseTimes) {
if (ctx.customInspect && value && isFunction(value.inspect) && value.inspect !== exports$1.inspect && !(value.constructor && value.constructor.prototype === value)) {
var ret = value.inspect(recurseTimes, ctx);
if (!isString(ret)) ret = formatValue(ctx, ret, recurseTimes);
return ret;
}
var primitive = formatPrimitive(ctx, value);
if (primitive) return primitive;
var keys = Object.keys(value);
var visibleKeys = arrayToHash(keys);
if (ctx.showHidden) keys = Object.getOwnPropertyNames(value);
if (isError(value) && (keys.indexOf("message") >= 0 || keys.indexOf("description") >= 0)) return formatError(value);
if (keys.length === 0) {
if (isFunction(value)) {
var name = value.name ? ": " + value.name : "";
return ctx.stylize("[Function" + name + "]", "special");
}
if (isRegExp(value)) return ctx.stylize(RegExp.prototype.toString.call(value), "regexp");
if (isDate(value)) return ctx.stylize(Date.prototype.toString.call(value), "date");
if (isError(value)) return formatError(value);
}
var base = "", array = false, braces = ["{", "}"];
if (isArray(value)) {
array = true;
braces = ["[", "]"];
}
if (isFunction(value)) base = " [Function" + (value.name ? ": " + value.name : "") + "]";
if (isRegExp(value)) base = " " + RegExp.prototype.toString.call(value);
if (isDate(value)) base = " " + Date.prototype.toUTCString.call(value);
if (isError(value)) base = " " + formatError(value);
if (keys.length === 0 && (!array || value.length == 0)) return braces[0] + base + braces[1];
if (recurseTimes < 0) if (isRegExp(value)) return ctx.stylize(RegExp.prototype.toString.call(value), "regexp");
else return ctx.stylize("[Object]", "special");
ctx.seen.push(value);
var output;
if (array) output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
else output = keys.map(function(key) {
return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
});
ctx.seen.pop();
return reduceToSingleString(output, base, braces);
}
function formatPrimitive(ctx, value) {
if (isUndefined(value)) return ctx.stylize("undefined", "undefined");
if (isString(value)) {
var simple = "'" + JSON.stringify(value).replace(/^"|"$/g, "").replace(/'/g, "\\'").replace(/\\"/g, "\"") + "'";
return ctx.stylize(simple, "string");
}
if (isNumber(value)) return ctx.stylize("" + value, "number");
if (isBoolean(value)) return ctx.stylize("" + value, "boolean");
if (isNull(value)) return ctx.stylize("null", "null");
}
function formatError(value) {
return "[" + Error.prototype.toString.call(value) + "]";
}
function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
var output = [];
for (var i = 0, l = value.length; i < l; ++i) if (hasOwnProperty(value, String(i))) output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));
else output.push("");
keys.forEach(function(key) {
if (!key.match(/^\d+$/)) output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));
});
return output;
}
function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
var name, str, desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
if (desc.get) if (desc.set) str = ctx.stylize("[Getter/Setter]", "special");
else str = ctx.stylize("[Getter]", "special");
else if (desc.set) str = ctx.stylize("[Setter]", "special");
if (!hasOwnProperty(visibleKeys, key)) name = "[" + key + "]";
if (!str) if (ctx.seen.indexOf(desc.value) < 0) {
if (isNull(recurseTimes)) str = formatValue(ctx, desc.value, null);
else str = formatValue(ctx, desc.value, recurseTimes - 1);
if (str.indexOf("\n") > -1) if (array) str = str.split("\n").map(function(line) {
return " " + line;
}).join("\n").substr(2);
else str = "\n" + str.split("\n").map(function(line) {
return " " + line;
}).join("\n");
} else str = ctx.stylize("[Circular]", "special");
if (isUndefined(name)) {
if (array && key.match(/^\d+$/)) return str;
name = JSON.stringify("" + key);
if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
name = name.substr(1, name.length - 2);
name = ctx.stylize(name, "name");
} else {
name = name.replace(/'/g, "\\'").replace(/\\"/g, "\"").replace(/(^"|"$)/g, "'");
name = ctx.stylize(name, "string");
}
}
return name + ": " + str;
}
function reduceToSingleString(output, base, braces) {
var numLinesEst = 0;
if (output.reduce(function(prev, cur) {
numLinesEst++;
if (cur.indexOf("\n") >= 0) numLinesEst++;
return prev + cur.replace(/\u001b\[\d\d?m/g, "").length + 1;
}, 0) > 60) return braces[0] + (base === "" ? "" : base + "\n ") + " " + output.join(",\n ") + " " + braces[1];
return braces[0] + base + " " + output.join(", ") + " " + braces[1];
}
function isArray(ar) {
return Array.isArray(ar);
}
exports$1.isArray = isArray;
function isBoolean(arg) {
return typeof arg === "boolean";
}
exports$1.isBoolean = isBoolean;
function isNull(arg) {
return arg === null;
}
exports$1.isNull = isNull;
function isNullOrUndefined(arg) {
return arg == null;
}
exports$1.isNullOrUndefined = isNullOrUndefined;
function isNumber(arg) {
return typeof arg === "number";
}
exports$1.isNumber = isNumber;
function isString(arg) {
return typeof arg === "string";
}
exports$1.isString = isString;
function isSymbol(arg) {
return typeof arg === "symbol";
}
exports$1.isSymbol = isSymbol;
function isUndefined(arg) {
return arg === void 0;
}
exports$1.isUndefined = isUndefined;
function isRegExp(re) {
return isObject(re) && objectToString(re) === "[object RegExp]";
}
exports$1.isRegExp = isRegExp;
function isObject(arg) {
return typeof arg === "object" && arg !== null;
}
exports$1.isObject = isObject;
function isDate(d) {
return isObject(d) && objectToString(d) === "[object Date]";
}
exports$1.isDate = isDate;
function isError(e) {
return isObject(e) && (objectToString(e) === "[object Error]" || e instanceof Error);
}
exports$1.isError = isError;
function isFunction(arg) {
return typeof arg === "function";
}
exports$1.isFunction = isFunction;
function isPrimitive(arg) {
return arg === null || typeof arg === "boolean" || typeof arg === "number" || typeof arg === "string" || typeof arg === "symbol" || typeof arg === "undefined";
}
exports$1.isPrimitive = isPrimitive;
exports$1.isBuffer = require$1("./support/isBuffer");
function objectToString(o) {
return Object.prototype.toString.call(o);
}
function pad(n) {
return n < 10 ? "0" + n.toString(10) : n.toString(10);
}
var months = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
];
function timestamp() {
var d = /* @__PURE__ */ new Date();
var time = [
pad(d.getHours()),
pad(d.getMinutes()),
pad(d.getSeconds())
].join(":");
return [
d.getDate(),
months[d.getMonth()],
time
].join(" ");
}
exports$1.log = function() {
console.log("%s - %s", timestamp(), exports$1.format.apply(exports$1, arguments));
};
exports$1.inherits = require$1("inherits");
exports$1._extend = function(origin, add) {
if (!add || !isObject(add)) return origin;
var keys = Object.keys(add);
var i = keys.length;
while (i--) origin[keys[i]] = add[keys[i]];
return origin;
};
function hasOwnProperty(obj, prop) {
return Object.prototype.hasOwnProperty.call(obj, prop);
}
}).call(this, require$1("_process"), typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {});
}, {
"./support/isBuffer": 10,
"_process": 14,
"inherits": 9
}],
12: [function(require$1, module$1, exports$1) {}, {}],
13: [function(require$1, module$1, exports$1) {
(function(process) {
function normalizeArray(parts, allowAboveRoot) {
var up = 0;
for (var i = parts.length - 1; i >= 0; i--) {
var last = parts[i];
if (last === ".") parts.splice(i, 1);
else if (last === "..") {
parts.splice(i, 1);
up++;
} else if (up) {
parts.splice(i, 1);
up--;
}
}
if (allowAboveRoot) for (; up--;) parts.unshift("..");
return parts;
}
exports$1.resolve = function() {
var resolvedPath = "", resolvedAbsolute = false;
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
var path = i >= 0 ? arguments[i] : process.cwd();
if (typeof path !== "string") throw new TypeError("Arguments to path.resolve must be strings");
else if (!path) continue;
resolvedPath = path + "/" + resolvedPath;
resolvedAbsolute = path.charAt(0) === "/";
}
resolvedPath = normalizeArray(filter(resolvedPath.split("/"), function(p) {
return !!p;
}), !resolvedAbsolute).join("/");
return (resolvedAbsolute ? "/" : "") + resolvedPath || ".";
};
exports$1.normalize = function(path) {
var isAbsolute = exports$1.isAbsolute(path), trailingSlash = substr(path, -1) === "/";
path = normalizeArray(filter(path.split("/"), function(p) {
return !!p;
}), !isAbsolute).join("/");
if (!path && !isAbsolute) path = ".";
if (path && trailingSlash) path += "/";
return (isAbsolute ? "/" : "") + path;
};
exports$1.isAbsolute = function(path) {
return path.charAt(0) === "/";
};
exports$1.join = function() {
var paths = Array.prototype.slice.call(arguments, 0);
return exports$1.normalize(filter(paths, function(p, index) {
if (typeof p !== "string") throw new TypeError("Arguments to path.join must be strings");
return p;
}).join("/"));
};
exports$1.relative = function(from, to) {
from = exports$1.resolve(from).substr(1);
to = exports$1.resolve(to).substr(1);
function trim(arr) {
var start = 0;
for (; start < arr.length; start++) if (arr[start] !== "") break;
var end = arr.length - 1;
for (; end >= 0; end--) if (arr[end] !== "") break;
if (start > end) return [];
return arr.slice(start, end - start + 1);
}
var fromParts = trim(from.split("/"));
var toParts = trim(to.split("/"));
var length = Math.min(fromParts.length, toParts.length);
var samePartsLength = length;
for (var i = 0; i < length; i++) if (fromParts[i] !== toParts[i]) {
samePartsLength = i;
break;
}
var outputParts = [];
for (var i = samePartsLength; i < fromParts.length; i++) outputParts.push("..");
outputParts = outputParts.concat(toParts.slice(samePartsLength));
return outputParts.join("/");
};
exports$1.sep = "/";
exports$1.delimiter = ":";
exports$1.dirname = function(path) {
if (typeof path !== "string") path = path + "";
if (path.length === 0) return ".";
var code = path.charCodeAt(0);
var hasRoot = code === 47;
var end = -1;
var matchedSlash = true;
for (var i = path.length - 1; i >= 1; --i) {
code = path.charCodeAt(i);
if (code === 47) {
if (!matchedSlash) {
end = i;
break;
}
} else matchedSlash = false;
}
if (end === -1) return hasRoot ? "/" : ".";
if (hasRoot && end === 1) return "/";
return path.slice(0, end);
};
function basename(path) {
if (typeof path !== "string") path = path + "";
var start = 0;
var end = -1;
var matchedSlash = true;
var i;
for (i = path.length - 1; i >= 0; --i) if (path.charCodeAt(i) === 47) {
if (!matchedSlash) {
start = i + 1;
break;
}
} else if (end === -1) {
matchedSlash = false;
end = i + 1;
}
if (end === -1) return "";
return path.slice(start, end);
}
exports$1.basename = function(path, ext) {
var f = basename(path);
if (ext && f.substr(-1 * ext.length) === ext) f = f.substr(0, f.length - ext.length);
return f;
};
exports$1.extname = function(path) {
if (typeof path !== "string") path = path + "";
var startDot = -1;
var startPart = 0;
var end = -1;
var matchedSlash = true;
var preDotState = 0;
for (var i = path.length - 1; i >= 0; --i) {
var code = path.charCodeAt(i);
if (code === 47) {
if (!matchedSlash) {
startPart = i + 1;
break;
}
continue;
}
if (end === -1) {
matchedSlash = false;
end = i + 1;
}
if (code === 46) {
if (startDot === -1) startDot = i;
else if (preDotState !== 1) preDotState = 1;
} else if (startDot !== -1) preDotState = -1;
}
if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) return "";
return path.slice(startDot, end);
};
function filter(xs, f) {
if (xs.filter) return xs.filter(f);
var res = [];
for (var i = 0; i < xs.length; i++) if (f(xs[i], i, xs)) res.push(xs[i]);
return res;
}
var substr = "ab".substr(-1) === "b" ? function(str, start, len) {
return str.substr(start, len);
} : function(str, start, len) {
if (start < 0) start = str.length + start;
return str.substr(start, len);
};
}).call(this, require$1("_process"));
}, { "_process": 14 }],
14: [function(require$1, module$1, exports$1) {
var process = module$1.exports = {};
var cachedSetTimeout;
var cachedClearTimeout;
function defaultSetTimout() {
throw new Error("setTimeout has not been defined");
}
function defaultClearTimeout() {
throw new Error("clearTimeout has not been defined");
}
(function() {
try {
if (typeof setTimeout === "function") cachedSetTimeout = setTimeout;
else cachedSetTimeout = defaultSetTimout;
} catch (e) {
cachedSetTimeout = defaultSetTimout;
}
try {
if (typeof clearTimeout === "function") cachedClearTimeout = clearTimeout;
else cachedClearTimeout = defaultClearTimeout;
} catch (e) {
cachedClearTimeout = defaultClearTimeout;
}
})();
function runTimeout(fun) {
if (cachedSetTimeout === setTimeout) return setTimeout(fun, 0);
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
cachedSetTimeout = setTimeout;
return setTimeout(fun, 0);
}
try {
return cachedSetTimeout(fun, 0);
} catch (e) {
try {
return cachedSetTimeout.call(null, fun, 0);
} catch (e$1) {
return cachedSetTimeout.call(this, fun, 0);
}
}
}
function runClearTimeout(marker) {
if (cachedClearTimeout === clearTimeout) return clearTimeout(marker);
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
cachedClearTimeout = clearTimeout;
return clearTimeout(marker);
}
try {
return cachedClearTimeout(marker);
} catch (e) {
try {
return cachedClearTimeout.call(null, marker);
} catch (e$1) {
return cachedClearTimeout.call(this, marker);
}
}
}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;
function cleanUpNextTick() {
if (!draining || !currentQueue) return;
draining = false;
if (currentQueue.length) queue = currentQueue.concat(queue);
else queueIndex = -1;
if (queue.length) drainQueue();
}
function drainQueue() {
if (draining) return;
var timeout = runTimeout(cleanUpNextTick);
draining = true;
var len = queue.length;
while (len) {
currentQueue = queue;
queue = [];
while (++queueIndex < len) if (currentQueue) currentQueue[queueIndex].run();
queueIndex = -1;
len = queue.length;
}
currentQueue = null;
draining = false;
runClearTimeout(timeout);
}
process.nextTick = function(fun) {
var args = new Array(arguments.length - 1);
if (arguments.length > 1) for (var i = 1; i < arguments.length; i++) args[i - 1] = arguments[i];
queue.push(new Item(fun, args));
if (queue.length === 1 && !draining) runTimeout(drainQueue);
};
function Item(fun, array) {
this.fun = fun;
this.array = array;
}
Item.prototype.run = function() {
this.fun.apply(null, this.array);
};
process.title = "browser";
process.browser = true;
process.env = {};
process.argv = [];
process.version = "";
process.versions = {};
function noop() {}
process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;
process.listeners = function(name) {
return [];
};
process.binding = function(name) {
throw new Error("process.binding is not supported");
};
process.cwd = function() {
return "/";
};
process.chdir = function(dir) {
throw new Error("process.chdir is not supported");
};
process.umask = function() {
return 0;
};
}, {}],
15: [function(require$1, module$1, exports$1) {
var unparse = require$1("escodegen").generate;
module$1.exports = function(ast, vars) {
if (!vars) vars = {};
var FAIL = {};
var result = (function walk(node, scopeVars) {
if (node.type === "Literal") return node.value;
else if (node.type === "UnaryExpression") {
var val = walk(node.argument);
if (node.operator === "+") return +val;
if (node.operator === "-") return -val;
if (node.operator === "~") return ~val;
if (node.operator === "!") return !val;
return FAIL;
} else if (node.type === "ArrayExpression") {
var xs = [];
for (var i = 0, l = node.elements.length; i < l; i++) {
var x = walk(node.elements[i]);
if (x === FAIL) return FAIL;
xs.push(x);
}
return xs;
} else if (node.type === "ObjectExpression") {
var obj = {};
for (var i = 0; i < node.properties.length; i++) {
var prop = node.properties[i];
var value = prop.value === null ? prop.value : walk(prop.value);
if (value === FAIL) return FAIL;
obj[prop.key.value || prop.key.name] = value;
}
return obj;
} else if (node.type === "BinaryExpression" || node.type === "LogicalExpression") {
var l = walk(node.left);
if (l === FAIL) return FAIL;
var r = walk(node.right);
if (r === FAIL) return FAIL;
var op = node.operator;
if (op === "==") return l == r;
if (op === "===") return l === r;
if (op === "!=") return l != r;
if (op === "!==") return l !== r;
if (op === "+") return l + r;
if (op === "-") return l - r;
if (op === "*") return l * r;
if (op === "/") return l / r;
if (op === "%") return l % r;
if (op === "<") return l < r;
if (op === "<=") return l <= r;
if (op === ">") return l > r;
if (op === ">=") return l >= r;
if (op === "|") return l | r;
if (op === "&") return l & r;
if (op === "^") return l ^ r;
if (op === "&&") return l && r;
if (op === "||") return l || r;
return FAIL;
} else if (node.type === "Identifier") if ({}.hasOwnProperty.call(vars, node.name)) return vars[node.name];
else return FAIL;
else if (node.type === "ThisExpression") if ({}.hasOwnProperty.call(vars, "this")) return vars["this"];
else return FAIL;
else if (node.type === "CallExpression") {
var callee = walk(node.callee);
if (callee === FAIL) return FAIL;
if (typeof callee !== "function") return FAIL;
var ctx = node.callee.object ? walk(node.callee.object) : FAIL;
if (ctx === FAIL) ctx = null;
var args = [];
for (var i = 0, l = node.arguments.length; i < l; i++) {
var x = walk(node.arguments[i]);
if (x === FAIL) return FAIL;
args.push(x);
}
return callee.apply(ctx, args);
} else if (node.type === "MemberExpression") {
var obj = walk(node.object);
if (obj === FAIL || typeof obj == "function") return FAIL;
if (node.property.type === "Identifier") return obj[node.property.name];
var prop = walk(node.property);
if (prop === FAIL) return FAIL;
return obj[prop];
} else if (node.type === "ConditionalExpression") {
var val = walk(node.test);
if (val === FAIL) return FAIL;
return val ? walk(node.consequent) : walk(node.alternate);
} else if (node.type === "ExpressionStatement") {
var val = walk(node.expression);
if (val === FAIL) return FAIL;
return val;
} else if (node.type === "ReturnStatement") return walk(node.argument);
else if (node.type === "FunctionExpression") {
var bodies = node.body.body;
var oldVars = {};
Object.keys(vars).forEach(function(element) {
oldVars[element] = vars[element];
});
for (var i = 0; i < node.params.length; i++) {
var key = node.params[i];
if (key.type == "Identifier") vars[key.name] = null;
else return FAIL;
}
for (var i in bodies) if (walk(bodies[i]) === FAIL) return FAIL;
vars = oldVars;
var keys = Object.keys(vars);
var vals = keys.map(function(key$1) {
return vars[key$1];
});
return Function(keys.join(", "), "return " + unparse(node)).apply(null, vals);
} else if (node.type === "TemplateLiteral") {
var str = "";
for (var i = 0; i < node.expressions.length; i++) {
str += walk(node.quasis[i]);
str += walk(node.expressions[i]);
}
str += walk(node.quasis[i]);
return str;
} else if (node.type === "TaggedTemplateExpression") {
var tag = walk(node.tag);
var quasi = node.quasi;
var strings = quasi.quasis.map(walk);
var values = quasi.expressions.map(walk);
return tag.apply(null, [strings].concat(values));
} else if (node.type === "TemplateElement") return node.value.cooked;
else return FAIL;
})(ast);
return result === FAIL ? void 0 : result;
};
}, { "escodegen": 12 }],
"jsonpath": [function(require$1, module$1, exports$1) {
module$1.exports = require$1("./lib/index");
}, { "./lib/index": 5 }]
}, {}, ["jsonpath"])("jsonpath");
});
})))());
var _hoisted_1 = { class: "el-dropdown-link" };
var RunDataJsonActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
__name: "RunDataJsonActions",
props: {
node: {},
paneType: {},
pushRef: {},
distanceFromActive: {},
selectedJsonPath: { default: nonExistingJsonPath },
jsonData: {},
outputIndex: {},
runIndex: {},
execution: {}
},
setup(__props) {
const props = __props;
const popOutWindow = inject(PopOutWindowKey, ref());
const isInPopOutWindow = computed(() => popOutWindow?.value !== void 0);
const ndvStore = useNDVStore();
const workflowsStore = useWorkflowsStore();
const clipboard = useClipboard();
const i18n = useI18n();
const nodeHelpers = useNodeHelpers();
const { activeNode } = ndvStore;
const pinnedData = usePinnedData(activeNode);
const { showToast } = useToast();
const telemetry = useTelemetry();
const route = useRoute();
const isReadOnlyRoute = computed(() => {
return route?.meta?.readOnlyCanvas === true;
});
const noSelection = computed(() => {
return props.selectedJsonPath === nonExistingJsonPath;
});
const normalisedJsonPath = computed(() => {
return noSelection.value ? "[\"\"]" : props.selectedJsonPath;
});
function getJsonValue() {
let selectedValue;
if (noSelection.value) {
const inExecutionsFrame = window !== window.parent && window.parent.location.pathname.includes("/executions");
if (pinnedData.hasData.value && !inExecutionsFrame) selectedValue = clearJsonKey(pinnedData.data.value);
else selectedValue = executionDataToJson(nodeHelpers.getNodeInputData(props.node, props.runIndex, props.outputIndex, "output", NodeConnectionTypes.Main, props.execution));
} else {
const jsonPath = normalisedJsonPath.value.startsWith("$") ? normalisedJsonPath.value : `$${normalisedJsonPath.value}`;
selectedValue = import_jsonpath.default.query(props.jsonData, jsonPath)[0];
}
let value = "";
if (typeof selectedValue === "object") value = JSON.stringify(selectedValue, null, 2);
else value = selectedValue.toString();
return value;
}
function getJsonItemPath() {
const newPath = convertPath(normalisedJsonPath.value);
let startPath = "";
let path = "";
const pathParts = newPath.split("]");
const index = pathParts[0].slice(1);
path = pathParts.slice(1).join("]");
startPath = `$item(${index}).$node["${props.node.name}"].json`;
return {
path,
startPath
};
}
function getJsonParameterPath() {
const path = convertPath(normalisedJsonPath.value).split("]").slice(1).join("]");
let startPath = `$node["${props.node.name}"].json`;
if (props.distanceFromActive === 1) startPath = "$json";
return {
path,
startPath
};
}
function handleCopyClick(commandData) {
let value;
if (commandData.command === "value") {
value = getJsonValue();
showToast({
title: i18n.baseText("runData.copyValue.toast"),
message: "",
type: "success",
duration: 2e3
});
} else {
let startPath = "";
let path = "";
if (commandData.command === "itemPath") {
const jsonItemPath = getJsonItemPath();
startPath = jsonItemPath.startPath;
path = jsonItemPath.path;
showToast({
title: i18n.baseText("runData.copyItemPath.toast"),
message: "",
type: "success",
duration: 2e3
});
} else if (commandData.command === "parameterPath") {
const jsonParameterPath = getJsonParameterPath();
startPath = jsonParameterPath.startPath;
path = jsonParameterPath.path;
showToast({
title: i18n.baseText("runData.copyParameterPath.toast"),
message: "",
type: "success",
duration: 2e3
});
}
if (!path.startsWith("[") && !path.startsWith(".") && path) path += ".";
value = `{{ ${startPath + path} }}`;
}
const copyType = {
value: "selection",
itemPath: "item_path",
parameterPath: "parameter_path"
}[commandData.command];
telemetry.track("User copied ndv data", {
node_type: activeNode?.type,
push_ref: props.pushRef,
run_index: props.runIndex,
view: "json",
copy_type: copyType,
workflow_id: workflowsStore.workflowId,
pane: props.paneType,
in_execution_log: isReadOnlyRoute.value
});
clipboard.copy(value);
}
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", {
class: normalizeClass(_ctx.$style.actionsGroup),
"data-test-id": "ndv-json-actions"
}, [noSelection.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
key: 0,
title: unref(i18n).baseText("runData.copyToClipboard"),
icon: "files",
type: "tertiary",
circle: false,
onClick: _cache[0] || (_cache[0] = ($event) => handleCopyClick({ command: "value" }))
}, null, 8, ["title"])) : (openBlock(), createBlock(unref(ElDropdown), {
key: 1,
trigger: "click",
teleported: !isInPopOutWindow.value,
onCommand: handleCopyClick
}, {
dropdown: withCtx(() => [createVNode(unref(ElDropdownMenu), null, {
default: withCtx(() => [
createVNode(unref(ElDropdownItem), { command: { command: "value" } }, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("runData.copyValue")), 1)]),
_: 1
}),
createVNode(unref(ElDropdownItem), {
command: { command: "itemPath" },
divided: ""
}, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("runData.copyItemPath")), 1)]),
_: 1
}),
createVNode(unref(ElDropdownItem), { command: { command: "parameterPath" } }, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("runData.copyParameterPath")), 1)]),
_: 1
})
]),
_: 1
})]),
default: withCtx(() => [createBaseVNode("span", _hoisted_1, [createVNode(unref(N8nIconButton_default), {
title: unref(i18n).baseText("runData.copyToClipboard"),
icon: "files",
type: "tertiary",
circle: false
}, null, 8, ["title"])])]),
_: 1
}, 8, ["teleported"]))], 2);
};
}
});
var RunDataJsonActions_vue_vue_type_style_index_0_lang_module_default = { actionsGroup: "_actionsGroup_q5z7w_123" };
var RunDataJsonActions_default = /* @__PURE__ */ __plugin_vue_export_helper_default(RunDataJsonActions_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": RunDataJsonActions_vue_vue_type_style_index_0_lang_module_default }]]);
export { RunDataJsonActions_default as default };