5510 lines
217 KiB
JavaScript
Executable File
5510 lines
217 KiB
JavaScript
Executable File
import { h$ as commonjsGlobal, bS as getDefaultExportFromCjs, d as defineComponent, hf as nonExistingJsonPath, b$ as inject, r as ref, cb as PopOutWindowKey, x as computed, aY as useNDVStore, a1 as useWorkflowsStore, ca as useClipboard, bL as useNodeHelpers, bJ as usePinnedData, a as useToast, a2 as useRoute, h as createElementBlock, g as openBlock, e as createBlock, l as unref, c as useI18n, aa as _sfc_main$1, w as withCtx, j as createBaseVNode, i as createVNode, H as ElDropdownMenu, I as ElDropdownItem, k as createTextVNode, t as toDisplayString, E as ElDropdown, n as normalizeClass, al as useTelemetry, i0 as clearJsonKey, hc as executionDataToJson, i1 as convertPath, _ as _export_sfc } from "./index--OJ5nhDf.js";
|
||
import { c as commonjsRequire } from "./_commonjs-dynamic-modules-TGKdzP3c.js";
|
||
var jsonpath = { exports: {} };
|
||
/*! jsonpath 1.1.1 */
|
||
var hasRequiredJsonpath;
|
||
function requireJsonpath() {
|
||
if (hasRequiredJsonpath) return jsonpath.exports;
|
||
hasRequiredJsonpath = 1;
|
||
(function(module, exports) {
|
||
(function(f) {
|
||
{
|
||
module.exports = f();
|
||
}
|
||
})(function() {
|
||
return (function e(t, n, r) {
|
||
function s(o2, u) {
|
||
if (!n[o2]) {
|
||
if (!t[o2]) {
|
||
var a = typeof commonjsRequire == "function" && commonjsRequire;
|
||
if (!u && a) return a(o2, true);
|
||
if (i) return i(o2, true);
|
||
var f = new Error("Cannot find module '" + o2 + "'");
|
||
throw f.code = "MODULE_NOT_FOUND", f;
|
||
}
|
||
var l = n[o2] = { exports: {} };
|
||
t[o2][0].call(l.exports, function(e2) {
|
||
var n2 = t[o2][1][e2];
|
||
return s(n2 ? n2 : e2);
|
||
}, l, l.exports, e, t, n, r);
|
||
}
|
||
return n[o2].exports;
|
||
}
|
||
var i = typeof commonjsRequire == "function" && commonjsRequire;
|
||
for (var o = 0; o < r.length; o++) s(r[o]);
|
||
return s;
|
||
})({ "./aesprim": [function(require2, module3, exports3) {
|
||
(function(root, factory) {
|
||
if (typeof exports3 !== "undefined") {
|
||
factory(exports3);
|
||
} else {
|
||
factory(root.esprima = {});
|
||
}
|
||
})(this, function(exports4) {
|
||
var Token, TokenName, FnExprTokens, Syntax, PropertyKind, Messages, Regex, SyntaxTreeDelegate, source, strict, index, lineNumber, lineStart, length, delegate, lookahead, state, extra;
|
||
Token = {
|
||
BooleanLiteral: 1,
|
||
EOF: 2,
|
||
Identifier: 3,
|
||
Keyword: 4,
|
||
NullLiteral: 5,
|
||
NumericLiteral: 6,
|
||
Punctuator: 7,
|
||
StringLiteral: 8,
|
||
RegularExpression: 9
|
||
};
|
||
TokenName = {};
|
||
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",
|
||
// assignment operators
|
||
"=",
|
||
"+=",
|
||
"-=",
|
||
"*=",
|
||
"/=",
|
||
"%=",
|
||
"<<=",
|
||
">>=",
|
||
">>>=",
|
||
"&=",
|
||
"|=",
|
||
"^=",
|
||
",",
|
||
// binary/unary operators
|
||
"+",
|
||
"-",
|
||
"*",
|
||
"/",
|
||
"%",
|
||
"++",
|
||
"--",
|
||
"<<",
|
||
">>",
|
||
">>>",
|
||
"&",
|
||
"|",
|
||
"^",
|
||
"!",
|
||
"~",
|
||
"&&",
|
||
"||",
|
||
"?",
|
||
":",
|
||
"===",
|
||
"==",
|
||
">=",
|
||
"<=",
|
||
"<",
|
||
">",
|
||
"!=",
|
||
"!=="
|
||
];
|
||
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: new RegExp("[ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]"),
|
||
NonAsciiIdentifierPart: new RegExp("[ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮ̀-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁ҃-҇Ҋ-ԧԱ-Ֆՙա-և֑-ׇֽֿׁׂׅׄא-תװ-ײؐ-ؚؠ-٩ٮ-ۓە-ۜ۟-۪ۨ-ۼۿܐ-݊ݍ-ޱ߀-ߵߺࠀ-࠭ࡀ-࡛ࢠࢢ-ࢬࣤ-ࣾऀ-ॣ०-९ॱ-ॷॹ-ॿঁ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗড়ঢ়য়-ৣ০-ৱਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-ੵઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૯ଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ଼-ୄେୈୋ-୍ୖୗଡ଼ଢ଼ୟ-ୣ୦-୯ୱஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-்ௐௗ௦-௯ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-హఽ-ౄె-ైొ-్ౕౖౘౙౠ-ౣ౦-౯ಂಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೞೠ-ೣ೦-೯ೱೲംഃഅ-ഌഎ-ഐഒ-ഺഽ-ൄെ-ൈൊ-ൎൗൠ-ൣ൦-൯ൺ-ൿංඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟෲෳก-ฺเ-๎๐-๙ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ູົ-ຽເ-ໄໆ່-ໍ໐-໙ໜ-ໟༀ༘༙༠-༩༹༵༷༾-ཇཉ-ཬཱ-྄྆-ྗྙ-ྼ࿆က-၉ၐ-ႝႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፟ᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-᜔ᜠ-᜴ᝀ-ᝓᝠ-ᝬᝮ-ᝰᝲᝳក-៓ៗៜ៝០-៩᠋-᠍᠐-᠙ᠠ-ᡷᢀ-ᢪᢰ-ᣵᤀ-ᤜᤠ-ᤫᤰ-᤻᥆-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉ᧐-᧙ᨀ-ᨛᨠ-ᩞ᩠-᩿᩼-᪉᪐-᪙ᪧᬀ-ᭋ᭐-᭙᭫-᭳ᮀ-᯳ᰀ-᰷᱀-᱉ᱍ-ᱽ᳐-᳔᳒-ᳶᴀ-ᷦ᷼-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ‿⁀⁔ⁱⁿₐ-ₜ⃐-⃥⃜⃡-⃰ℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯ⵿-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⷠ-ⷿⸯ々-〇〡-〯〱-〵〸-〼ぁ-ゖ゙゚ゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘫꙀ-꙯ꙴ-꙽ꙿ-ꚗꚟ-꛱ꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠧꡀ-ꡳꢀ-꣄꣐-꣙꣠-ꣷꣻ꤀-꤭ꤰ-꥓ꥠ-ꥼꦀ-꧀ꧏ-꧙ꨀ-ꨶꩀ-ꩍ꩐-꩙ꩠ-ꩶꩺꩻꪀ-ꫂꫛ-ꫝꫠ-ꫯꫲ-꫶ꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯪ꯬꯭꯰-꯹가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻ︀-️︠-︦︳︴﹍-﹏ﹰ-ﹴﹶ-ﻼ0-9A-Z_a-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]")
|
||
};
|
||
function assert(condition, message) {
|
||
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 || // $ (dollar) and _ (underscore)
|
||
ch >= 65 && ch <= 90 || // A..Z
|
||
ch >= 97 && ch <= 122 || // a..z
|
||
ch === 92 || // \ (backslash)
|
||
ch >= 128 && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch));
|
||
}
|
||
function isIdentifierPart(ch) {
|
||
return ch === 36 || ch === 95 || // $ (dollar) and _ (underscore)
|
||
ch >= 65 && ch <= 90 || // A..Z
|
||
ch >= 97 && ch <= 122 || // a..z
|
||
ch >= 48 && ch <= 57 || // 0..9
|
||
ch === 92 || // \ (backslash)
|
||
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, loc, ch, comment;
|
||
start = index - offset;
|
||
loc = {
|
||
start: {
|
||
line: lineNumber,
|
||
column: index - lineStart - offset
|
||
}
|
||
};
|
||
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;
|
||
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, id;
|
||
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, ch;
|
||
start = index++;
|
||
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, id, type;
|
||
start = index;
|
||
id = source.charCodeAt(index) === 92 ? getEscapedIdentifier() : getIdentifier();
|
||
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) {
|
||
// Check for most common single-character punctuators.
|
||
case 46:
|
||
// . dot
|
||
case 40:
|
||
// ( open bracket
|
||
case 41:
|
||
// ) close bracket
|
||
case 59:
|
||
// ; semicolon
|
||
case 44:
|
||
// , comma
|
||
case 123:
|
||
// { open curly brace
|
||
case 125:
|
||
// } close curly brace
|
||
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;
|
||
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, startLineStart;
|
||
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, str, classMarker, terminated, body;
|
||
ch = source[index];
|
||
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;
|
||
str = "";
|
||
flags = "";
|
||
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
|
||
};
|
||
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, checkToken;
|
||
prevToken = extra.tokens[extra.tokens.length - 1];
|
||
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;
|
||
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, line, start;
|
||
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) {
|
||
var type = operator === "||" || operator === "&&" ? Syntax.LogicalExpression : Syntax.BinaryExpression;
|
||
return {
|
||
type,
|
||
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, line, start, found;
|
||
pos = index;
|
||
line = lineNumber;
|
||
start = lineStart;
|
||
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, index2) {
|
||
assert(index2 < args.length, "Message reference must be in range");
|
||
return args[index2];
|
||
}
|
||
);
|
||
if (typeof token.lineNumber === "number") {
|
||
error = new Error("Line " + token.lineNumber + ": " + msg);
|
||
error.index = token.start;
|
||
error.lineNumber = token.lineNumber;
|
||
error.column = token.start - lineStart + 1;
|
||
} else {
|
||
error = 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;
|
||
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, body, startToken;
|
||
previousStrict = strict;
|
||
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;
|
||
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, key, id, value, param, startToken;
|
||
token = lookahead;
|
||
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;
|
||
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;
|
||
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;
|
||
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;
|
||
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;
|
||
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;
|
||
}
|
||
return prec;
|
||
}
|
||
function parseBinaryExpression() {
|
||
var marker, markers, expr, token, prec, stack, right, operator, left, i;
|
||
marker = lookahead;
|
||
left = parseUnaryExpression();
|
||
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;
|
||
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, left, right, node, startToken;
|
||
token = lookahead;
|
||
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;
|
||
startToken = lookahead;
|
||
expect("{");
|
||
block = parseStatementList();
|
||
expect("}");
|
||
return delegate.markEnd(delegate.createBlockStatement(block), startToken);
|
||
}
|
||
function parseVariableIdentifier() {
|
||
var token, startToken;
|
||
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;
|
||
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;
|
||
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;
|
||
startToken = lookahead;
|
||
token = lex();
|
||
declarations = parseVariableDeclarationList();
|
||
return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value), startToken);
|
||
}
|
||
function parseForStatement() {
|
||
var init, test, update, left, right, body, oldInIteration;
|
||
init = test = update = null;
|
||
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;
|
||
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;
|
||
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);
|
||
}
|
||
}
|
||
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);
|
||
}
|
||
}
|
||
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;
|
||
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;
|
||
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;
|
||
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();
|
||
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, token, tokens;
|
||
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 = {};
|
||
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;
|
||
}
|
||
token = lex();
|
||
while (lookahead.type !== Token.EOF) {
|
||
try {
|
||
token = lex();
|
||
} catch (lexError) {
|
||
token = lookahead;
|
||
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;
|
||
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;
|
||
}
|
||
exports4.version = "1.2.2";
|
||
exports4.tokenize = tokenize;
|
||
exports4.parse = parse;
|
||
exports4.Syntax = (function() {
|
||
var name, types = {};
|
||
if (typeof Object.create === "function") {
|
||
types = /* @__PURE__ */ 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(require2, module3, exports3) {
|
||
(function(process) {
|
||
var parser = (function() {
|
||
var parser2 = {
|
||
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 self2 = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 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;
|
||
token = self2.lexer.lex() || EOF;
|
||
if (typeof token !== "number") {
|
||
token = self2.symbols_[token] || token;
|
||
}
|
||
return token;
|
||
}
|
||
var symbol, 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;
|
||
{
|
||
yyleng = this.lexer.yyleng;
|
||
yytext = this.lexer.yytext;
|
||
yylineno = this.lexer.yylineno;
|
||
yyloc = this.lexer.yylloc;
|
||
}
|
||
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;
|
||
}
|
||
};
|
||
var lexer = /* @__PURE__ */ (function() {
|
||
var lexer2 = {
|
||
EOF: 1,
|
||
parseError: function parseError(str, hash) {
|
||
if (this.yy.parser) {
|
||
this.yy.parser.parseError(str, hash);
|
||
} else {
|
||
throw new Error(str);
|
||
}
|
||
},
|
||
// resets the lexer, sets new input
|
||
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;
|
||
},
|
||
// consumes and returns one char from the input
|
||
input: function() {
|
||
var ch = this._input[0];
|
||
this.yytext += ch;
|
||
this.yyleng++;
|
||
this.offset++;
|
||
this.match += ch;
|
||
this.matched += ch;
|
||
var lines = ch.match(/(?:\r\n?|\n).*/g);
|
||
if (lines) {
|
||
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;
|
||
},
|
||
// unshifts one char (or a string) into the input
|
||
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;
|
||
},
|
||
// When called from action, caches matched text and appends it on next action
|
||
more: function() {
|
||
this._more = true;
|
||
return this;
|
||
},
|
||
// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
|
||
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;
|
||
},
|
||
// retain first n characters of the match
|
||
less: function(n) {
|
||
this.unput(this.match.slice(n));
|
||
},
|
||
// displays already matched input, i.e. for error messages
|
||
pastInput: function() {
|
||
var past = this.matched.substr(0, this.matched.length - this.match.length);
|
||
return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
|
||
},
|
||
// displays upcoming input, i.e. for error messages
|
||
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, "");
|
||
},
|
||
// displays the character position where the lexing error occurred, i.e. for error messages
|
||
showPosition: function() {
|
||
var pre = this.pastInput();
|
||
var c = new Array(pre.length + 1).join("-");
|
||
return pre + this.upcomingInput() + "\n" + c + "^";
|
||
},
|
||
// test the lexed token: return FALSE when not a match, otherwise return token
|
||
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;
|
||
},
|
||
// return next match in input
|
||
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
|
||
});
|
||
}
|
||
},
|
||
// return next match that has a token
|
||
lex: function lex() {
|
||
var r = this.next();
|
||
if (r) {
|
||
return r;
|
||
} else {
|
||
return this.lex();
|
||
}
|
||
},
|
||
// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
|
||
begin: function begin(condition) {
|
||
this.conditionStack.push(condition);
|
||
},
|
||
// pop the previously active lexer condition state off the condition stack
|
||
popState: function popState() {
|
||
var n = this.conditionStack.length - 1;
|
||
if (n > 0) {
|
||
return this.conditionStack.pop();
|
||
} else {
|
||
return this.conditionStack[0];
|
||
}
|
||
},
|
||
// produce the lexer rule set which is active for the currently active lexer condition state
|
||
_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;
|
||
}
|
||
},
|
||
// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
|
||
topState: function topState(n) {
|
||
n = this.conditionStack.length - 1 - Math.abs(n || 0);
|
||
if (n >= 0) {
|
||
return this.conditionStack[n];
|
||
} else {
|
||
return "INITIAL";
|
||
}
|
||
},
|
||
// alias for begin(condition)
|
||
pushState: function pushState(condition) {
|
||
this.begin(condition);
|
||
},
|
||
// return the number of states currently on the stack
|
||
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 } }
|
||
};
|
||
return lexer2;
|
||
})();
|
||
parser2.lexer = lexer;
|
||
function Parser() {
|
||
this.yy = {};
|
||
}
|
||
Parser.prototype = parser2;
|
||
parser2.Parser = Parser;
|
||
return new Parser();
|
||
})();
|
||
if (typeof require2 !== "undefined" && typeof exports3 !== "undefined") {
|
||
exports3.parser = parser;
|
||
exports3.Parser = parser.Parser;
|
||
exports3.parse = function() {
|
||
return parser.parse.apply(parser, arguments);
|
||
};
|
||
exports3.main = function commonjsMain(args) {
|
||
if (!args[1]) {
|
||
console.log("Usage: " + args[0] + " FILE");
|
||
process.exit(1);
|
||
}
|
||
var source = require2("fs").readFileSync(require2("path").normalize(args[1]), "utf8");
|
||
return exports3.parser.parse(source);
|
||
};
|
||
if (typeof module3 !== "undefined" && require2.main === module3) {
|
||
exports3.main(process.argv.slice(1));
|
||
}
|
||
}
|
||
}).call(this, require2("_process"));
|
||
}, { "_process": 14, "fs": 12, "path": 13 }], 2: [function(require2, module3, exports3) {
|
||
module3.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(require2, module3, exports3) {
|
||
var dict = require2("./dict");
|
||
var fs = require2("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(require2.resolve("../include/module.js"));
|
||
grammar.actionInclude = fs.readFileSync(require2.resolve("../include/action.js"));
|
||
}
|
||
module3.exports = grammar;
|
||
}, { "./dict": 2, "fs": 12 }], 4: [function(require2, module3, exports3) {
|
||
var aesprim = require2("./aesprim");
|
||
var slice = require2("./slice");
|
||
var _evaluate = require2("static-eval");
|
||
var _uniq = require2("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, ref2) {
|
||
return key == ref2;
|
||
}),
|
||
"subscript-child-numeric_literal": _descend(function(key, value, ref2) {
|
||
return key === ref2;
|
||
}),
|
||
"member-child-numeric_literal": _descend(function(key, value, ref2) {
|
||
return String(key) === String(ref2);
|
||
}),
|
||
"subscript-descendant-numeric_literal": _traverse(function(key, value, ref2) {
|
||
return key === ref2;
|
||
}),
|
||
"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(component2) {
|
||
var _component = { operation: "subscript", scope: "child", expression: component2.expression };
|
||
var handler = this.resolve(_component);
|
||
var _results = handler(_component, partial);
|
||
if (_results) {
|
||
results = results.concat(_results);
|
||
}
|
||
}, this);
|
||
return unique(results);
|
||
},
|
||
"subscript-descendant-union": function(component, partial, count) {
|
||
var jp2 = require2("..");
|
||
var self2 = this;
|
||
var results = [];
|
||
var nodes = jp2.nodes(partial, "$..*").slice(1);
|
||
nodes.forEach(function(node) {
|
||
if (results.length >= count) return;
|
||
component.expression.value.forEach(function(component2) {
|
||
var _component = { operation: "subscript", scope: "child", expression: component2.expression };
|
||
var handler = self2.resolve(_component);
|
||
var _results = handler(_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) {
|
||
var exp = component.expression.value.slice(1, -1);
|
||
return eval_recurse(partial, exp, "$[{{value}}]");
|
||
},
|
||
"member-child-script_expression": function(component, partial) {
|
||
var exp = component.expression.value.slice(1, -1);
|
||
return eval_recurse(partial, exp, "$.{{value}}");
|
||
},
|
||
"member-descendant-script_expression": function(component, partial) {
|
||
var exp = component.expression.value.slice(1, -1);
|
||
return eval_recurse(partial, exp, "$..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 jp2 = require2("./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 = jp2.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, ref2, passable, count) {
|
||
var value = partial.value;
|
||
var path = partial.path;
|
||
var results = [];
|
||
var descend = function(value2, path2) {
|
||
if (is_array(value2)) {
|
||
value2.forEach(function(element, index) {
|
||
if (results.length >= count) {
|
||
return;
|
||
}
|
||
if (passable(index, element, ref2)) {
|
||
results.push({ path: path2.concat(index), value: element });
|
||
}
|
||
});
|
||
value2.forEach(function(element, index) {
|
||
if (results.length >= count) {
|
||
return;
|
||
}
|
||
if (recurse) {
|
||
descend(element, path2.concat(index));
|
||
}
|
||
});
|
||
} else if (is_object(value2)) {
|
||
this.keys(value2).forEach(function(k) {
|
||
if (results.length >= count) {
|
||
return;
|
||
}
|
||
if (passable(k, value2[k], ref2)) {
|
||
results.push({ path: path2.concat(k), value: value2[k] });
|
||
}
|
||
});
|
||
this.keys(value2).forEach(function(k) {
|
||
if (results.length >= count) {
|
||
return;
|
||
}
|
||
if (recurse) {
|
||
descend(value2[k], path2.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;
|
||
}
|
||
module3.exports = Handlers;
|
||
}, { "..": "jsonpath", "./aesprim": "./aesprim", "./index": 5, "./slice": 7, "static-eval": 15, "underscore": 12 }], 5: [function(require2, module3, exports3) {
|
||
var assert = require2("assert");
|
||
var dict = require2("./dict");
|
||
var Parser = require2("./parser");
|
||
var Handlers = require2("./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));
|
||
var val = node.value = fn.call(obj, parent[key]);
|
||
parent[key] = val;
|
||
}, 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 self2 = 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(path2, value2) {
|
||
var key = path2.pop();
|
||
var node = self2.value(obj, path2);
|
||
if (!node) {
|
||
setValue(path2.concat(), typeof key === "string" ? {} : []);
|
||
node = self2.value(obj, path2);
|
||
}
|
||
node[key] = value2;
|
||
};
|
||
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");
|
||
var results = this.nodes(obj, string, count).map(function(r) {
|
||
return r.value;
|
||
});
|
||
return results;
|
||
};
|
||
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");
|
||
var results = this.nodes(obj, string, count).map(function(r) {
|
||
return r.path;
|
||
});
|
||
return results;
|
||
};
|
||
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;
|
||
module3.exports = instance;
|
||
}, { "./dict": 2, "./handlers": 4, "./parser": 6, "assert": 8 }], 6: [function(require2, module3, exports3) {
|
||
var grammar = require2("./grammar");
|
||
var gparser = require2("../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;
|
||
module3.exports = Parser;
|
||
}, { "../generated/parser": 1, "./grammar": 3 }], 7: [function(require2, module3, exports3) {
|
||
module3.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(require2, module3, exports3) {
|
||
var util = require2("util/");
|
||
var pSlice = Array.prototype.slice;
|
||
var hasOwn = Object.prototype.hasOwnProperty;
|
||
var assert = module3.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 = 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(self2) {
|
||
return truncate(JSON.stringify(self2.actual, replacer), 128) + " " + self2.operator + " " + truncate(JSON.stringify(self2.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(require2, module3, exports3) {
|
||
if (typeof Object.create === "function") {
|
||
module3.exports = function inherits(ctor, superCtor) {
|
||
ctor.super_ = superCtor;
|
||
ctor.prototype = Object.create(superCtor.prototype, {
|
||
constructor: {
|
||
value: ctor,
|
||
enumerable: false,
|
||
writable: true,
|
||
configurable: true
|
||
}
|
||
});
|
||
};
|
||
} else {
|
||
module3.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(require2, module3, exports3) {
|
||
module3.exports = function isBuffer(arg) {
|
||
return arg && typeof arg === "object" && typeof arg.copy === "function" && typeof arg.fill === "function" && typeof arg.readUInt8 === "function";
|
||
};
|
||
}, {}], 11: [function(require2, module3, exports3) {
|
||
(function(process, global2) {
|
||
var formatRegExp = /%[sdj%]/g;
|
||
exports3.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(x2) {
|
||
if (x2 === "%%") return "%";
|
||
if (i >= len) return x2;
|
||
switch (x2) {
|
||
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 x2;
|
||
}
|
||
});
|
||
for (var x = args[i]; i < len; x = args[++i]) {
|
||
if (isNull(x) || !isObject(x)) {
|
||
str += " " + x;
|
||
} else {
|
||
str += " " + inspect(x);
|
||
}
|
||
}
|
||
return str;
|
||
};
|
||
exports3.deprecate = function(fn, msg) {
|
||
if (isUndefined(global2.process)) {
|
||
return function() {
|
||
return exports3.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;
|
||
exports3.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 = exports3.format.apply(exports3, 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) {
|
||
exports3._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);
|
||
}
|
||
exports3.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",
|
||
// "name": intentionally not styling
|
||
"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) && // Filter out the util module, it's inspect function is special
|
||
value.inspect !== exports3.inspect && // Also filter out any prototype objects using the circular check.
|
||
!(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)) {
|
||
var n = value.name ? ": " + value.name : "";
|
||
base = " [Function" + n + "]";
|
||
}
|
||
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;
|
||
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 length = output.reduce(function(prev, cur) {
|
||
if (cur.indexOf("\n") >= 0) ;
|
||
return prev + cur.replace(/\u001b\[\d\d?m/g, "").length + 1;
|
||
}, 0);
|
||
if (length > 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);
|
||
}
|
||
exports3.isArray = isArray;
|
||
function isBoolean(arg) {
|
||
return typeof arg === "boolean";
|
||
}
|
||
exports3.isBoolean = isBoolean;
|
||
function isNull(arg) {
|
||
return arg === null;
|
||
}
|
||
exports3.isNull = isNull;
|
||
function isNullOrUndefined(arg) {
|
||
return arg == null;
|
||
}
|
||
exports3.isNullOrUndefined = isNullOrUndefined;
|
||
function isNumber(arg) {
|
||
return typeof arg === "number";
|
||
}
|
||
exports3.isNumber = isNumber;
|
||
function isString(arg) {
|
||
return typeof arg === "string";
|
||
}
|
||
exports3.isString = isString;
|
||
function isSymbol(arg) {
|
||
return typeof arg === "symbol";
|
||
}
|
||
exports3.isSymbol = isSymbol;
|
||
function isUndefined(arg) {
|
||
return arg === void 0;
|
||
}
|
||
exports3.isUndefined = isUndefined;
|
||
function isRegExp(re) {
|
||
return isObject(re) && objectToString(re) === "[object RegExp]";
|
||
}
|
||
exports3.isRegExp = isRegExp;
|
||
function isObject(arg) {
|
||
return typeof arg === "object" && arg !== null;
|
||
}
|
||
exports3.isObject = isObject;
|
||
function isDate(d) {
|
||
return isObject(d) && objectToString(d) === "[object Date]";
|
||
}
|
||
exports3.isDate = isDate;
|
||
function isError(e) {
|
||
return isObject(e) && (objectToString(e) === "[object Error]" || e instanceof Error);
|
||
}
|
||
exports3.isError = isError;
|
||
function isFunction(arg) {
|
||
return typeof arg === "function";
|
||
}
|
||
exports3.isFunction = isFunction;
|
||
function isPrimitive(arg) {
|
||
return arg === null || typeof arg === "boolean" || typeof arg === "number" || typeof arg === "string" || typeof arg === "symbol" || // ES6 symbol
|
||
typeof arg === "undefined";
|
||
}
|
||
exports3.isPrimitive = isPrimitive;
|
||
exports3.isBuffer = require2("./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(" ");
|
||
}
|
||
exports3.log = function() {
|
||
console.log("%s - %s", timestamp(), exports3.format.apply(exports3, arguments));
|
||
};
|
||
exports3.inherits = require2("inherits");
|
||
exports3._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, require2("_process"), typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {});
|
||
}, { "./support/isBuffer": 10, "_process": 14, "inherits": 9 }], 12: [function(require2, module3, exports3) {
|
||
}, {}], 13: [function(require2, module3, exports3) {
|
||
(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--; up) {
|
||
parts.unshift("..");
|
||
}
|
||
}
|
||
return parts;
|
||
}
|
||
exports3.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 || ".";
|
||
};
|
||
exports3.normalize = function(path) {
|
||
var isAbsolute = exports3.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;
|
||
};
|
||
exports3.isAbsolute = function(path) {
|
||
return path.charAt(0) === "/";
|
||
};
|
||
exports3.join = function() {
|
||
var paths = Array.prototype.slice.call(arguments, 0);
|
||
return exports3.normalize(filter(paths, function(p, index) {
|
||
if (typeof p !== "string") {
|
||
throw new TypeError("Arguments to path.join must be strings");
|
||
}
|
||
return p;
|
||
}).join("/"));
|
||
};
|
||
exports3.relative = function(from, to) {
|
||
from = exports3.resolve(from).substr(1);
|
||
to = exports3.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("/");
|
||
};
|
||
exports3.sep = "/";
|
||
exports3.delimiter = ":";
|
||
exports3.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);
|
||
}
|
||
exports3.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;
|
||
};
|
||
exports3.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 || // We saw a non-dot character immediately before the dot
|
||
preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
|
||
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, require2("_process"));
|
||
}, { "_process": 14 }], 14: [function(require2, module3, exports3) {
|
||
var process = module3.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 (e2) {
|
||
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 (e2) {
|
||
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(require2, module3, exports3) {
|
||
var unparse = require2("escodegen").generate;
|
||
module3.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(key2) {
|
||
return vars[key2];
|
||
});
|
||
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(require2, module3, exports3) {
|
||
module3.exports = require2("./lib/index");
|
||
}, { "./lib/index": 5 }] }, {}, ["jsonpath"])("jsonpath");
|
||
});
|
||
})(jsonpath);
|
||
return jsonpath.exports;
|
||
}
|
||
var jsonpathExports = requireJsonpath();
|
||
const jp = /* @__PURE__ */ getDefaultExportFromCjs(jsonpathExports);
|
||
const _hoisted_1 = { class: "el-dropdown-link" };
|
||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||
__name: "RunDataJsonActions",
|
||
props: {
|
||
node: {},
|
||
paneType: {},
|
||
pushRef: {},
|
||
distanceFromActive: {},
|
||
selectedJsonPath: { default: nonExistingJsonPath },
|
||
jsonData: {},
|
||
outputIndex: {},
|
||
runIndex: {}
|
||
},
|
||
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 = jp.query(props.jsonData, `$${normalisedJsonPath.value}`)[0];
|
||
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)
|
||
);
|
||
}
|
||
}
|
||
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 newPath = convertPath(normalisedJsonPath.value);
|
||
const path = newPath.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
|
||
});
|
||
void 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(_sfc_main$1), {
|
||
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(_sfc_main$1), {
|
||
title: unref(i18n).baseText("runData.copyToClipboard"),
|
||
icon: "files",
|
||
type: "tertiary",
|
||
circle: false
|
||
}, null, 8, ["title"])
|
||
])
|
||
]),
|
||
_: 1
|
||
}, 8, ["teleported"]))
|
||
], 2);
|
||
};
|
||
}
|
||
});
|
||
const actionsGroup = "_actionsGroup_hbcos_123";
|
||
const style0 = {
|
||
actionsGroup
|
||
};
|
||
const cssModules = {
|
||
"$style": style0
|
||
};
|
||
const RunDataJsonActions = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules]]);
|
||
export {
|
||
RunDataJsonActions as default
|
||
};
|