{"version":3,"file":"index-browser-umd.min.cjs","sources":["../node_modules/.pnpm/jsep@1.4.0/node_modules/jsep/dist/jsep.js","../node_modules/.pnpm/@jsep-plugin+regex@1.0.4_jsep@1.4.0/node_modules/@jsep-plugin/regex/dist/index.js","../node_modules/.pnpm/@jsep-plugin+assignment@1.3.0_jsep@1.4.0/node_modules/@jsep-plugin/assignment/dist/index.js","../src/Safe-Script.js","../src/utils.js","../src/jsonpath.js","../src/jsonpath-browser.js"],"sourcesContent":["/**\n * @implements {IHooks}\n */\nclass Hooks {\n\t/**\n\t * @callback HookCallback\n\t * @this {*|Jsep} this\n\t * @param {Jsep} env\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given callback to the list of callbacks for the given hook.\n\t *\n\t * The callback will be invoked when the hook it is registered for is run.\n\t *\n\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t *\n\t * @param {string|object} name The name of the hook, or an object of callbacks keyed by name\n\t * @param {HookCallback|boolean} callback The callback function which is given environment variables.\n\t * @param {?boolean} [first=false] Will add the hook to the top of the list (defaults to the bottom)\n\t * @public\n\t */\n\tadd(name, callback, first) {\n\t\tif (typeof arguments[0] != 'string') {\n\t\t\t// Multiple hook callbacks, keyed by name\n\t\t\tfor (let name in arguments[0]) {\n\t\t\t\tthis.add(name, arguments[0][name], arguments[1]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t(Array.isArray(name) ? name : [name]).forEach(function (name) {\n\t\t\t\tthis[name] = this[name] || [];\n\n\t\t\t\tif (callback) {\n\t\t\t\t\tthis[name][first ? 'unshift' : 'push'](callback);\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t}\n\n\t/**\n\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t *\n\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t *\n\t * @param {string} name The name of the hook.\n\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t * @public\n\t */\n\trun(name, env) {\n\t\tthis[name] = this[name] || [];\n\t\tthis[name].forEach(function (callback) {\n\t\t\tcallback.call(env && env.context ? env.context : env, env);\n\t\t});\n\t}\n}\n\n/**\n * @implements {IPlugins}\n */\nclass Plugins {\n\tconstructor(jsep) {\n\t\tthis.jsep = jsep;\n\t\tthis.registered = {};\n\t}\n\n\t/**\n\t * @callback PluginSetup\n\t * @this {Jsep} jsep\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given plugin(s) to the registry\n\t *\n\t * @param {object} plugins\n\t * @param {string} plugins.name The name of the plugin\n\t * @param {PluginSetup} plugins.init The init function\n\t * @public\n\t */\n\tregister(...plugins) {\n\t\tplugins.forEach((plugin) => {\n\t\t\tif (typeof plugin !== 'object' || !plugin.name || !plugin.init) {\n\t\t\t\tthrow new Error('Invalid JSEP plugin format');\n\t\t\t}\n\t\t\tif (this.registered[plugin.name]) {\n\t\t\t\t// already registered. Ignore.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tplugin.init(this.jsep);\n\t\t\tthis.registered[plugin.name] = plugin;\n\t\t});\n\t}\n}\n\n//     JavaScript Expression Parser (JSEP) 1.4.0\n\nclass Jsep {\n\t/**\n\t * @returns {string}\n\t */\n\tstatic get version() {\n\t\t// To be filled in by the template\n\t\treturn '1.4.0';\n\t}\n\n\t/**\n\t * @returns {string}\n\t */\n\tstatic toString() {\n\t\treturn 'JavaScript Expression Parser (JSEP) v' + Jsep.version;\n\t};\n\n\t// ==================== CONFIG ================================\n\t/**\n\t * @method addUnaryOp\n\t * @param {string} op_name The name of the unary op to add\n\t * @returns {Jsep}\n\t */\n\tstatic addUnaryOp(op_name) {\n\t\tJsep.max_unop_len = Math.max(op_name.length, Jsep.max_unop_len);\n\t\tJsep.unary_ops[op_name] = 1;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method jsep.addBinaryOp\n\t * @param {string} op_name The name of the binary op to add\n\t * @param {number} precedence The precedence of the binary op (can be a float). Higher number = higher precedence\n\t * @param {boolean} [isRightAssociative=false] whether operator is right-associative\n\t * @returns {Jsep}\n\t */\n\tstatic addBinaryOp(op_name, precedence, isRightAssociative) {\n\t\tJsep.max_binop_len = Math.max(op_name.length, Jsep.max_binop_len);\n\t\tJsep.binary_ops[op_name] = precedence;\n\t\tif (isRightAssociative) {\n\t\t\tJsep.right_associative.add(op_name);\n\t\t}\n\t\telse {\n\t\t\tJsep.right_associative.delete(op_name);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addIdentifierChar\n\t * @param {string} char The additional character to treat as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic addIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.add(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addLiteral\n\t * @param {string} literal_name The name of the literal to add\n\t * @param {*} literal_value The value of the literal\n\t * @returns {Jsep}\n\t */\n\tstatic addLiteral(literal_name, literal_value) {\n\t\tJsep.literals[literal_name] = literal_value;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeUnaryOp\n\t * @param {string} op_name The name of the unary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeUnaryOp(op_name) {\n\t\tdelete Jsep.unary_ops[op_name];\n\t\tif (op_name.length === Jsep.max_unop_len) {\n\t\t\tJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllUnaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllUnaryOps() {\n\t\tJsep.unary_ops = {};\n\t\tJsep.max_unop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeIdentifierChar\n\t * @param {string} char The additional character to stop treating as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic removeIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.delete(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeBinaryOp\n\t * @param {string} op_name The name of the binary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeBinaryOp(op_name) {\n\t\tdelete Jsep.binary_ops[op_name];\n\n\t\tif (op_name.length === Jsep.max_binop_len) {\n\t\t\tJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\t\t}\n\t\tJsep.right_associative.delete(op_name);\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllBinaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllBinaryOps() {\n\t\tJsep.binary_ops = {};\n\t\tJsep.max_binop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeLiteral\n\t * @param {string} literal_name The name of the literal to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeLiteral(literal_name) {\n\t\tdelete Jsep.literals[literal_name];\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllLiterals\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllLiterals() {\n\t\tJsep.literals = {};\n\n\t\treturn Jsep;\n\t}\n\t// ==================== END CONFIG ============================\n\n\n\t/**\n\t * @returns {string}\n\t */\n\tget char() {\n\t\treturn this.expr.charAt(this.index);\n\t}\n\n\t/**\n\t * @returns {number}\n\t */\n\tget code() {\n\t\treturn this.expr.charCodeAt(this.index);\n\t};\n\n\n\t/**\n\t * @param {string} expr a string with the passed in express\n\t * @returns Jsep\n\t */\n\tconstructor(expr) {\n\t\t// `index` stores the character number we are currently at\n\t\t// All of the gobbles below will modify `index` as we move along\n\t\tthis.expr = expr;\n\t\tthis.index = 0;\n\t}\n\n\t/**\n\t * static top-level parser\n\t * @returns {jsep.Expression}\n\t */\n\tstatic parse(expr) {\n\t\treturn (new Jsep(expr)).parse();\n\t}\n\n\t/**\n\t * Get the longest key length of any object\n\t * @param {object} obj\n\t * @returns {number}\n\t */\n\tstatic getMaxKeyLen(obj) {\n\t\treturn Math.max(0, ...Object.keys(obj).map(k => k.length));\n\t}\n\n\t/**\n\t * `ch` is a character code in the next three functions\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isDecimalDigit(ch) {\n\t\treturn (ch >= 48 && ch <= 57); // 0...9\n\t}\n\n\t/**\n\t * Returns the precedence of a binary operator or `0` if it isn't a binary operator. Can be float.\n\t * @param {string} op_val\n\t * @returns {number}\n\t */\n\tstatic binaryPrecedence(op_val) {\n\t\treturn Jsep.binary_ops[op_val] || 0;\n\t}\n\n\t/**\n\t * Looks for start of identifier\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierStart(ch) {\n\t\treturn  (ch >= 65 && ch <= 90) || // A...Z\n\t\t\t(ch >= 97 && ch <= 122) || // a...z\n\t\t\t(ch >= 128 && !Jsep.binary_ops[String.fromCharCode(ch)]) || // any non-ASCII that is not an operator\n\t\t\t(Jsep.additional_identifier_chars.has(String.fromCharCode(ch))); // additional characters\n\t}\n\n\t/**\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierPart(ch) {\n\t\treturn Jsep.isIdentifierStart(ch) || Jsep.isDecimalDigit(ch);\n\t}\n\n\t/**\n\t * throw error at index of the expression\n\t * @param {string} message\n\t * @throws\n\t */\n\tthrowError(message) {\n\t\tconst error = new Error(message + ' at character ' + this.index);\n\t\terror.index = this.index;\n\t\terror.description = message;\n\t\tthrow error;\n\t}\n\n\t/**\n\t * Run a given hook\n\t * @param {string} name\n\t * @param {jsep.Expression|false} [node]\n\t * @returns {?jsep.Expression}\n\t */\n\trunHook(name, node) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this, node };\n\t\t\tJsep.hooks.run(name, env);\n\t\t\treturn env.node;\n\t\t}\n\t\treturn node;\n\t}\n\n\t/**\n\t * Runs a given hook until one returns a node\n\t * @param {string} name\n\t * @returns {?jsep.Expression}\n\t */\n\tsearchHook(name) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this };\n\t\t\tJsep.hooks[name].find(function (callback) {\n\t\t\t\tcallback.call(env.context, env);\n\t\t\t\treturn env.node;\n\t\t\t});\n\t\t\treturn env.node;\n\t\t}\n\t}\n\n\t/**\n\t * Push `index` up to the next non-space character\n\t */\n\tgobbleSpaces() {\n\t\tlet ch = this.code;\n\t\t// Whitespace\n\t\twhile (ch === Jsep.SPACE_CODE\n\t\t|| ch === Jsep.TAB_CODE\n\t\t|| ch === Jsep.LF_CODE\n\t\t|| ch === Jsep.CR_CODE) {\n\t\t\tch = this.expr.charCodeAt(++this.index);\n\t\t}\n\t\tthis.runHook('gobble-spaces');\n\t}\n\n\t/**\n\t * Top-level method to parse all expressions and returns compound or single node\n\t * @returns {jsep.Expression}\n\t */\n\tparse() {\n\t\tthis.runHook('before-all');\n\t\tconst nodes = this.gobbleExpressions();\n\n\t\t// If there's only one expression just try returning the expression\n\t\tconst node = nodes.length === 1\n\t\t  ? nodes[0]\n\t\t\t: {\n\t\t\t\ttype: Jsep.COMPOUND,\n\t\t\t\tbody: nodes\n\t\t\t};\n\t\treturn this.runHook('after-all', node);\n\t}\n\n\t/**\n\t * top-level parser (but can be reused within as well)\n\t * @param {number} [untilICode]\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleExpressions(untilICode) {\n\t\tlet nodes = [], ch_i, node;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch_i = this.code;\n\n\t\t\t// Expressions can be separated by semicolons, commas, or just inferred without any\n\t\t\t// separators\n\t\t\tif (ch_i === Jsep.SEMCOL_CODE || ch_i === Jsep.COMMA_CODE) {\n\t\t\t\tthis.index++; // ignore separators\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Try to gobble each expression individually\n\t\t\t\tif (node = this.gobbleExpression()) {\n\t\t\t\t\tnodes.push(node);\n\t\t\t\t\t// If we weren't able to find a binary expression and are out of room, then\n\t\t\t\t\t// the expression passed in probably has too much\n\t\t\t\t}\n\t\t\t\telse if (this.index < this.expr.length) {\n\t\t\t\t\tif (ch_i === untilICode) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nodes;\n\t}\n\n\t/**\n\t * The main parsing function.\n\t * @returns {?jsep.Expression}\n\t */\n\tgobbleExpression() {\n\t\tconst node = this.searchHook('gobble-expression') || this.gobbleBinaryExpression();\n\t\tthis.gobbleSpaces();\n\n\t\treturn this.runHook('after-expression', node);\n\t}\n\n\t/**\n\t * Search for the operation portion of the string (e.g. `+`, `===`)\n\t * Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\n\t * and move down from 3 to 2 to 1 character until a matching binary operation is found\n\t * then, return that binary operation\n\t * @returns {string|boolean}\n\t */\n\tgobbleBinaryOp() {\n\t\tthis.gobbleSpaces();\n\t\tlet to_check = this.expr.substr(this.index, Jsep.max_binop_len);\n\t\tlet tc_len = to_check.length;\n\n\t\twhile (tc_len > 0) {\n\t\t\t// Don't accept a binary op when it is an identifier.\n\t\t\t// Binary ops that start with a identifier-valid character must be followed\n\t\t\t// by a non identifier-part valid character\n\t\t\tif (Jsep.binary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t)) {\n\t\t\t\tthis.index += tc_len;\n\t\t\t\treturn to_check;\n\t\t\t}\n\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * This function is responsible for gobbling an individual expression,\n\t * e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\n\t * @returns {?jsep.BinaryExpression}\n\t */\n\tgobbleBinaryExpression() {\n\t\tlet node, biop, prec, stack, biop_info, left, right, i, cur_biop;\n\n\t\t// First, try to get the leftmost thing\n\t\t// Then, check to see if there's a binary operator operating on that leftmost thing\n\t\t// Don't gobbleBinaryOp without a left-hand-side\n\t\tleft = this.gobbleToken();\n\t\tif (!left) {\n\t\t\treturn left;\n\t\t}\n\t\tbiop = this.gobbleBinaryOp();\n\n\t\t// If there wasn't a binary operator, just return the leftmost node\n\t\tif (!biop) {\n\t\t\treturn left;\n\t\t}\n\n\t\t// Otherwise, we need to start a stack to properly place the binary operations in their\n\t\t// precedence structure\n\t\tbiop_info = { value: biop, prec: Jsep.binaryPrecedence(biop), right_a: Jsep.right_associative.has(biop) };\n\n\t\tright = this.gobbleToken();\n\n\t\tif (!right) {\n\t\t\tthis.throwError(\"Expected expression after \" + biop);\n\t\t}\n\n\t\tstack = [left, biop_info, right];\n\n\t\t// Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\n\t\twhile ((biop = this.gobbleBinaryOp())) {\n\t\t\tprec = Jsep.binaryPrecedence(biop);\n\n\t\t\tif (prec === 0) {\n\t\t\t\tthis.index -= biop.length;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbiop_info = { value: biop, prec, right_a: Jsep.right_associative.has(biop) };\n\n\t\t\tcur_biop = biop;\n\n\t\t\t// Reduce: make a binary expression from the three topmost entries.\n\t\t\tconst comparePrev = prev => biop_info.right_a && prev.right_a\n\t\t\t\t? prec > prev.prec\n\t\t\t\t: prec <= prev.prec;\n\t\t\twhile ((stack.length > 2) && comparePrev(stack[stack.length - 2])) {\n\t\t\t\tright = stack.pop();\n\t\t\t\tbiop = stack.pop().value;\n\t\t\t\tleft = stack.pop();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\t\toperator: biop,\n\t\t\t\t\tleft,\n\t\t\t\t\tright\n\t\t\t\t};\n\t\t\t\tstack.push(node);\n\t\t\t}\n\n\t\t\tnode = this.gobbleToken();\n\n\t\t\tif (!node) {\n\t\t\t\tthis.throwError(\"Expected expression after \" + cur_biop);\n\t\t\t}\n\n\t\t\tstack.push(biop_info, node);\n\t\t}\n\n\t\ti = stack.length - 1;\n\t\tnode = stack[i];\n\n\t\twhile (i > 1) {\n\t\t\tnode = {\n\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\toperator: stack[i - 1].value,\n\t\t\t\tleft: stack[i - 2],\n\t\t\t\tright: node\n\t\t\t};\n\t\t\ti -= 2;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * An individual part of a binary expression:\n\t * e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleToken() {\n\t\tlet ch, to_check, tc_len, node;\n\n\t\tthis.gobbleSpaces();\n\t\tnode = this.searchHook('gobble-token');\n\t\tif (node) {\n\t\t\treturn this.runHook('after-token', node);\n\t\t}\n\n\t\tch = this.code;\n\n\t\tif (Jsep.isDecimalDigit(ch) || ch === Jsep.PERIOD_CODE) {\n\t\t\t// Char code 46 is a dot `.` which can start off a numeric literal\n\t\t\treturn this.gobbleNumericLiteral();\n\t\t}\n\n\t\tif (ch === Jsep.SQUOTE_CODE || ch === Jsep.DQUOTE_CODE) {\n\t\t\t// Single or double quotes\n\t\t\tnode = this.gobbleStringLiteral();\n\t\t}\n\t\telse if (ch === Jsep.OBRACK_CODE) {\n\t\t\tnode = this.gobbleArray();\n\t\t}\n\t\telse {\n\t\t\tto_check = this.expr.substr(this.index, Jsep.max_unop_len);\n\t\t\ttc_len = to_check.length;\n\n\t\t\twhile (tc_len > 0) {\n\t\t\t\t// Don't accept an unary op when it is an identifier.\n\t\t\t\t// Unary ops that start with a identifier-valid character must be followed\n\t\t\t\t// by a non identifier-part valid character\n\t\t\t\tif (Jsep.unary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t\t)) {\n\t\t\t\t\tthis.index += tc_len;\n\t\t\t\t\tconst argument = this.gobbleToken();\n\t\t\t\t\tif (!argument) {\n\t\t\t\t\t\tthis.throwError('missing unaryOp argument');\n\t\t\t\t\t}\n\t\t\t\t\treturn this.runHook('after-token', {\n\t\t\t\t\t\ttype: Jsep.UNARY_EXP,\n\t\t\t\t\t\toperator: to_check,\n\t\t\t\t\t\targument,\n\t\t\t\t\t\tprefix: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t\t}\n\n\t\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\t\tnode = this.gobbleIdentifier();\n\t\t\t\tif (Jsep.literals.hasOwnProperty(node.name)) {\n\t\t\t\t\tnode = {\n\t\t\t\t\t\ttype: Jsep.LITERAL,\n\t\t\t\t\t\tvalue: Jsep.literals[node.name],\n\t\t\t\t\t\traw: node.name,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (node.name === Jsep.this_str) {\n\t\t\t\t\tnode = { type: Jsep.THIS_EXP };\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) { // open parenthesis\n\t\t\t\tnode = this.gobbleGroup();\n\t\t\t}\n\t\t}\n\n\t\tif (!node) {\n\t\t\treturn this.runHook('after-token', false);\n\t\t}\n\n\t\tnode = this.gobbleTokenProperty(node);\n\t\treturn this.runHook('after-token', node);\n\t}\n\n\t/**\n\t * Gobble properties of of identifiers/strings/arrays/groups.\n\t * e.g. `foo`, `bar.baz`, `foo['bar'].baz`\n\t * It also gobbles function calls:\n\t * e.g. `Math.acos(obj.angle)`\n\t * @param {jsep.Expression} node\n\t * @returns {jsep.Expression}\n\t */\n\tgobbleTokenProperty(node) {\n\t\tthis.gobbleSpaces();\n\n\t\tlet ch = this.code;\n\t\twhile (ch === Jsep.PERIOD_CODE || ch === Jsep.OBRACK_CODE || ch === Jsep.OPAREN_CODE || ch === Jsep.QUMARK_CODE) {\n\t\t\tlet optional;\n\t\t\tif (ch === Jsep.QUMARK_CODE) {\n\t\t\t\tif (this.expr.charCodeAt(this.index + 1) !== Jsep.PERIOD_CODE) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toptional = true;\n\t\t\t\tthis.index += 2;\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t}\n\t\t\tthis.index++;\n\n\t\t\tif (ch === Jsep.OBRACK_CODE) {\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: true,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleExpression()\n\t\t\t\t};\n\t\t\t\tif (!node.property) {\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t\tif (ch !== Jsep.CBRACK_CODE) {\n\t\t\t\t\tthis.throwError('Unclosed [');\n\t\t\t\t}\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) {\n\t\t\t\t// A function call is being made; gobble all the arguments\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.CALL_EXP,\n\t\t\t\t\t'arguments': this.gobbleArguments(Jsep.CPAREN_CODE),\n\t\t\t\t\tcallee: node\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if (ch === Jsep.PERIOD_CODE || optional) {\n\t\t\t\tif (optional) {\n\t\t\t\t\tthis.index--;\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: false,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleIdentifier(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (optional) {\n\t\t\t\tnode.optional = true;\n\t\t\t} // else leave undefined for compatibility with esprima\n\n\t\t\tthis.gobbleSpaces();\n\t\t\tch = this.code;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\n\t * keep track of everything in the numeric literal and then calling `parseFloat` on that string\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleNumericLiteral() {\n\t\tlet number = '', ch, chCode;\n\n\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t}\n\n\t\tif (this.code === Jsep.PERIOD_CODE) { // can start with a decimal marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\t\t}\n\n\t\tch = this.char;\n\n\t\tif (ch === 'e' || ch === 'E') { // exponent marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\tch = this.char;\n\n\t\t\tif (ch === '+' || ch === '-') { // exponent sign\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) { // exponent itself\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\tif (!Jsep.isDecimalDigit(this.expr.charCodeAt(this.index - 1)) ) {\n\t\t\t\tthis.throwError('Expected exponent (' + number + this.char + ')');\n\t\t\t}\n\t\t}\n\n\t\tchCode = this.code;\n\n\t\t// Check to make sure this isn't a variable name that start with a number (123abc)\n\t\tif (Jsep.isIdentifierStart(chCode)) {\n\t\t\tthis.throwError('Variable names cannot start with a number (' +\n\t\t\t\tnumber + this.char + ')');\n\t\t}\n\t\telse if (chCode === Jsep.PERIOD_CODE || (number.length === 1 && number.charCodeAt(0) === Jsep.PERIOD_CODE)) {\n\t\t\tthis.throwError('Unexpected period');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: parseFloat(number),\n\t\t\traw: number\n\t\t};\n\t}\n\n\t/**\n\t * Parses a string literal, staring with single or double quotes with basic support for escape codes\n\t * e.g. `\"hello world\"`, `'this is\\nJSEP'`\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleStringLiteral() {\n\t\tlet str = '';\n\t\tconst startIndex = this.index;\n\t\tconst quote = this.expr.charAt(this.index++);\n\t\tlet closed = false;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tlet ch = this.expr.charAt(this.index++);\n\n\t\t\tif (ch === quote) {\n\t\t\t\tclosed = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch === '\\\\') {\n\t\t\t\t// Check for all of the common escape codes\n\t\t\t\tch = this.expr.charAt(this.index++);\n\n\t\t\t\tswitch (ch) {\n\t\t\t\t\tcase 'n': str += '\\n'; break;\n\t\t\t\t\tcase 'r': str += '\\r'; break;\n\t\t\t\t\tcase 't': str += '\\t'; break;\n\t\t\t\t\tcase 'b': str += '\\b'; break;\n\t\t\t\t\tcase 'f': str += '\\f'; break;\n\t\t\t\t\tcase 'v': str += '\\x0B'; break;\n\t\t\t\t\tdefault : str += ch;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstr += ch;\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Unclosed quote after \"' + str + '\"');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: str,\n\t\t\traw: this.expr.substring(startIndex, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles only identifiers\n\t * e.g.: `foo`, `_value`, `$x1`\n\t * Also, this function checks if that identifier is a literal:\n\t * (e.g. `true`, `false`, `null`) or `this`\n\t * @returns {jsep.Identifier}\n\t */\n\tgobbleIdentifier() {\n\t\tlet ch = this.code, start = this.index;\n\n\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\tthis.index++;\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unexpected ' + this.char);\n\t\t}\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch = this.code;\n\n\t\t\tif (Jsep.isIdentifierPart(ch)) {\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttype: Jsep.IDENTIFIER,\n\t\t\tname: this.expr.slice(start, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles a list of arguments within the context of a function call\n\t * or array literal. This function also assumes that the opening character\n\t * `(` or `[` has already been gobbled, and gobbles expressions and commas\n\t * until the terminator character `)` or `]` is encountered.\n\t * e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\n\t * @param {number} termination\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleArguments(termination) {\n\t\tconst args = [];\n\t\tlet closed = false;\n\t\tlet separator_count = 0;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tthis.gobbleSpaces();\n\t\t\tlet ch_i = this.code;\n\n\t\t\tif (ch_i === termination) { // done parsing\n\t\t\t\tclosed = true;\n\t\t\t\tthis.index++;\n\n\t\t\t\tif (termination === Jsep.CPAREN_CODE && separator_count && separator_count >= args.length){\n\t\t\t\t\tthis.throwError('Unexpected token ' + String.fromCharCode(termination));\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch_i === Jsep.COMMA_CODE) { // between expressions\n\t\t\t\tthis.index++;\n\t\t\t\tseparator_count++;\n\n\t\t\t\tif (separator_count !== args.length) { // missing argument\n\t\t\t\t\tif (termination === Jsep.CPAREN_CODE) {\n\t\t\t\t\t\tthis.throwError('Unexpected token ,');\n\t\t\t\t\t}\n\t\t\t\t\telse if (termination === Jsep.CBRACK_CODE) {\n\t\t\t\t\t\tfor (let arg = args.length; arg < separator_count; arg++) {\n\t\t\t\t\t\t\targs.push(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (args.length !== separator_count && separator_count !== 0) {\n\t\t\t\t// NOTE: `&& separator_count !== 0` allows for either all commas, or all spaces as arguments\n\t\t\t\tthis.throwError('Expected comma');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst node = this.gobbleExpression();\n\n\t\t\t\tif (!node || node.type === Jsep.COMPOUND) {\n\t\t\t\t\tthis.throwError('Expected comma');\n\t\t\t\t}\n\n\t\t\t\targs.push(node);\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Expected ' + String.fromCharCode(termination));\n\t\t}\n\n\t\treturn args;\n\t}\n\n\t/**\n\t * Responsible for parsing a group of things within parentheses `()`\n\t * that have no identifier in front (so not a function call)\n\t * This function assumes that it needs to gobble the opening parenthesis\n\t * and then tries to gobble everything within that parenthesis, assuming\n\t * that the next thing it should see is the close parenthesis. If not,\n\t * then the expression probably doesn't have a `)`\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleGroup() {\n\t\tthis.index++;\n\t\tlet nodes = this.gobbleExpressions(Jsep.CPAREN_CODE);\n\t\tif (this.code === Jsep.CPAREN_CODE) {\n\t\t\tthis.index++;\n\t\t\tif (nodes.length === 1) {\n\t\t\t\treturn nodes[0];\n\t\t\t}\n\t\t\telse if (!nodes.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn {\n\t\t\t\t\ttype: Jsep.SEQUENCE_EXP,\n\t\t\t\t\texpressions: nodes,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unclosed (');\n\t\t}\n\t}\n\n\t/**\n\t * Responsible for parsing Array literals `[1, 2, 3]`\n\t * This function assumes that it needs to gobble the opening bracket\n\t * and then tries to gobble the expressions as arguments.\n\t * @returns {jsep.ArrayExpression}\n\t */\n\tgobbleArray() {\n\t\tthis.index++;\n\n\t\treturn {\n\t\t\ttype: Jsep.ARRAY_EXP,\n\t\t\telements: this.gobbleArguments(Jsep.CBRACK_CODE)\n\t\t};\n\t}\n}\n\n// Static fields:\nconst hooks = new Hooks();\nObject.assign(Jsep, {\n\thooks,\n\tplugins: new Plugins(Jsep),\n\n\t// Node Types\n\t// ----------\n\t// This is the full set of types that any JSEP node can be.\n\t// Store them here to save space when minified\n\tCOMPOUND:        'Compound',\n\tSEQUENCE_EXP:    'SequenceExpression',\n\tIDENTIFIER:      'Identifier',\n\tMEMBER_EXP:      'MemberExpression',\n\tLITERAL:         'Literal',\n\tTHIS_EXP:        'ThisExpression',\n\tCALL_EXP:        'CallExpression',\n\tUNARY_EXP:       'UnaryExpression',\n\tBINARY_EXP:      'BinaryExpression',\n\tARRAY_EXP:       'ArrayExpression',\n\n\tTAB_CODE:    9,\n\tLF_CODE:     10,\n\tCR_CODE:     13,\n\tSPACE_CODE:  32,\n\tPERIOD_CODE: 46, // '.'\n\tCOMMA_CODE:  44, // ','\n\tSQUOTE_CODE: 39, // single quote\n\tDQUOTE_CODE: 34, // double quotes\n\tOPAREN_CODE: 40, // (\n\tCPAREN_CODE: 41, // )\n\tOBRACK_CODE: 91, // [\n\tCBRACK_CODE: 93, // ]\n\tQUMARK_CODE: 63, // ?\n\tSEMCOL_CODE: 59, // ;\n\tCOLON_CODE:  58, // :\n\n\n\t// Operations\n\t// ----------\n\t// Use a quickly-accessible map to store all of the unary operators\n\t// Values are set to `1` (it really doesn't matter)\n\tunary_ops: {\n\t\t'-': 1,\n\t\t'!': 1,\n\t\t'~': 1,\n\t\t'+': 1\n\t},\n\n\t// Also use a map for the binary operations but set their values to their\n\t// binary precedence for quick reference (higher number = higher precedence)\n\t// see [Order of operations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)\n\tbinary_ops: {\n\t\t'||': 1, '??': 1,\n\t\t'&&': 2, '|': 3, '^': 4, '&': 5,\n\t\t'==': 6, '!=': 6, '===': 6, '!==': 6,\n\t\t'<': 7, '>': 7, '<=': 7, '>=': 7,\n\t\t'<<': 8, '>>': 8, '>>>': 8,\n\t\t'+': 9, '-': 9,\n\t\t'*': 10, '/': 10, '%': 10,\n\t\t'**': 11,\n\t},\n\n\t// sets specific binary_ops as right-associative\n\tright_associative: new Set(['**']),\n\n\t// Additional valid identifier chars, apart from a-z, A-Z and 0-9 (except on the starting char)\n\tadditional_identifier_chars: new Set(['$', '_']),\n\n\t// Literals\n\t// ----------\n\t// Store the values to return for the various literals we may encounter\n\tliterals: {\n\t\t'true': true,\n\t\t'false': false,\n\t\t'null': null\n\t},\n\n\t// Except for `this`, which is special. This could be changed to something like `'self'` as well\n\tthis_str: 'this',\n});\nJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\nJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\n// Backward Compatibility:\nconst jsep = expr => (new Jsep(expr)).parse();\nconst stdClassProps = Object.getOwnPropertyNames(class Test{});\nObject.getOwnPropertyNames(Jsep)\n\t.filter(prop => !stdClassProps.includes(prop) && jsep[prop] === undefined)\n\t.forEach((m) => {\n\t\tjsep[m] = Jsep[m];\n\t});\njsep.Jsep = Jsep; // allows for const { Jsep } = require('jsep');\n\nconst CONDITIONAL_EXP = 'ConditionalExpression';\n\nvar ternary = {\n\tname: 'ternary',\n\n\tinit(jsep) {\n\t\t// Ternary expression: test ? consequent : alternate\n\t\tjsep.hooks.add('after-expression', function gobbleTernary(env) {\n\t\t\tif (env.node && this.code === jsep.QUMARK_CODE) {\n\t\t\t\tthis.index++;\n\t\t\t\tconst test = env.node;\n\t\t\t\tconst consequent = this.gobbleExpression();\n\n\t\t\t\tif (!consequent) {\n\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t}\n\n\t\t\t\tthis.gobbleSpaces();\n\n\t\t\t\tif (this.code === jsep.COLON_CODE) {\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tconst alternate = this.gobbleExpression();\n\n\t\t\t\t\tif (!alternate) {\n\t\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t\t}\n\t\t\t\t\tenv.node = {\n\t\t\t\t\t\ttype: CONDITIONAL_EXP,\n\t\t\t\t\t\ttest,\n\t\t\t\t\t\tconsequent,\n\t\t\t\t\t\talternate,\n\t\t\t\t\t};\n\n\t\t\t\t\t// check for operators of higher priority than ternary (i.e. assignment)\n\t\t\t\t\t// jsep sets || at 1, and assignment at 0.9, and conditional should be between them\n\t\t\t\t\tif (test.operator && jsep.binary_ops[test.operator] <= 0.9) {\n\t\t\t\t\t\tlet newTest = test;\n\t\t\t\t\t\twhile (newTest.right.operator && jsep.binary_ops[newTest.right.operator] <= 0.9) {\n\t\t\t\t\t\t\tnewTest = newTest.right;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tenv.node.test = newTest.right;\n\t\t\t\t\t\tnewTest.right = env.node;\n\t\t\t\t\t\tenv.node = test;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.throwError('Expected :');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n};\n\n// Add default plugins:\n\njsep.plugins.register(ternary);\n\nexport { Jsep, jsep as default };\n","const FSLASH_CODE = 47; // '/'\nconst BSLASH_CODE = 92; // '\\\\'\n\nvar index = {\n\tname: 'regex',\n\n\tinit(jsep) {\n\t\t// Regex literal: /abc123/ig\n\t\tjsep.hooks.add('gobble-token', function gobbleRegexLiteral(env) {\n\t\t\tif (this.code === FSLASH_CODE) {\n\t\t\t\tconst patternIndex = ++this.index;\n\n\t\t\t\tlet inCharSet = false;\n\t\t\t\twhile (this.index < this.expr.length) {\n\t\t\t\t\tif (this.code === FSLASH_CODE && !inCharSet) {\n\t\t\t\t\t\tconst pattern = this.expr.slice(patternIndex, this.index);\n\n\t\t\t\t\t\tlet flags = '';\n\t\t\t\t\t\twhile (++this.index < this.expr.length) {\n\t\t\t\t\t\t\tconst code = this.code;\n\t\t\t\t\t\t\tif ((code >= 97 && code <= 122) // a...z\n\t\t\t\t\t\t\t\t|| (code >= 65 && code <= 90) // A...Z\n\t\t\t\t\t\t\t\t|| (code >= 48 && code <= 57)) { // 0-9\n\t\t\t\t\t\t\t\tflags += this.char;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet value;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvalue = new RegExp(pattern, flags);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\tthis.throwError(e.message);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tenv.node = {\n\t\t\t\t\t\t\ttype: jsep.LITERAL,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\traw: this.expr.slice(patternIndex - 1, this.index),\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// allow . [] and () after regex: /regex/.test(a)\n\t\t\t\t\t\tenv.node = this.gobbleTokenProperty(env.node);\n\t\t\t\t\t\treturn env.node;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.code === jsep.OBRACK_CODE) {\n\t\t\t\t\t\tinCharSet = true;\n\t\t\t\t\t}\n\t\t\t\t\telse if (inCharSet && this.code === jsep.CBRACK_CODE) {\n\t\t\t\t\t\tinCharSet = false;\n\t\t\t\t\t}\n\t\t\t\t\tthis.index += this.code === BSLASH_CODE ? 2 : 1;\n\t\t\t\t}\n\t\t\t\tthis.throwError('Unclosed Regex');\n\t\t\t}\n\t\t});\n\t},\n};\n\nexport { index as default };\n","const PLUS_CODE = 43; // +\nconst MINUS_CODE = 45; // -\n\nconst plugin = {\n\tname: 'assignment',\n\n\tassignmentOperators: new Set([\n\t\t'=',\n\t\t'*=',\n\t\t'**=',\n\t\t'/=',\n\t\t'%=',\n\t\t'+=',\n\t\t'-=',\n\t\t'<<=',\n\t\t'>>=',\n\t\t'>>>=',\n\t\t'&=',\n\t\t'^=',\n\t\t'|=',\n\t\t'||=',\n\t\t'&&=',\n\t\t'??=',\n\t]),\n\tupdateOperators: [PLUS_CODE, MINUS_CODE],\n\tassignmentPrecedence: 0.9,\n\n\tinit(jsep) {\n\t\tconst updateNodeTypes = [jsep.IDENTIFIER, jsep.MEMBER_EXP];\n\t\tplugin.assignmentOperators.forEach(op => jsep.addBinaryOp(op, plugin.assignmentPrecedence, true));\n\n\t\tjsep.hooks.add('gobble-token', function gobbleUpdatePrefix(env) {\n\t\t\tconst code = this.code;\n\t\t\tif (plugin.updateOperators.some(c => c === code && c === this.expr.charCodeAt(this.index + 1))) {\n\t\t\t\tthis.index += 2;\n\t\t\t\tenv.node = {\n\t\t\t\t\ttype: 'UpdateExpression',\n\t\t\t\t\toperator: code === PLUS_CODE ? '++' : '--',\n\t\t\t\t\targument: this.gobbleTokenProperty(this.gobbleIdentifier()),\n\t\t\t\t\tprefix: true,\n\t\t\t\t};\n\t\t\t\tif (!env.node.argument || !updateNodeTypes.includes(env.node.argument.type)) {\n\t\t\t\t\tthis.throwError(`Unexpected ${env.node.operator}`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tjsep.hooks.add('after-token', function gobbleUpdatePostfix(env) {\n\t\t\tif (env.node) {\n\t\t\t\tconst code = this.code;\n\t\t\t\tif (plugin.updateOperators.some(c => c === code && c === this.expr.charCodeAt(this.index + 1))) {\n\t\t\t\t\tif (!updateNodeTypes.includes(env.node.type)) {\n\t\t\t\t\t\tthis.throwError(`Unexpected ${env.node.operator}`);\n\t\t\t\t\t}\n\t\t\t\t\tthis.index += 2;\n\t\t\t\t\tenv.node = {\n\t\t\t\t\t\ttype: 'UpdateExpression',\n\t\t\t\t\t\toperator: code === PLUS_CODE ? '++' : '--',\n\t\t\t\t\t\targument: env.node,\n\t\t\t\t\t\tprefix: false,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tjsep.hooks.add('after-expression', function gobbleAssignment(env) {\n\t\t\tif (env.node) {\n\t\t\t\t// Note: Binaries can be chained in a single expression to respect\n\t\t\t\t// operator precedence (i.e. a = b = 1 + 2 + 3)\n\t\t\t\t// Update all binary assignment nodes in the tree\n\t\t\t\tupdateBinariesToAssignments(env.node);\n\t\t\t}\n\t\t});\n\n\t\tfunction updateBinariesToAssignments(node) {\n\t\t\tif (plugin.assignmentOperators.has(node.operator)) {\n\t\t\t\tnode.type = 'AssignmentExpression';\n\t\t\t\tupdateBinariesToAssignments(node.left);\n\t\t\t\tupdateBinariesToAssignments(node.right);\n\t\t\t}\n\t\t\telse if (!node.operator) {\n\t\t\t\tObject.values(node).forEach((val) => {\n\t\t\t\t\tif (val && typeof val === 'object') {\n\t\t\t\t\t\tupdateBinariesToAssignments(val);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n};\n\nexport { plugin as default };\n","/* eslint-disable unicorn/no-top-level-side-effects -- Temporary? */\n/* eslint-disable no-bitwise -- Convenient */\nimport jsep from 'jsep';\nimport jsepRegex from '@jsep-plugin/regex';\nimport jsepAssignment from '@jsep-plugin/assignment';\n\n/**\n * @import {EvaluatedResult, UnknownResult} from './jsonpath.js';\n */\n\n/**\n * @typedef {any} AssignmentExpression\n */\n\n/**\n * @typedef {any} Substitution\n */\n\n/**\n * @typedef {any} AnyParameter\n */\n\n/**\n * @typedef {Record<string, Substitution>} Substitutions\n */\n\n// register plugins\njsep.plugins.register(jsepRegex, jsepAssignment);\njsep.addUnaryOp('typeof');\njsep.addUnaryOp('void');\njsep.addLiteral('null', null);\njsep.addLiteral('undefined', undefined);\n\nconst BLOCKED_PROTO_PROPERTIES = new Set([\n    'constructor',\n    '__proto__',\n    '__defineGetter__',\n    '__defineSetter__',\n    '__lookupGetter__',\n    '__lookupSetter__'\n]);\n\n// Every function-constructor variant, along with the invocation helpers which\n//   could otherwise reach them indirectly, e.g., `Function.call(0, 'code')()`,\n//   plus whichever BLOCKED_PROTO_PROPERTIES names resolve to an own method on\n//   Object.prototype (e.g. `__defineGetter__`) - an own-property access on a\n//   shared prototype (`@.prototype.__defineGetter__`) bypasses the\n//   inherited-only name check below, so those methods need blocking by value.\n/** @type {WeakSet<object>} */\nconst BLOCKED_FUNCTIONS = new WeakSet([\n    Function,\n    // eslint-disable-next-line no-empty-function -- Only need the constructor\n    function *() {}.constructor,\n    // eslint-disable-next-line no-empty-function -- Only need the constructor\n    async function () {}.constructor,\n    // eslint-disable-next-line no-empty-function -- Only need the constructor\n    async function *() {}.constructor,\n    Function.prototype.call,\n    Function.prototype.apply,\n    Function.prototype.bind,\n    Reflect.apply,\n    Reflect.construct,\n    ...[...BLOCKED_PROTO_PROPERTIES]\n        .map((name) => Reflect.get(Object.prototype, name))\n        .filter((value) => typeof value === 'function')\n]);\n\n/**\n * @param {UnknownResult} value\n * @returns {boolean}\n */\nconst isBlockedFunction = (value) => {\n    return typeof value === 'function' && BLOCKED_FUNCTIONS.has(value);\n};\n\n/**\n * Guarded `obj[prop]`, applying the same restrictions as a MemberExpression.\n * @param {UnknownResult} obj\n * @param {string} prop\n * @returns {UnknownResult}\n */\nconst getSafeProperty = (obj, prop) => {\n    if (obj === undefined || obj === null) {\n        throw new TypeError(\n            `Cannot read properties of ${obj} (reading '${prop}')`\n        );\n    }\n    if (!Object.hasOwn(obj, prop) && BLOCKED_PROTO_PROPERTIES.has(prop)) {\n        throw new TypeError(\n            `Cannot read properties of ${obj} (reading '${prop}')`\n        );\n    }\n    const result = /** @type {Record<string, UnknownResult>} */ (obj)[prop];\n    if (isBlockedFunction(result)) {\n        throw new TypeError('Function constructor is disabled');\n    }\n    return result;\n};\n\n/**\n * @typedef {Record<\n *   string,\n *   (a: AnyParameter, b: AnyParameter) => UnknownResult\n * >} OperatorTable\n */\n\n// eslint-disable-next-line @stylistic/max-len -- Long\nconst BINOPS = Object.assign(Object.create(null), /** @type {OperatorTable} */ ({\n    '||': (a, b) => a || b(),\n    '??': (a, b) => a ?? b(),\n    '&&': (a, b) => a && b(),\n    '|': (a, b) => a | b(),\n    '^': (a, b) => a ^ b(),\n    '&': (a, b) => a & b(),\n    // eslint-disable-next-line eqeqeq -- API\n    '==': (a, b) => a == b(),\n    // eslint-disable-next-line eqeqeq -- API\n    '!=': (a, b) => a != b(),\n    '===': (a, b) => a === b(),\n    '!==': (a, b) => a !== b(),\n    '<': (a, b) => a < b(),\n    '>': (a, b) => a > b(),\n    '<=': (a, b) => a <= b(),\n    '>=': (a, b) => a >= b(),\n    '<<': (a, b) => a << b(),\n    '>>': (a, b) => a >> b(),\n    '>>>': (a, b) => a >>> b(),\n    '+': (a, b) => a + b(),\n    '-': (a, b) => a - b(),\n    '*': (a, b) => a * b(),\n    '/': (a, b) => a / b(),\n    '%': (a, b) => a % b(),\n    '**': (a, b) => a ** b()\n}));\n\n/**\n * @typedef {{\n *   [key: string]: (a: AnyParameter) => UnknownResult\n * }} UnaryOperatorTable\n */\n\n// eslint-disable-next-line @stylistic/max-len -- Long\nconst UNOPS = Object.assign(Object.create(null), /** @type {UnaryOperatorTable} */ ({\n    '-': (a) => -(/** @type {EvaluatedResult} */ (a)),\n    '!': (a) => !a,\n    '~': (a) => ~(/** @type {EvaluatedResult} */ (a)),\n    // eslint-disable-next-line no-implicit-coercion -- API\n    '+': (a) => +(/** @type {EvaluatedResult} */ (a)),\n    typeof: (a) => typeof a,\n    void: () => undefined\n}));\n\nconst SafeEval = {\n    /**\n     * @param {jsep.Expression} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalAst (ast, subs) {\n        switch (ast.type) {\n        case 'BinaryExpression':\n        case 'LogicalExpression':\n            return SafeEval.evalBinaryExpression(\n                /** @type {jsep.BinaryExpression} */ (ast),\n                subs\n            );\n        case 'Compound':\n            return SafeEval.evalCompound(\n                /** @type {jsep.Compound} */ (ast),\n                subs\n            );\n        case 'ConditionalExpression':\n            return SafeEval.evalConditionalExpression(\n                /** @type {jsep.ConditionalExpression} */ (ast),\n                subs\n            );\n        case 'Identifier':\n            return SafeEval.evalIdentifier(\n                /** @type {jsep.Identifier} */ (ast),\n                subs\n            );\n        case 'Literal':\n            return SafeEval.evalLiteral(/** @type {jsep.Literal} */ (ast));\n        case 'MemberExpression':\n            return SafeEval.evalMemberExpression(\n                /** @type {jsep.MemberExpression} */ (ast),\n                subs\n            );\n        case 'UnaryExpression':\n            return SafeEval.evalUnaryExpression(\n                /** @type {jsep.UnaryExpression} */ (ast),\n                subs\n            );\n        case 'ArrayExpression':\n            return SafeEval.evalArrayExpression(\n                /** @type {jsep.ArrayExpression} */ (ast),\n                subs\n            );\n        case 'CallExpression':\n            return SafeEval.evalCallExpression(\n                /** @type {jsep.CallExpression} */ (ast),\n                subs\n            );\n        case 'AssignmentExpression':\n            return SafeEval.evalAssignmentExpression(\n                /** @type {AssignmentExpression} */ (ast),\n                subs\n            );\n        default:\n            throw new SyntaxError('Unexpected expression', {\n                cause: ast\n            });\n        }\n    },\n\n    /**\n     * @param {jsep.BinaryExpression} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalBinaryExpression (ast, subs) {\n        /* c8 ignore next 3 -- Defensive guard for malformed ASTs */\n        if (!Object.hasOwn(BINOPS, ast.operator)) {\n            throw new SyntaxError(`Unknown binary operator: ${ast.operator}`);\n        }\n        const result = BINOPS[ast.operator](\n            SafeEval.evalAst(ast.left, subs),\n            () => SafeEval.evalAst(ast.right, subs)\n        );\n        return result;\n    },\n\n    /**\n     * @param {jsep.Compound} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalCompound (ast, subs) {\n        let last;\n        for (let i = 0; i < ast.body.length; i++) {\n            if (\n                ast.body[i].type === 'Identifier' &&\n                ['var', 'let', 'const'].includes(\n                    /** @type {jsep.Identifier} */\n                    (ast.body[i]).name\n                ) &&\n                Object.hasOwn(ast.body, i + 1) &&\n                ast.body[i + 1].type === 'AssignmentExpression'\n            ) {\n                // var x=2; is detected as\n                // [{Identifier var}, {AssignmentExpression x=2}]\n                i += 1;\n            }\n            const expr = ast.body[i];\n            last = SafeEval.evalAst(expr, subs);\n        }\n        return last;\n    },\n\n    /**\n     * @param {jsep.ConditionalExpression} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalConditionalExpression (ast, subs) {\n        return SafeEval.evalAst(ast.test, subs)\n            ? SafeEval.evalAst(ast.consequent, subs)\n            : SafeEval.evalAst(ast.alternate, subs);\n    },\n\n    /**\n     * @param {jsep.Identifier} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalIdentifier (ast, subs) {\n        if (Object.hasOwn(subs, ast.name)) {\n            return subs[ast.name];\n        }\n        throw new ReferenceError(`${ast.name} is not defined`);\n    },\n\n    /**\n     * @param {jsep.Literal} ast\n     * @returns {UnknownResult}\n     */\n    evalLiteral (ast) {\n        return ast.value;\n    },\n\n    /**\n     * @param {jsep.MemberExpression} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalMemberExpression (ast, subs) {\n        const prop = String(\n            // NOTE: `String(value)` throws error when\n            // value has overwritten the toString method to return non-string\n            // i.e. `value = {toString: () => []}`\n            ast.computed\n                ? SafeEval.evalAst(ast.property, subs) // `object[property]`\n                : ast.property.name // `object.property` property is Identifier\n        );\n        const obj = SafeEval.evalAst(ast.object, subs);\n        const result = getSafeProperty(obj, prop);\n        if (typeof result === 'function') {\n            return result.bind(obj); // arrow functions aren't affected by bind.\n        }\n        return result;\n    },\n\n    /**\n     * @param {jsep.UnaryExpression} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalUnaryExpression (ast, subs) {\n        /* c8 ignore next 3 -- Defensive guard for malformed ASTs */\n        if (!Object.hasOwn(UNOPS, ast.operator)) {\n            throw new SyntaxError(`Unknown unary operator: ${ast.operator}`);\n        }\n        const operand = SafeEval.evalAst(ast.argument, subs);\n        return UNOPS[ast.operator](operand);\n    },\n\n    /**\n     * @param {jsep.ArrayExpression} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalArrayExpression (ast, subs) {\n        return ast.elements.map((el) => SafeEval.evalAst(\n            /** @type {jsep.Expression} */\n            (el),\n            subs\n        ));\n    },\n\n    /**\n     * @param {jsep.CallExpression} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalCallExpression (ast, subs) {\n        const args = ast.arguments.map((arg) => SafeEval.evalAst(arg, subs));\n        const func = SafeEval.evalAst(ast.callee, subs);\n        if (\n            isBlockedFunction(func) ||\n            args.some((arg) => isBlockedFunction(arg))\n        ) {\n            throw new Error('Function constructor is disabled');\n        }\n        return (/** @type {(...args: AnyParameter[]) => UnknownResult} */ (\n            func\n        ))(...args);\n    },\n\n    /**\n     * @param {AssignmentExpression} ast\n     * @param {Substitutions} subs\n     * @returns {UnknownResult}\n     */\n    evalAssignmentExpression (ast, subs) {\n        if (ast.left.type !== 'Identifier') {\n            throw new SyntaxError('Invalid left-hand side in assignment');\n        }\n        const id = /** @type {jsep.Identifier} */ (\n            ast.left\n        ).name;\n        const value = SafeEval.evalAst(ast.right, subs);\n        subs[id] = value;\n        return subs[id];\n    }\n};\n\n/**\n * A replacement for NodeJS' VM.Script which is also {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP | Content Security Policy} friendly.\n */\nclass SafeScript {\n    /**\n     * @param {string} expr Expression to evaluate\n     */\n    constructor (expr) {\n        this.code = expr;\n        this.ast = /** @type {unknown} */ (jsep(this.code));\n    }\n\n    /**\n     * @param {object} context Object whose items will be added\n     *   to evaluation\n     * @returns {EvaluatedResult} Result of evaluated code\n     */\n    runInNewContext (context) {\n        // `Object.create(null)` creates a prototypeless object\n        const keyMap = Object.assign(Object.create(null), context);\n        return SafeEval.evalAst(\n            /** @type {jsep.Expression} */ (this.ast),\n            keyMap\n        );\n    }\n}\n\nexport {SafeScript, getSafeProperty};\n","/**\n * @param {unknown} val\n */\nexport const toStringTag = (val) => {\n    return Object.prototype.toString.call(val).slice(8, -1);\n};\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n */\nexport const hasConstructor = (a, b) => {\n    return Function.prototype.toString.call(\n        Object.getPrototypeOf(a).constructor\n    ) === Function.prototype.toString.call(\n        b\n    );\n};\n","/* eslint-disable camelcase -- Convenient for escaping */\n/* eslint-disable class-methods-use-this -- Consistent monkey-patching */\n/* eslint-disable unicorn/prefer-private-class-fields -- Allow\n    monkey-patching */\nimport {SafeScript, getSafeProperty} from './Safe-Script.js';\nimport {toStringTag} from './utils.js';\n\nconst scriptCache = new Map();\nconst pathCache = new Map();\n\n/**\n * @typedef {any} AnyInput\n */\n\n/**\n * @typedef {((...args: any[]) => any)} SandboxCallback\n */\n\n/**\n * @typedef {any|SandboxCallback} SandboxPropertyValue\n */\n\n/**\n * @typedef {(string|number)[]} ExpressionArray\n */\n\n/**\n * @typedef {\"scalar\"|\"boolean\"|\"string\"|\"undefined\"\n *   |\"function\"|\"integer\"|\"number\"|\"nonFinite\"|\"object\"\n *   |\"array\"|\"other\"|\"null\"|\"symbol\"|\"Promise\"|\"BigInt\"\n *   |\"jsonReference\"} ValueType\n */\n\n/**\n * @typedef {unknown} ParentValue\n */\n\n/**\n * @typedef {unknown} UnknownResult\n */\n\n/**\n * @typedef {string|number|null} ParentProperty\n */\n\n/**\n * @typedef {ReturnObject|string|number|boolean|null|unknown[]\n *   |Record<string, unknown>} PreferredOutput\n */\n\n/**\n * Copies array and then pushes item into it.\n * @param {ExpressionArray} arr Array to copy and into which to push\n * @param {string|number} item Array item to add (to end)\n * @returns {ExpressionArray} Copy of the original array\n */\nfunction push (arr, item) {\n    arr = arr.slice();\n    arr.push(item);\n    return arr;\n}\n/**\n * Copies array and then unshifts item into it.\n * @param {string|number} item Array item to add (to beginning)\n * @param {ExpressionArray} arr Array to copy and into which to unshift\n * @returns {ExpressionArray} Copy of the original array\n */\nfunction unshift (item, arr) {\n    arr = arr.slice();\n    arr.unshift(item);\n    return arr;\n}\n\n/**\n * @typedef {object} ReturnObject\n * @property {ExpressionArray|string} path\n * @property {unknown} value\n * @property {ParentValue} parent\n * @property {ParentProperty} parentProperty\n * @property {boolean} [isParentSelector]\n * @property {boolean} [hasArrExpr]\n * @property {ExpressionArray} [expr]\n * @property {string} [pointer]\n */\n\n/**\n * @callback JSONPathCallback\n * @param {any} preferredOutput Using `any` type instead of `PreferredOutput` so\n *    that user can supply flexible type\n * @param {\"value\"|\"property\"} type\n * @param {ReturnObject} fullRetObj\n * @returns {void}\n */\n\n/**\n * @callback OtherTypeCallback\n * @param {unknown} val\n * @param {ExpressionArray} path\n * @param {ParentValue} parent\n * @param {string|number|null} parentPropName\n * @param {string} arg\n * @returns {boolean|null}\n */\n\n/**\n * @typedef {any} ContextItem\n */\n\n/**\n * @typedef {any} EvaluatedResult\n */\n\n/**\n * @callback EvalCallback\n * @param {string} code\n * @param {ContextItem} context\n * @returns {EvaluatedResult}\n */\n\n/**\n * @typedef {new (expr: string) => {\n *   runInNewContext: (context: object) => EvaluatedResult\n * }} ScriptConstructor\n */\n\n/**\n * @typedef {ScriptConstructor} EvalClass\n */\n\n/**\n * @typedef {\"value\"|\"path\"|\"pointer\"|\"parent\"|\"parentProperty\"\n *   |\"all\"} ResultType\n */\n\n/**\n * @typedef {EvalCallback|EvalClass|'safe'|'native'|boolean} EvalValue\n */\n\n/**\n * @typedef {string|string[]} PathType\n */\n\n/**\n * @typedef {{Script: ScriptConstructor}} SafeScriptType\n */\n\n/**\n * @typedef {{Script: ScriptConstructor}} ScriptType\n */\n\n/**\n * @typedef {{\n *   _$_path?: string,\n *   _$_parentProperty?: ParentProperty,\n *   _$_parent?: ParentValue,\n *   _$_property?: string|number,\n *   _$_root?: AnyInput,\n *   _$_v?: unknown,\n *   [key: string]: SandboxPropertyValue\n * }} SandboxType\n */\n\n/**\n * @typedef {object} JSONPathOptions\n * @property {AnyInput} [json]\n * @property {PathType} [path]\n * @property {ResultType} [resultType=\"value\"]\n * @property {boolean} [flatten=false]\n * @property {boolean} [wrap=true]\n * @property {SandboxType} [sandbox={}]\n * @property {EvalValue} [eval='safe']\n * @property {any|null} [parent=null]\n * @property {ParentProperty} [parentProperty=null]\n * @property {JSONPathCallback} [callback]\n * @property {OtherTypeCallback} [otherTypeCallback] Defaults to\n *   function which throws on encountering `@other`\n * @property {Record<string, OtherTypeCallback>} [customTypes] Map of\n *   custom type operator names to their evaluation callbacks\n * @property {boolean} [autostart=true]\n * @property {boolean} [ignoreEvalErrors=false]\n */\n\n\n/**\n * @overload\n * @param {string} opts JSON path to evaluate\n * @param {AnyInput} [expr] JSON object to evaluate against\n * @param {JSONPathCallback} [obj] Passed 3 arguments: 1) desired\n *     payload per `resultType`, 2) `\"value\"|\"property\"`, 3) Full returned\n *     object with all payloads\n * @param {OtherTypeCallback} [callback] If `@other()` is at the\n *   end of one's query, this will be invoked with the value of the item,\n *   its path, its parent, and its parent's property name, and it should\n *   return a boolean indicating whether the supplied value belongs to the\n *   \"other\" type or not (or it may handle transformations and return\n *   `false`).\n * @param {undefined} [otherTypeCallback]\n * @returns {unknown} The string form always has `autostart` implicitly\n *   `true`, so the result is the evaluated value, not a `JSONPathClass`\n */\n/**\n * @overload\n * @param {JSONPathOptions & {autostart: false}} opts An options object\n *   with `autostart` explicitly set to `false` defers evaluation and\n *   returns the `JSONPathClass` instance instead\n * @returns {JSONPathClass}\n */\n/**\n * @overload\n * @param {JSONPathOptions} opts If a string, will be treated as\n *   `expr`\n * @returns {unknown}\n */\n/**\n * @param {JSONPathOptions|string} opts If a string, will be treated as `expr`\n * @param {string|AnyInput} [expr] JSON path to evaluate\n * @param {AnyInput|JSONPathCallback} [obj] JSON object to evaluate against\n * @param {JSONPathCallback|OtherTypeCallback} [callback] Passed 3\n *     arguments: 1) desired payload per `resultType`,\n *     2) `\"value\"|\"property\"`, 3) Full returned object with\n *     all payloads\n * @param {OtherTypeCallback} [otherTypeCallback] If `@other()` is at the end\n *   of one's query, this will be invoked with the value of the item, its\n *   path, its parent, and its parent's property name, and it should return\n *   a boolean indicating whether the supplied value belongs to the \"other\"\n *   type or not (or it may handle transformations and return `false`).\n * @throws {Error}\n * @returns {unknown|JSONPathClass}\n */\nfunction JSONPath (opts, expr, obj, callback, otherTypeCallback) {\n    try {\n        if (opts && typeof opts === 'object') {\n            return new JSONPathClass(opts);\n        }\n        return new JSONPathClass(\n            opts,\n            expr,\n            /** @type {JSONPathCallback|undefined} */ (obj),\n            /** @type {OtherTypeCallback|undefined} */ (callback),\n            /** @type {undefined} */ (otherTypeCallback)\n        );\n    } catch (e) {\n        if (new.target) {\n            throw e;\n        }\n        if (e && typeof e === 'object' && 'value' in e) {\n            return /** @type {{value: UnknownResult}} */ (e).value;\n        }\n        throw e;\n    }\n}\n\n/**\n *\n */\nclass JSONPathClass {\n    /**\n     * @overload\n     * @param {string} opts JSON path to evaluate\n     * @param {AnyInput} [expr] JSON object to evaluate against\n     * @param {JSONPathCallback} [obj] Passed 3 arguments: 1) desired\n     *     payload per `resultType`, 2) `\"value\"|\"property\"`, 3) Full returned\n     *     object with all payloads\n     * @param {OtherTypeCallback} [callback] If `@other()` is at the\n     *   end of one's query, this will be invoked with the value of the item,\n     *   its path, its parent, and its parent's property name, and it should\n     *   return a boolean indicating whether the supplied value belongs to the\n     *   \"other\" type or not (or it may handle transformations and return\n     *   `false`).\n     * @param {undefined} [otherTypeCallback]\n     */\n    /**\n     * @overload\n     * @param {JSONPathOptions} opts If a string, will be treated as\n     *   `expr`\n     */\n    /**\n     * @param {null|string|JSONPathOptions} opts If a string, will be treated as\n     *   `expr`\n     * @param {string|AnyInput} [expr] JSON path to evaluate\n     * @param {AnyInput|JSONPathCallback} [obj] JSON object to evaluate against\n     * @param {JSONPathCallback|OtherTypeCallback} [callback] Passed 3\n     *     arguments: 1) desired payload per `resultType`,\n     *     2) `\"value\"|\"property\"`, 3) Full returned\n     *     object with all payloads\n     * @param {OtherTypeCallback} [otherTypeCallback] If `@other()` is at the\n     *   end of one's query, this will be invoked with the value of the item,\n     *   its path, its parent, and its parent's property name, and it should\n     *   return a boolean indicating whether the supplied value belongs to the\n     *   \"other\" type or not (or it may handle transformations and return\n     *   `false`).\n     */\n    constructor (opts, expr, obj, callback, otherTypeCallback) {\n        if (typeof opts === 'string') {\n            otherTypeCallback = /** @type {OtherTypeCallback} */ (\n                callback\n            );\n            callback = /** @type {JSONPathCallback} */ (\n                obj\n            );\n            obj = expr;\n            expr = opts;\n            opts = null;\n        }\n        const optObj = opts && typeof opts === 'object';\n        opts ||= /** @type {JSONPathOptions} */ ({});\n        /** @type {ResultType|undefined} */\n        this.currResultType = undefined;\n\n        /** @type {EvalValue|undefined} */\n        this.currEval = undefined;\n\n        /** @type {OtherTypeCallback|undefined} */\n        this.currOtherTypeCallback = undefined;\n\n        /** @type {Record<string, OtherTypeCallback>|undefined} */\n        this.currCustomTypes = undefined;\n\n        /** @type {SandboxType|undefined} */\n        this.currSandbox = undefined;\n\n        this._hasParentSelector = false;\n\n        this.json = opts.json || obj;\n        this.path = opts.path || expr;\n        this.resultType = opts.resultType || 'value';\n        this.flatten = Object.hasOwn(opts, 'flatten') && opts.flatten;\n        this.wrap = !Object.hasOwn(opts, 'wrap') || opts.wrap;\n        this.sandbox = opts.sandbox || {};\n        this.eval = opts.eval === undefined ? 'safe' : opts.eval;\n        this.ignoreEvalErrors = (\n            typeof opts.ignoreEvalErrors !== 'undefined'\n        ) && opts.ignoreEvalErrors;\n        this.parent = Object.hasOwn(opts, 'parent') ? opts.parent : null;\n        this.parentProperty = Object.hasOwn(opts, 'parentProperty')\n            ? opts.parentProperty\n            : null;\n        this.callback = opts.callback ||\n            /** @type {JSONPathCallback} */\n            (callback) ||\n            null;\n        this.otherTypeCallback = opts.otherTypeCallback ||\n            otherTypeCallback ||\n            function () {\n                throw new TypeError(\n                    'You must supply an otherTypeCallback callback option ' +\n                    'with the @other() operator.'\n                );\n            };\n        this.customTypes = opts.customTypes || {};\n\n        if (opts.autostart === false) {\n            return;\n        }\n\n        const args = /** @type {JSONPathOptions} */ ({\n            path: (optObj ? opts.path : expr)\n        });\n        if (!optObj && obj !== undefined) {\n            args.json = obj;\n        } else if ('json' in opts) {\n            args.json = opts.json;\n        }\n        const ret = this.evaluate(args);\n        if (!ret || typeof ret !== 'object') {\n            const err = /** @type {Error & {value: UnknownResult}} */ (\n                new Error(\n                    'JSONPath should not be called with \"new\" (it ' +\n                    'prevents return of (unwrapped) scalar values)'\n                )\n            );\n            err.value = ret;\n            throw err;\n        }\n\n        // @ts-expect-error - Constructor returns evaluate result for legacy API\n        // eslint-disable-next-line @stylistic/max-len -- Long\n        // eslint-disable-next-line consistent-return, no-constructor-return -- Legacy API\n        return ret;\n    }\n\n    // PUBLIC METHODS\n\n    /**\n     * @overload\n     * @param {JSONPathOptions} [expr]\n     * @returns {ReturnObject|ReturnObject[]|undefined|unknown}\n     */\n\n    /**\n     * @overload\n     * @param {PathType|undefined} [expr]\n     * @param {AnyInput} [json]\n     * @param {JSONPathCallback|null} [callback]\n     * @param {OtherTypeCallback} [otherTypeCallback]\n     * @returns {ReturnObject|ReturnObject[]|undefined|unknown}\n     */\n\n    /**\n     * @param {PathType|JSONPathOptions|undefined} [expr]\n     * @param {AnyInput} [json]\n     * @param {JSONPathCallback|null} [callback]\n     * @param {OtherTypeCallback} [otherTypeCallback]\n     * @returns {ReturnObject|ReturnObject[]|undefined|unknown}\n     */\n    evaluate (\n        expr, json, callback, otherTypeCallback\n    ) {\n        let currParent = this.parent,\n            currParentProperty = this.parentProperty;\n        let {flatten, wrap} = this;\n\n        this.currResultType = this.resultType;\n        this.currEval = this.eval;\n        this.currSandbox = this.sandbox;\n        callback ||= this.callback;\n        this.currOtherTypeCallback = otherTypeCallback ||\n            this.otherTypeCallback;\n        this.currCustomTypes = this.customTypes;\n\n        if (expr && typeof expr === 'object' && !Array.isArray(expr)) {\n            const exprObj = expr;\n            if (!exprObj.path && exprObj.path !== '') {\n                throw new TypeError(\n                    'You must supply a \"path\" property when providing an ' +\n                    'object argument to JSONPath.evaluate().'\n                );\n            }\n            if (!(Object.hasOwn(exprObj, 'json'))) {\n                throw new TypeError(\n                    'You must supply a \"json\" property when providing an ' +\n                    'object argument to JSONPath.evaluate().'\n                );\n            }\n            ({json} = exprObj);\n            flatten = Object.hasOwn(exprObj, 'flatten')\n                ? exprObj.flatten\n                : flatten;\n            this.currResultType = Object.hasOwn(exprObj, 'resultType')\n                ? exprObj.resultType\n                : this.currResultType;\n            this.currSandbox = Object.hasOwn(exprObj, 'sandbox')\n                ? exprObj.sandbox\n                : this.currSandbox;\n            wrap = Object.hasOwn(exprObj, 'wrap') ? exprObj.wrap : wrap;\n            this.currEval = Object.hasOwn(exprObj, 'eval')\n                ? exprObj.eval\n                : this.currEval;\n            callback = Object.hasOwn(exprObj, 'callback')\n                ? exprObj.callback\n                : callback;\n            this.currOtherTypeCallback = Object.hasOwn(\n                exprObj, 'otherTypeCallback'\n            )\n                ? exprObj.otherTypeCallback\n                : this.currOtherTypeCallback;\n            this.currCustomTypes = Object.hasOwn(\n                exprObj, 'customTypes'\n            )\n                ? exprObj.customTypes\n                : this.currCustomTypes;\n            currParent = Object.hasOwn(exprObj, 'parent')\n                ? exprObj.parent\n                : currParent;\n            currParentProperty = Object.hasOwn(exprObj, 'parentProperty')\n                ? exprObj.parentProperty\n                : currParentProperty;\n            expr = exprObj.path;\n        } else {\n            json ||= this.json;\n            expr ||= this.path;\n        }\n        currParent ||= null;\n        currParentProperty ||= null;\n\n        if (Array.isArray(expr)) {\n            expr = JSONPath.toPathString(expr);\n        }\n        if (!json || (!expr && expr !== '')) {\n            return undefined;\n        }\n\n        const exprList = JSONPath.toPathArray(\n            /** @type {string} */\n            (expr)\n        );\n        if (exprList[0] === '$' && exprList.length > 1) {\n            exprList.shift();\n        }\n        this._hasParentSelector = false;\n        const traceResult = this._trace(\n            exprList, json, ['$'], currParent,\n            currParentProperty,\n            callback ?? undefined,\n            undefined\n        );\n\n        // eslint-disable-next-line @stylistic/max-len -- Long\n        /* c8 ignore next 2 -- Unreachable: _trace returns array when hasArrExpr set */\n        const result = (\n            Array.isArray(traceResult) ? traceResult : [traceResult]\n        ).filter((ea) => {\n            return ea && !ea.isParentSelector;\n        });\n\n        if (!result.length) {\n            // eslint-disable-next-line @stylistic/max-len -- Long\n            /* c8 ignore next -- Unreachable: valid queries always produce results */\n            return wrap ? [] : undefined;\n        }\n        if (!wrap && result.length === 1 && !result[0].hasArrExpr) {\n            const preferredOutput = this._getPreferredOutput(result[0]);\n            return preferredOutput;\n        }\n        const reduced = result.reduce(\n            (rslt, ea) => {\n                const valOrPath = this._getPreferredOutput(ea);\n                if (flatten && Array.isArray(valOrPath)) {\n                    rslt = rslt.concat(valOrPath);\n                } else {\n                    rslt.push(valOrPath);\n                }\n                return rslt;\n            },\n            /** @type {UnknownResult[]} */\n            ([])\n        );\n\n        return reduced;\n    }\n\n    // PRIVATE METHODS\n\n    /**\n     * @param {ReturnObject} ea\n     * @returns {PreferredOutput}\n     */\n    _getPreferredOutput (ea) {\n        const resultType = this.currResultType;\n        switch (resultType) {\n        case 'all': {\n            const path = Array.isArray(ea.path)\n                ? ea.path\n                : JSONPath.toPathArray(ea.path);\n            ea.pointer = JSONPath.toPointer(/** @type {string[]} */ (path));\n            ea.path = typeof ea.path === 'string'\n                ? ea.path\n                : JSONPath.toPathString(/** @type {string[]} */ (ea.path));\n            return ea;\n        } case 'value': case 'parent': case 'parentProperty':\n            return /** @type {PreferredOutput} */ (ea[resultType]);\n        case 'path':\n            if (typeof ea.path === 'string') {\n                return ea.path;\n            }\n            return JSONPath.toPathString(/** @type {string[]} */ (ea.path));\n        case 'pointer': {\n            const pathArray = Array.isArray(ea.path)\n                ? ea.path\n                : JSONPath.toPathArray(ea.path);\n            return JSONPath.toPointer(/** @type {string[]} */ (pathArray));\n        }\n        default:\n            throw new TypeError('Unknown result type');\n        }\n    }\n\n    /**\n     * @param {ReturnObject} fullRetObj\n     * @param {JSONPathCallback|undefined} callback\n     * @param {\"value\"|\"property\"} type\n     * @returns {void}\n     */\n    _handleCallback (fullRetObj, callback, type) {\n        // Early return if no callback provided (defensive\n        //   check for internal calls)\n        if (!callback) {\n            return;\n        }\n        const preferredOutput = this._getPreferredOutput(fullRetObj);\n        if (Array.isArray(fullRetObj.path)) {\n            fullRetObj.path = JSONPath.toPathString(\n                /** @type {string[]} */ (fullRetObj.path)\n            );\n        }\n        callback(preferredOutput, type, fullRetObj);\n    }\n\n    /**\n     *\n     * @param {ExpressionArray} expr\n     * @param {unknown} val\n     * @param {ExpressionArray} path\n     * @param {ParentValue} parent\n     * @param {ParentProperty} parentPropName\n     * @param {JSONPathCallback|undefined} callback\n     * @param {boolean|undefined} hasArrExpr\n     * @param {boolean} [literalPriority]\n     * @returns {ReturnObject|ReturnObject[]}\n     */\n    _trace (\n        expr, val, path, parent, parentPropName, callback, hasArrExpr,\n        literalPriority\n    ) {\n        // No expr to follow? return path and value as the result of\n        //  this trace branch\n        let retObj;\n        if (!expr.length) {\n            retObj = {\n                path,\n                value: val,\n                parent,\n                parentProperty: parentPropName,\n                hasArrExpr\n            };\n            this._handleCallback(retObj, callback, 'value');\n            return retObj;\n        }\n\n        const loc = /** @type {string} */ (expr[0]), x = expr.slice(1);\n\n        // We need to gather the return value of recursive trace calls in order\n        //  to do the parent sel computation.\n        /** @type {ReturnObject[]} */\n        const ret = [];\n        /**\n         *\n         * @param {ReturnObject|ReturnObject[]} elems\n         * @returns {void}\n         */\n        function addRet (elems) {\n            if (Array.isArray(elems)) {\n                // This was causing excessive stack size in Node (with or\n                //  without Babel) against our performance test:\n                //  `ret.push(...elems);`\n                elems.forEach((t) => {\n                    ret.push(t);\n                });\n            } else {\n                ret.push(elems);\n            }\n        }\n        if (val && (typeof loc !== 'string' || literalPriority) &&\n            Object.hasOwn(val, /** @type {PropertyKey} */ (loc))\n        ) { // simple case--directly follow property\n            const valObj = /** @type {Record<string, unknown>} */ (val);\n            addRet(this._trace(\n                x, valObj[/** @type {string} */ (loc)],\n                push(path, loc),\n                val, /** @type {string|number} */ (loc), callback,\n                hasArrExpr\n            ));\n        // eslint-disable-next-line unicorn/prefer-switch -- Part of larger `if`\n        } else if (loc === '*') { // all child properties\n            this._walk(val, (m) => {\n                const valObj = /** @type {Record<string, unknown>} */ (val);\n                addRet(this._trace(\n                    x, valObj[m], push(path, m), val, m, callback, true, true\n                ));\n            });\n        } else if (loc === '..') { // all descendent parent properties\n            // Check remaining expression with val's immediate children\n            addRet(\n                this._trace(x, val, path, parent, parentPropName, callback,\n                    hasArrExpr)\n            );\n            this._walk(val, (m) => {\n                // We don't join m and x here because we only want parents,\n                //   not scalar values\n                const valObj = /** @type {Record<string, unknown>} */ (val);\n                if (typeof valObj[m] === 'object') {\n                    // Keep going with recursive descent on val's\n                    //   object children\n                    addRet(this._trace(\n                        expr.slice(),\n                        valObj[m],\n                        push(path, m),\n                        val,\n                        m,\n                        callback,\n                        true\n                    ));\n                }\n            });\n        // The parent sel computation is handled in the frame above using the\n        // ancestor object of val\n        } else if (loc === '^') {\n            // This is not a final endpoint, so we do not invoke the\n            //   callback here\n            this._hasParentSelector = true;\n            return /** @type {ReturnObject} */ ({\n                path: path.slice(0, -1),\n                expr: x,\n                isParentSelector: true,\n                value: undefined,\n                parent: undefined,\n                parentProperty: null\n            });\n        } else if (loc === '~') { // property name\n            retObj = {\n                path: push(path, loc),\n                value: parentPropName,\n                parent,\n                parentProperty: null\n            };\n            this._handleCallback(retObj, callback, 'property');\n            return retObj;\n        } else if (loc === '$') { // root only\n            addRet(this._trace(x, val, path, null, null, callback, hasArrExpr));\n        } else if ((/^(-?\\d*):(-?\\d*):?(\\d*)$/v).test(loc)) { // [start:end:step]  Python slice syntax\n            const sliceResult = this._slice(\n                loc, x, val, path, parent, parentPropName, callback\n            );\n            if (sliceResult) {\n                addRet(sliceResult);\n            }\n        } else if (loc.indexOf('?(') === 0) { // [?(expr)] (filtering)\n            if (this.currEval === false) {\n                throw new Error(\n                    'Eval [?(expr)] prevented in JSONPath expression.'\n                );\n            }\n            const safeLoc = loc.replace(/^\\?\\((.*?)\\)$/v, '$1');\n            // check for a nested filter expression\n\n            const nested = (/@.?([^?]*)[\\['](\\??\\(.*?\\))(?!.\\)\\])[\\]']/gv).exec(safeLoc);\n            if (nested) {\n                // find if there are matches in the nested expression\n                // add them to the result set if there is at least one match\n                this._walk(val, (m) => {\n                    const npath = [nested[2]];\n                    const valObj2 = /** @type {Record<string, unknown>} */ (\n                        val\n                    );\n                    // guard against nested[1] resolving to `constructor`\n                    const nvalue = /** @type {ValueType} */ (nested[1]\n                        ? getSafeProperty(\n                            /** @type {Record<string, unknown>} */ (\n                                valObj2[m]\n                            ),\n                            nested[1]\n                        )\n                        : valObj2[m]);\n                    const filterResults = this._trace(npath, nvalue, path,\n                        parent, parentPropName, callback, true);\n                    // eslint-disable-next-line @stylistic/max-len -- Long\n                    /* c8 ignore next 3 -- Unreachable: _trace always returns array for nested filters */\n                    const filterArray = Array.isArray(filterResults)\n                        ? filterResults\n                        : [filterResults];\n                    if (filterArray.length > 0) {\n                        addRet(this._trace(x, valObj2[m], push(path, m), val,\n                            m, callback, true));\n                    }\n                });\n            } else {\n                const valObj3 = /** @type {Record<string, unknown>} */ (val);\n                this._walk(val, (m) => {\n                    if (this._eval(safeLoc, valObj3[m], m, path, parent,\n                        parentPropName)) {\n                        addRet(this._trace(x, valObj3[m], push(path, m), val, m,\n                            callback, true));\n                    }\n                });\n            }\n        } else if (loc[0] === '(') { // [(expr)] (dynamic property/index)\n            if (this.currEval === false) {\n                throw new Error(\n                    'Eval [(expr)] prevented in JSONPath expression.'\n                );\n            }\n            // As this will resolve to a property name (but we don't know it\n            //  yet), property and parent information is relative to the\n            const evalResult = this._eval(\n                /** @type {string} */ (loc),\n                val, /** @type {string|number} */ (path.at(-1)),\n                path.slice(0, -1), parent, parentPropName\n            );\n            const exprToUse = /** @type {string|number} */ (\n                evalResult !== undefined ? evalResult : ''\n            );\n            addRet(this._trace(unshift(\n                exprToUse,\n                x\n            ), val, path, parent, parentPropName, callback, hasArrExpr));\n        } else if (loc[0] === '@') { // value type: @boolean(), etc.\n            // eslint-disable-next-line no-useless-assignment -- ESLint bug\n            let addType = false;\n            const parenthIndex = loc.indexOf('(');\n            const valueType = /** @type {ValueType|string} */ (\n                loc\n            ).slice(1, parenthIndex);\n            const lastParenth = loc.lastIndexOf(')');\n            const argRaw = loc.slice(parenthIndex + 1, lastParenth);\n            const arg = argRaw ? JSON.parse(argRaw) : undefined;\n            switch (valueType) {\n            case 'scalar':\n                addType = !val ||\n                    !(['object', 'function'].includes(typeof val));\n                break;\n            case 'boolean': case 'string': case 'undefined': case 'function':\n                addType = typeof val === valueType;\n                break;\n            case 'integer':\n                addType = Number.isFinite(val) &&\n                    !(/** @type {number} */ (val) % 1);\n                break;\n            case 'number':\n                addType = Number.isFinite(val);\n                break;\n            case 'nonFinite':\n                addType = typeof val === 'number' && !Number.isFinite(val);\n                break;\n            case 'object':\n                addType = Boolean(val) && typeof val === valueType;\n                break;\n            case 'array':\n                addType = Array.isArray(val);\n                break;\n            case 'other':\n                addType = /** @type {OtherTypeCallback} */ (\n                    this.currOtherTypeCallback\n                )(\n                    val, path, parent, parentPropName, arg\n                ) || false;\n                break;\n            case 'null':\n                addType = val === null;\n                break;\n            case 'symbol':\n                addType = typeof val === 'symbol';\n                break;\n            case 'BigInt':\n                addType = typeof val === 'bigint';\n                break;\n            case 'Promise':\n                addType = toStringTag(val) === 'Promise';\n                break;\n            case 'jsonReference':\n                addType = Boolean(val) && typeof val === 'object' &&\n                    Object.hasOwn(/** @type {object} */ (val), '$ref');\n                break;\n            default:\n                if (this.currCustomTypes &&\n                    Object.hasOwn(this.currCustomTypes, valueType)\n                ) {\n                    addType = this.currCustomTypes[valueType](\n                        val, path, parent, parentPropName, arg\n                    ) || false;\n                } else {\n                    throw new TypeError('Unknown value type ' + valueType);\n                }\n            }\n            if (addType) {\n                retObj = {\n                    path, value: val, parent, parentProperty: parentPropName\n                };\n                this._handleCallback(retObj, callback, 'value');\n                return retObj;\n            }\n        // `-escaped property\n        } else if (val && loc[0] === '`' &&\n            Object.hasOwn(val, loc.slice(1))\n        ) {\n            const locProp = loc.slice(1);\n            const valObj = /** @type {Record<string, unknown>} */ (val);\n            addRet(this._trace(\n                x, valObj[locProp], push(path, locProp), val, locProp, callback,\n                hasArrExpr, true\n            ));\n        } else if (loc[0] === \"'\" || loc[0] === '\"') { // ['name1','name2',...]\n            // Quoted members are literal property names\n            for (const [, single, double] of loc.matchAll(\n                /'((?:\\\\.|[^'\\\\])*)'|\"((?:\\\\.|[^\"\\\\])*)\"/gv\n            )) {\n                const prop = (single ?? double).replaceAll(\n                    /\\\\(['\"\\\\])/gv, '$1'\n                );\n                if (!val || !Object.hasOwn(val, prop)) {\n                    continue;\n                }\n                const valObj = /** @type {Record<string, unknown>} */ (val);\n                addRet(this._trace(\n                    x, valObj[prop], push(path, prop), val, prop,\n                    callback, true\n                ));\n            }\n        } else if (loc.includes(',')) { // [name1,name2,...]\n            const parts = loc.split(',');\n            for (const part of parts) {\n                addRet(this._trace(\n                    unshift(part, x),\n                    val,\n                    path,\n                    parent,\n                    parentPropName,\n                    callback,\n                    true\n                ));\n            }\n        // simple case--directly follow property\n        } else if (\n            !literalPriority && val && Object.hasOwn(val, loc)\n        ) {\n            const valObj = /** @type {Record<string, unknown>} */ (val);\n            addRet(\n                this._trace(x, valObj[loc], push(path, loc), val, loc, callback,\n                    hasArrExpr, true)\n            );\n        }\n\n        // We check the resulting values for parent selections. For parent\n        // selections we discard the value object and continue the trace with\n        // the current val object\n        if (this._hasParentSelector) {\n            for (let t = 0; t < ret.length; t++) {\n                const rett = ret[t];\n                if (!rett || !rett.isParentSelector) {\n                    continue;\n                }\n\n                const exprToUse = /** @type {ExpressionArray} */ (\n                    rett.expr\n                );\n                const pathToUse = /** @type {ExpressionArray} */ (\n                    rett.path\n                );\n                const tmp = this._trace(\n                    exprToUse,\n                    val,\n                    pathToUse,\n                    parent,\n                    parentPropName,\n                    callback,\n                    hasArrExpr\n                );\n                if (Array.isArray(tmp)) {\n                    ret[t] = tmp[0];\n                    const tl = tmp.length;\n                    for (let tt = 1; tt < tl; tt++) {\n                        t++;\n                        ret.splice(t, 0, tmp[tt]);\n                    }\n                } else {\n                    ret[t] = tmp;\n                }\n            }\n        }\n        return ret;\n    }\n\n    /**\n     * @param {unknown} val\n     * @param {(prop: string|number) => void} f\n     * @returns {void}\n     */\n    _walk (val, f) {\n        if (Array.isArray(val)) {\n            const n = val.length;\n            for (let i = 0; i < n; i++) {\n                f(i);\n            }\n        } else if (val && typeof val === 'object') {\n            Object.keys(val).forEach((m) => {\n                f(m);\n            });\n        }\n    }\n\n    /**\n     * @param {string} loc\n     * @param {ExpressionArray} expr\n     * @param {unknown} val\n     * @param {ExpressionArray} path\n     * @param {ParentValue} parent\n     * @param {ParentProperty} parentPropName\n     * @param {JSONPathCallback|undefined} callback\n     * @returns {ReturnObject[]|undefined}\n     */\n    _slice (\n        loc, expr, val, path, parent, parentPropName, callback\n    ) {\n        if (!Array.isArray(val)) {\n            return undefined;\n        }\n        const len = val.length, parts = loc.split(':'),\n            step = (parts[2] && Number(parts[2])) || 1;\n        let start = (parts[0] && Number(parts[0])) || 0,\n            end = parts[1] ? Number(parts[1]) : len;\n        start = (start < 0) ? Math.max(0, start + len) : Math.min(len, start);\n        end = (end < 0) ? Math.max(0, end + len) : Math.min(len, end);\n        /** @type {ReturnObject[]} */\n        const ret = [];\n        for (let i = start; i < end; i += step) {\n            const tmp = this._trace(\n                unshift(i, expr),\n                val,\n                path,\n                parent,\n                parentPropName,\n                callback,\n                true\n            );\n            // Should only be possible to be an array here since first part of\n            //   ``unshift(i, expr)` passed in above would not be empty,\n            //     nor `~`, nor begin with `@` (as could return objects)\n            // This was causing excessive stack size in Node (with or\n            //  without Babel) against our performance test: `ret.push(...tmp);`\n            // eslint-disable-next-line @stylistic/max-len -- Long\n            /* c8 ignore next -- Unreachable: _trace returns array when expr non-empty */\n            const tmpArray = Array.isArray(tmp) ? tmp : [tmp];\n            tmpArray.forEach((t) => {\n                ret.push(t);\n            });\n        }\n        return ret;\n    }\n\n    /**\n     * @param {string} code\n     * @param {unknown} _v\n     * @param {string|number} _vname\n     * @param {ExpressionArray} path\n     * @param {ParentValue} parent\n     * @param {ParentProperty} parentPropName\n     * @returns {UnknownResult}\n     */\n    _eval (\n        code, _v, _vname, path, parent, parentPropName\n    ) {\n        if (this.currSandbox) {\n            this.currSandbox._$_parentProperty = parentPropName;\n            this.currSandbox._$_parent = parent;\n            this.currSandbox._$_property = _vname;\n            this.currSandbox._$_root = this.json;\n            this.currSandbox._$_v = _v;\n        }\n\n        const containsPath = code.includes('@path');\n        if (containsPath) {\n            // eslint-disable-next-line @stylistic/max-len -- Long\n            /* c8 ignore next -- Unreachable: currSandbox set in evaluate() before _eval */\n            const currSandbox = this.currSandbox ?? {};\n            currSandbox._$_path = JSONPath.toPathString(\n                /** @type {string[]} */ (path.concat([_vname]))\n            );\n        }\n\n        const scriptCacheKey = this.currEval + 'Script:' + code;\n        if (!scriptCache.has(scriptCacheKey)) {\n            let script = code\n                .replaceAll('@parentProperty', '_$_parentProperty')\n                .replaceAll('@parent', '_$_parent')\n                .replaceAll('@property', '_$_property')\n                .replaceAll('@root', '_$_root')\n                // Replace a bare `@` (not followed by an identifier\n                //   character) while leaving quoted string literals and\n                //   regex literals (a `/` where an operand is expected,\n                //   as opposed to division) intact\n                .replaceAll(\n                    /('(?:\\\\.|[^'\\\\])*'|\"(?:\\\\.|[^\"\\\\])*\"|(?<=(?:^|[\\(,=:\\[!\\|?\\{\\};+\\-*%<>~^]|&)\\s*)\\/(?:\\\\.|\\[(?:\\\\.|[^\\]\\\\])*\\]|[^\\/\\\\\\[])+\\/[dgimsuvy]*)|@(?![\\w$])/gv,\n                    (_, literal) => literal ?? '_$_v'\n                );\n            if (containsPath) {\n                script = script.replaceAll('@path', '_$_path');\n            }\n            const evalType = /** @type {string|boolean|undefined} */ (\n                this.currEval\n            );\n            if (['safe', true, undefined].includes(evalType)) {\n                // eslint-disable-next-line @stylistic/max-len -- Long\n                /* eslint-disable unicorn/no-undeclared-class-members -- Prototype members */\n                scriptCache.set(scriptCacheKey, new (\n                    /**\n                     * @type {JSONPathClass & {\n                     *   safeVm: SafeScriptType,\n                     *   vm: ScriptType\n                     * }}\n                     */ (/** @type {unknown} */ (this))\n                ).safeVm.Script(script));\n            // eslint-disable-next-line @stylistic/max-len -- Long\n            /* eslint-enable unicorn/no-undeclared-class-members -- End prototype member scope */\n            } else if (this.currEval === 'native') {\n                // eslint-disable-next-line @stylistic/max-len -- Long\n                /* eslint-disable unicorn/no-undeclared-class-members -- Prototype members */\n                scriptCache.set(scriptCacheKey, new (\n                    /**\n                     * @type {JSONPathClass & {\n                     *   safeVm: SafeScriptType,\n                     *   vm: ScriptType\n                     * }}\n                     */ (/** @type {unknown} */ (this))\n                ).vm.Script(script));\n                // eslint-disable-next-line @stylistic/max-len -- Long\n                /* eslint-enable unicorn/no-undeclared-class-members -- End prototype member scope */\n            } else if (\n                typeof this.currEval === 'function' &&\n                this.currEval.prototype &&\n                Object.hasOwn(this.currEval.prototype, 'runInNewContext')\n            ) {\n                const CurrEval = this.currEval;\n                // eslint-disable-next-line @stylistic/max-len -- Long\n                // @ts-expect-error - Type checked above to have proper constructor\n                scriptCache.set(scriptCacheKey, new CurrEval(script));\n            } else if (typeof this.currEval === 'function') {\n                // Type narrowing: at this point currEval is a function\n                //   but not a constructor\n                const evalFunc = /** @type {EvalCallback} */ (this.currEval);\n                scriptCache.set(scriptCacheKey, {\n                    runInNewContext: (\n                        /** @type {ContextItem} */ context\n                    ) => evalFunc(script, context)\n                });\n            } else {\n                throw new TypeError(\n                    `Unknown \"eval\" property \"${this.currEval}\"`\n                );\n            }\n        }\n\n        try {\n            /**\n             * @typedef {{\n             *   runInNewContext: (\n             *     ctx: SandboxType|undefined\n             *   ) => EvaluatedResult\n             * }} RunInNewContext\n             */\n\n            return /** @type {RunInNewContext} */ (\n                scriptCache.get(scriptCacheKey)\n            ).runInNewContext(\n                this.currSandbox\n            );\n        } catch (e) {\n            if (this.ignoreEvalErrors) {\n                return false;\n            }\n            const error = /** @type {Error} */ (e);\n            throw new Error('jsonPath: ' + error.message + ': ' + code, {\n                cause: e\n            });\n        }\n    }\n}\n\n/** @type {{safeVm: SafeScriptType}} */\n(/** @type {unknown} */ (JSONPathClass.prototype)).safeVm = {\n    Script: SafeScript\n};\n\nJSONPath.prototype = JSONPathClass.prototype;\n\n// PUBLIC CLASS PROPERTIES AND METHODS\n\n/**\n * Clears cached parsed paths and compiled scripts.\n * @returns {void}\n */\nJSONPath.clearCache = function () {\n    pathCache.clear();\n    scriptCache.clear();\n};\n\n/**\n * @param {string[]} pathArr Array to convert\n * @returns {string} The path string\n */\nJSONPath.toPathString = function (pathArr) {\n    const x = pathArr, n = x.length;\n    let p = '$';\n    for (let i = 1; i < n; i++) {\n        if (!(/^(~|\\^|@.*?\\(\\))$/v).test(x[i])) {\n            p += (/^[0-9*]+$/v).test(x[i])\n                ? ('[' + x[i] + ']')\n                : (\"['\" + String(x[i]).replaceAll(/['\\\\]/gv, String.raw`\\$&`) + \"']\");\n        }\n    }\n    return p;\n};\n\n/**\n * @param {string[]} pointer JSON Path array\n * @returns {string} JSON Pointer\n */\nJSONPath.toPointer = function (pointer) {\n    const x = pointer, n = x.length;\n    let p = '';\n    for (let i = 1; i < n; i++) {\n        if (!(/^(~|\\^|@.*?\\(\\))$/v).test(x[i])) {\n            p += '/' + x[i].toString()\n                .replaceAll('~', '~0')\n                .replaceAll('/', '~1');\n        }\n    }\n    return p;\n};\n\n/**\n * @param {string} expr Expression to convert\n * @returns {string[]}\n */\nJSONPath.toPathArray = function (expr) {\n    if (pathCache.has(expr)) {\n        return /** @type {string[]} */ (pathCache.get(expr)).concat();\n    }\n    /** @type {string[]} */\n    const subx = [];\n    const normalized = expr\n        // Properties\n        .replaceAll(\n            /@[\\w$\\-]+\\([^\\)]*\\)/gv,\n            ';$&;'\n        )\n        // Parenthetical evaluations (filtering and otherwise), directly\n        //   within brackets or single quotes\n        .replaceAll(/[\\['](\\??\\(.*?\\))[\\]'](?!.\\])/gv, function ($0, $1) {\n            return '[#' +\n                // eslint-disable-next-line @stylistic/max-len -- Long\n                // eslint-disable-next-line unicorn/no-return-array-push -- Optimization\n                (subx.push($1) - 1) +\n                ']';\n        })\n        // Unions of quoted property names (e.g., `['x','y']`) and quoted\n        //   names with commas or backslash escapes, kept intact (with\n        //   quotes) so their members survive tokenization\n        .replaceAll(\n            /\\[\\s*((?:'(?:\\\\.|[^'\\\\])*'|\"(?:\\\\.|[^\"\\\\])*\")(?:\\s*,\\s*(?:'(?:\\\\.|[^'\\\\])*'|\"(?:\\\\.|[^\"\\\\])*\"))*)\\s*\\]/gv,\n            function ($0, $1) {\n                if (!(/[,\\\\]/v).test($1)) {\n                    return $0;\n                }\n                // eslint-disable-next-line @stylistic/max-len -- Long\n                // eslint-disable-next-line unicorn/no-return-array-push -- Optimization\n                return '[#' + (subx.push($1) - 1) + ']';\n            }\n        )\n        // Escape periods and tildes within properties\n        .replaceAll(/\\[['\"]([^'\\]]*)['\"]\\]/gv, function ($0, prop) {\n            return \"['\" + prop\n                .replaceAll('.', '%@%')\n                .replaceAll('~', '%%@@%%') +\n                \"']\";\n        })\n        // Properties operator\n        .replaceAll('~', ';~;')\n        // Split by property boundaries\n\n        .replaceAll(/['\"]?\\.['\"]?(?![^\\[]*\\])|\\[['\"]?/gv, ';')\n        // Reinsert periods within properties\n        .replaceAll('%@%', '.')\n        // Reinsert tildes within properties\n        .replaceAll('%%@@%%', '~')\n        // Parent\n        .replaceAll(/(?:;)?(\\^+)(?:;)?/gv, function ($0, ups) {\n            return ';' + ups.split('').join(';') + ';';\n        })\n        // Descendents\n        .replaceAll(/;;;|;;/gv, ';..;')\n        // Remove trailing\n        .replaceAll(/;$|'?\\]|'$/gv, '');\n\n    const exprList = normalized.split(';').map(function (exp) {\n        const match = exp.match(/#(\\d+)/v);\n        return !match || !match[1] ? exp : subx[Number(match[1])];\n    });\n    pathCache.set(expr, exprList);\n    return /** @type {string[]} */ (pathCache.get(expr)).concat();\n};\n\nexport {JSONPath, JSONPathClass};\n","import {JSONPath, JSONPathClass} from './jsonpath.js';\n\n/**\n * @typedef {import('./jsonpath.js').AnyInput} AnyInput\n */\n/**\n * @typedef {import('./jsonpath.js').SandboxCallback} SandboxCallback\n */\n/**\n * @typedef {import('./jsonpath.js').SandboxPropertyValue} SandboxPropertyValue\n */\n/**\n * @typedef {import('./jsonpath.js').ExpressionArray} ExpressionArray\n */\n/**\n * @typedef {import('./jsonpath.js').ValueType} ValueType\n */\n/**\n * @typedef {import('./jsonpath.js').ParentValue} ParentValue\n */\n/**\n * @typedef {import('./jsonpath.js').UnknownResult} UnknownResult\n */\n/**\n * @typedef {import('./jsonpath.js').ParentProperty} ParentProperty\n */\n/**\n * @typedef {import('./jsonpath.js').PreferredOutput} PreferredOutput\n */\n/**\n * @typedef {import('./jsonpath.js').ReturnObject} ReturnObject\n */\n/**\n * @typedef {import('./jsonpath.js').JSONPathCallback} JSONPathCallback\n */\n/**\n * @typedef {import('./jsonpath.js').OtherTypeCallback} OtherTypeCallback\n */\n/**\n * @typedef {import('./jsonpath.js').ContextItem} ContextItem\n */\n/**\n * @typedef {import('./jsonpath.js').EvaluatedResult} EvaluatedResult\n */\n/**\n * @typedef {import('./jsonpath.js').EvalCallback} EvalCallback\n */\n/**\n * @typedef {import('./jsonpath.js').EvalClass} EvalClass\n */\n/**\n * @typedef {import('./jsonpath.js').ResultType} ResultType\n */\n/**\n * @typedef {import('./jsonpath.js').EvalValue} EvalValue\n */\n/**\n * @typedef {import('./jsonpath.js').PathType} PathType\n */\n/**\n * @typedef {import('./jsonpath.js').SafeScriptType} SafeScriptType\n */\n/**\n * @typedef {import('./jsonpath.js').ScriptType} ScriptType\n */\n/**\n * @typedef {import('./jsonpath.js').SandboxType} SandboxType\n */\n/**\n * @typedef {import('./jsonpath.js').JSONPathOptions} JSONPathOptions\n */\n\n/**\n * @template T\n * @callback ConditionCallback\n * @param {T} item\n * @returns {boolean}\n */\n\n/**\n * Copy items out of one array into another.\n * @template T\n * @param {T[]} source Array with items to copy\n * @param {T[]} target Array to which to copy\n * @param {ConditionCallback<T>} conditionCb Callback passed the current item;\n *     will move item if evaluates to `true`\n * @returns {void}\n */\nconst moveToAnotherArray = function (source, target, conditionCb) {\n    const il = source.length;\n    for (let i = 0; i < il; i++) {\n        const item = source[i];\n        if (conditionCb(item)) {\n            target.push(source.splice(i--, 1)[0]);\n        }\n    }\n};\n\n/**\n * In-browser replacement for NodeJS' VM.Script.\n */\nclass Script {\n    /**\n     * @param {string} expr Expression to evaluate\n     */\n    constructor (expr) {\n        this.code = expr;\n    }\n\n    /**\n     * @param {SandboxType} context Object whose items will be added\n     *   to evaluation\n     * @returns {EvaluatedResult} Result of evaluated code\n     */\n    runInNewContext (context) {\n        let expr = this.code;\n        const keys = Object.keys(context);\n        const funcs = /** @type {string[]} */ ([]);\n        moveToAnotherArray(keys, funcs, (key) => {\n            return typeof context[key] === 'function';\n        });\n        const values = keys.map((vr) => {\n            return context[vr];\n        });\n\n        const funcString = funcs.reduce((s, func) => {\n            let fString = context[func].toString();\n            if (!(/function/v).test(fString)) {\n                fString = 'function ' + fString;\n            }\n            return 'var ' + func + '=' + fString + ';' + s;\n        }, '');\n\n        expr = funcString + expr;\n\n        // Mitigate https://perfectionkills.com/global-eval-what-are-the-options/#new_function\n        if (!(/(['\"])use strict\\1/v).test(expr) && !keys.includes('arguments')) {\n            expr = 'var arguments = undefined;' + expr;\n        }\n\n        // Remove last semi so `return` will be inserted before\n        //  the previous one instead, allowing for the return\n        //  of a bare ending expression\n        expr = expr.replace(/;\\s*$/v, '');\n\n        // Insert `return`\n        const lastStatementEnd = expr.lastIndexOf(';');\n        const code =\n            lastStatementEnd !== -1\n                ? expr.slice(0, lastStatementEnd + 1) +\n                  ' return ' +\n                  expr.slice(lastStatementEnd + 1)\n                : ' return ' + expr;\n\n        // eslint-disable-next-line no-new-func -- User's choice\n        return new Function(...keys, code)(...values);\n    }\n}\n\n/** @type {{vm: ScriptType}} */\n(/** @type {unknown} */ (JSONPathClass.prototype)).vm = {\n    Script\n};\n\nexport {JSONPath, JSONPathClass, Script};\n"],"names":["Jsep","version","toString","addUnaryOp","op_name","max_unop_len","Math","max","length","unary_ops","addBinaryOp","precedence","isRightAssociative","max_binop_len","binary_ops","right_associative","add","delete","addIdentifierChar","char","additional_identifier_chars","addLiteral","literal_name","literal_value","literals","removeUnaryOp","getMaxKeyLen","removeAllUnaryOps","removeIdentifierChar","removeBinaryOp","removeAllBinaryOps","removeLiteral","removeAllLiterals","this","expr","charAt","index","code","charCodeAt","constructor","parse","obj","Object","keys","map","k","isDecimalDigit","ch","binaryPrecedence","op_val","isIdentifierStart","String","fromCharCode","has","isIdentifierPart","throwError","message","error","Error","description","runHook","name","node","hooks","env","context","run","searchHook","find","callback","call","gobbleSpaces","SPACE_CODE","TAB_CODE","LF_CODE","CR_CODE","nodes","gobbleExpressions","type","COMPOUND","body","untilICode","ch_i","SEMCOL_CODE","COMMA_CODE","gobbleExpression","push","gobbleBinaryExpression","gobbleBinaryOp","to_check","substr","tc_len","hasOwnProperty","biop","prec","stack","biop_info","left","right","i","cur_biop","gobbleToken","value","right_a","comparePrev","prev","pop","BINARY_EXP","operator","PERIOD_CODE","gobbleNumericLiteral","SQUOTE_CODE","DQUOTE_CODE","gobbleStringLiteral","OBRACK_CODE","gobbleArray","argument","UNARY_EXP","prefix","gobbleIdentifier","LITERAL","raw","this_str","THIS_EXP","OPAREN_CODE","gobbleGroup","gobbleTokenProperty","QUMARK_CODE","optional","MEMBER_EXP","computed","object","property","CBRACK_CODE","CALL_EXP","arguments","gobbleArguments","CPAREN_CODE","callee","chCode","number","parseFloat","str","startIndex","quote","closed","substring","start","IDENTIFIER","slice","termination","args","separator_count","arg","SEQUENCE_EXP","expressions","ARRAY_EXP","elements","first","Array","isArray","forEach","assign","plugins","jsep","registered","register","plugin","init","COLON_CODE","Set","true","false","null","stdClassProps","getOwnPropertyNames","filter","prop","includes","undefined","m","ternary","test","consequent","alternate","newTest","patternIndex","inCharSet","pattern","flags","RegExp","e","assignmentOperators","updateOperators","assignmentPrecedence","updateNodeTypes","updateBinariesToAssignments","values","val","op","some","c","jsepRegex","jsepAssignment","BLOCKED_PROTO_PROPERTIES","BLOCKED_FUNCTIONS","WeakSet","Function","async","prototype","apply","bind","Reflect","construct","get","isBlockedFunction","getSafeProperty","TypeError","hasOwn","result","BINOPS","create","||","a","b","??","&&","|","^","&","==","!=","===","!==","<",">","<=",">=","<<",">>",">>>","+","-","*","/","%","**","UNOPS","typeof","void","SafeEval","evalAst","ast","subs","evalBinaryExpression","evalCompound","evalConditionalExpression","evalIdentifier","evalLiteral","evalMemberExpression","evalUnaryExpression","evalArrayExpression","evalCallExpression","evalAssignmentExpression","SyntaxError","cause","last","ReferenceError","operand","el","func","id","scriptCache","Map","pathCache","arr","item","unshift","JSONPath","opts","otherTypeCallback","JSONPathClass","optObj","currResultType","currEval","currOtherTypeCallback","currCustomTypes","currSandbox","_hasParentSelector","json","path","resultType","flatten","wrap","sandbox","eval","ignoreEvalErrors","parent","parentProperty","customTypes","autostart","ret","evaluate","err","currParent","currParentProperty","exprObj","toPathString","exprList","toPathArray","shift","traceResult","_trace","ea","isParentSelector","hasArrExpr","_getPreferredOutput","reduce","rslt","valOrPath","concat","pointer","toPointer","pathArray","_handleCallback","fullRetObj","preferredOutput","parentPropName","literalPriority","retObj","loc","x","addRet","elems","t","valObj","_walk","sliceResult","_slice","indexOf","safeLoc","replace","nested","exec","npath","valObj2","nvalue","filterResults","valObj3","_eval","evalResult","at","exprToUse","addType","parenthIndex","valueType","lastParenth","lastIndexOf","argRaw","JSON","Number","isFinite","Boolean","toStringTag","locProp","single","double","matchAll","replaceAll","parts","split","part","rett","pathToUse","tmp","tl","tt","splice","f","n","len","step","end","min","_v","_vname","_$_parentProperty","_$_parent","_$_property","_$_root","_$_v","containsPath","_$_path","scriptCacheKey","script","_","literal","evalType","set","safeVm","Script","vm","CurrEval","evalFunc","runInNewContext","keyMap","clearCache","clear","pathArr","p","subx","$0","$1","ups","join","exp","match","funcs","source","target","conditionCb","il","moveToAnotherArray","key","vr","s","fString","lastStatementEnd"],"mappings":"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","x_google_ignoreList":[0,1,2]}