json-p3 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*
2
- * json-p3 version 0.3.0
2
+ * json-p3 version 0.3.1
3
3
  * https://github.com/jg-rp/json-p3
4
4
  *
5
5
  * MIT License
@@ -937,12 +937,26 @@ class FunctionExtension extends FilterExpression {
937
937
  if (!func) {
938
938
  throw new UndefinedFilterFunctionError(`filter function '${this.name}' is undefined`, this.token);
939
939
  }
940
- const args = this.args.map(arg => arg.evaluate(context)).map((arg, idx) => func.argTypes[idx] !== FunctionExpressionType.NodesType && arg instanceof JSONPathNodeList ? arg.valuesOrSingular() : arg);
940
+ const args = this.args.map(arg => arg.evaluate(context)).map((arg, idx) => func.argTypes[idx] !== FunctionExpressionType.NodesType && arg instanceof JSONPathNodeList ? this.unpack_node_list(arg) : arg);
941
941
  return func.call(...args);
942
942
  }
943
943
  toString() {
944
944
  return `${this.name}(${this.args.map(e => e.toString()).join(", ")})`;
945
945
  }
946
+ unpack_node_list(arg) {
947
+ switch (arg.length) {
948
+ case 0:
949
+ // If the query results in an empty node list, the argument
950
+ // is the special result Nothing.
951
+ return Nothing;
952
+ case 1:
953
+ // If the query results in a node list consisting of a single
954
+ // node, the argument is the value of the node
955
+ return arg.nodes[0].value;
956
+ default:
957
+ return arg;
958
+ }
959
+ }
946
960
  }
947
961
 
948
962
  /**
@@ -2415,11 +2429,9 @@ class Parser {
2415
2429
  if (!operator) {
2416
2430
  throw new JSONPathSyntaxError(`unknown operator '${tok.kind}'`, tok);
2417
2431
  }
2418
- this.throwForNonSingularQuery(left);
2419
- this.throwForNonSingularQuery(right);
2420
2432
  if (COMPARISON_OPERATORS.has(operator)) {
2421
- this.throwForNonComparableFunction(left);
2422
- this.throwForNonComparableFunction(right);
2433
+ this.throwForNonComparable(left);
2434
+ this.throwForNonComparable(right);
2423
2435
  }
2424
2436
  return new InfixExpression(tok, left, operator, right);
2425
2437
  }
@@ -2507,16 +2519,15 @@ class Parser {
2507
2519
  throw new JSONPathSyntaxError(`invalid ${isName ? "name selector" : "string literal"} '${token.value}'`, token);
2508
2520
  }
2509
2521
  }
2510
- throwForNonSingularQuery(expr) {
2522
+ throwForNonComparable(expr) {
2511
2523
  if ((expr instanceof RootQuery || expr instanceof RelativeQuery) && !expr.path.singularQuery()) {
2512
- throw new JSONPathSyntaxError("non-singular query is not comparable", expr.token);
2524
+ throw new JSONPathTypeError("non-singular query is not comparable", expr.token);
2513
2525
  }
2514
- }
2515
- throwForNonComparableFunction(expr) {
2516
- if (!(expr instanceof FunctionExtension)) return;
2517
- const func = this.environment.functionRegister.get(expr.name);
2518
- if (func && func.returnType !== FunctionExpressionType.ValueType) {
2519
- throw new JSONPathTypeError(`result of ${expr.name}() is not comparable`, expr.token);
2526
+ if (expr instanceof FunctionExtension) {
2527
+ const func = this.environment.functionRegister.get(expr.name);
2528
+ if (func && func.returnType !== FunctionExpressionType.ValueType) {
2529
+ throw new JSONPathTypeError(`result of ${expr.name}() is not comparable`, expr.token);
2530
+ }
2520
2531
  }
2521
2532
  }
2522
2533
  }
@@ -3267,7 +3278,7 @@ var index = /*#__PURE__*/Object.freeze({
3267
3278
  apply: apply
3268
3279
  });
3269
3280
 
3270
- const version = "0.3.0";
3281
+ const version = "0.3.1";
3271
3282
 
3272
3283
  exports.DEFAULT_ENVIRONMENT = DEFAULT_ENVIRONMENT;
3273
3284
  exports.FunctionExpressionType = FunctionExpressionType;
@@ -1,5 +1,5 @@
1
1
  /*
2
- * json-p3 version 0.3.0
2
+ * json-p3 version 0.3.1
3
3
  * https://github.com/jg-rp/json-p3
4
4
  *
5
5
  * MIT License
@@ -935,12 +935,26 @@ class FunctionExtension extends FilterExpression {
935
935
  if (!func) {
936
936
  throw new UndefinedFilterFunctionError(`filter function '${this.name}' is undefined`, this.token);
937
937
  }
938
- const args = this.args.map(arg => arg.evaluate(context)).map((arg, idx) => func.argTypes[idx] !== FunctionExpressionType.NodesType && arg instanceof JSONPathNodeList ? arg.valuesOrSingular() : arg);
938
+ const args = this.args.map(arg => arg.evaluate(context)).map((arg, idx) => func.argTypes[idx] !== FunctionExpressionType.NodesType && arg instanceof JSONPathNodeList ? this.unpack_node_list(arg) : arg);
939
939
  return func.call(...args);
940
940
  }
941
941
  toString() {
942
942
  return `${this.name}(${this.args.map(e => e.toString()).join(", ")})`;
943
943
  }
944
+ unpack_node_list(arg) {
945
+ switch (arg.length) {
946
+ case 0:
947
+ // If the query results in an empty node list, the argument
948
+ // is the special result Nothing.
949
+ return Nothing;
950
+ case 1:
951
+ // If the query results in a node list consisting of a single
952
+ // node, the argument is the value of the node
953
+ return arg.nodes[0].value;
954
+ default:
955
+ return arg;
956
+ }
957
+ }
944
958
  }
945
959
 
946
960
  /**
@@ -2413,11 +2427,9 @@ class Parser {
2413
2427
  if (!operator) {
2414
2428
  throw new JSONPathSyntaxError(`unknown operator '${tok.kind}'`, tok);
2415
2429
  }
2416
- this.throwForNonSingularQuery(left);
2417
- this.throwForNonSingularQuery(right);
2418
2430
  if (COMPARISON_OPERATORS.has(operator)) {
2419
- this.throwForNonComparableFunction(left);
2420
- this.throwForNonComparableFunction(right);
2431
+ this.throwForNonComparable(left);
2432
+ this.throwForNonComparable(right);
2421
2433
  }
2422
2434
  return new InfixExpression(tok, left, operator, right);
2423
2435
  }
@@ -2505,16 +2517,15 @@ class Parser {
2505
2517
  throw new JSONPathSyntaxError(`invalid ${isName ? "name selector" : "string literal"} '${token.value}'`, token);
2506
2518
  }
2507
2519
  }
2508
- throwForNonSingularQuery(expr) {
2520
+ throwForNonComparable(expr) {
2509
2521
  if ((expr instanceof RootQuery || expr instanceof RelativeQuery) && !expr.path.singularQuery()) {
2510
- throw new JSONPathSyntaxError("non-singular query is not comparable", expr.token);
2522
+ throw new JSONPathTypeError("non-singular query is not comparable", expr.token);
2511
2523
  }
2512
- }
2513
- throwForNonComparableFunction(expr) {
2514
- if (!(expr instanceof FunctionExtension)) return;
2515
- const func = this.environment.functionRegister.get(expr.name);
2516
- if (func && func.returnType !== FunctionExpressionType.ValueType) {
2517
- throw new JSONPathTypeError(`result of ${expr.name}() is not comparable`, expr.token);
2524
+ if (expr instanceof FunctionExtension) {
2525
+ const func = this.environment.functionRegister.get(expr.name);
2526
+ if (func && func.returnType !== FunctionExpressionType.ValueType) {
2527
+ throw new JSONPathTypeError(`result of ${expr.name}() is not comparable`, expr.token);
2528
+ }
2518
2529
  }
2519
2530
  }
2520
2531
  }
@@ -3265,6 +3276,6 @@ var index = /*#__PURE__*/Object.freeze({
3265
3276
  apply: apply
3266
3277
  });
3267
3278
 
3268
- const version = "0.3.0";
3279
+ const version = "0.3.1";
3269
3280
 
3270
3281
  export { DEFAULT_ENVIRONMENT, FunctionExpressionType, JSONPatch, JSONPatchError, JSONPatchTestFailure, JSONPath, JSONPathEnvironment, JSONPathError, JSONPathIndexError, JSONPathLexerError, JSONPathNode, JSONPathNodeList, JSONPathRecursionLimitError, JSONPathSyntaxError, JSONPathTypeError, JSONPointer, Nothing, RelativeJSONPointer, Token, TokenKind, UNDEFINED, apply, compile, index as jsonpatch, index$1 as jsonpath, index$3 as jsonpointer, lazyQuery, query, resolve, version };
