json-p3 0.1.1 → 0.2.0

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,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 i 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 o 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)}}function h(e){return Array.isArray(e)}function c(e){const t=typeof e;return null!==e&&"object"===t||"function"===t}function u(e){return"string"==typeof e}function p(e){return"number"==typeof e}function l(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(!l(e[n],t[n]))return!1;return!0}return!1}if(c(e)&&c(t)){const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const r of n)if(!l(e[r],t[r]))return!1;return!0}return!1}let f=function(e){return e.ValueType="ValueType",e.LogicalType="LogicalType",e.NodesType="NodesType",e}({});class d extends Error{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerError"}}class g extends d{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerResolutionError"}}class m extends g{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerIndexError"}}class w extends g{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerKeyError"}}class v extends d{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerSyntaxError"}}class O extends g{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerTypeError"}}const x=Symbol.for("jsonpointer.undefined");class E{#e;constructor(e){this.tokens=this.parse(e),this.#e=E.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 g&&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 m||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 v(`"${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(h(e)){if("length"!==t&&Object.hasOwn(e,t))return e[Number(t)];throw new m(`index out of range '${E.encode(this.tokens.slice(0,n+1))}'`)}if(c(e)){if(Object.hasOwn(e,t))return e[t];throw new w(`no such property '${E.encode(this.tokens.slice(0,n+1))}'`)}throw new O(`found primitive value, expected an object '${E.encode(this.tokens.slice(0,n+1))}'`)}_join(e){if(!u(e))throw new O("join() requires string arguments, found "+typeof e);if(e.startsWith("/"))return new E(e);const t=this.tokens.concat(e.split("/").map((e=>e.replaceAll("~1","/").replaceAll("~0","~"))));return new E(E.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 g)return!1;throw e}return!0}parent(){return this.tokens.length?new E(E.encode(this.tokens.slice(0,this.tokens.length-1))):this}}function N(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:x;return new E(e).resolve(t,n)}var k=Object.freeze({__proto__:null,JSONPointer:E,JSONPointerError:d,JSONPointerIndexError:m,JSONPointerKeyError:w,JSONPointerResolutionError:g,JSONPointerSyntaxError:v,JSONPointerTypeError:O,UNDEFINED:x,resolve:N});class y{constructor(e,t,n){this.value=e,this.location=t,this.root=n,this.path="$"+t.map((e=>u(e)?`['${e}']`:`[${e}]`)).join("")}toPointer(){return this.location.length?new E(E.encode(this.location.map(String))):new E("")}}class S{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 T=Symbol.for("jsonpath.nothing");class ${constructor(e){this.token=e}}class R extends ${}class b extends R{evaluate(){return null}toString(){return"null"}}class P extends R{constructor(e,t){super(e),this.token=e,this.value=t}evaluate(){return this.value}toString(){return String(this.value)}}class L extends R{constructor(e,t){super(e),this.token=e,this.value=t}evaluate(){return this.value}toString(){return JSON.stringify(this.value)}}class _ extends R{constructor(e,t){super(e),this.token=e,this.value=t}evaluate(){return this.value}toString(){return String(this.value)}}class I 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 S?0===t.nodes.length:!C(t)}throw new s(`unknown operator '${this.operator}'`,this.token)}toString(){return`${this.operator}${this.right.toString()}`}}class A 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 S&&1===t.nodes.length&&(t=t.nodes[0].value);let n=this.right.evaluate(e);return n instanceof S&&1===n.nodes.length&&(n=n.nodes[0].value),"&&"===this.operator?C(t)&&C(n):"||"===this.operator?C(t)||C(n):function(e,t,n){switch(t){case"==":return U(e,n);case"!=":return!U(e,n);case"<":return D(e,n);case">":return D(n,e);case">=":return D(n,e)||U(e,n);case"<=":return D(e,n)||U(e,n);default:return!1}}(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 F extends ${constructor(e,t){super(e),this.token=e,this.expression=t}evaluate(e){const t=this.expression.evaluate(e);return t instanceof S?t.nodes.length>0:C(t)}toString(){return this.expression.toString()}}class j extends ${constructor(e,t){super(e),this.token=e,this.path=t}}class M extends j{evaluate(e){return this.path.query(e.currentValue)}toString(){return`@${this.path.toString().slice(1)}`}}class J extends j{evaluate(e){return this.path.query(e.rootValue)}toString(){return this.path.toString()}}class K extends ${constructor(e,t,n){super(e),this.token=e,this.name=t,this.args=n}evaluate(e){const t=e.environment.filterRegister.get(this.name);if(!t)throw new o(`filter function '${this.name}' is undefined`,this.token);const n=this.args.map((t=>t.evaluate(e))).map(((e,n)=>t.argTypes[n]!==f.NodesType&&e instanceof S?e.valuesOrSingular():e));return t.call(...n)}toString(){return`${this.name}(${this.args.map((e=>e.toString())).join(", ")})`}}function C(e){return!(e instanceof S&&e.empty())&&!("boolean"==typeof e&&!1===e)}function U(e,t){if(t instanceof S&&([e,t]=[t,e]),e instanceof S){if(t instanceof S){if(e.empty()&&t.empty())return!0;if(1===e.nodes.length&&1===t.nodes.length)return l(e.nodes[0].value,t.nodes[0].value)}return e.empty()?t===T:1===e.nodes.length&&l(e.nodes[0].value,t)}return e===T&&t===T||l(e,t)}function D(e,t){return!!(u(e)&&u(t)||p(e)&&p(t))&&e<t}var G=Object.freeze({__proto__:null,BooleanLiteral:P,FilterExpression:$,FilterExpressionLiteral:R,FunctionExtension:K,InfixExpression:A,JSONPathQuery:j,LogicalExpression:F,NullLiteral:b,NumberLiteral:_,PrefixExpression:I,RelativeQuery:M,RootQuery:J,StringLiteral:L});class W{argTypes=[f.NodesType];returnType=f.ValueType;call(e){return e.length}}class Q{argTypes=[f.ValueType];returnType=f.ValueType;call(e){return h(e)||u(e)?e.length:c(e)?Object.keys(e).length:T}}class B 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 z{argTypes=[f.ValueType,f.ValueType];returnType=f.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 B(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 V{argTypes=[f.ValueType,f.ValueType];returnType=f.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 B(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 q{argTypes=[f.NodesType];returnType=f.ValueType;call(e){return 1===e.length?e.nodes[0].value:T}}let X=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 Z{constructor(e,t,n,r){this.kind=e,this.value=t,this.index=n,this.input=r}}new Z(X.EOF,"",-1,"");class H{#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 Y=/e[+-]?\d+/y,ee=/[a-z][a-z_0-9]*/y,te=/-?\d+/y,ne=/-?[0-9]+/y,re=/[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*/y,se=new Set([" ","\n","\t","\r"]);class ie{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=ae;for(;e;)e=e(this)}emit(e){this.tokens.push(new Z(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 Z(X.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 Z(X.ERROR,e,this.pos,this.path))}return!!this.acceptRun(se)&&(this.ignore(),!0)}error(e){this.tokens.push(new Z(X.ERROR,e,this.#n,this.path))}}function oe(e){const[t,n]=function(e){const t=new ie(e);return[t,t.tokens]}(e);if(t.run(),n.length&&n[n.length-1].kind===X.ERROR)throw new a(n[n.length-1].value,n[n.length-1]);return n}function ae(e){const t=e.next();return"$"!==t?(e.backup(),e.error(`expected '$', found '${t}'`),null):(e.emit(X.ROOT),he)}function he(e){e.ignoreWhitespace()&&!e.peek()&&e.error("trailing whitespace");const t=e.next();switch(t){case"":return e.emit(X.EOF),null;case".":return"."===e.peek()?(e.next(),e.emit(X.DDOT),ce):ue;case"[":return e.emit(X.LBRACKET),pe;default:return e.backup(),e.filterLevel?le:(e.error(`expected '.', '..' or a bracketed selection, found '${t}'`),null)}}function ce(e){const t=e.next();switch(t){case"":return e.error("bald descendant segment"),null;case"*":return e.emit(X.WILD),he;case"[":return e.emit(X.LBRACKET),pe;default:return e.backup(),e.acceptMatchRun(re)?(e.emit(X.NAME),he):(e.error(`unexpected descendent selection token '${t}'`),null)}}function ue(e){if(e.ignore(),e.ignoreWhitespace())return e.error("unexpected whitespace after dot"),null;const t=e.next();return"*"===t?(e.emit(X.WILD),he):(e.backup(),e.acceptMatchRun(re)?(e.emit(X.NAME),he):(e.error(`unexpected shorthand selector '${t}'`),null))}function pe(e){for(;;){e.ignoreWhitespace();const t=e.next();switch(t){case"]":return e.emit(X.RBRACKET),e.filterLevel?le:he;case"":return e.error("unclosed bracketed selection"),null;case"*":e.emit(X.WILD);continue;case"?":return e.emit(X.FILTER),e.filterLevel+=1,le;case",":e.emit(X.COMMA);continue;case":":e.emit(X.COLON);continue;case"'":return de;case'"':return ge;default:if(e.backup(),e.acceptMatchRun(te)){e.emit(X.INDEX);continue}return e.error(`unexpected token '${t}' in bracketed selection`),null}}}function le(e){for(;;){e.ignoreWhitespace();const t=e.next();switch(t){case"":case"]":return e.filterLevel-=1,e.backup(),pe;case",":if(e.emit(X.COMMA),e.parenStack.length)continue;return e.filterLevel-=1,pe;case"'":return me;case'"':return we;case"(":e.emit(X.LPAREN),e.parenStack.length&&(e.parenStack[e.parenStack.length-1]+=1);continue;case")":e.emit(X.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(X.ROOT),he;case"@":return e.emit(X.CURRENT),he;case".":return e.backup(),he;case"!":"="===e.peek()?(e.next(),e.emit(X.NE)):e.emit(X.NOT);continue;case"=":if("="===e.peek()){e.next(),e.emit(X.EQ);continue}return e.backup(),e.error(`unexpected filter selector token '${t}'`),null;case"<":"="===e.peek()?(e.next(),e.emit(X.LE)):e.emit(X.LT);continue;case">":"="===e.peek()?(e.next(),e.emit(X.GE)):e.emit(X.GT);continue;default:if(e.backup(),e.acceptMatchRun(ne)){if("."===e.peek()&&(e.next(),!e.acceptMatchRun(ne)))return e.error("a fractional digit is required after a decimal point"),null;e.acceptMatchRun(Y),e.emit(X.NUMBER);continue}if(e.acceptMatchRun(/&&/y)){e.emit(X.AND);continue}if(e.acceptMatchRun(/\|\|/y)){e.emit(X.OR);continue}if(e.acceptMatchRun(/true/y)){e.emit(X.TRUE);continue}if(e.acceptMatchRun(/false/y)){e.emit(X.FALSE);continue}if(e.acceptMatchRun(/null/y)){e.emit(X.NULL);continue}if(e.acceptMatchRun(ee)&&"("===e.peek()){e.parenStack.push(1),e.emit(X.FUNCTION),e.next(),e.ignore();continue}}return e.error(`unexpected filter selector token '${t}'`),null}}function fe(e,t){return function(n){if(n.ignore(),n.peek()===e)return n.emit("'"===e?X.SINGLE_QUOTE_STRING:X.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?X.SINGLE_QUOTE_STRING:X.DOUBLE_QUOTE_STRING),n.next(),n.ignore(),t}else n.next()}}}const de=fe("'",pe),ge=fe('"',pe),me=fe("'",le),we=fe('"',le);class ve{constructor(e,t){this.environment=e,this.token=t}}class Oe extends ve{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 s of e)n=s.value,r=this.name,c(n)&&Object.hasOwn(n,r)&&t.push(new y(s.value[this.name],s.location.concat(this.name),s.root));var n,r;return new S(t)}toString(){return this.shorthand?`['${this.name}']`:`'${this.name}'`}}class xe extends ve{constructor(e,t,n){if(super(e,t),this.environment=e,this.token=t,this.index=n,n<this.environment.options.minIntIndex||n>this.environment.options.maxIntIndex)throw new i("index out of range",this.token)}resolve(e){const t=[];for(const n of e)if(h(n.value)){const e=this.normalizedIndex(n.value.length);e in n.value&&t.push(new y(n.value[e],n.location.concat(e),n.root))}return new S(t)}toString(){return String(this.index)}normalizedIndex(e){return this.index<0&&e>=Math.abs(this.index)?e+this.index:this.index}}class Ee extends ve{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(h(n.value))for(const[e,r]of this.slice(n.value,this.start,this.stop,this.step))t.push(new y(r,n.location.concat(e),n.root));return new S(t)}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.options.minIntIndex||e>this.environment.options.maxIntIndex))throw new i("index out of range",this.token)}normalizedIndex(e,t){return t<0&&e>=Math.abs(t)?Math.min(e+t,e-1):Math.min(t,e-1)}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 i=t;i<n;i+=r)s.push([i,e[i]]);else for(let i=t;i>n;i+=r)s.push([i,e[i]]);return s}}class Ne extends ve{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(h(n.value))for(let e=0;e<n.value.length;e++)t.push(new y(n.value[e],n.location.concat(e),n.root));else if(c(n.value))for(const[e,r]of Object.entries(n.value))t.push(new y(r,n.location.concat(e),n.root));return new S(t)}toString(){return this.shorthand?"[*]":"*"}}class ke extends ve{resolve(e){const t=[];for(const n of e)t.push(n,...this.visit(n));return new S(t)}toString(){return".."}visit(e){const t=[];if(e.value instanceof String)return new S(t);if(h(e.value))for(let n=0;n<e.value.length;n++){const r=new y(e.value[n],e.location.concat(n),e.root);t.push(r,...this.visit(r))}else if(c(e.value))for(const[n,r]of Object.entries(e.value)){const s=new y(r,e.location.concat(n),e.root);t.push(s,...this.visit(s))}return new S(t)}}class ye extends ve{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(h(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 y(r,n.location.concat(e),n.root))}else if(c(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 y(r,n.location.concat(e),n.root))}return new S(t)}toString(){return`?${this.expression.toString()}`}}class Se extends ve{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)t.push(...e.resolve(new S([n])));return new S(t)}toString(){return`[${this.items.map((e=>e.toString())).join(", ")}]`}}var Te=Object.freeze({__proto__:null,BracketedSelection:Se,FilterSelector:ye,IndexSelector:xe,JSONPathSelector:ve,NameSelector:Oe,RecursiveDescentSegment:ke,SliceSelector:Ee,WildcardSelector:Ne});class $e{constructor(e,t){this.environment=e,this.selectors=t}query(e){let t=new S([new y(e,[],e)]);for(const e of this.selectors)t=e.resolve(t);return t}toString(){return`$${this.selectors.map((e=>e.toString())).join("")}`}singularQuery(){for(const e of this.selectors)if(!(e instanceof Oe||e instanceof Se&&1===e.items.length&&(e.items[0]instanceof Oe||e.items[0]instanceof xe)))return!1;return!0}}const Re=new Map([[X.AND,4],[X.EQ,6],[X.GE,6],[X.GT,6],[X.LE,6],[X.LT,6],[X.NE,6],[X.NOT,3],[X.OR,5],[X.RPAREN,1]]),be=new Map([[X.AND,"&&"],[X.EQ,"=="],[X.GE,">="],[X.GT,">"],[X.LE,"<="],[X.LT,"<"],[X.NE,"!="],[X.OR,"||"]]),Pe=new Set(["==",">=",">","<=","<","!="]);class Le{constructor(e){this.environment=e,this.tokenMap=new Map([[X.FALSE,this.parseBoolean],[X.NUMBER,this.parseNumber],[X.LPAREN,this.parseGroupedExpression],[X.NOT,this.parsePrefixExpression],[X.NULL,this.parseNull],[X.ROOT,this.parseRootQuery],[X.CURRENT,this.parseRelativeQuery],[X.SINGLE_QUOTE_STRING,this.parseString],[X.DOUBLE_QUOTE_STRING,this.parseString],[X.TRUE,this.parseBoolean],[X.FUNCTION,this.parseFunction]])}parse(e){e.current.kind===X.ROOT&&e.next();const t=this.parsePath(e);if(e.current.kind!==X.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=[];e:for(;;){switch(e.current.kind){case X.NAME:n.push(new Oe(this.environment,e.current,e.current.value,!0));break;case X.WILD:n.push(new Ne(this.environment,e.current,!0));break;case X.DDOT:n.push(new ke(this.environment,e.current));break;case X.LBRACKET:n.push(this.parseBracketedSelection(e));break;default:t&&e.backup();break e}e.next()}return n}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 xe(this.environment,e.current,Number(e.current.value))}parseSlice(e){const t=e.current,n=[];function r(e){if(e.kind===X.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(X.COLON),e.next()):(n.push(void 0),e.expect(X.COLON),e.next()),r(e.current)?(n.push(Number(e.current.value)),e.next(),e.current.kind===X.COLON&&e.next()):e.current.kind===X.COLON&&(n.push(void 0),e.expect(X.COLON),e.next()),r(e.current)&&(n.push(Number(e.current.value)),e.next()),e.backup(),new Ee(this.environment,t,...n)}parseBracketedSelection(e){const t=e.next(),n=[];for(;e.current.kind!==X.RBRACKET;){switch(e.current.kind){case X.SINGLE_QUOTE_STRING:case X.DOUBLE_QUOTE_STRING:n.push(new Oe(this.environment,e.current,this.decodeString(e.current,!0),!1));break;case X.FILTER:n.push(this.parseFilter(e));break;case X.INDEX:e.peek.kind===X.COLON?n.push(this.parseSlice(e)):n.push(this.parseIndex(e));break;case X.COLON:n.push(this.parseSlice(e));break;case X.WILD:n.push(new Ne(this.environment,e.current));break;case X.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!==X.RBRACKET&&(e.expectPeek(X.COMMA),e.next()),e.next()}if(!n.length)throw new a("empty bracketed segment",t);return new Se(this.environment,t,n)}parseFilter(e){const t=e.next(),n=this.parseFilterExpression(e);if(n instanceof K){const e=this.environment.filterRegister.get(n.name);if(e&&e.returnType===f.ValueType)throw new s(`result of ${n.name}() must be compared`,n.token)}return new ye(this.environment,t,new F(t,n))}parseBoolean(e){return e.current.kind===X.FALSE?new P(e.current,!1):new P(e.current,!0)}parseNull(e){return new b(e.current)}parseString(e){return new L(e.current,this.decodeString(e.current))}parseNumber(e){return new _(e.current,Number(e.current.value))}parsePrefixExpression(e){return e.expect(X.NOT),e.next(),new I(e.current,"!",this.parseFilterExpression(e,3))}parseInfixExpression(e,t){const n=e.next(),r=Re.get(n.kind)||1,s=this.parseFilterExpression(e,r),i=be.get(n.kind);if(!i)throw new a(`unknown operator '${n.kind}'`,n);return this.throwForNonSingularQuery(t),this.throwForNonSingularQuery(s),Pe.has(i)&&(this.throwForNonComparableFunction(t),this.throwForNonComparableFunction(s)),new A(n,t,i,s)}parseGroupedExpression(e){e.next();let t=this.parseFilterExpression(e);for(e.next();e.current.kind!==X.RPAREN;){if(e.current.kind===X.EOF)throw new a("unbalanced parentheses",e.current);t=this.parseInfixExpression(e,t)}return e.expect(X.RPAREN),t}parseRootQuery(e){const t=e.next();return new J(t,new $e(this.environment,this.parsePath(e,!0)))}parseRelativeQuery(e){const t=e.next();return new M(t,new $e(this.environment,this.parsePath(e,!0)))}parseFunction(e){const t=[],n=e.next();for(;e.current.kind!==X.RPAREN;){const n=this.tokenMap.get(e.current.kind);if(!n)throw new a(`unexpected '${e.current.value}'`,e.current);if(t.push(n.bind(this)(e)),e.peek.kind!==X.RPAREN){if(e.peek.kind===X.RBRACKET)break;e.expectPeek(X.COMMA),e.next()}e.next()}return new K(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 X.EOF:case X.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===X.EOF||n===X.RBRACKET||(Re.get(n)||1)<t)break;if(!be.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===X.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 J||e instanceof M)&&!e.path.singularQuery())throw new a("non-singular query is not comparable",e.token)}throwForNonComparableFunction(e){if(!(e instanceof K))return;const t=this.environment.filterRegister.get(e.name);if(t&&t.returnType!==f.ValueType)throw new s(`result of ${e.name}() is not comparable`,e.token)}}const _e={strict:!0,maxIntIndex:Math.pow(2,53)-1,minIntIndex:-Math.pow(2,53)-1};class Ie{filterRegister=new Map;constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_e;this.options=e,this.parser=new Le(this),this.setupFilterFunctions()}compile(e){return new $e(this,this.parser.parse(new H(oe(e))))}query(e,t){return this.compile(e).query(t)}setupFilterFunctions(){this.filterRegister.set("count",new W),this.filterRegister.set("length",new Q),this.filterRegister.set("search",new V),this.filterRegister.set("match",new z),this.filterRegister.set("value",new q)}checkWellTypedness(e,t){const n=this.filterRegister.get(e.value);if(!n)throw new o(`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,i,o]of n.argTypes.map(((e,n)=>[e,t[n],n])))switch(r){case f.ValueType:if(!(i instanceof R||i instanceof j&&i.path.singularQuery()))throw new s(`${e.value}() argument ${o} must be of ValueType`,i.token);break;case f.LogicalType:if(!(i instanceof P))throw new s(`${e.value}() argument ${o} must be of LogicalType`,i.token);break;case f.NodesType:if(!(i instanceof j))throw new s(`${e.value}() argument ${o} must be of NodesType`,i.token)}return t}}var Ae=Object.freeze({__proto__:null,Count:W,FunctionExpressionType:f,Length:Q,Match:z,Search:V,Value:q});const Fe=new Ie;function je(e,t){return Fe.query(e,t)}function Me(e){return Fe.compile(e)}var Je=Object.freeze({__proto__:null,DEFAULT_ENVIRONMENT:Fe,FunctionExpressionType:f,JSONPath:$e,JSONPathEnvironment:Ie,JSONPathError:t,JSONPathIndexError:i,JSONPathLexerError:r,JSONPathNode:y,JSONPathNodeList:S,JSONPathSyntaxError:a,JSONPathTypeError:s,Nothing:T,Token:Z,TokenKind:X,compile:Me,expressions:G,functions:Ae,query:je,selectors:Te});class Ke extends Error{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPatchError"}}class Ce extends Ke{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPatchTestFailure"}}class Ue{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 Ke(`unexpected operation on 'undefined' (${this.name}:${t})`);if(h(n))if(r===x){if("-"!==s)throw new Ke(`index out of range (${this.name}:${t})`);n.push(this.value)}else n.splice(Number(s),0,this.value);else{if(!c(n))throw new Ke(`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 De{name="remove";constructor(e){this.path=e}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(n===x)throw new Ke(`can't remove root (${this.name}:${t})`);const s=this.path.tokens.at(-1);if(void 0===s)throw new Ke(`unexpected operation on 'undefined' (${this.name}:${t})`);if(h(n)){if(r===x)throw new Ke(`can't remove nonexistent item (${this.name}:${t})`);n.splice(Number(s),1)}else{if(!c(n))throw new Ke(`unexpected operation on '${typeof n}' (${this.name}:${t})`);if(r===x)throw new Ke(`can't remove nonexistent property (${this.name}:${t})`);delete n[s]}return e}toObject(){return{op:this.name,path:this.path.toString()}}}class Ge{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 Ke(`unexpected operation on 'undefined' (${this.name}:${t})`);if(h(n)){if(r===x)throw new Ke(`can't replace nonexistent item (${this.name}:${t})`);n.splice(Number(s),1,this.value)}else{if(!c(n))throw new Ke(`unexpected operation on '${typeof n}' (${this.name}:${t})`);if(r===x)throw new Ke(`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 We{name="move";constructor(e,t){this.from=e,this.path=t}apply(e,t){if(this.path.isRelativeTo(this.from))throw new Ke(`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 Ke(`source object does not exist (${this.name}:${t})`);const s=this.from.tokens.at(-1);if(void 0===s)throw new Ke(`unexpected operation on 'undefined' (${this.name}:${t})`);h(n)?n.splice(Number(s),1):c(n)&&delete n[s];const[i,o]=this.path.resolveWithParent(e);if(i===x)return r;const a=this.path.tokens.at(-1);if(void 0===a)throw new Ke(`unexpected operation on 'undefined' (${this.name}:${t})`);if(h(i))i.splice(Number(a),0,r);else{if(!c(i))throw new Ke(`unexpected operation on '${typeof parent}' (${this.name}:${t})`);i[a]=r}return e}toObject(){return{op:this.name,from:this.from.toString(),path:this.path.toString()}}}class Qe{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 Ke(`source object does not exist (${this.name}:${t})`);const[s]=this.path.resolveWithParent(e);if(s===x)return this.deepCopy(r);const i=this.path.tokens.at(-1);if(void 0===i)throw new Ke(`unexpected operation on 'undefined' (${this.name}:${t})`);if(h(s))s.splice(Number(i),0,this.deepCopy(r));else{if(!c(s))throw new Ke(`unexpected operation on '${typeof parent}' (${this.name}:${t})`);s[i]=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 Be{name="test";constructor(e,t){this.path=e,this.value=t}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(!l(r,this.value))throw new Ce(`test failed (${this.name}:${t})`);return e}toObject(){return{op:this.name,path:this.path.toString(),value:this.value}}}class ze{ops=[];constructor(e){e&&this.build(e)}add(e,t){return this.ops.push(new Ue(this.ensurePointer(e,"add",this.ops.length),t)),this}remove(e){return this.ops.push(new De(this.ensurePointer(e,"remove",this.ops.length))),this}replace(e,t){return this.ops.push(new Ge(this.ensurePointer(e,"replace",this.ops.length),t)),this}move(e,t){return this.ops.push(new We(this.ensurePointer(e,"move",this.ops.length),this.ensurePointer(t,"move",this.ops.length))),this}copy(e,t){return this.ops.push(new Qe(this.ensurePointer(e,"copy",this.ops.length),this.ensurePointer(t,"copy",this.ops.length))),this}test(e,t){return this.ops.push(new Be(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 g)throw new Ke(`${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 Ke(`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 Ke(`missing property '${t}' (${n}:${r})`);const s=e[t];if(!u(s))throw new Ke(`expected a JSON Pointer string for '${t}', found ${typeof s} (${n}:${r})`);try{return new E(s)}catch(e){if(e instanceof d)throw new Ke(`${e.message} (${n}:${r})`);throw e}}opValue(e,t,n,r){if(!Object.hasOwn(e,t))throw new Ke(`missing property '${t}' (${n}:${r})`);return e[t]}ensurePointer(e,t,n){if(e instanceof E)return e;if(!u(e))throw new Ke(`expected a JSON Pointer string, found ${typeof e} (${t}:${n})`);try{return new E(e)}catch(e){if(e instanceof d)throw new Ke(`${e.message} (${t}:${n})`);throw e}}}function Ve(e,t){return new ze(e).apply(t)}var qe=Object.freeze({__proto__:null,JSONPatch:ze,JSONPatchError:Ke,JSONPatchTestFailure:Ce,apply:Ve});return e.FunctionExpressionType=f,e.JSONPatch=ze,e.JSONPatchError=Ke,e.JSONPatchTestFailure=Ce,e.JSONPath=$e,e.JSONPathEnvironment=Ie,e.JSONPathError=t,e.JSONPathIndexError=i,e.JSONPathLexerError=r,e.JSONPathNode=y,e.JSONPathNodeList=S,e.JSONPathSyntaxError=a,e.JSONPathTypeError=s,e.JSONPointer=E,e.Nothing=T,e.Token=Z,e.TokenKind=X,e.UNDEFINED=x,e.apply=Ve,e.compile=Me,e.jsonpatch=qe,e.jsonpath=Je,e.jsonpointer=k,e.query=je,e.resolve=N,e.version="0.1.1",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 i 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 o 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 p(e){return"string"==typeof e}function l(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 w extends m{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerIndexError"}}class O extends m{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerKeyError"}}class v extends g{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerSyntaxError"}}class x extends m{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPointerTypeError"}}const N=Symbol.for("jsonpointer.undefined");class E{#e;constructor(e){this.tokens=this.parse(e),this.#e=E.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]:N;try{return this.tokens.reduce(this.getItem.bind(this),e)}catch(e){if(e instanceof m&&t!==N)return t;throw e}}resolveWithParent(e){if(!this.tokens.length)return[N,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 w||e instanceof O)return[t,N];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 v(`"${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(y.test(r)&&Object.hasOwn(e,r))return Number(r);throw new w(`index out of range '${E.encode(this.tokens.slice(0,n+1))}'`)}throw new w(`index out of range '${E.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 O(`no such property '${E.encode(this.tokens.slice(0,n+1))}'`)}throw new x(`found primitive value, expected an object '${E.encode(this.tokens.slice(0,n+1))}'`)}_join(e){if(!p(e))throw new x("join() requires string arguments, found "+typeof e);if(e.startsWith("/"))return new E(e);const t=this.tokens.concat(e.split("/").map((e=>e.replaceAll("~1","/").replaceAll("~0","~"))));return new E(E.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 E(E.encode(this.tokens.slice(0,this.tokens.length-1))):this}to(e){return(p(e)?new S(e):e).to(this)}}const k=/(?<ORIGIN>\d+)(?<INDEX_G>(?<SIGN>[+-])(?<INDEX>\d))?(?<POINTER>.*)/s,y=/(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=p(e)?new E(e):e;if(this.origin>t.tokens.length)throw new w(`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 w(`index offset out of range (${e})`);n[n.length-1]=String(e)}return this.pointer instanceof E?n.push(...this.pointer.tokens):n[n.length-1]=`#${n[n.length-1]}`,new E(E.encode(n))}parse(e){const t=k.exec(e);if(!t||!t.groups)throw new v("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 v("index offset can't be zero");"-"===t.groups.SIGN&&(r=-r)}return"#"===t.groups.POINTER?[n,r,"#"]:[n,r,new E(t.groups.POINTER)]}parseInt(e){if(e.startsWith("0")&&e.length>1)throw new v("unexpected leading zero");if(y.test(e))return Number(e);throw new v(`expected an integer, found '${e}'`)}isIntLike(e){return!(void 0!==e&&!l(e))||y.test(e)}}function T(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:N;return new E(e).resolve(t,n)}var $=Object.freeze({__proto__:null,JSONPointer:E,JSONPointerError:g,JSONPointerIndexError:w,JSONPointerKeyError:O,JSONPointerResolutionError:m,JSONPointerSyntaxError:v,JSONPointerTypeError:x,RelativeJSONPointer:S,UNDEFINED:N,resolve:T});class R{constructor(e,t,n){this.value=e,this.location=t,this.root=n,this.path="$"+t.map((e=>p(e)?`['${e}']`:`[${e}]`)).join("")}toPointer(){return this.location.length?new E(E.encode(this.location.map(String))):new E("")}}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");class I{constructor(e){this.token=e}}class L extends I{}class _ extends L{evaluate(){return null}toString(){return"null"}}class A 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 J extends I{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:!W(t)}throw new s(`unknown operator '${this.operator}'`,this.token)}toString(){return`${this.operator}${this.right.toString()}`}}class M extends I{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?W(t)&&W(n):"||"===this.operator?W(t)||W(n):Q(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 K extends I{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:W(t)}toString(){return this.expression.toString()}}class D extends I{constructor(e,t){super(e),this.token=e,this.path=t}}class C extends D{evaluate(e){return this.path.query(e.currentValue)}toString(){return`@${this.path.toString().slice(1)}`}}class U extends D{evaluate(e){return this.path.query(e.rootValue)}toString(){return this.path.toString()}}class G extends I{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 o(`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 W(e){return!(e instanceof b&&e.empty())&&!("boolean"==typeof e&&!1===e)}function Q(e,t,n){switch(t){case"==":return B(e,n);case"!=":return!B(e,n);case"<":return z(e,n);case">":return z(n,e);case">=":return z(n,e)||B(e,n);case"<=":return z(e,n)||B(e,n);default:return!1}}function B(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 z(e,t){return!!(p(e)&&p(t)||l(e)&&l(t))&&e<t}var V=Object.freeze({__proto__:null,BooleanLiteral:A,FilterExpression:I,FilterExpressionLiteral:L,FunctionExtension:G,InfixExpression:M,JSONPathQuery:D,LogicalExpression:K,NullLiteral:_,NumberLiteral:j,PrefixExpression:J,RelativeQuery:C,RootQuery:U,StringLiteral:F,compare:Q});class q{argTypes=[d.NodesType];returnType=d.ValueType;call(e){return e.length}}class X{argTypes=[d.ValueType];returnType=d.ValueType;call(e){return c(e)||p(e)?e.length:u(e)?Object.keys(e).length:P}}class Z 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 H{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 Z(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 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 Z(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 ee{argTypes=[d.NodesType];returnType=d.ValueType;call(e){return 1===e.length?e.nodes[0].value:P}}let te=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 ne{constructor(e,t,n,r){this.kind=e,this.value=t,this.index=n,this.input=r}}new ne(te.EOF,"",-1,"");class re{#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 se=/e[+-]?\d+/y,ie=/[a-z][a-z_0-9]*/y,oe=/-?\d+/y,ae=/-?[0-9]+/y,he=/[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*/y,ce=new Set([" ","\n","\t","\r"]);class ue{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=le;for(;e;)e=e(this)}emit(e){this.tokens.push(new ne(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 ne(te.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 ne(te.ERROR,e,this.pos,this.path))}return!!this.acceptRun(ce)&&(this.ignore(),!0)}error(e){this.tokens.push(new ne(te.ERROR,e,this.#n,this.path))}}function pe(e){const[t,n]=function(e){const t=new ue(e);return[t,t.tokens]}(e);if(t.run(),n.length&&n[n.length-1].kind===te.ERROR)throw new a(n[n.length-1].value,n[n.length-1]);return n}function le(e){const t=e.next();return"$"!==t?(e.backup(),e.error(`expected '$', found '${t}'`),null):(e.emit(te.ROOT),fe)}function fe(e){e.ignoreWhitespace()&&!e.peek()&&e.error("trailing whitespace");const t=e.next();switch(t){case"":return e.emit(te.EOF),null;case".":return"."===e.peek()?(e.next(),e.emit(te.DDOT),de):ge;case"[":return e.emit(te.LBRACKET),me;default:return e.backup(),e.filterLevel?we:(e.error(`expected '.', '..' or a bracketed selection, found '${t}'`),null)}}function de(e){const t=e.next();switch(t){case"":return e.error("bald descendant segment"),null;case"*":return e.emit(te.WILD),fe;case"[":return e.emit(te.LBRACKET),me;default:return e.backup(),e.acceptMatchRun(he)?(e.emit(te.NAME),fe):(e.error(`unexpected descendent selection token '${t}'`),null)}}function ge(e){if(e.ignore(),e.ignoreWhitespace())return e.error("unexpected whitespace after dot"),null;const t=e.next();return"*"===t?(e.emit(te.WILD),fe):(e.backup(),e.acceptMatchRun(he)?(e.emit(te.NAME),fe):(e.error(`unexpected shorthand selector '${t}'`),null))}function me(e){for(;;){e.ignoreWhitespace();const t=e.next();switch(t){case"]":return e.emit(te.RBRACKET),e.filterLevel?we:fe;case"":return e.error("unclosed bracketed selection"),null;case"*":e.emit(te.WILD);continue;case"?":return e.emit(te.FILTER),e.filterLevel+=1,we;case",":e.emit(te.COMMA);continue;case":":e.emit(te.COLON);continue;case"'":return ve;case'"':return xe;default:if(e.backup(),e.acceptMatchRun(oe)){e.emit(te.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(),me);case",":if(e.emit(te.COMMA),e.parenStack.length)continue;return e.filterLevel-=1,me;case"'":return Ne;case'"':return Ee;case"(":e.emit(te.LPAREN),e.parenStack.length&&(e.parenStack[e.parenStack.length-1]+=1);continue;case")":e.emit(te.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(te.ROOT),fe;case"@":return e.emit(te.CURRENT),fe;case".":return e.backup(),fe;case"!":"="===e.peek()?(e.next(),e.emit(te.NE)):e.emit(te.NOT);continue;case"=":if("="===e.peek()){e.next(),e.emit(te.EQ);continue}return e.backup(),e.error(`unexpected filter selector token '${t}'`),null;case"<":"="===e.peek()?(e.next(),e.emit(te.LE)):e.emit(te.LT);continue;case">":"="===e.peek()?(e.next(),e.emit(te.GE)):e.emit(te.GT);continue;default:if(e.backup(),e.acceptMatchRun(ae)){if("."===e.peek()&&(e.next(),!e.acceptMatchRun(ae)))return e.error("a fractional digit is required after a decimal point"),null;e.acceptMatchRun(se),e.emit(te.NUMBER);continue}if(e.acceptMatchRun(/&&/y)){e.emit(te.AND);continue}if(e.acceptMatchRun(/\|\|/y)){e.emit(te.OR);continue}if(e.acceptMatchRun(/true/y)){e.emit(te.TRUE);continue}if(e.acceptMatchRun(/false/y)){e.emit(te.FALSE);continue}if(e.acceptMatchRun(/null/y)){e.emit(te.NULL);continue}if(e.acceptMatchRun(ie)&&"("===e.peek()){e.parenStack.push(1),e.emit(te.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?te.SINGLE_QUOTE_STRING:te.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?te.SINGLE_QUOTE_STRING:te.DOUBLE_QUOTE_STRING),n.next(),n.ignore(),t}else n.next()}}}const ve=Oe("'",me),xe=Oe('"',me),Ne=Oe("'",we),Ee=Oe('"',we);class ke{constructor(e,t){this.environment=e,this.token=t}}class ye 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 s of e)n=s.value,r=this.name,u(n)&&Object.hasOwn(n,r)&&t.push(new R(s.value[this.name],s.location.concat(this.name),s.root));var n,r;return new b(t)}toString(){return this.shorthand?`['${this.name}']`:`'${this.name}'`}}class Se 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 i("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 R(n.value[e],n.location.concat(e),n.root))}return new b(t)}toString(){return String(this.index)}normalizedIndex(e){return this.index<0&&e>=Math.abs(this.index)?e+this.index:this.index}}class Te 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(r,n.location.concat(e),n.root));return new b(t)}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 i("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 i=t;i<n;i+=r)s.push([i,e[i]]);else for(let i=t;i>n;i+=r)s.push([i,e[i]]);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 R(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(r,n.location.concat(e),n.root));return new b(t)}toString(){return this.shorthand?"[*]":"*"}}class Re extends ke{resolve(e){const t=[];for(const n of e)t.push(n,...this.visit(n));return new b(t)}toString(){return".."}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 new b(n);if(c(e.value))for(let r=0;r<e.value.length;r++){const s=new R(e.value[r],e.location.concat(r),e.root);n.push(s,...this.visit(s,t+1))}else if(u(e.value))for(const[r,s]of Object.entries(e.value)){const i=new R(s,e.location.concat(r),e.root);n.push(i,...this.visit(i,t+1))}return new b(n)}}class be 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(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(r,n.location.concat(e),n.root))}return new b(t)}toString(){return`?${this.expression.toString()}`}}class Pe 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)t.push(...e.resolve(new b([n])));return new b(t)}toString(){return`[${this.items.map((e=>e.toString())).join(", ")}]`}}var Ie=Object.freeze({__proto__:null,BracketedSelection:Pe,FilterSelector:be,IndexSelector:Se,JSONPathSelector:ke,NameSelector:ye,RecursiveDescentSegment:Re,SliceSelector:Te,WildcardSelector:$e});class Le{constructor(e,t){this.environment=e,this.selectors=t}query(e){let t=new b([new R(e,[],e)]);for(const e of this.selectors)t=e.resolve(t);return t}match(e){return this.query(e).nodes.at(0)}toString(){return`$${this.selectors.map((e=>e.toString())).join("")}`}singularQuery(){for(const e of this.selectors)if(!(e instanceof ye||e instanceof Pe&&1===e.items.length&&(e.items[0]instanceof ye||e.items[0]instanceof Se)))return!1;return!0}}const _e=new Map([[te.AND,4],[te.EQ,6],[te.GE,6],[te.GT,6],[te.LE,6],[te.LT,6],[te.NE,6],[te.NOT,3],[te.OR,5],[te.RPAREN,1]]),Ae=new Map([[te.AND,"&&"],[te.EQ,"=="],[te.GE,">="],[te.GT,">"],[te.LE,"<="],[te.LT,"<"],[te.NE,"!="],[te.OR,"||"]]),Fe=new Set(["==",">=",">","<=","<","!="]);class je{constructor(e){this.environment=e,this.tokenMap=new Map([[te.FALSE,this.parseBoolean],[te.NUMBER,this.parseNumber],[te.LPAREN,this.parseGroupedExpression],[te.NOT,this.parsePrefixExpression],[te.NULL,this.parseNull],[te.ROOT,this.parseRootQuery],[te.CURRENT,this.parseRelativeQuery],[te.SINGLE_QUOTE_STRING,this.parseString],[te.DOUBLE_QUOTE_STRING,this.parseString],[te.TRUE,this.parseBoolean],[te.FUNCTION,this.parseFunction]])}parse(e){e.current.kind===te.ROOT&&e.next();const t=this.parsePath(e);if(e.current.kind!==te.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=[];e:for(;;){switch(e.current.kind){case te.NAME:n.push(new ye(this.environment,e.current,e.current.value,!0));break;case te.WILD:n.push(new $e(this.environment,e.current,!0));break;case te.DDOT:n.push(new Re(this.environment,e.current));break;case te.LBRACKET:n.push(this.parseBracketedSelection(e));break;default:t&&e.backup();break e}e.next()}return n}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 Se(this.environment,e.current,Number(e.current.value))}parseSlice(e){const t=e.current,n=[];function r(e){if(e.kind===te.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(te.COLON),e.next()):(n.push(void 0),e.expect(te.COLON),e.next()),r(e.current)?(n.push(Number(e.current.value)),e.next(),e.current.kind===te.COLON&&e.next()):e.current.kind===te.COLON&&(n.push(void 0),e.expect(te.COLON),e.next()),r(e.current)&&(n.push(Number(e.current.value)),e.next()),e.backup(),new Te(this.environment,t,...n)}parseBracketedSelection(e){const t=e.next(),n=[];for(;e.current.kind!==te.RBRACKET;){switch(e.current.kind){case te.SINGLE_QUOTE_STRING:case te.DOUBLE_QUOTE_STRING:n.push(new ye(this.environment,e.current,this.decodeString(e.current,!0),!1));break;case te.FILTER:n.push(this.parseFilter(e));break;case te.INDEX:e.peek.kind===te.COLON?n.push(this.parseSlice(e)):n.push(this.parseIndex(e));break;case te.COLON:n.push(this.parseSlice(e));break;case te.WILD:n.push(new $e(this.environment,e.current));break;case te.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!==te.RBRACKET&&(e.expectPeek(te.COMMA),e.next()),e.next()}if(!n.length)throw new a("empty bracketed segment",t);return new Pe(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 be(this.environment,t,new K(t,n))}parseBoolean(e){return e.current.kind===te.FALSE?new A(e.current,!1):new A(e.current,!0)}parseNull(e){return new _(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(te.NOT),e.next(),new J(e.current,"!",this.parseFilterExpression(e,3))}parseInfixExpression(e,t){const n=e.next(),r=_e.get(n.kind)||1,s=this.parseFilterExpression(e,r),i=Ae.get(n.kind);if(!i)throw new a(`unknown operator '${n.kind}'`,n);return this.throwForNonSingularQuery(t),this.throwForNonSingularQuery(s),Fe.has(i)&&(this.throwForNonComparableFunction(t),this.throwForNonComparableFunction(s)),new M(n,t,i,s)}parseGroupedExpression(e){e.next();let t=this.parseFilterExpression(e);for(e.next();e.current.kind!==te.RPAREN;){if(e.current.kind===te.EOF)throw new a("unbalanced parentheses",e.current);t=this.parseInfixExpression(e,t)}return e.expect(te.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!==te.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(;Ae.has(s);)e.next(),r=this.parseInfixExpression(e,r),s=e.peek.kind;if(t.push(r),e.peek.kind!==te.RPAREN){if(e.peek.kind===te.RBRACKET)break;e.expectPeek(te.COMMA),e.next()}e.next()}return e.expect(te.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 te.EOF:case te.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===te.EOF||n===te.RBRACKET||(_e.get(n)||1)<t)break;if(!Ae.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===te.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 Je{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 re(pe(e))))}query(e,t){return this.compile(e).query(t)}match(e,t){return this.compile(e).match(t)}setupFilterFunctions(){this.functionRegister.set("count",new q),this.functionRegister.set("length",new X),this.functionRegister.set("search",new Y),this.functionRegister.set("match",new H),this.functionRegister.set("value",new ee)}checkWellTypedness(e,t){const n=this.functionRegister.get(e.value);if(!n)throw new o(`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,i,o]of n.argTypes.map(((e,n)=>[e,t[n],n])))switch(r){case d.ValueType:if(!(i instanceof L||i instanceof D&&i.path.singularQuery()||i instanceof G&&this.functionRegister.get(i.name)?.returnType===d.ValueType))throw new s(`${e.value}() argument ${o} must be of ValueType`,i.token);break;case d.LogicalType:if(!(i instanceof D||i instanceof M))throw new s(`${e.value}() argument ${o} must be of LogicalType`,i.token);break;case d.NodesType:if(!(i instanceof D||i instanceof G&&this.functionRegister.get(i.name)?.returnType===d.NodesType))throw new s(`${e.value}() argument ${o} must be of NodesType`,i.token)}return t}}var Me=Object.freeze({__proto__:null,Count:q,FunctionExpressionType:d,Length:X,Match:H,Search:Y,Value:ee});const Ke=new Je;function De(e,t){return Ke.query(e,t)}function Ce(e){return Ke.compile(e)}var Ue=Object.freeze({__proto__:null,DEFAULT_ENVIRONMENT:Ke,FunctionExpressionType:d,JSONPath:Le,JSONPathEnvironment:Je,JSONPathError:t,JSONPathIndexError:i,JSONPathLexerError:r,JSONPathNode:R,JSONPathNodeList:b,JSONPathRecursionLimitError:h,JSONPathSyntaxError:a,JSONPathTypeError:s,Nothing:P,Token:ne,TokenKind:te,compile:Ce,expressions:V,functions:Me,match:function(e,t){return Ke.match(e,t)},query:De,selectors:Ie});class Ge extends Error{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPatchError"}}class We extends Ge{constructor(e){super(e),this.message=e,Object.setPrototypeOf(this,new.target.prototype),this.name="JSONPatchTestFailure"}}class Qe{name="add";constructor(e,t){this.path=e,this.value=t}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(n===N)return this.value;const s=this.path.tokens.at(-1);if(void 0===s)throw new Ge(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(n))if(r===N){if("-"!==s)throw new Ge(`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 Ge(`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===N)throw new Ge(`can't remove root (${this.name}:${t})`);const s=this.path.tokens.at(-1);if(void 0===s)throw new Ge(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(n)){if(r===N)throw new Ge(`can't remove nonexistent item (${this.name}:${t})`);n.splice(Number(s),1)}else{if(!u(n))throw new Ge(`unexpected operation on '${typeof n}' (${this.name}:${t})`);if(r===N)throw new Ge(`can't remove nonexistent property (${this.name}:${t})`);delete n[s]}return e}toObject(){return{op:this.name,path:this.path.toString()}}}class ze{name="replace";constructor(e,t){this.path=e,this.value=t}apply(e,t){const[n,r]=this.path.resolveWithParent(e);if(n===N)return this.value;const s=this.path.tokens.at(-1);if(void 0===s)throw new Ge(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(n)){if(r===N)throw new Ge(`can't replace nonexistent item (${this.name}:${t})`);n.splice(Number(s),1,this.value)}else{if(!u(n))throw new Ge(`unexpected operation on '${typeof n}' (${this.name}:${t})`);if(r===N)throw new Ge(`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 Ve{name="move";constructor(e,t){this.from=e,this.path=t}apply(e,t){if(this.path.isRelativeTo(this.from))throw new Ge(`can't move object to one of its own children (${this.name}:${t})`);const[n,r]=this.from.resolveWithParent(e);if(r===N)throw new Ge(`source object does not exist (${this.name}:${t})`);const s=this.from.tokens.at(-1);if(void 0===s)throw new Ge(`unexpected operation on 'undefined' (${this.name}:${t})`);c(n)?n.splice(Number(s),1):u(n)&&delete n[s];const[i,o]=this.path.resolveWithParent(e);if(i===N)return r;const a=this.path.tokens.at(-1);if(void 0===a)throw new Ge(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(i))i.splice(Number(a),0,r);else{if(!u(i))throw new Ge(`unexpected operation on '${typeof parent}' (${this.name}:${t})`);i[a]=r}return e}toObject(){return{op:this.name,from:this.from.toString(),path:this.path.toString()}}}class qe{name="copy";constructor(e,t){this.from=e,this.path=t}apply(e,t){const[n,r]=this.from.resolveWithParent(e);if(r===N)throw new Ge(`source object does not exist (${this.name}:${t})`);const[s]=this.path.resolveWithParent(e);if(s===N)return this.deepCopy(r);const i=this.path.tokens.at(-1);if(void 0===i)throw new Ge(`unexpected operation on 'undefined' (${this.name}:${t})`);if(c(s))s.splice(Number(i),0,this.deepCopy(r));else{if(!u(s))throw new Ge(`unexpected operation on '${typeof parent}' (${this.name}:${t})`);s[i]=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 Xe{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 Ze{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 Qe(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 ze(this.ensurePointer(e,"replace",this.ops.length),t)),this}move(e,t){return this.ops.push(new Ve(this.ensurePointer(e,"move",this.ops.length),this.ensurePointer(t,"move",this.ops.length))),this}copy(e,t){return this.ops.push(new qe(this.ensurePointer(e,"copy",this.ops.length),this.ensurePointer(t,"copy",this.ops.length))),this}test(e,t){return this.ops.push(new Xe(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 Ge(`${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 Ge(`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 Ge(`missing property '${t}' (${n}:${r})`);const s=e[t];if(!p(s))throw new Ge(`expected a JSON Pointer string for '${t}', found ${typeof s} (${n}:${r})`);try{return new E(s)}catch(e){if(e instanceof g)throw new Ge(`${e.message} (${n}:${r})`);throw e}}opValue(e,t,n,r){if(!Object.hasOwn(e,t))throw new Ge(`missing property '${t}' (${n}:${r})`);return e[t]}ensurePointer(e,t,n){if(e instanceof E)return e;if(!p(e))throw new Ge(`expected a JSON Pointer string, found ${typeof e} (${t}:${n})`);try{return new E(e)}catch(e){if(e instanceof g)throw new Ge(`${e.message} (${t}:${n})`);throw e}}}function He(e,t){return new Ze(e).apply(t)}var Ye=Object.freeze({__proto__:null,JSONPatch:Ze,JSONPatchError:Ge,JSONPatchTestFailure:We,apply:He});return e.DEFAULT_ENVIRONMENT=Ke,e.FunctionExpressionType=d,e.JSONPatch=Ze,e.JSONPatchError=Ge,e.JSONPatchTestFailure=We,e.JSONPath=Le,e.JSONPathEnvironment=Je,e.JSONPathError=t,e.JSONPathIndexError=i,e.JSONPathLexerError=r,e.JSONPathNode=R,e.JSONPathNodeList=b,e.JSONPathRecursionLimitError=h,e.JSONPathSyntaxError=a,e.JSONPathTypeError=s,e.JSONPointer=E,e.Nothing=P,e.RelativeJSONPointer=S,e.Token=ne,e.TokenKind=te,e.UNDEFINED=N,e.apply=He,e.compile=Ce,e.jsonpatch=Ye,e.jsonpath=Ue,e.jsonpointer=$,e.query=De,e.resolve=T,e.version="0.2.0",e}({});
2
2
  //# sourceMappingURL=json-p3.iife.min.js.map