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] = ""; 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 };