@@ -1,5 +1,5 @@
1
1
  /*
2
- * json-p3 version 0.3.0
2
+ * json-p3 version 0.3.1
3
3
  * https://github.com/jg-rp/json-p3
4
4
  *
5
5
  * MIT License
@@ -938,12 +938,26 @@ var json_p3 = (function (exports) {
938
938
  if (!func) {
939
939
  throw new UndefinedFilterFunctionError(`filter function '${this.name}' is undefined`, this.token);
940
940
  }
941
- const args = this.args.map(arg => arg.evaluate(context)).map((arg, idx) => func.argTypes[idx] !== FunctionExpressionType.NodesType && arg instanceof JSONPathNodeList ? arg.valuesOrSingular() : arg);
941
+ const args = this.args.map(arg => arg.evaluate(context)).map((arg, idx) => func.argTypes[idx] !== FunctionExpressionType.NodesType && arg instanceof JSONPathNodeList ? this.unpack_node_list(arg) : arg);
942
942
  return func.call(...args);
943
943
  }
944
944
  toString() {
945
945
  return `${this.name}(${this.args.map(e => e.toString()).join(", ")})`;
946
946
  }
947
+ unpack_node_list(arg) {
948
+ switch (arg.length) {
949
+ case 0:
950
+ // If the query results in an empty node list, the argument
951
+ // is the special result Nothing.
952
+ return Nothing;
953
+ case 1:
954
+ // If the query results in a node list consisting of a single
955
+ // node, the argument is the value of the node
956
+ return arg.nodes[0].value;
957
+ default:
958
+ return arg;
959
+ }
960
+ }
947
961
  }
948
962
 
949
963
  /**
@@ -2416,11 +2430,9 @@ var json_p3 = (function (exports) {
2416
2430
  if (!operator) {
2417
2431
  throw new JSONPathSyntaxError(`unknown operator '${tok.kind}'`, tok);
2418
2432
  }
2419
- this.throwForNonSingularQuery(left);
2420
- this.throwForNonSingularQuery(right);
2421
2433
  if (COMPARISON_OPERATORS.has(operator)) {
2422
- this.throwForNonComparableFunction(left);
2423
- this.throwForNonComparableFunction(right);
2434
+ this.throwForNonComparable(left);
2435
+ this.throwForNonComparable(right);
2424
2436
  }
2425
2437
  return new InfixExpression(tok, left, operator, right);
2426
2438
  }
@@ -2508,16 +2520,15 @@ var json_p3 = (function (exports) {
2508
2520
  throw new JSONPathSyntaxError(`invalid ${isName ? "name selector" : "string literal"} '${token.value}'`, token);
2509
2521
  }
2510
2522
  }
2511
- throwForNonSingularQuery(expr) {
2523
+ throwForNonComparable(expr) {
2512
2524
  if ((expr instanceof RootQuery || expr instanceof RelativeQuery) && !expr.path.singularQuery()) {
2513
- throw new JSONPathSyntaxError("non-singular query is not comparable", expr.token);
2525
+ throw new JSONPathTypeError("non-singular query is not comparable", expr.token);
2514
2526
  }
2515
- }
2516
- throwForNonComparableFunction(expr) {
2517
- if (!(expr instanceof FunctionExtension)) return;
2518
- const func = this.environment.functionRegister.get(expr.name);
2519
- if (func && func.returnType !== FunctionExpressionType.ValueType) {
2520
- throw new JSONPathTypeError(`result of ${expr.name}() is not comparable`, expr.token);
2527
+ if (expr instanceof FunctionExtension) {
2528
+ const func = this.environment.functionRegister.get(expr.name);
2529
+ if (func && func.returnType !== FunctionExpressionType.ValueType) {
2530
+ throw new JSONPathTypeError(`result of ${expr.name}() is not comparable`, expr.token);
2531
+ }
2521
2532
  }
2522
2533
  }
2523
2534
  }
@@ -3268,7 +3279,7 @@ var json_p3 = (function (exports) {
3268
3279
  apply: apply
3269
3280
  });
3270
3281
 
3271
- const version = "0.3.0";
3282
+ const version = "0.3.1";
3272
3283
 
3273
3284
  exports.DEFAULT_ENVIRONMENT = DEFAULT_ENVIRONMENT;
3274
3285
  exports.FunctionExpressionType = FunctionExpressionType;
@@ -1,2 +1,2 @@
1
- var json_p3=function(e){"use strict";class t extends Error{constructor(e,t){super(e),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathError",this.message=n(e,t)}}function n(e,t){return t.input.length<=9?`${e} ('${t.input}':${t.index})`:t.index>t.input.length-5?`${e} ('${t.input.slice(t.input.length-9)}':${t.index})`:t.index-4<0?`${e} ('${t.input.slice(0,9)}':${t.index})`:`${e} ('${t.input.slice(t.index-4,t.index+5)}':${t.index})`}class r extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathLexerError",this.message=n(e,t)}}class s extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathTypeError",this.message=n(e,t)}}class o extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathIndexError",this.message=n(e,t)}}class i extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="UndefinedFilterFunctionError",this.message=n(e,t)}}class a extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathSyntaxError",this.message=n(e,t)}}class h extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathRecursionLimitError",this.message=n(e,t)}}function c(e){return Array.isArray(e)}function u(e){const t=typeof e;return null!==e&&"object"===t||"function"===t}function l(e){return"string"==typeof e}function p(e){return"number"==typeof e}function f(e,t){if(e===t)return!0;if(Array.isArray(e)){if(Array.isArray(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!f(e[n],t[n]))return!1;return!0}return!1}if(u(e)&&u(t)){const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const r of n)if(!f(e[r],t[r]))return!1;return!0}return!1}let d=function(e){return e.ValueType="ValueType",e.LogicalType="LogicalType",e.NodesType="NodesType",e}({});class g extends Error{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerError"}}class m extends g{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerResolutionError"}}class v extends m{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerIndexError"}}class w extends m{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerKeyError"}}class O extends g{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerSyntaxError"}}class y extends m{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerTypeError"}}const x=Symbol.for("jsonpointer.undefined");class N{#e;constructor(e){this.tokens=this.parse(e),this.#e=N.encode(this.tokens)}static encode(e){return e.length?"/"+e.map((e=>e.replaceAll("~","~0").replaceAll("/","~1"))).join("/"):""}resolve(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:x;try{return this.tokens.reduce(this.getItem.bind(this),e)}catch(e){if(e instanceof m&&t!==x)return t;throw e}}resolveWithParent(e){if(!this.tokens.length)return[x,this.resolve(e)];const t=this.tokens.slice(0,this.tokens.length-1).reduce(this.getItem.bind(this),e);try{return[t,this.getItem(t,this.tokens[this.tokens.length-1],this.tokens.length-1)]}catch(e){if(e instanceof v||e instanceof w)return[t,x];throw e}}toString(){return this.#e}isRelativeTo(e){return e.tokens.length<this.tokens.length&&this.tokens.slice(0,e.tokens.length).every(((t,n)=>t===e.tokens[n]))}parse(e){if(e.length&&!e.startsWith("/"))throw new O(`"${e}" pointers must start with a slash or be the empty string`);return e.split("/").map((e=>e.replaceAll("~1","/").replaceAll("~0","~"))).slice(1)}getItem(e,t,n){if(c(e)){if("length"!==t&&Object.hasOwn(e,t))return e[Number(t)];if(t.startsWith("#")){const r=t.slice(1);if(k.test(r)&&Object.hasOwn(e,r))return Number(r);throw new v(`index out of range '${N.encode(this.tokens.slice(0,n+1))}'`)}throw new v(`index out of range '${N.encode(this.tokens.slice(0,n+1))}'`)}if(u(e)){if(Object.hasOwn(e,t))return e[t];if(t.startsWith("#")&&Object.hasOwn(e,t.slice(1)))return t.slice(1);throw new w(`no such property '${N.encode(this.tokens.slice(0,n+1))}'`)}throw new y(`found primitive value, expected an object '${N.encode(this.tokens.slice(0,n+1))}'`)}_join(e){if(!l(e))throw new y("join() requires string arguments, found "+typeof e);if(e.startsWith("/"))return new N(e);const t=this.tokens.concat(e.split("/").map((e=>e.replaceAll("~1","/").replaceAll("~0","~"))));return new N(N.encode(t))}join(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(!t.length)return this;let r=this;for(const e of t)r=r._join(e);return r}exists(e){try{this.resolve(e)}catch(e){if(e instanceof m)return!1;throw e}return!0}parent(){return this.tokens.length?new N(N.encode(this.tokens.slice(0,this.tokens.length-1))):this}to(e){return(l(e)?new S(e):e).to(this)}}const E=/(?<ORIGIN>\d+)(?<INDEX_G>(?<SIGN>[+-])(?<INDEX>\d))?(?<POINTER>.*)/s,k=/(0|[1-9][0-9]*)/;class S{constructor(e){[this.origin,this.index,this.pointer]=this.parse(e)}toString(){const e=this.index>0?"+":"",t=0===this.index?"":`${e}${this.index}`;return`${this.origin}${t}${this.pointer}`}to(e){const t=l(e)?new N(e):e;if(this.origin>t.tokens.length)throw new v(`origin (${this.origin}) exceeds root (${t.tokens.length})`);const n=this.origin<1?t.tokens.slice():t.tokens.slice(0,-this.origin);if(this.index&&n.length&&this.isIntLike(n.at(-1))){const e=Number(n.at(-1))+this.index;if(e<0)throw new v(`index offset out of range (${e})`);n[n.length-1]=String(e)}return this.pointer instanceof N?n.push(...this.pointer.tokens):n[n.length-1]=`#${n[n.length-1]}`,new N(N.encode(n))}parse(e){const t=E.exec(e);if(!t||!t.groups)throw new O("failed to parse relative pointer");const n=this.parseInt(t.groups.ORIGIN);let r=0;if(t.groups.INDEX_G){if(r=this.parseInt(t.groups.INDEX),0===r)throw new O("index offset can't be zero");"-"===t.groups.SIGN&&(r=-r)}return"#"===t.groups.POINTER?[n,r,"#"]:[n,r,new N(t.groups.POINTER)]}parseInt(e){if(e.startsWith("0")&&e.length>1)throw new O("unexpected leading zero");if(k.test(e))return Number(e);throw new O(`expected an integer, found '${e}'`)}isIntLike(e){return!(void 0!==e&&!p(e))||k.test(e)}}function T(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:x;return new N(e).resolve(t,n)}var R=Object.freeze({__proto__:null,JSONPointer:N,JSONPointerError:g,JSONPointerIndexError:v,JSONPointerKeyError:w,JSONPointerResolutionError:m,JSONPointerSyntaxError:O,JSONPointerTypeError:y,RelativeJSONPointer:S,UNDEFINED:x,resolve:T});class ${constructor(e,t,n){this.value=e,this.location=t,this.root=n}get path(){return"$"+this.location.map((e=>l(e)?`['${e}']`:`[${e}]`)).join("")}toPointer(){return this.location.length?new N(N.encode(this.location.map(String))):new N("")}}class b{constructor(e){this.nodes=e}[Symbol.iterator](){return this.nodes[Symbol.iterator]()}empty(){return 0===this.nodes.length}values(){return this.nodes.map((e=>e.value))}valuesOrSingular(){return 1===this.nodes.length?this.nodes[0].value:this.nodes.map((e=>e.value))}locations(){return this.nodes.map((e=>e.location))}paths(){return this.nodes.map((e=>e.path))}pointers(){return this.nodes.map((e=>e.toPointer()))}get length(){return this.nodes.length}}const P=Symbol.for("jsonpath.nothing");function I(e,t){return u(e)&&Object.hasOwn(e,t)}class L{constructor(e){this.token=e}}class _ extends L{}class A extends _{evaluate(){return null}toString(){return"null"}}class F extends _{constructor(e,t){super(e),this.token=e,this.value=t}evaluate(){return this.value}toString(){return String(this.value)}}class j extends _{constructor(e,t){super(e),this.token=e,this.value=t}evaluate(){return this.value}toString(){return JSON.stringify(this.value)}}class J extends _{constructor(e,t){super(e),this.token=e,this.value=t}evaluate(){return this.value}toString(){return String(this.value)}}class z extends L{constructor(e,t,n){super(e),this.token=e,this.operator=t,this.right=n}evaluate(e){if("!"===this.operator){const t=this.right.evaluate(e);return t instanceof b?0===t.nodes.length:!Q(t)}throw new s(`unknown operator '${this.operator}'`,this.token)}toString(){return`${this.operator}${this.right.toString()}`}}class M extends L{constructor(e,t,n,r){super(e),this.token=e,this.left=t,this.operator=n,this.right=r}evaluate(e){let t=this.left.evaluate(e);t instanceof b&&1===t.nodes.length&&(t=t.nodes[0].value);let n=this.right.evaluate(e);return n instanceof b&&1===n.nodes.length&&(n=n.nodes[0].value),"&&"===this.operator?Q(t)&&Q(n):"||"===this.operator?Q(t)||Q(n):W(t,this.operator,n)}toString(){return"&&"===this.operator||"||"===this.operator?`(${this.left.toString()} ${this.operator} ${this.right.toString()})`:`${this.left.toString()} ${this.operator} ${this.right.toString()}`}}class D extends L{constructor(e,t){super(e),this.token=e,this.expression=t}evaluate(e){const t=this.expression.evaluate(e);return t instanceof b?t.nodes.length>0:Q(t)}toString(){return this.expression.toString()}}class K extends L{constructor(e,t){super(e),this.token=e,this.path=t}}class C extends K{evaluate(e){return e.lazy?new b(Array.from(this.path.lazyQuery(e.currentValue))):this.path.query(e.currentValue)}toString(){return`@${this.path.toString().slice(1)}`}}class U extends K{evaluate(e){return e.lazy?new b(Array.from(this.path.lazyQuery(e.rootValue))):this.path.query(e.rootValue)}toString(){return this.path.toString()}}class G extends L{constructor(e,t,n){super(e),this.token=e,this.name=t,this.args=n}evaluate(e){const t=e.environment.functionRegister.get(this.name);if(!t)throw new i(`filter function '${this.name}' is undefined`,this.token);const n=this.args.map((t=>t.evaluate(e))).map(((e,n)=>t.argTypes[n]!==d.NodesType&&e instanceof b?e.valuesOrSingular():e));return t.call(...n)}toString(){return`${this.name}(${this.args.map((e=>e.toString())).join(", ")})`}}function Q(e){return!(e instanceof b&&e.empty())&&!("boolean"==typeof e&&!1===e)}function W(e,t,n){switch(t){case"==":return V(e,n);case"!=":return!V(e,n);case"<":return B(e,n);case">":return B(n,e);case">=":return B(n,e)||V(e,n);case"<=":return B(e,n)||V(e,n);default:return!1}}function V(e,t){if(t instanceof b&&([e,t]=[t,e]),e instanceof b){if(t instanceof b){if(e.empty()&&t.empty())return!0;if(1===e.nodes.length&&1===t.nodes.length)return f(e.nodes[0].value,t.nodes[0].value)}return e.empty()?t===P:1===e.nodes.length&&f(e.nodes[0].value,t)}return e===P&&t===P||f(e,t)}function B(e,t){return!!(l(e)&&l(t)||p(e)&&p(t))&&e<t}var q=Object.freeze({__proto__:null,BooleanLiteral:F,FilterExpression:L,FilterExpressionLiteral:_,FunctionExtension:G,InfixExpression:M,JSONPathQuery:K,LogicalExpression:D,NullLiteral:A,NumberLiteral:J,PrefixExpression:z,RelativeQuery:C,RootQuery:U,StringLiteral:j,compare:W});class X{argTypes=[d.NodesType];returnType=d.ValueType;call(e){return e.length}}class Z{argTypes=[d.ValueType];returnType=d.ValueType;call(e){return c(e)||l(e)?e.length:u(e)?Object.keys(e).length:P}}class H extends Map{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:128,t=arguments.length>1?arguments[1]:void 0;void 0!==t?super(t):super(),this.maxSize=e}get(e){const t=super.get(e);return this.has(e)&&(this.delete(e),this.set(e,t)),t}set(e,t){return this.has(e)?this.delete(e):this.size>=this.maxSize&&this.delete(this.first()),super.set(e,t)}first(){return this.keys().next().value}}class Y{argTypes=[d.ValueType,d.ValueType];returnType=d.LogicalType;#t;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=e,this.cacheSize=e.cacheSize??10,this.throwErrors=e.throwErrors??!1,this.#t=new H(this.cacheSize)}call(e,t){if(this.cacheSize>0){const n=this.#t.get(t);if(n)try{return n.test(e)}catch(e){if(this.throwErrors)throw e;return!1}}try{const n=new RegExp(this.fullMatch(t),"u");return this.cacheSize>0&&this.#t.set(t,n),n.test(e)}catch(e){if(this.throwErrors)throw e;return!1}}fullMatch(e){const t=[];return e.startsWith("^")||t.push("^"),t.push(e),e.endsWith("$")||t.push("$"),t.join("")}}class ee{argTypes=[d.ValueType,d.ValueType];returnType=d.LogicalType;#t;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=e,this.cacheSize=e.cacheSize??10,this.throwErrors=e.throwErrors??!1,this.#t=new H(this.cacheSize)}call(e,t){if(this.cacheSize>0){const n=this.#t.get(t);if(n)try{return!!e.match(n)}catch(e){if(this.throwErrors)throw e;return!1}}try{const n=new RegExp(t,"u");return this.cacheSize>0&&this.#t.set(t,n),!!e.match(n)}catch(e){if(this.throwErrors)throw e;return!1}}}class te{argTypes=[d.NodesType];returnType=d.ValueType;call(e){return 1===e.length?e.nodes[0].value:P}}let ne=function(e){return e.AND="TOKEN_AND",e.COLON="TOKEN_COLON",e.COMMA="TOKEN_COMMA",e.CURRENT="TOKEN_CURRENT_NODE",e.DDOT="TOKEN_DDOT",e.DOT="TOKEN_DOT",e.DOUBLE_QUOTE_STRING="TOKEN_DOUBLE_QUOTE_STRING",e.EOF="TOKEN_EOF",e.EQ="TOKEN_EQ",e.ERROR="TOKEN_ERROR",e.FALSE="TOKEN_FALSE",e.FILTER="TOKEN_FILTER_START",e.FUNCTION="TOKEN_FUNCTION",e.GE="TOKEN_GE",e.GT="TOKEN_GT",e.INDEX="TOKEN_INDEX",e.LBRACKET="TOKEN_LBRACKET",e.LE="TOKEN_LE",e.LG="TOKEN_LG",e.LPAREN="TOKEN_LPAREN",e.LT="TOKEN_LT",e.NAME="TOKEN_NAME",e.NE="TOKEN_NE",e.NOT="TOKEN_NOT",e.NULL="TOKEN_NULL",e.NUMBER="NUMBER",e.OR="TOKEN_OR",e.RBRACKET="TOKEN_RBRACKET",e.ROOT="TOKEN_ROOT",e.RPAREN="TOKEN_RPAREN",e.SINGLE_QUOTE_STRING="TOKEN_SINGLE_QUOTE_STRING",e.TRUE="TOKEN_TRUE",e.WILD="TOKEN_WILD",e}({});class re{constructor(e,t,n,r){this.kind=e,this.value=t,this.index=n,this.input=r}}new re(ne.EOF,"",-1,"");class se{#n=0;constructor(e){this.tokens=e}get current(){return this.tokens[this.#n]}get peek(){return this.#n>=this.tokens.length-1?this.tokens[this.tokens.length-1]:this.tokens[this.#n+1]}next(){const e=this.current;return this.#n+=1,e}backup(){this.#n>0&&(this.#n-=1)}expect(e){if(this.current.kind!==e)throw new a(`expected token '${e}', found '${this.current.kind}'`,this.current)}expectPeek(e){const t=this.peek;if(t.kind!==e)throw new a(`expected token '${e}', found '${t.kind}'`,t)}}const oe=/e[+-]?\d+/y,ie=/[a-z][a-z_0-9]*/y,ae=/-?\d+/y,he=/-?[0-9]+/y,ce=/[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*/y,ue=new Set([" ","\n","\t","\r"]);class le{filterLevel=0;parenStack=[];tokens=[];#r=0;#n=0;constructor(e){this.path=e}get pos(){return this.#n}get start(){return this.#r}run(){let e=fe;for(;e;)e=e(this)}emit(e){this.tokens.push(new re(e,this.path.slice(this.#r,this.#n),this.#r,this.path)),this.#r=this.#n}next(){if(this.#n>=this.path.length)return"";const e=this.path[this.#n];return this.#n+=1,e}ignore(){this.#r=this.#n}backup(){if(this.#n<=this.#r){const e="can't backup beyond start";throw new r(e,new re(ne.ERROR,e,this.#n,this.path))}this.#n-=1}peek(){const e=this.next();return e&&this.backup(),e}accept(e){const t=this.next();return!!e.has(t)||(t&&this.backup(),!1)}acceptMatch(e){const t=this.next();return!!e.test(t)||(t&&this.backup(),!1)}acceptRun(e){let t=!1,n=this.next();for(;e.has(n);)n=this.next(),t=!0;return n&&this.backup(),t}acceptMatchRun(e){e.lastIndex=this.#n;const t=e.exec(this.path);return e.lastIndex=0,!!t&&(this.#n+=t[0].length,!0)}ignoreWhitespace(){if(this.#n!==this.#r){const e=`must emit or ignore before consuming whitespace ('${this.path.slice(this.#r,this.#n)}':${this.pos})`;throw new r(e,new re(ne.ERROR,e,this.pos,this.path))}return!!this.acceptRun(ue)&&(this.ignore(),!0)}error(e){this.tokens.push(new re(ne.ERROR,e,this.#n,this.path))}}function pe(e){const[t,n]=function(e){const t=new le(e);return[t,t.tokens]}(e);if(t.run(),n.length&&n[n.length-1].kind===ne.ERROR)throw new a(n[n.length-1].value,n[n.length-1]);return n}function fe(e){const t=e.next();return"$"!==t?(e.backup(),e.error(`expected '$', found '${t}'`),null):(e.emit(ne.ROOT),de)}function de(e){e.ignoreWhitespace()&&!e.peek()&&e.error("trailing whitespace");const t=e.next();switch(t){case"":return e.emit(ne.EOF),null;case".":return"."===e.peek()?(e.next(),e.emit(ne.DDOT),ge):me;case"[":return e.emit(ne.LBRACKET),ve;default:return e.backup(),e.filterLevel?we:(e.error(`expected '.', '..' or a bracketed selection, found '${t}'`),null)}}function ge(e){const t=e.next();switch(t){case"":return e.error("bald descendant segment"),null;case"*":return e.emit(ne.WILD),de;case"[":return e.emit(ne.LBRACKET),ve;default:return e.backup(),e.acceptMatchRun(ce)?(e.emit(ne.NAME),de):(e.error(`unexpected descendent selection token '${t}'`),null)}}function me(e){if(e.ignore(),e.ignoreWhitespace())return e.error("unexpected whitespace after dot"),null;const t=e.next();return"*"===t?(e.emit(ne.WILD),de):(e.backup(),e.acceptMatchRun(ce)?(e.emit(ne.NAME),de):(e.error(`unexpected shorthand selector '${t}'`),null))}function ve(e){for(;;){e.ignoreWhitespace();const t=e.next();switch(t){case"]":return e.emit(ne.RBRACKET),e.filterLevel?we:de;case"":return e.error("unclosed bracketed selection"),null;case"*":e.emit(ne.WILD);continue;case"?":return e.emit(ne.FILTER),e.filterLevel+=1,we;case",":e.emit(ne.COMMA);continue;case":":e.emit(ne.COLON);continue;case"'":return ye;case'"':return xe;default:if(e.backup(),e.acceptMatchRun(ae)){e.emit(ne.INDEX);continue}return e.error(`unexpected token '${t}' in bracketed selection`),null}}}function we(e){for(;;){e.ignoreWhitespace();const t=e.next();switch(t){case"":case"]":return e.filterLevel-=1,1===e.parenStack.length?(e.error("unbalanced parentheses"),null):(e.backup(),ve);case",":if(e.emit(ne.COMMA),e.parenStack.length)continue;return e.filterLevel-=1,ve;case"'":return Ne;case'"':return Ee;case"(":e.emit(ne.LPAREN),e.parenStack.length&&(e.parenStack[e.parenStack.length-1]+=1);continue;case")":e.emit(ne.RPAREN),e.parenStack.length&&(1===e.parenStack[e.parenStack.length-1]?e.parenStack.pop():e.parenStack[e.parenStack.length-1]-=1);continue;case"$":return e.emit(ne.ROOT),de;case"@":return e.emit(ne.CURRENT),de;case".":return e.backup(),de;case"!":"="===e.peek()?(e.next(),e.emit(ne.NE)):e.emit(ne.NOT);continue;case"=":if("="===e.peek()){e.next(),e.emit(ne.EQ);continue}return e.backup(),e.error(`unexpected filter selector token '${t}'`),null;case"<":"="===e.peek()?(e.next(),e.emit(ne.LE)):e.emit(ne.LT);continue;case">":"="===e.peek()?(e.next(),e.emit(ne.GE)):e.emit(ne.GT);continue;default:if(e.backup(),e.acceptMatchRun(he)){if("."===e.peek()&&(e.next(),!e.acceptMatchRun(he)))return e.error("a fractional digit is required after a decimal point"),null;e.acceptMatchRun(oe),e.emit(ne.NUMBER);continue}if(e.acceptMatchRun(/&&/y)){e.emit(ne.AND);continue}if(e.acceptMatchRun(/\|\|/y)){e.emit(ne.OR);continue}if(e.acceptMatchRun(/true/y)){e.emit(ne.TRUE);continue}if(e.acceptMatchRun(/false/y)){e.emit(ne.FALSE);continue}if(e.acceptMatchRun(/null/y)){e.emit(ne.NULL);continue}if(e.acceptMatchRun(ie)&&"("===e.peek()){e.parenStack.push(1),e.emit(ne.FUNCTION),e.next(),e.ignore();continue}}return e.error(`unexpected filter selector token '${t}'`),null}}function Oe(e,t){return function(n){if(n.ignore(),n.peek()===e)return n.emit("'"===e?ne.SINGLE_QUOTE_STRING:ne.DOUBLE_QUOTE_STRING),n.next(),n.ignore(),t;for(;;){const r=n.path.slice(n.pos,n.pos+2),s=n.next();if("\\\\"!==r&&r!==`\\${e}`){if("\\"===s&&!r.match(/\\[bfnrtu/]/))return n.error("invalid escape"),null;if(!s)return n.error(`unclosed string starting at index ${n.start}`),null;if(s===e)return n.backup(),n.emit("'"===e?ne.SINGLE_QUOTE_STRING:ne.DOUBLE_QUOTE_STRING),n.next(),n.ignore(),t}else n.next()}}}const ye=Oe("'",ve),xe=Oe('"',ve),Ne=Oe("'",we),Ee=Oe('"',we);class ke{constructor(e,t){this.environment=e,this.token=t}}class Se extends ke{constructor(e,t,n,r){super(e,t),this.environment=e,this.token=t,this.name=n,this.shorthand=r}resolve(e){const t=[];for(const n of e)I(n.value,this.name)&&t.push(new $(n.value[this.name],n.location.concat(this.name),n.root));return t}*lazyResolve(e){for(const t of e)I(t.value,this.name)&&(yield new $(t.value[this.name],t.location.concat(this.name),t.root))}toString(){return this.shorthand?`['${this.name}']`:`'${this.name}'`}}class Te extends ke{constructor(e,t,n){if(super(e,t),this.environment=e,this.token=t,this.index=n,n<this.environment.minIntIndex||n>this.environment.maxIntIndex)throw new o("index out of range",this.token)}resolve(e){const t=[];for(const n of e)if(c(n.value)){const e=this.normalizedIndex(n.value.length);e in n.value&&t.push(new $(n.value[e],n.location.concat(e),n.root))}return t}*lazyResolve(e){for(const t of e)if(c(t.value)){const e=this.normalizedIndex(t.value.length);e in t.value&&(yield new $(t.value[e],t.location.concat(e),t.root))}}toString(){return String(this.index)}normalizedIndex(e){return this.index<0&&e>=Math.abs(this.index)?e+this.index:this.index}}class Re extends ke{constructor(e,t,n,r,s){super(e,t),this.environment=e,this.token=t,this.start=n,this.stop=r,this.step=s,this.checkRange(n,r,s)}resolve(e){const t=[];for(const n of e)if(c(n.value))for(const[e,r]of this.slice(n.value,this.start,this.stop,this.step))t.push(new $(r,n.location.concat(e),n.root));return t}*lazyResolve(e){for(const t of e)if(c(t.value))for(const[e,n]of this.slice(t.value,this.start,this.stop,this.step))yield new $(n,t.location.concat(e),t.root)}toString(){return`${this.start?this.start:""}:${this.stop?this.stop:""}:${this.step?this.step:"1"}`}checkRange(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];for(const e of t)if(void 0!==e&&(e<this.environment.minIntIndex||e>this.environment.maxIntIndex))throw new o("index out of range",this.token)}slice(e,t,n,r){if(!e.length)return[];if(t=null==t?r&&r<0?e.length-1:0:t<0?Math.max(e.length+t,0):Math.min(t,e.length-1),n=null==n?r&&r<0?-1:e.length:n<0?Math.max(e.length+n,-1):Math.min(n,e.length),0===r)return[];r||(r=1);const s=[];if(r>0)for(let o=t;o<n;o+=r)s.push([o,e[o]]);else for(let o=t;o>n;o+=r)s.push([o,e[o]]);return s}}class $e extends ke{constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];super(e,t),this.environment=e,this.token=t,this.shorthand=n}resolve(e){const t=[];for(const n of e)if(!(n.value instanceof String))if(c(n.value))for(let e=0;e<n.value.length;e++)t.push(new $(n.value[e],n.location.concat(e),n.root));else if(u(n.value))for(const[e,r]of Object.entries(n.value))t.push(new $(r,n.location.concat(e),n.root));return t}*lazyResolve(e){for(const t of e)if(!(t.value instanceof String))if(c(t.value))for(let e=0;e<t.value.length;e++)yield new $(t.value[e],t.location.concat(e),t.root);else if(u(t.value))for(const[e,n]of Object.entries(t.value))yield new $(n,t.location.concat(e),t.root)}toString(){return this.shorthand?"[*]":"*"}}class be extends ke{constructor(e,t,n){super(e,t),this.environment=e,this.token=t,this.selector=n}resolve(e){const t=[];for(const n of e){t.push(n);for(const e of this.visit(n))t.push(e)}return this.selector.resolve(t)}*lazyResolve(e){yield*this.selector.lazyResolve(this._lazyResolve(e))}*_lazyResolve(e){for(const t of e){const e=[{node:t,depth:0}];for(yield t;e.length;){const{node:t,depth:n}=e.pop();if(n>=this.environment.maxRecursionDepth)throw new h("recursion limit reached",this.token);if(!(t.value instanceof String))if(c(t.value))for(let r=0;r<t.value.length;r++){const s=new $(t.value[r],t.location.concat(r),t.root);yield s,u(s.value)&&e.push({node:s,depth:n+1})}else if(u(t.value))for(const[r,s]of Object.entries(t.value)){const o=new $(s,t.location.concat(r),t.root);yield o,u(o.value)&&e.push({node:o,depth:n+1})}}}}toString(){return`..${this.selector.toString()}`}visit(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(t>=this.environment.maxRecursionDepth)throw new h("recursion limit reached",this.token);const n=[];if(e.value instanceof String)return n;if(c(e.value))for(let r=0;r<e.value.length;r++){const s=new $(e.value[r],e.location.concat(r),e.root);n.push(s);for(const e of this.visit(s,t+1))n.push(e)}else if(u(e.value))for(const[r,s]of Object.entries(e.value)){const o=new $(s,e.location.concat(r),e.root);n.push(o);for(const e of this.visit(o,t+1))n.push(e)}return n}}class Pe extends ke{constructor(e,t,n){super(e,t),this.environment=e,this.token=t,this.expression=n}resolve(e){const t=[];for(const n of e)if(!(n.value instanceof String))if(c(n.value))for(let e=0;e<n.value.length;e++){const r=n.value[e],s={environment:this.environment,currentValue:r,rootValue:n.root};this.expression.evaluate(s)&&t.push(new $(r,n.location.concat(e),n.root))}else if(u(n.value))for(const[e,r]of Object.entries(n.value)){const s={environment:this.environment,currentValue:r,rootValue:n.root};this.expression.evaluate(s)&&t.push(new $(r,n.location.concat(e),n.root))}return t}*lazyResolve(e){for(const t of e)if(!(t.value instanceof String))if(c(t.value))for(let e=0;e<t.value.length;e++){const n=t.value[e],r={environment:this.environment,currentValue:n,rootValue:t.root,lazy:!0};this.expression.evaluate(r)&&(yield new $(n,t.location.concat(e),t.root))}else if(u(t.value))for(const[e,n]of Object.entries(t.value)){const r={environment:this.environment,currentValue:n,rootValue:t.root,lazy:!0};this.expression.evaluate(r)&&(yield new $(n,t.location.concat(e),t.root))}}toString(){return`?${this.expression.toString()}`}}class Ie extends ke{constructor(e,t,n){super(e,t),this.environment=e,this.token=t,this.items=n}resolve(e){const t=[];for(const n of e)for(const e of this.items)for(const r of e.resolve([n]))t.push(r);return t}*lazyResolve(e){for(const t of e)for(const e of this.items)yield*e.lazyResolve([t])}toString(){return`[${this.items.map((e=>e.toString())).join(", ")}]`}}var Le=Object.freeze({__proto__:null,BracketedSelection:Ie,FilterSelector:Pe,IndexSelector:Te,JSONPathSelector:ke,NameSelector:Se,RecursiveDescentSegment:be,SliceSelector:Re,WildcardSelector:$e});class _e{constructor(e,t){this.environment=e,this.selectors=t}query(e){let t=[new $(e,[],e)];for(const e of this.selectors)t=e.resolve(t);return new b(t)}lazyQuery(e){let t=[new $(e,[],e)][Symbol.iterator]();for(const e of this.selectors)t=e.lazyResolve(t);return t}match(e){const t=this.lazyQuery(e).next();if(!t.done)return t.value}toString(){return`$${this.selectors.map((e=>e.toString())).join("")}`}singularQuery(){for(const e of this.selectors)if(!(e instanceof Se||e instanceof Ie&&1===e.items.length&&(e.items[0]instanceof Se||e.items[0]instanceof Te)))return!1;return!0}}const Ae=new Map([[ne.AND,4],[ne.EQ,6],[ne.GE,6],[ne.GT,6],[ne.LE,6],[ne.LT,6],[ne.NE,6],[ne.NOT,7],[ne.OR,5],[ne.RPAREN,1]]),Fe=new Map([[ne.AND,"&&"],[ne.EQ,"=="],[ne.GE,">="],[ne.GT,">"],[ne.LE,"<="],[ne.LT,"<"],[ne.NE,"!="],[ne.OR,"||"]]),je=new Set(["==",">=",">","<=","<","!="]);class Je{constructor(e){this.environment=e,this.tokenMap=new Map([[ne.FALSE,this.parseBoolean],[ne.NUMBER,this.parseNumber],[ne.LPAREN,this.parseGroupedExpression],[ne.NOT,this.parsePrefixExpression],[ne.NULL,this.parseNull],[ne.ROOT,this.parseRootQuery],[ne.CURRENT,this.parseRelativeQuery],[ne.SINGLE_QUOTE_STRING,this.parseString],[ne.DOUBLE_QUOTE_STRING,this.parseString],[ne.TRUE,this.parseBoolean],[ne.FUNCTION,this.parseFunction]])}parse(e){e.current.kind===ne.ROOT&&e.next();const t=this.parsePath(e);if(e.current.kind!==ne.EOF)throw new a(`unexpected token '${e.current.kind}'`,e.current);return t}parsePath(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=[];for(;;){const r=this.parseSegment(e);if(!r){t&&e.backup();break}n.push(r),e.next()}return n}parseSegment(e){switch(e.current.kind){case ne.NAME:return new Se(this.environment,e.current,e.current.value,!0);case ne.WILD:return new $e(this.environment,e.current,!0);case ne.DDOT:{const t=e.current;e.next();const n=this.parseSegment(e);if(!n)throw new a("bald descendant segment",e.current);return new be(this.environment,t,n)}case ne.LBRACKET:return this.parseBracketedSelection(e);default:return null}}parseIndex(e){if(e.current.value.length>1&&e.current.value.startsWith("0")||e.current.value.startsWith("-0"))throw new a("leading zero in index selector",e.current);return new Te(this.environment,e.current,Number(e.current.value))}parseSlice(e){const t=e.current,n=[];function r(e){if(e.kind===ne.INDEX){if(e.value.length>1&&e.value.startsWith("0")||e.value.startsWith("-0"))throw new a("leading zero in index selector",e);return!0}return!1}return r(e.current)?(n.push(Number(e.current.value)),e.next(),e.expect(ne.COLON),e.next()):(n.push(void 0),e.expect(ne.COLON),e.next()),r(e.current)?(n.push(Number(e.current.value)),e.next(),e.current.kind===ne.COLON&&e.next()):e.current.kind===ne.COLON&&(n.push(void 0),e.expect(ne.COLON),e.next()),r(e.current)&&(n.push(Number(e.current.value)),e.next()),e.backup(),new Re(this.environment,t,...n)}parseBracketedSelection(e){const t=e.next(),n=[];for(;e.current.kind!==ne.RBRACKET;){switch(e.current.kind){case ne.SINGLE_QUOTE_STRING:case ne.DOUBLE_QUOTE_STRING:n.push(new Se(this.environment,e.current,this.decodeString(e.current,!0),!1));break;case ne.FILTER:n.push(this.parseFilter(e));break;case ne.INDEX:e.peek.kind===ne.COLON?n.push(this.parseSlice(e)):n.push(this.parseIndex(e));break;case ne.COLON:n.push(this.parseSlice(e));break;case ne.WILD:n.push(new $e(this.environment,e.current));break;case ne.EOF:throw new a("unexpected end of query",e.current);default:throw new a(`unexpected token in bracketed selection '${e.current.kind}'`,e.current)}e.peek.kind!==ne.RBRACKET&&(e.expectPeek(ne.COMMA),e.next()),e.next()}if(!n.length)throw new a("empty bracketed segment",t);return new Ie(this.environment,t,n)}parseFilter(e){const t=e.next(),n=this.parseFilterExpression(e);if(n instanceof G){const e=this.environment.functionRegister.get(n.name);if(e&&e.returnType===d.ValueType)throw new s(`result of ${n.name}() must be compared`,n.token)}return new Pe(this.environment,t,new D(t,n))}parseBoolean(e){return e.current.kind===ne.FALSE?new F(e.current,!1):new F(e.current,!0)}parseNull(e){return new A(e.current)}parseString(e){return new j(e.current,this.decodeString(e.current))}parseNumber(e){return new J(e.current,Number(e.current.value))}parsePrefixExpression(e){return e.expect(ne.NOT),e.next(),new z(e.current,"!",this.parseFilterExpression(e,7))}parseInfixExpression(e,t){const n=e.next(),r=Ae.get(n.kind)||1,s=this.parseFilterExpression(e,r),o=Fe.get(n.kind);if(!o)throw new a(`unknown operator '${n.kind}'`,n);return this.throwForNonSingularQuery(t),this.throwForNonSingularQuery(s),je.has(o)&&(this.throwForNonComparableFunction(t),this.throwForNonComparableFunction(s)),new M(n,t,o,s)}parseGroupedExpression(e){e.next();let t=this.parseFilterExpression(e);for(e.next();e.current.kind!==ne.RPAREN;){if(e.current.kind===ne.EOF)throw new a("unbalanced parentheses",e.current);t=this.parseInfixExpression(e,t)}return e.expect(ne.RPAREN),t}parseRootQuery(e){const t=e.next();return new U(t,new _e(this.environment,this.parsePath(e,!0)))}parseRelativeQuery(e){const t=e.next();return new C(t,new _e(this.environment,this.parsePath(e,!0)))}parseFunction(e){const t=[],n=e.next();for(;e.current.kind!==ne.RPAREN;){const n=this.tokenMap.get(e.current.kind);if(!n)throw new a(`unexpected '${e.current.value}'`,e.current);let r=n.bind(this)(e),s=e.peek.kind;for(;Fe.has(s);)e.next(),r=this.parseInfixExpression(e,r),s=e.peek.kind;if(t.push(r),e.peek.kind!==ne.RPAREN){if(e.peek.kind===ne.RBRACKET)break;e.expectPeek(ne.COMMA),e.next()}e.next()}return e.expect(ne.RPAREN),new G(n,n.value,this.environment.checkWellTypedness(n,t))}parseFilterExpression(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const n=this.tokenMap.get(e.current.kind);if(!n){let t;switch(e.current.kind){case ne.EOF:case ne.RBRACKET:t="end of expression";break;default:t=`'${e.current.value}`}throw new a(`unexpected ${t}`,e.current)}let r=n.bind(this)(e);for(;;){const n=e.peek.kind;if(n===ne.EOF||n===ne.RBRACKET||(Ae.get(n)||1)<t)break;if(!Fe.has(n))return r;e.next(),r=this.parseInfixExpression(e,r)}return r}decodeString(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];try{return JSON.parse(e.kind===ne.SINGLE_QUOTE_STRING?`"${e.value.replaceAll('"','\\"').replaceAll("\\'","'")}"`:`"${e.value}"`)}catch{throw new a(`invalid ${t?"name selector":"string literal"} '${e.value}'`,e)}}throwForNonSingularQuery(e){if((e instanceof U||e instanceof C)&&!e.path.singularQuery())throw new a("non-singular query is not comparable",e.token)}throwForNonComparableFunction(e){if(!(e instanceof G))return;const t=this.environment.functionRegister.get(e.name);if(t&&t.returnType!==d.ValueType)throw new s(`result of ${e.name}() is not comparable`,e.token)}}class ze{functionRegister=new Map;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.strict=e.strict??!0,this.maxIntIndex=e.maxIntIndex??Math.pow(2,53)-1,this.minIntIndex=e.maxIntIndex??-Math.pow(2,53)-1,this.maxRecursionDepth=e.maxRecursionDepth??50,this.parser=new Je(this),this.setupFilterFunctions()}compile(e){return new _e(this,this.parser.parse(new se(pe(e))))}query(e,t){return this.compile(e).query(t)}lazyQuery(e,t){return this.compile(e).lazyQuery(t)}match(e,t){return this.compile(e).match(t)}setupFilterFunctions(){this.functionRegister.set("count",new X),this.functionRegister.set("length",new Z),this.functionRegister.set("search",new ee),this.functionRegister.set("match",new Y),this.functionRegister.set("value",new te)}checkWellTypedness(e,t){const n=this.functionRegister.get(e.value);if(!n)throw new i(`no such function '${e.value}'`,e);if(t.length!==n.argTypes.length)throw new s(`${e.value}() takes ${n.argTypes.length} argument${1===n.argTypes.length?"":"s"}, ${t.length} given`,e);for(const[r,o,i]of n.argTypes.map(((e,n)=>[e,t[n],n])))switch(r){case d.ValueType:if(!(o instanceof _||o instanceof K&&o.path.singularQuery()||o instanceof G&&this.functionRegister.get(o.name)?.returnType===d.ValueType))throw new s(`${e.value}() argument ${i} must be of ValueType`,o.token);break;case d.LogicalType:if(!(o instanceof K||o instanceof M))throw new s(`${e.value}() argument ${i} must be of LogicalType`,o.token);break;case d.NodesType:if(!(o instanceof K||o instanceof G&&this.functionRegister.get(o.name)?.returnType===d.NodesType))throw new s(`${e.value}() argument ${i} must be of NodesType`,o.token)}return t}}var Me=Object.freeze({__proto__:null,Count:X,FunctionExpressionType:d,Length:Z,Match:Y,Search:ee,Value:te});const De=new ze;function Ke(e,t){return De.query(e,t)}function Ce(e,t){return De.lazyQuery(e,t)}function Ue(e){return De.compile(e)}var Ge=Object.freeze({__proto__:null,DEFAULT_ENVIRONMENT:De,FunctionExpressionType:d,JSONPath:_e,JSONPathEnvironment:ze,JSONPathError:t,JSONPathIndexError:o,JSONPathLexerError:r,JSONPathNode:$,JSONPathNodeList:b,JSONPathRecursionLimitError:h,JSONPathSyntaxError:a,JSONPathTypeError:s,Nothing:P,Token:re,TokenKind:ne,compile:Ue,expressions:q,functions:Me,lazyQuery:Ce,match:function(e,t){return De.match(e,t)},query:Ke,selectors:Le});class Qe extends Error{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPatchError"}}class We extends Qe{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPatchTestFailure"}}class Ve{name="add";constructor(e,t){this.path=e,this.value=t}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(n===x)return this.value;const s=this.path.tokens.at(-1);if(void 0===s)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(n))if(r===x){if("-"!==s)throw new Qe(`index out of range (${this.name}:${t})`);n.push(this.value)}else n.splice(Number(s),0,this.value);else{if(!u(n))throw new Qe(`unexpected operation on '${typeof n}' (${this.name}:${t})`);n[s]=this.value}return e}toObject(){return{op:this.name,path:this.path.toString(),value:this.value}}}class Be{name="remove";constructor(e){this.path=e}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(n===x)throw new Qe(`can't remove root (${this.name}:${t})`);const s=this.path.tokens.at(-1);if(void 0===s)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(n)){if(r===x)throw new Qe(`can't remove nonexistent item (${this.name}:${t})`);n.splice(Number(s),1)}else{if(!u(n))throw new Qe(`unexpected operation on '${typeof n}' (${this.name}:${t})`);if(r===x)throw new Qe(`can't remove nonexistent property (${this.name}:${t})`);delete n[s]}return e}toObject(){return{op:this.name,path:this.path.toString()}}}class qe{name="replace";constructor(e,t){this.path=e,this.value=t}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(n===x)return this.value;const s=this.path.tokens.at(-1);if(void 0===s)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(n)){if(r===x)throw new Qe(`can't replace nonexistent item (${this.name}:${t})`);n.splice(Number(s),1,this.value)}else{if(!u(n))throw new Qe(`unexpected operation on '${typeof n}' (${this.name}:${t})`);if(r===x)throw new Qe(`can't replace nonexistent property (${this.name}:${t})`);n[s]=this.value}return e}toObject(){return{op:this.name,path:this.path.toString(),value:this.value}}}class Xe{name="move";constructor(e,t){this.from=e,this.path=t}apply(e,t){if(this.path.isRelativeTo(this.from))throw new Qe(`can't move object to one of its own children (${this.name}:${t})`);const[n,r]=this.from.resolveWithParent(e);if(r===x)throw new Qe(`source object does not exist (${this.name}:${t})`);const s=this.from.tokens.at(-1);if(void 0===s)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);c(n)?n.splice(Number(s),1):u(n)&&delete n[s];const[o,i]=this.path.resolveWithParent(e);if(o===x)return r;const a=this.path.tokens.at(-1);if(void 0===a)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(o))o.splice(Number(a),0,r);else{if(!u(o))throw new Qe(`unexpected operation on '${typeof parent}' (${this.name}:${t})`);o[a]=r}return e}toObject(){return{op:this.name,from:this.from.toString(),path:this.path.toString()}}}class Ze{name="copy";constructor(e,t){this.from=e,this.path=t}apply(e,t){const[n,r]=this.from.resolveWithParent(e);if(r===x)throw new Qe(`source object does not exist (${this.name}:${t})`);const[s]=this.path.resolveWithParent(e);if(s===x)return this.deepCopy(r);const o=this.path.tokens.at(-1);if(void 0===o)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(s))s.splice(Number(o),0,this.deepCopy(r));else{if(!u(s))throw new Qe(`unexpected operation on '${typeof parent}' (${this.name}:${t})`);s[o]=this.deepCopy(r)}return e}toObject(){return{op:this.name,from:this.from.toString(),path:this.path.toString()}}deepCopy(e){return JSON.parse(JSON.stringify(e))}}class He{name="test";constructor(e,t){this.path=e,this.value=t}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(!f(r,this.value))throw new We(`test failed (${this.name}:${t})`);return e}toObject(){return{op:this.name,path:this.path.toString(),value:this.value}}}class Ye{ops=[];constructor(e){e&&this.build(e)}*[Symbol.iterator](){for(const e of this.ops)yield e.toObject()}add(e,t){return this.ops.push(new Ve(this.ensurePointer(e,"add",this.ops.length),t)),this}remove(e){return this.ops.push(new Be(this.ensurePointer(e,"remove",this.ops.length))),this}replace(e,t){return this.ops.push(new qe(this.ensurePointer(e,"replace",this.ops.length),t)),this}move(e,t){return this.ops.push(new Xe(this.ensurePointer(e,"move",this.ops.length),this.ensurePointer(t,"move",this.ops.length))),this}copy(e,t){return this.ops.push(new Ze(this.ensurePointer(e,"copy",this.ops.length),this.ensurePointer(t,"copy",this.ops.length))),this}test(e,t){return this.ops.push(new He(this.ensurePointer(e,"test",this.ops.length),t)),this}apply(e){let t=e;for(let e=0;e<this.ops.length;e++){const n=this.ops[e];try{t=n.apply(t,e)}catch(t){if(t instanceof m)throw new Qe(`${t.message} (${n.name}:${e})`);throw t}}return t}toArray(){return this.ops.map((e=>e.toObject()))}build(e){for(let t=0;t<e.length;t++){const n=e[t];switch(n.op){case"add":this.add(this.opPointer(n,"path","add",t),this.opValue(n,"value","add",t));break;case"remove":this.remove(this.opPointer(n,"path","remove",t));break;case"replace":this.replace(this.opPointer(n,"path","replace",t),this.opValue(n,"value","replace",t));break;case"move":this.move(this.opPointer(n,"from","move",t),this.opPointer(n,"path","move",t));break;case"copy":this.copy(this.opPointer(n,"from","copy",t),this.opPointer(n,"path","copy",t));break;case"test":this.test(this.opPointer(n,"path","test",t),this.opValue(n,"value","test",t));break;default:throw new Qe(`expected 'op' to be one of 'add', 'remove', 'replace', 'move', 'copy' or 'test' (${n.op}:${t})`)}}}opPointer(e,t,n,r){if(!Object.hasOwn(e,t))throw new Qe(`missing property '${t}' (${n}:${r})`);const s=e[t];if(!l(s))throw new Qe(`expected a JSON Pointer string for '${t}', found ${typeof s} (${n}:${r})`);try{return new N(s)}catch(e){if(e instanceof g)throw new Qe(`${e.message} (${n}:${r})`);throw e}}opValue(e,t,n,r){if(!Object.hasOwn(e,t))throw new Qe(`missing property '${t}' (${n}:${r})`);return e[t]}ensurePointer(e,t,n){if(e instanceof N)return e;if(!l(e))throw new Qe(`expected a JSON Pointer string, found ${typeof e} (${t}:${n})`);try{return new N(e)}catch(e){if(e instanceof g)throw new Qe(`${e.message} (${t}:${n})`);throw e}}}function et(e,t){return new Ye(e).apply(t)}var tt=Object.freeze({__proto__:null,JSONPatch:Ye,JSONPatchError:Qe,JSONPatchTestFailure:We,apply:et});return e.DEFAULT_ENVIRONMENT=De,e.FunctionExpressionType=d,e.JSONPatch=Ye,e.JSONPatchError=Qe,e.JSONPatchTestFailure=We,e.JSONPath=_e,e.JSONPathEnvironment=ze,e.JSONPathError=t,e.JSONPathIndexError=o,e.JSONPathLexerError=r,e.JSONPathNode=$,e.JSONPathNodeList=b,e.JSONPathRecursionLimitError=h,e.JSONPathSyntaxError=a,e.JSONPathTypeError=s,e.JSONPointer=N,e.Nothing=P,e.RelativeJSONPointer=S,e.Token=re,e.TokenKind=ne,e.UNDEFINED=x,e.apply=et,e.compile=Ue,e.jsonpatch=tt,e.jsonpath=Ge,e.jsonpointer=R,e.lazyQuery=Ce,e.query=Ke,e.resolve=T,e.version="0.3.0",e}({});
1
+ var json_p3=function(e){"use strict";class t extends Error{constructor(e,t){super(e),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathError",this.message=n(e,t)}}function n(e,t){return t.input.length<=9?`${e} ('${t.input}':${t.index})`:t.index>t.input.length-5?`${e} ('${t.input.slice(t.input.length-9)}':${t.index})`:t.index-4<0?`${e} ('${t.input.slice(0,9)}':${t.index})`:`${e} ('${t.input.slice(t.index-4,t.index+5)}':${t.index})`}class r extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathLexerError",this.message=n(e,t)}}class s extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathTypeError",this.message=n(e,t)}}class o extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathIndexError",this.message=n(e,t)}}class i extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="UndefinedFilterFunctionError",this.message=n(e,t)}}class a extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathSyntaxError",this.message=n(e,t)}}class h extends t{constructor(e,t){super(e,t),this.message=e,this.token=t,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPathRecursionLimitError",this.message=n(e,t)}}function c(e){return Array.isArray(e)}function u(e){const t=typeof e;return null!==e&&"object"===t||"function"===t}function l(e){return"string"==typeof e}function p(e){return"number"==typeof e}function f(e,t){if(e===t)return!0;if(Array.isArray(e)){if(Array.isArray(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!f(e[n],t[n]))return!1;return!0}return!1}if(u(e)&&u(t)){const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const r of n)if(!f(e[r],t[r]))return!1;return!0}return!1}let d=function(e){return e.ValueType="ValueType",e.LogicalType="LogicalType",e.NodesType="NodesType",e}({});class g extends Error{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerError"}}class m extends g{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerResolutionError"}}class v extends m{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerIndexError"}}class w extends m{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerKeyError"}}class O extends g{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerSyntaxError"}}class y extends m{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerTypeError"}}const x=Symbol.for("jsonpointer.undefined");class N{#e;constructor(e){this.tokens=this.parse(e),this.#e=N.encode(this.tokens)}static encode(e){return e.length?"/"+e.map((e=>e.replaceAll("~","~0").replaceAll("/","~1"))).join("/"):""}resolve(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:x;try{return this.tokens.reduce(this.getItem.bind(this),e)}catch(e){if(e instanceof m&&t!==x)return t;throw e}}resolveWithParent(e){if(!this.tokens.length)return[x,this.resolve(e)];const t=this.tokens.slice(0,this.tokens.length-1).reduce(this.getItem.bind(this),e);try{return[t,this.getItem(t,this.tokens[this.tokens.length-1],this.tokens.length-1)]}catch(e){if(e instanceof v||e instanceof w)return[t,x];throw e}}toString(){return this.#e}isRelativeTo(e){return e.tokens.length<this.tokens.length&&this.tokens.slice(0,e.tokens.length).every(((t,n)=>t===e.tokens[n]))}parse(e){if(e.length&&!e.startsWith("/"))throw new O(`"${e}" pointers must start with a slash or be the empty string`);return e.split("/").map((e=>e.replaceAll("~1","/").replaceAll("~0","~"))).slice(1)}getItem(e,t,n){if(c(e)){if("length"!==t&&Object.hasOwn(e,t))return e[Number(t)];if(t.startsWith("#")){const r=t.slice(1);if(k.test(r)&&Object.hasOwn(e,r))return Number(r);throw new v(`index out of range '${N.encode(this.tokens.slice(0,n+1))}'`)}throw new v(`index out of range '${N.encode(this.tokens.slice(0,n+1))}'`)}if(u(e)){if(Object.hasOwn(e,t))return e[t];if(t.startsWith("#")&&Object.hasOwn(e,t.slice(1)))return t.slice(1);throw new w(`no such property '${N.encode(this.tokens.slice(0,n+1))}'`)}throw new y(`found primitive value, expected an object '${N.encode(this.tokens.slice(0,n+1))}'`)}_join(e){if(!l(e))throw new y("join() requires string arguments, found "+typeof e);if(e.startsWith("/"))return new N(e);const t=this.tokens.concat(e.split("/").map((e=>e.replaceAll("~1","/").replaceAll("~0","~"))));return new N(N.encode(t))}join(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(!t.length)return this;let r=this;for(const e of t)r=r._join(e);return r}exists(e){try{this.resolve(e)}catch(e){if(e instanceof m)return!1;throw e}return!0}parent(){return this.tokens.length?new N(N.encode(this.tokens.slice(0,this.tokens.length-1))):this}to(e){return(l(e)?new S(e):e).to(this)}}const E=/(?<ORIGIN>\d+)(?<INDEX_G>(?<SIGN>[+-])(?<INDEX>\d))?(?<POINTER>.*)/s,k=/(0|[1-9][0-9]*)/;class S{constructor(e){[this.origin,this.index,this.pointer]=this.parse(e)}toString(){const e=this.index>0?"+":"",t=0===this.index?"":`${e}${this.index}`;return`${this.origin}${t}${this.pointer}`}to(e){const t=l(e)?new N(e):e;if(this.origin>t.tokens.length)throw new v(`origin (${this.origin}) exceeds root (${t.tokens.length})`);const n=this.origin<1?t.tokens.slice():t.tokens.slice(0,-this.origin);if(this.index&&n.length&&this.isIntLike(n.at(-1))){const e=Number(n.at(-1))+this.index;if(e<0)throw new v(`index offset out of range (${e})`);n[n.length-1]=String(e)}return this.pointer instanceof N?n.push(...this.pointer.tokens):n[n.length-1]=`#${n[n.length-1]}`,new N(N.encode(n))}parse(e){const t=E.exec(e);if(!t||!t.groups)throw new O("failed to parse relative pointer");const n=this.parseInt(t.groups.ORIGIN);let r=0;if(t.groups.INDEX_G){if(r=this.parseInt(t.groups.INDEX),0===r)throw new O("index offset can't be zero");"-"===t.groups.SIGN&&(r=-r)}return"#"===t.groups.POINTER?[n,r,"#"]:[n,r,new N(t.groups.POINTER)]}parseInt(e){if(e.startsWith("0")&&e.length>1)throw new O("unexpected leading zero");if(k.test(e))return Number(e);throw new O(`expected an integer, found '${e}'`)}isIntLike(e){return!(void 0!==e&&!p(e))||k.test(e)}}function T(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:x;return new N(e).resolve(t,n)}var R=Object.freeze({__proto__:null,JSONPointer:N,JSONPointerError:g,JSONPointerIndexError:v,JSONPointerKeyError:w,JSONPointerResolutionError:m,JSONPointerSyntaxError:O,JSONPointerTypeError:y,RelativeJSONPointer:S,UNDEFINED:x,resolve:T});class ${constructor(e,t,n){this.value=e,this.location=t,this.root=n}get path(){return"$"+this.location.map((e=>l(e)?`['${e}']`:`[${e}]`)).join("")}toPointer(){return this.location.length?new N(N.encode(this.location.map(String))):new N("")}}class b{constructor(e){this.nodes=e}[Symbol.iterator](){return this.nodes[Symbol.iterator]()}empty(){return 0===this.nodes.length}values(){return this.nodes.map((e=>e.value))}valuesOrSingular(){return 1===this.nodes.length?this.nodes[0].value:this.nodes.map((e=>e.value))}locations(){return this.nodes.map((e=>e.location))}paths(){return this.nodes.map((e=>e.path))}pointers(){return this.nodes.map((e=>e.toPointer()))}get length(){return this.nodes.length}}const P=Symbol.for("jsonpath.nothing");function I(e,t){return u(e)&&Object.hasOwn(e,t)}class _{constructor(e){this.token=e}}class L extends _{}class A extends L{evaluate(){return null}toString(){return"null"}}class j extends L{constructor(e,t){super(e),this.token=e,this.value=t}evaluate(){return this.value}toString(){return String(this.value)}}class F extends L{constructor(e,t){super(e),this.token=e,this.value=t}evaluate(){return this.value}toString(){return JSON.stringify(this.value)}}class J extends L{constructor(e,t){super(e),this.token=e,this.value=t}evaluate(){return this.value}toString(){return String(this.value)}}class z extends _{constructor(e,t,n){super(e),this.token=e,this.operator=t,this.right=n}evaluate(e){if("!"===this.operator){const t=this.right.evaluate(e);return t instanceof b?0===t.nodes.length:!Q(t)}throw new s(`unknown operator '${this.operator}'`,this.token)}toString(){return`${this.operator}${this.right.toString()}`}}class M extends _{constructor(e,t,n,r){super(e),this.token=e,this.left=t,this.operator=n,this.right=r}evaluate(e){let t=this.left.evaluate(e);t instanceof b&&1===t.nodes.length&&(t=t.nodes[0].value);let n=this.right.evaluate(e);return n instanceof b&&1===n.nodes.length&&(n=n.nodes[0].value),"&&"===this.operator?Q(t)&&Q(n):"||"===this.operator?Q(t)||Q(n):W(t,this.operator,n)}toString(){return"&&"===this.operator||"||"===this.operator?`(${this.left.toString()} ${this.operator} ${this.right.toString()})`:`${this.left.toString()} ${this.operator} ${this.right.toString()}`}}class D extends _{constructor(e,t){super(e),this.token=e,this.expression=t}evaluate(e){const t=this.expression.evaluate(e);return t instanceof b?t.nodes.length>0:Q(t)}toString(){return this.expression.toString()}}class K extends _{constructor(e,t){super(e),this.token=e,this.path=t}}class C extends K{evaluate(e){return e.lazy?new b(Array.from(this.path.lazyQuery(e.currentValue))):this.path.query(e.currentValue)}toString(){return`@${this.path.toString().slice(1)}`}}class U extends K{evaluate(e){return e.lazy?new b(Array.from(this.path.lazyQuery(e.rootValue))):this.path.query(e.rootValue)}toString(){return this.path.toString()}}class G extends _{constructor(e,t,n){super(e),this.token=e,this.name=t,this.args=n}evaluate(e){const t=e.environment.functionRegister.get(this.name);if(!t)throw new i(`filter function '${this.name}' is undefined`,this.token);const n=this.args.map((t=>t.evaluate(e))).map(((e,n)=>t.argTypes[n]!==d.NodesType&&e instanceof b?this.unpack_node_list(e):e));return t.call(...n)}toString(){return`${this.name}(${this.args.map((e=>e.toString())).join(", ")})`}unpack_node_list(e){switch(e.length){case 0:return P;case 1:return e.nodes[0].value;default:return e}}}function Q(e){return!(e instanceof b&&e.empty())&&!("boolean"==typeof e&&!1===e)}function W(e,t,n){switch(t){case"==":return V(e,n);case"!=":return!V(e,n);case"<":return B(e,n);case">":return B(n,e);case">=":return B(n,e)||V(e,n);case"<=":return B(e,n)||V(e,n);default:return!1}}function V(e,t){if(t instanceof b&&([e,t]=[t,e]),e instanceof b){if(t instanceof b){if(e.empty()&&t.empty())return!0;if(1===e.nodes.length&&1===t.nodes.length)return f(e.nodes[0].value,t.nodes[0].value)}return e.empty()?t===P:1===e.nodes.length&&f(e.nodes[0].value,t)}return e===P&&t===P||f(e,t)}function B(e,t){return!!(l(e)&&l(t)||p(e)&&p(t))&&e<t}var q=Object.freeze({__proto__:null,BooleanLiteral:j,FilterExpression:_,FilterExpressionLiteral:L,FunctionExtension:G,InfixExpression:M,JSONPathQuery:K,LogicalExpression:D,NullLiteral:A,NumberLiteral:J,PrefixExpression:z,RelativeQuery:C,RootQuery:U,StringLiteral:F,compare:W});class X{argTypes=[d.NodesType];returnType=d.ValueType;call(e){return e.length}}class Z{argTypes=[d.ValueType];returnType=d.ValueType;call(e){return c(e)||l(e)?e.length:u(e)?Object.keys(e).length:P}}class H extends Map{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:128,t=arguments.length>1?arguments[1]:void 0;void 0!==t?super(t):super(),this.maxSize=e}get(e){const t=super.get(e);return this.has(e)&&(this.delete(e),this.set(e,t)),t}set(e,t){return this.has(e)?this.delete(e):this.size>=this.maxSize&&this.delete(this.first()),super.set(e,t)}first(){return this.keys().next().value}}class Y{argTypes=[d.ValueType,d.ValueType];returnType=d.LogicalType;#t;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=e,this.cacheSize=e.cacheSize??10,this.throwErrors=e.throwErrors??!1,this.#t=new H(this.cacheSize)}call(e,t){if(this.cacheSize>0){const n=this.#t.get(t);if(n)try{return n.test(e)}catch(e){if(this.throwErrors)throw e;return!1}}try{const n=new RegExp(this.fullMatch(t),"u");return this.cacheSize>0&&this.#t.set(t,n),n.test(e)}catch(e){if(this.throwErrors)throw e;return!1}}fullMatch(e){const t=[];return e.startsWith("^")||t.push("^"),t.push(e),e.endsWith("$")||t.push("$"),t.join("")}}class ee{argTypes=[d.ValueType,d.ValueType];returnType=d.LogicalType;#t;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=e,this.cacheSize=e.cacheSize??10,this.throwErrors=e.throwErrors??!1,this.#t=new H(this.cacheSize)}call(e,t){if(this.cacheSize>0){const n=this.#t.get(t);if(n)try{return!!e.match(n)}catch(e){if(this.throwErrors)throw e;return!1}}try{const n=new RegExp(t,"u");return this.cacheSize>0&&this.#t.set(t,n),!!e.match(n)}catch(e){if(this.throwErrors)throw e;return!1}}}class te{argTypes=[d.NodesType];returnType=d.ValueType;call(e){return 1===e.length?e.nodes[0].value:P}}let ne=function(e){return e.AND="TOKEN_AND",e.COLON="TOKEN_COLON",e.COMMA="TOKEN_COMMA",e.CURRENT="TOKEN_CURRENT_NODE",e.DDOT="TOKEN_DDOT",e.DOT="TOKEN_DOT",e.DOUBLE_QUOTE_STRING="TOKEN_DOUBLE_QUOTE_STRING",e.EOF="TOKEN_EOF",e.EQ="TOKEN_EQ",e.ERROR="TOKEN_ERROR",e.FALSE="TOKEN_FALSE",e.FILTER="TOKEN_FILTER_START",e.FUNCTION="TOKEN_FUNCTION",e.GE="TOKEN_GE",e.GT="TOKEN_GT",e.INDEX="TOKEN_INDEX",e.LBRACKET="TOKEN_LBRACKET",e.LE="TOKEN_LE",e.LG="TOKEN_LG",e.LPAREN="TOKEN_LPAREN",e.LT="TOKEN_LT",e.NAME="TOKEN_NAME",e.NE="TOKEN_NE",e.NOT="TOKEN_NOT",e.NULL="TOKEN_NULL",e.NUMBER="NUMBER",e.OR="TOKEN_OR",e.RBRACKET="TOKEN_RBRACKET",e.ROOT="TOKEN_ROOT",e.RPAREN="TOKEN_RPAREN",e.SINGLE_QUOTE_STRING="TOKEN_SINGLE_QUOTE_STRING",e.TRUE="TOKEN_TRUE",e.WILD="TOKEN_WILD",e}({});class re{constructor(e,t,n,r){this.kind=e,this.value=t,this.index=n,this.input=r}}new re(ne.EOF,"",-1,"");class se{#n=0;constructor(e){this.tokens=e}get current(){return this.tokens[this.#n]}get peek(){return this.#n>=this.tokens.length-1?this.tokens[this.tokens.length-1]:this.tokens[this.#n+1]}next(){const e=this.current;return this.#n+=1,e}backup(){this.#n>0&&(this.#n-=1)}expect(e){if(this.current.kind!==e)throw new a(`expected token '${e}', found '${this.current.kind}'`,this.current)}expectPeek(e){const t=this.peek;if(t.kind!==e)throw new a(`expected token '${e}', found '${t.kind}'`,t)}}const oe=/e[+-]?\d+/y,ie=/[a-z][a-z_0-9]*/y,ae=/-?\d+/y,he=/-?[0-9]+/y,ce=/[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*/y,ue=new Set([" ","\n","\t","\r"]);class le{filterLevel=0;parenStack=[];tokens=[];#r=0;#n=0;constructor(e){this.path=e}get pos(){return this.#n}get start(){return this.#r}run(){let e=fe;for(;e;)e=e(this)}emit(e){this.tokens.push(new re(e,this.path.slice(this.#r,this.#n),this.#r,this.path)),this.#r=this.#n}next(){if(this.#n>=this.path.length)return"";const e=this.path[this.#n];return this.#n+=1,e}ignore(){this.#r=this.#n}backup(){if(this.#n<=this.#r){const e="can't backup beyond start";throw new r(e,new re(ne.ERROR,e,this.#n,this.path))}this.#n-=1}peek(){const e=this.next();return e&&this.backup(),e}accept(e){const t=this.next();return!!e.has(t)||(t&&this.backup(),!1)}acceptMatch(e){const t=this.next();return!!e.test(t)||(t&&this.backup(),!1)}acceptRun(e){let t=!1,n=this.next();for(;e.has(n);)n=this.next(),t=!0;return n&&this.backup(),t}acceptMatchRun(e){e.lastIndex=this.#n;const t=e.exec(this.path);return e.lastIndex=0,!!t&&(this.#n+=t[0].length,!0)}ignoreWhitespace(){if(this.#n!==this.#r){const e=`must emit or ignore before consuming whitespace ('${this.path.slice(this.#r,this.#n)}':${this.pos})`;throw new r(e,new re(ne.ERROR,e,this.pos,this.path))}return!!this.acceptRun(ue)&&(this.ignore(),!0)}error(e){this.tokens.push(new re(ne.ERROR,e,this.#n,this.path))}}function pe(e){const[t,n]=function(e){const t=new le(e);return[t,t.tokens]}(e);if(t.run(),n.length&&n[n.length-1].kind===ne.ERROR)throw new a(n[n.length-1].value,n[n.length-1]);return n}function fe(e){const t=e.next();return"$"!==t?(e.backup(),e.error(`expected '$', found '${t}'`),null):(e.emit(ne.ROOT),de)}function de(e){e.ignoreWhitespace()&&!e.peek()&&e.error("trailing whitespace");const t=e.next();switch(t){case"":return e.emit(ne.EOF),null;case".":return"."===e.peek()?(e.next(),e.emit(ne.DDOT),ge):me;case"[":return e.emit(ne.LBRACKET),ve;default:return e.backup(),e.filterLevel?we:(e.error(`expected '.', '..' or a bracketed selection, found '${t}'`),null)}}function ge(e){const t=e.next();switch(t){case"":return e.error("bald descendant segment"),null;case"*":return e.emit(ne.WILD),de;case"[":return e.emit(ne.LBRACKET),ve;default:return e.backup(),e.acceptMatchRun(ce)?(e.emit(ne.NAME),de):(e.error(`unexpected descendent selection token '${t}'`),null)}}function me(e){if(e.ignore(),e.ignoreWhitespace())return e.error("unexpected whitespace after dot"),null;const t=e.next();return"*"===t?(e.emit(ne.WILD),de):(e.backup(),e.acceptMatchRun(ce)?(e.emit(ne.NAME),de):(e.error(`unexpected shorthand selector '${t}'`),null))}function ve(e){for(;;){e.ignoreWhitespace();const t=e.next();switch(t){case"]":return e.emit(ne.RBRACKET),e.filterLevel?we:de;case"":return e.error("unclosed bracketed selection"),null;case"*":e.emit(ne.WILD);continue;case"?":return e.emit(ne.FILTER),e.filterLevel+=1,we;case",":e.emit(ne.COMMA);continue;case":":e.emit(ne.COLON);continue;case"'":return ye;case'"':return xe;default:if(e.backup(),e.acceptMatchRun(ae)){e.emit(ne.INDEX);continue}return e.error(`unexpected token '${t}' in bracketed selection`),null}}}function we(e){for(;;){e.ignoreWhitespace();const t=e.next();switch(t){case"":case"]":return e.filterLevel-=1,1===e.parenStack.length?(e.error("unbalanced parentheses"),null):(e.backup(),ve);case",":if(e.emit(ne.COMMA),e.parenStack.length)continue;return e.filterLevel-=1,ve;case"'":return Ne;case'"':return Ee;case"(":e.emit(ne.LPAREN),e.parenStack.length&&(e.parenStack[e.parenStack.length-1]+=1);continue;case")":e.emit(ne.RPAREN),e.parenStack.length&&(1===e.parenStack[e.parenStack.length-1]?e.parenStack.pop():e.parenStack[e.parenStack.length-1]-=1);continue;case"$":return e.emit(ne.ROOT),de;case"@":return e.emit(ne.CURRENT),de;case".":return e.backup(),de;case"!":"="===e.peek()?(e.next(),e.emit(ne.NE)):e.emit(ne.NOT);continue;case"=":if("="===e.peek()){e.next(),e.emit(ne.EQ);continue}return e.backup(),e.error(`unexpected filter selector token '${t}'`),null;case"<":"="===e.peek()?(e.next(),e.emit(ne.LE)):e.emit(ne.LT);continue;case">":"="===e.peek()?(e.next(),e.emit(ne.GE)):e.emit(ne.GT);continue;default:if(e.backup(),e.acceptMatchRun(he)){if("."===e.peek()&&(e.next(),!e.acceptMatchRun(he)))return e.error("a fractional digit is required after a decimal point"),null;e.acceptMatchRun(oe),e.emit(ne.NUMBER);continue}if(e.acceptMatchRun(/&&/y)){e.emit(ne.AND);continue}if(e.acceptMatchRun(/\|\|/y)){e.emit(ne.OR);continue}if(e.acceptMatchRun(/true/y)){e.emit(ne.TRUE);continue}if(e.acceptMatchRun(/false/y)){e.emit(ne.FALSE);continue}if(e.acceptMatchRun(/null/y)){e.emit(ne.NULL);continue}if(e.acceptMatchRun(ie)&&"("===e.peek()){e.parenStack.push(1),e.emit(ne.FUNCTION),e.next(),e.ignore();continue}}return e.error(`unexpected filter selector token '${t}'`),null}}function Oe(e,t){return function(n){if(n.ignore(),n.peek()===e)return n.emit("'"===e?ne.SINGLE_QUOTE_STRING:ne.DOUBLE_QUOTE_STRING),n.next(),n.ignore(),t;for(;;){const r=n.path.slice(n.pos,n.pos+2),s=n.next();if("\\\\"!==r&&r!==`\\${e}`){if("\\"===s&&!r.match(/\\[bfnrtu/]/))return n.error("invalid escape"),null;if(!s)return n.error(`unclosed string starting at index ${n.start}`),null;if(s===e)return n.backup(),n.emit("'"===e?ne.SINGLE_QUOTE_STRING:ne.DOUBLE_QUOTE_STRING),n.next(),n.ignore(),t}else n.next()}}}const ye=Oe("'",ve),xe=Oe('"',ve),Ne=Oe("'",we),Ee=Oe('"',we);class ke{constructor(e,t){this.environment=e,this.token=t}}class Se extends ke{constructor(e,t,n,r){super(e,t),this.environment=e,this.token=t,this.name=n,this.shorthand=r}resolve(e){const t=[];for(const n of e)I(n.value,this.name)&&t.push(new $(n.value[this.name],n.location.concat(this.name),n.root));return t}*lazyResolve(e){for(const t of e)I(t.value,this.name)&&(yield new $(t.value[this.name],t.location.concat(this.name),t.root))}toString(){return this.shorthand?`['${this.name}']`:`'${this.name}'`}}class Te extends ke{constructor(e,t,n){if(super(e,t),this.environment=e,this.token=t,this.index=n,n<this.environment.minIntIndex||n>this.environment.maxIntIndex)throw new o("index out of range",this.token)}resolve(e){const t=[];for(const n of e)if(c(n.value)){const e=this.normalizedIndex(n.value.length);e in n.value&&t.push(new $(n.value[e],n.location.concat(e),n.root))}return t}*lazyResolve(e){for(const t of e)if(c(t.value)){const e=this.normalizedIndex(t.value.length);e in t.value&&(yield new $(t.value[e],t.location.concat(e),t.root))}}toString(){return String(this.index)}normalizedIndex(e){return this.index<0&&e>=Math.abs(this.index)?e+this.index:this.index}}class Re extends ke{constructor(e,t,n,r,s){super(e,t),this.environment=e,this.token=t,this.start=n,this.stop=r,this.step=s,this.checkRange(n,r,s)}resolve(e){const t=[];for(const n of e)if(c(n.value))for(const[e,r]of this.slice(n.value,this.start,this.stop,this.step))t.push(new $(r,n.location.concat(e),n.root));return t}*lazyResolve(e){for(const t of e)if(c(t.value))for(const[e,n]of this.slice(t.value,this.start,this.stop,this.step))yield new $(n,t.location.concat(e),t.root)}toString(){return`${this.start?this.start:""}:${this.stop?this.stop:""}:${this.step?this.step:"1"}`}checkRange(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];for(const e of t)if(void 0!==e&&(e<this.environment.minIntIndex||e>this.environment.maxIntIndex))throw new o("index out of range",this.token)}slice(e,t,n,r){if(!e.length)return[];if(t=null==t?r&&r<0?e.length-1:0:t<0?Math.max(e.length+t,0):Math.min(t,e.length-1),n=null==n?r&&r<0?-1:e.length:n<0?Math.max(e.length+n,-1):Math.min(n,e.length),0===r)return[];r||(r=1);const s=[];if(r>0)for(let o=t;o<n;o+=r)s.push([o,e[o]]);else for(let o=t;o>n;o+=r)s.push([o,e[o]]);return s}}class $e extends ke{constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];super(e,t),this.environment=e,this.token=t,this.shorthand=n}resolve(e){const t=[];for(const n of e)if(!(n.value instanceof String))if(c(n.value))for(let e=0;e<n.value.length;e++)t.push(new $(n.value[e],n.location.concat(e),n.root));else if(u(n.value))for(const[e,r]of Object.entries(n.value))t.push(new $(r,n.location.concat(e),n.root));return t}*lazyResolve(e){for(const t of e)if(!(t.value instanceof String))if(c(t.value))for(let e=0;e<t.value.length;e++)yield new $(t.value[e],t.location.concat(e),t.root);else if(u(t.value))for(const[e,n]of Object.entries(t.value))yield new $(n,t.location.concat(e),t.root)}toString(){return this.shorthand?"[*]":"*"}}class be extends ke{constructor(e,t,n){super(e,t),this.environment=e,this.token=t,this.selector=n}resolve(e){const t=[];for(const n of e){t.push(n);for(const e of this.visit(n))t.push(e)}return this.selector.resolve(t)}*lazyResolve(e){yield*this.selector.lazyResolve(this._lazyResolve(e))}*_lazyResolve(e){for(const t of e){const e=[{node:t,depth:0}];for(yield t;e.length;){const{node:t,depth:n}=e.pop();if(n>=this.environment.maxRecursionDepth)throw new h("recursion limit reached",this.token);if(!(t.value instanceof String))if(c(t.value))for(let r=0;r<t.value.length;r++){const s=new $(t.value[r],t.location.concat(r),t.root);yield s,u(s.value)&&e.push({node:s,depth:n+1})}else if(u(t.value))for(const[r,s]of Object.entries(t.value)){const o=new $(s,t.location.concat(r),t.root);yield o,u(o.value)&&e.push({node:o,depth:n+1})}}}}toString(){return`..${this.selector.toString()}`}visit(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(t>=this.environment.maxRecursionDepth)throw new h("recursion limit reached",this.token);const n=[];if(e.value instanceof String)return n;if(c(e.value))for(let r=0;r<e.value.length;r++){const s=new $(e.value[r],e.location.concat(r),e.root);n.push(s);for(const e of this.visit(s,t+1))n.push(e)}else if(u(e.value))for(const[r,s]of Object.entries(e.value)){const o=new $(s,e.location.concat(r),e.root);n.push(o);for(const e of this.visit(o,t+1))n.push(e)}return n}}class Pe extends ke{constructor(e,t,n){super(e,t),this.environment=e,this.token=t,this.expression=n}resolve(e){const t=[];for(const n of e)if(!(n.value instanceof String))if(c(n.value))for(let e=0;e<n.value.length;e++){const r=n.value[e],s={environment:this.environment,currentValue:r,rootValue:n.root};this.expression.evaluate(s)&&t.push(new $(r,n.location.concat(e),n.root))}else if(u(n.value))for(const[e,r]of Object.entries(n.value)){const s={environment:this.environment,currentValue:r,rootValue:n.root};this.expression.evaluate(s)&&t.push(new $(r,n.location.concat(e),n.root))}return t}*lazyResolve(e){for(const t of e)if(!(t.value instanceof String))if(c(t.value))for(let e=0;e<t.value.length;e++){const n=t.value[e],r={environment:this.environment,currentValue:n,rootValue:t.root,lazy:!0};this.expression.evaluate(r)&&(yield new $(n,t.location.concat(e),t.root))}else if(u(t.value))for(const[e,n]of Object.entries(t.value)){const r={environment:this.environment,currentValue:n,rootValue:t.root,lazy:!0};this.expression.evaluate(r)&&(yield new $(n,t.location.concat(e),t.root))}}toString(){return`?${this.expression.toString()}`}}class Ie extends ke{constructor(e,t,n){super(e,t),this.environment=e,this.token=t,this.items=n}resolve(e){const t=[];for(const n of e)for(const e of this.items)for(const r of e.resolve([n]))t.push(r);return t}*lazyResolve(e){for(const t of e)for(const e of this.items)yield*e.lazyResolve([t])}toString(){return`[${this.items.map((e=>e.toString())).join(", ")}]`}}var _e=Object.freeze({__proto__:null,BracketedSelection:Ie,FilterSelector:Pe,IndexSelector:Te,JSONPathSelector:ke,NameSelector:Se,RecursiveDescentSegment:be,SliceSelector:Re,WildcardSelector:$e});class Le{constructor(e,t){this.environment=e,this.selectors=t}query(e){let t=[new $(e,[],e)];for(const e of this.selectors)t=e.resolve(t);return new b(t)}lazyQuery(e){let t=[new $(e,[],e)][Symbol.iterator]();for(const e of this.selectors)t=e.lazyResolve(t);return t}match(e){const t=this.lazyQuery(e).next();if(!t.done)return t.value}toString(){return`$${this.selectors.map((e=>e.toString())).join("")}`}singularQuery(){for(const e of this.selectors)if(!(e instanceof Se||e instanceof Ie&&1===e.items.length&&(e.items[0]instanceof Se||e.items[0]instanceof Te)))return!1;return!0}}const Ae=new Map([[ne.AND,4],[ne.EQ,6],[ne.GE,6],[ne.GT,6],[ne.LE,6],[ne.LT,6],[ne.NE,6],[ne.NOT,7],[ne.OR,5],[ne.RPAREN,1]]),je=new Map([[ne.AND,"&&"],[ne.EQ,"=="],[ne.GE,">="],[ne.GT,">"],[ne.LE,"<="],[ne.LT,"<"],[ne.NE,"!="],[ne.OR,"||"]]),Fe=new Set(["==",">=",">","<=","<","!="]);class Je{constructor(e){this.environment=e,this.tokenMap=new Map([[ne.FALSE,this.parseBoolean],[ne.NUMBER,this.parseNumber],[ne.LPAREN,this.parseGroupedExpression],[ne.NOT,this.parsePrefixExpression],[ne.NULL,this.parseNull],[ne.ROOT,this.parseRootQuery],[ne.CURRENT,this.parseRelativeQuery],[ne.SINGLE_QUOTE_STRING,this.parseString],[ne.DOUBLE_QUOTE_STRING,this.parseString],[ne.TRUE,this.parseBoolean],[ne.FUNCTION,this.parseFunction]])}parse(e){e.current.kind===ne.ROOT&&e.next();const t=this.parsePath(e);if(e.current.kind!==ne.EOF)throw new a(`unexpected token '${e.current.kind}'`,e.current);return t}parsePath(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=[];for(;;){const r=this.parseSegment(e);if(!r){t&&e.backup();break}n.push(r),e.next()}return n}parseSegment(e){switch(e.current.kind){case ne.NAME:return new Se(this.environment,e.current,e.current.value,!0);case ne.WILD:return new $e(this.environment,e.current,!0);case ne.DDOT:{const t=e.current;e.next();const n=this.parseSegment(e);if(!n)throw new a("bald descendant segment",e.current);return new be(this.environment,t,n)}case ne.LBRACKET:return this.parseBracketedSelection(e);default:return null}}parseIndex(e){if(e.current.value.length>1&&e.current.value.startsWith("0")||e.current.value.startsWith("-0"))throw new a("leading zero in index selector",e.current);return new Te(this.environment,e.current,Number(e.current.value))}parseSlice(e){const t=e.current,n=[];function r(e){if(e.kind===ne.INDEX){if(e.value.length>1&&e.value.startsWith("0")||e.value.startsWith("-0"))throw new a("leading zero in index selector",e);return!0}return!1}return r(e.current)?(n.push(Number(e.current.value)),e.next(),e.expect(ne.COLON),e.next()):(n.push(void 0),e.expect(ne.COLON),e.next()),r(e.current)?(n.push(Number(e.current.value)),e.next(),e.current.kind===ne.COLON&&e.next()):e.current.kind===ne.COLON&&(n.push(void 0),e.expect(ne.COLON),e.next()),r(e.current)&&(n.push(Number(e.current.value)),e.next()),e.backup(),new Re(this.environment,t,...n)}parseBracketedSelection(e){const t=e.next(),n=[];for(;e.current.kind!==ne.RBRACKET;){switch(e.current.kind){case ne.SINGLE_QUOTE_STRING:case ne.DOUBLE_QUOTE_STRING:n.push(new Se(this.environment,e.current,this.decodeString(e.current,!0),!1));break;case ne.FILTER:n.push(this.parseFilter(e));break;case ne.INDEX:e.peek.kind===ne.COLON?n.push(this.parseSlice(e)):n.push(this.parseIndex(e));break;case ne.COLON:n.push(this.parseSlice(e));break;case ne.WILD:n.push(new $e(this.environment,e.current));break;case ne.EOF:throw new a("unexpected end of query",e.current);default:throw new a(`unexpected token in bracketed selection '${e.current.kind}'`,e.current)}e.peek.kind!==ne.RBRACKET&&(e.expectPeek(ne.COMMA),e.next()),e.next()}if(!n.length)throw new a("empty bracketed segment",t);return new Ie(this.environment,t,n)}parseFilter(e){const t=e.next(),n=this.parseFilterExpression(e);if(n instanceof G){const e=this.environment.functionRegister.get(n.name);if(e&&e.returnType===d.ValueType)throw new s(`result of ${n.name}() must be compared`,n.token)}return new Pe(this.environment,t,new D(t,n))}parseBoolean(e){return e.current.kind===ne.FALSE?new j(e.current,!1):new j(e.current,!0)}parseNull(e){return new A(e.current)}parseString(e){return new F(e.current,this.decodeString(e.current))}parseNumber(e){return new J(e.current,Number(e.current.value))}parsePrefixExpression(e){return e.expect(ne.NOT),e.next(),new z(e.current,"!",this.parseFilterExpression(e,7))}parseInfixExpression(e,t){const n=e.next(),r=Ae.get(n.kind)||1,s=this.parseFilterExpression(e,r),o=je.get(n.kind);if(!o)throw new a(`unknown operator '${n.kind}'`,n);return Fe.has(o)&&(this.throwForNonComparable(t),this.throwForNonComparable(s)),new M(n,t,o,s)}parseGroupedExpression(e){e.next();let t=this.parseFilterExpression(e);for(e.next();e.current.kind!==ne.RPAREN;){if(e.current.kind===ne.EOF)throw new a("unbalanced parentheses",e.current);t=this.parseInfixExpression(e,t)}return e.expect(ne.RPAREN),t}parseRootQuery(e){const t=e.next();return new U(t,new Le(this.environment,this.parsePath(e,!0)))}parseRelativeQuery(e){const t=e.next();return new C(t,new Le(this.environment,this.parsePath(e,!0)))}parseFunction(e){const t=[],n=e.next();for(;e.current.kind!==ne.RPAREN;){const n=this.tokenMap.get(e.current.kind);if(!n)throw new a(`unexpected '${e.current.value}'`,e.current);let r=n.bind(this)(e),s=e.peek.kind;for(;je.has(s);)e.next(),r=this.parseInfixExpression(e,r),s=e.peek.kind;if(t.push(r),e.peek.kind!==ne.RPAREN){if(e.peek.kind===ne.RBRACKET)break;e.expectPeek(ne.COMMA),e.next()}e.next()}return e.expect(ne.RPAREN),new G(n,n.value,this.environment.checkWellTypedness(n,t))}parseFilterExpression(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const n=this.tokenMap.get(e.current.kind);if(!n){let t;switch(e.current.kind){case ne.EOF:case ne.RBRACKET:t="end of expression";break;default:t=`'${e.current.value}`}throw new a(`unexpected ${t}`,e.current)}let r=n.bind(this)(e);for(;;){const n=e.peek.kind;if(n===ne.EOF||n===ne.RBRACKET||(Ae.get(n)||1)<t)break;if(!je.has(n))return r;e.next(),r=this.parseInfixExpression(e,r)}return r}decodeString(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];try{return JSON.parse(e.kind===ne.SINGLE_QUOTE_STRING?`"${e.value.replaceAll('"','\\"').replaceAll("\\'","'")}"`:`"${e.value}"`)}catch{throw new a(`invalid ${t?"name selector":"string literal"} '${e.value}'`,e)}}throwForNonComparable(e){if((e instanceof U||e instanceof C)&&!e.path.singularQuery())throw new s("non-singular query is not comparable",e.token);if(e instanceof G){const t=this.environment.functionRegister.get(e.name);if(t&&t.returnType!==d.ValueType)throw new s(`result of ${e.name}() is not comparable`,e.token)}}}class ze{functionRegister=new Map;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.strict=e.strict??!0,this.maxIntIndex=e.maxIntIndex??Math.pow(2,53)-1,this.minIntIndex=e.maxIntIndex??-Math.pow(2,53)-1,this.maxRecursionDepth=e.maxRecursionDepth??50,this.parser=new Je(this),this.setupFilterFunctions()}compile(e){return new Le(this,this.parser.parse(new se(pe(e))))}query(e,t){return this.compile(e).query(t)}lazyQuery(e,t){return this.compile(e).lazyQuery(t)}match(e,t){return this.compile(e).match(t)}setupFilterFunctions(){this.functionRegister.set("count",new X),this.functionRegister.set("length",new Z),this.functionRegister.set("search",new ee),this.functionRegister.set("match",new Y),this.functionRegister.set("value",new te)}checkWellTypedness(e,t){const n=this.functionRegister.get(e.value);if(!n)throw new i(`no such function '${e.value}'`,e);if(t.length!==n.argTypes.length)throw new s(`${e.value}() takes ${n.argTypes.length} argument${1===n.argTypes.length?"":"s"}, ${t.length} given`,e);for(const[r,o,i]of n.argTypes.map(((e,n)=>[e,t[n],n])))switch(r){case d.ValueType:if(!(o instanceof L||o instanceof K&&o.path.singularQuery()||o instanceof G&&this.functionRegister.get(o.name)?.returnType===d.ValueType))throw new s(`${e.value}() argument ${i} must be of ValueType`,o.token);break;case d.LogicalType:if(!(o instanceof K||o instanceof M))throw new s(`${e.value}() argument ${i} must be of LogicalType`,o.token);break;case d.NodesType:if(!(o instanceof K||o instanceof G&&this.functionRegister.get(o.name)?.returnType===d.NodesType))throw new s(`${e.value}() argument ${i} must be of NodesType`,o.token)}return t}}var Me=Object.freeze({__proto__:null,Count:X,FunctionExpressionType:d,Length:Z,Match:Y,Search:ee,Value:te});const De=new ze;function Ke(e,t){return De.query(e,t)}function Ce(e,t){return De.lazyQuery(e,t)}function Ue(e){return De.compile(e)}var Ge=Object.freeze({__proto__:null,DEFAULT_ENVIRONMENT:De,FunctionExpressionType:d,JSONPath:Le,JSONPathEnvironment:ze,JSONPathError:t,JSONPathIndexError:o,JSONPathLexerError:r,JSONPathNode:$,JSONPathNodeList:b,JSONPathRecursionLimitError:h,JSONPathSyntaxError:a,JSONPathTypeError:s,Nothing:P,Token:re,TokenKind:ne,compile:Ue,expressions:q,functions:Me,lazyQuery:Ce,match:function(e,t){return De.match(e,t)},query:Ke,selectors:_e});class Qe extends Error{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPatchError"}}class We extends Qe{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPatchTestFailure"}}class Ve{name="add";constructor(e,t){this.path=e,this.value=t}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(n===x)return this.value;const s=this.path.tokens.at(-1);if(void 0===s)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(n))if(r===x){if("-"!==s)throw new Qe(`index out of range (${this.name}:${t})`);n.push(this.value)}else n.splice(Number(s),0,this.value);else{if(!u(n))throw new Qe(`unexpected operation on '${typeof n}' (${this.name}:${t})`);n[s]=this.value}return e}toObject(){return{op:this.name,path:this.path.toString(),value:this.value}}}class Be{name="remove";constructor(e){this.path=e}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(n===x)throw new Qe(`can't remove root (${this.name}:${t})`);const s=this.path.tokens.at(-1);if(void 0===s)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(n)){if(r===x)throw new Qe(`can't remove nonexistent item (${this.name}:${t})`);n.splice(Number(s),1)}else{if(!u(n))throw new Qe(`unexpected operation on '${typeof n}' (${this.name}:${t})`);if(r===x)throw new Qe(`can't remove nonexistent property (${this.name}:${t})`);delete n[s]}return e}toObject(){return{op:this.name,path:this.path.toString()}}}class qe{name="replace";constructor(e,t){this.path=e,this.value=t}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(n===x)return this.value;const s=this.path.tokens.at(-1);if(void 0===s)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(n)){if(r===x)throw new Qe(`can't replace nonexistent item (${this.name}:${t})`);n.splice(Number(s),1,this.value)}else{if(!u(n))throw new Qe(`unexpected operation on '${typeof n}' (${this.name}:${t})`);if(r===x)throw new Qe(`can't replace nonexistent property (${this.name}:${t})`);n[s]=this.value}return e}toObject(){return{op:this.name,path:this.path.toString(),value:this.value}}}class Xe{name="move";constructor(e,t){this.from=e,this.path=t}apply(e,t){if(this.path.isRelativeTo(this.from))throw new Qe(`can't move object to one of its own children (${this.name}:${t})`);const[n,r]=this.from.resolveWithParent(e);if(r===x)throw new Qe(`source object does not exist (${this.name}:${t})`);const s=this.from.tokens.at(-1);if(void 0===s)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);c(n)?n.splice(Number(s),1):u(n)&&delete n[s];const[o,i]=this.path.resolveWithParent(e);if(o===x)return r;const a=this.path.tokens.at(-1);if(void 0===a)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(o))o.splice(Number(a),0,r);else{if(!u(o))throw new Qe(`unexpected operation on '${typeof parent}' (${this.name}:${t})`);o[a]=r}return e}toObject(){return{op:this.name,from:this.from.toString(),path:this.path.toString()}}}class Ze{name="copy";constructor(e,t){this.from=e,this.path=t}apply(e,t){const[n,r]=this.from.resolveWithParent(e);if(r===x)throw new Qe(`source object does not exist (${this.name}:${t})`);const[s]=this.path.resolveWithParent(e);if(s===x)return this.deepCopy(r);const o=this.path.tokens.at(-1);if(void 0===o)throw new Qe(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(s))s.splice(Number(o),0,this.deepCopy(r));else{if(!u(s))throw new Qe(`unexpected operation on '${typeof parent}' (${this.name}:${t})`);s[o]=this.deepCopy(r)}return e}toObject(){return{op:this.name,from:this.from.toString(),path:this.path.toString()}}deepCopy(e){return JSON.parse(JSON.stringify(e))}}class He{name="test";constructor(e,t){this.path=e,this.value=t}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(!f(r,this.value))throw new We(`test failed (${this.name}:${t})`);return e}toObject(){return{op:this.name,path:this.path.toString(),value:this.value}}}class Ye{ops=[];constructor(e){e&&this.build(e)}*[Symbol.iterator](){for(const e of this.ops)yield e.toObject()}add(e,t){return this.ops.push(new Ve(this.ensurePointer(e,"add",this.ops.length),t)),this}remove(e){return this.ops.push(new Be(this.ensurePointer(e,"remove",this.ops.length))),this}replace(e,t){return this.ops.push(new qe(this.ensurePointer(e,"replace",this.ops.length),t)),this}move(e,t){return this.ops.push(new Xe(this.ensurePointer(e,"move",this.ops.length),this.ensurePointer(t,"move",this.ops.length))),this}copy(e,t){return this.ops.push(new Ze(this.ensurePointer(e,"copy",this.ops.length),this.ensurePointer(t,"copy",this.ops.length))),this}test(e,t){return this.ops.push(new He(this.ensurePointer(e,"test",this.ops.length),t)),this}apply(e){let t=e;for(let e=0;e<this.ops.length;e++){const n=this.ops[e];try{t=n.apply(t,e)}catch(t){if(t instanceof m)throw new Qe(`${t.message} (${n.name}:${e})`);throw t}}return t}toArray(){return this.ops.map((e=>e.toObject()))}build(e){for(let t=0;t<e.length;t++){const n=e[t];switch(n.op){case"add":this.add(this.opPointer(n,"path","add",t),this.opValue(n,"value","add",t));break;case"remove":this.remove(this.opPointer(n,"path","remove",t));break;case"replace":this.replace(this.opPointer(n,"path","replace",t),this.opValue(n,"value","replace",t));break;case"move":this.move(this.opPointer(n,"from","move",t),this.opPointer(n,"path","move",t));break;case"copy":this.copy(this.opPointer(n,"from","copy",t),this.opPointer(n,"path","copy",t));break;case"test":this.test(this.opPointer(n,"path","test",t),this.opValue(n,"value","test",t));break;default:throw new Qe(`expected 'op' to be one of 'add', 'remove', 'replace', 'move', 'copy' or 'test' (${n.op}:${t})`)}}}opPointer(e,t,n,r){if(!Object.hasOwn(e,t))throw new Qe(`missing property '${t}' (${n}:${r})`);const s=e[t];if(!l(s))throw new Qe(`expected a JSON Pointer string for '${t}', found ${typeof s} (${n}:${r})`);try{return new N(s)}catch(e){if(e instanceof g)throw new Qe(`${e.message} (${n}:${r})`);throw e}}opValue(e,t,n,r){if(!Object.hasOwn(e,t))throw new Qe(`missing property '${t}' (${n}:${r})`);return e[t]}ensurePointer(e,t,n){if(e instanceof N)return e;if(!l(e))throw new Qe(`expected a JSON Pointer string, found ${typeof e} (${t}:${n})`);try{return new N(e)}catch(e){if(e instanceof g)throw new Qe(`${e.message} (${t}:${n})`);throw e}}}function et(e,t){return new Ye(e).apply(t)}var tt=Object.freeze({__proto__:null,JSONPatch:Ye,JSONPatchError:Qe,JSONPatchTestFailure:We,apply:et});return e.DEFAULT_ENVIRONMENT=De,e.FunctionExpressionType=d,e.JSONPatch=Ye,e.JSONPatchError=Qe,e.JSONPatchTestFailure=We,e.JSONPath=Le,e.JSONPathEnvironment=ze,e.JSONPathError=t,e.JSONPathIndexError=o,e.JSONPathLexerError=r,e.JSONPathNode=$,e.JSONPathNodeList=b,e.JSONPathRecursionLimitError=h,e.JSONPathSyntaxError=a,e.JSONPathTypeError=s,e.JSONPointer=N,e.Nothing=P,e.RelativeJSONPointer=S,e.Token=re,e.TokenKind=ne,e.UNDEFINED=x,e.apply=et,e.compile=Ue,e.jsonpatch=tt,e.jsonpath=Ge,e.jsonpointer=R,e.lazyQuery=Ce,e.query=Ke,e.resolve=T,e.version="0.3.1",e}({});
2
2
  //# sourceMappingURL=json-p3.iife.min.js.map