@jmespath-community/jmespath 1.1.1 → 1.1.3

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.
@@ -4,48 +4,6 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jmespath = {}));
5
5
  })(this, (function (exports) { 'use strict';
6
6
 
7
- var Token;
8
- (function (Token) {
9
- Token["TOK_EOF"] = "EOF";
10
- Token["TOK_VARIABLE"] = "Variable";
11
- Token["TOK_ASSIGN"] = "Assign";
12
- Token["TOK_UNQUOTEDIDENTIFIER"] = "UnquotedIdentifier";
13
- Token["TOK_QUOTEDIDENTIFIER"] = "QuotedIdentifier";
14
- Token["TOK_RBRACKET"] = "Rbracket";
15
- Token["TOK_RPAREN"] = "Rparen";
16
- Token["TOK_COMMA"] = "Comma";
17
- Token["TOK_COLON"] = "Colon";
18
- Token["TOK_RBRACE"] = "Rbrace";
19
- Token["TOK_NUMBER"] = "Number";
20
- Token["TOK_CURRENT"] = "Current";
21
- Token["TOK_ROOT"] = "Root";
22
- Token["TOK_EXPREF"] = "Expref";
23
- Token["TOK_PIPE"] = "Pipe";
24
- Token["TOK_OR"] = "Or";
25
- Token["TOK_AND"] = "And";
26
- Token["TOK_EQ"] = "EQ";
27
- Token["TOK_GT"] = "GT";
28
- Token["TOK_LT"] = "LT";
29
- Token["TOK_GTE"] = "GTE";
30
- Token["TOK_LTE"] = "LTE";
31
- Token["TOK_NE"] = "NE";
32
- Token["TOK_PLUS"] = "Plus";
33
- Token["TOK_MINUS"] = "Minus";
34
- Token["TOK_MULTIPLY"] = "Multiply";
35
- Token["TOK_DIVIDE"] = "Divide";
36
- Token["TOK_MODULO"] = "Modulo";
37
- Token["TOK_DIV"] = "Div";
38
- Token["TOK_FLATTEN"] = "Flatten";
39
- Token["TOK_STAR"] = "Star";
40
- Token["TOK_FILTER"] = "Filter";
41
- Token["TOK_DOT"] = "Dot";
42
- Token["TOK_NOT"] = "Not";
43
- Token["TOK_LBRACE"] = "Lbrace";
44
- Token["TOK_LBRACKET"] = "Lbracket";
45
- Token["TOK_LPAREN"] = "Lparen";
46
- Token["TOK_LITERAL"] = "Literal";
47
- })(Token || (Token = {}));
48
-
49
7
  const isObject = (obj) => {
50
8
  return obj !== null && Object.prototype.toString.call(obj) === '[object Object]';
51
9
  };
@@ -172,6 +130,125 @@
172
130
  return result;
173
131
  };
174
132
 
133
+ const findFirst = (subject, sub, start, end) => {
134
+ if (!subject || !sub) {
135
+ return null;
136
+ }
137
+ start = Math.max(ensureInteger((start = start || 0)), 0);
138
+ end = Math.min(ensureInteger((end = end || subject.length)), subject.length);
139
+ const offset = subject.slice(start, end).indexOf(sub);
140
+ return offset === -1 ? null : offset + start;
141
+ };
142
+ const findLast = (subject, sub, start, end) => {
143
+ if (!subject || !sub) {
144
+ return null;
145
+ }
146
+ start = Math.max(ensureInteger((start = start || 0)), 0);
147
+ end = Math.min(ensureInteger((end = end || subject.length)), subject.length);
148
+ const offset = subject.slice(start, end).lastIndexOf(sub);
149
+ const result = offset === -1 ? null : offset + start;
150
+ return result;
151
+ };
152
+ const lower = (subject) => subject.toLowerCase();
153
+ const ensurePadFuncParams = (name, width, padding) => {
154
+ padding = padding || ' ';
155
+ if (padding.length > 1) {
156
+ throw new Error(`invalid value, ${name} expects its 'pad' parameter to be a valid string with a single codepoint`);
157
+ }
158
+ ensurePositiveInteger(width);
159
+ return padding;
160
+ };
161
+ const padLeft = (subject, width, padding) => {
162
+ padding = ensurePadFuncParams('pad_left', width, padding);
163
+ return (subject && subject.padStart(width, padding)) || '';
164
+ };
165
+ const padRight = (subject, width, padding) => {
166
+ padding = ensurePadFuncParams('pad_right', width, padding);
167
+ return (subject && subject.padEnd(width, padding)) || '';
168
+ };
169
+ const replace = (subject, string, by, count) => {
170
+ if (count === 0) {
171
+ return subject;
172
+ }
173
+ if (!count) {
174
+ // emulating es2021: String.prototype.replaceAll()
175
+ return subject.split(string).join(by);
176
+ }
177
+ ensurePositiveInteger(count);
178
+ [...Array(count).keys()].map(() => (subject = subject.replace(string, by)));
179
+ return subject;
180
+ };
181
+ const split = (subject, search, count) => {
182
+ if (subject.length == 0 && search.length === 0) {
183
+ return [];
184
+ }
185
+ if (count === null || count === undefined) {
186
+ return subject.split(search);
187
+ }
188
+ ensurePositiveInteger(count);
189
+ if (count === 0) {
190
+ return [subject];
191
+ }
192
+ const split = subject.split(search);
193
+ return [...split.slice(0, count), split.slice(count).join(search)];
194
+ };
195
+ const trim = (subject, chars) => {
196
+ return trimLeft(trimRight(subject, chars), chars);
197
+ };
198
+ const trimLeft = (subject, chars) => {
199
+ return trimImpl(subject, list => new RegExp(`^[${list}]*(.*?)`), chars);
200
+ };
201
+ const trimRight = (subject, chars) => {
202
+ return trimImpl(subject, list => new RegExp(`(.*?)[${list}]*\$`), chars);
203
+ };
204
+ const trimImpl = (subject, regExper, chars) => {
205
+ const pattern = chars ? chars.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&') : '\\s\u0085';
206
+ return subject.replace(regExper(pattern), '$1');
207
+ };
208
+ const upper = (subject) => subject.toUpperCase();
209
+
210
+ var Token;
211
+ (function (Token) {
212
+ Token["TOK_EOF"] = "EOF";
213
+ Token["TOK_VARIABLE"] = "Variable";
214
+ Token["TOK_ASSIGN"] = "Assign";
215
+ Token["TOK_UNQUOTEDIDENTIFIER"] = "UnquotedIdentifier";
216
+ Token["TOK_QUOTEDIDENTIFIER"] = "QuotedIdentifier";
217
+ Token["TOK_RBRACKET"] = "Rbracket";
218
+ Token["TOK_RPAREN"] = "Rparen";
219
+ Token["TOK_COMMA"] = "Comma";
220
+ Token["TOK_COLON"] = "Colon";
221
+ Token["TOK_RBRACE"] = "Rbrace";
222
+ Token["TOK_NUMBER"] = "Number";
223
+ Token["TOK_CURRENT"] = "Current";
224
+ Token["TOK_ROOT"] = "Root";
225
+ Token["TOK_EXPREF"] = "Expref";
226
+ Token["TOK_PIPE"] = "Pipe";
227
+ Token["TOK_OR"] = "Or";
228
+ Token["TOK_AND"] = "And";
229
+ Token["TOK_EQ"] = "EQ";
230
+ Token["TOK_GT"] = "GT";
231
+ Token["TOK_LT"] = "LT";
232
+ Token["TOK_GTE"] = "GTE";
233
+ Token["TOK_LTE"] = "LTE";
234
+ Token["TOK_NE"] = "NE";
235
+ Token["TOK_PLUS"] = "Plus";
236
+ Token["TOK_MINUS"] = "Minus";
237
+ Token["TOK_MULTIPLY"] = "Multiply";
238
+ Token["TOK_DIVIDE"] = "Divide";
239
+ Token["TOK_MODULO"] = "Modulo";
240
+ Token["TOK_DIV"] = "Div";
241
+ Token["TOK_FLATTEN"] = "Flatten";
242
+ Token["TOK_STAR"] = "Star";
243
+ Token["TOK_FILTER"] = "Filter";
244
+ Token["TOK_DOT"] = "Dot";
245
+ Token["TOK_NOT"] = "Not";
246
+ Token["TOK_LBRACE"] = "Lbrace";
247
+ Token["TOK_LBRACKET"] = "Lbracket";
248
+ Token["TOK_LPAREN"] = "Lparen";
249
+ Token["TOK_LITERAL"] = "Literal";
250
+ })(Token || (Token = {}));
251
+
175
252
  const basicTokens = {
176
253
  '(': Token.TOK_LPAREN,
177
254
  ')': Token.TOK_RPAREN,
@@ -366,7 +443,7 @@
366
443
  }
367
444
  this._current += 1;
368
445
  const literal = stream.slice(start + 1, this._current - 1);
369
- return literal.replace(`\\'`, `'`).replace(`\\\\`, `\\`);
446
+ return replace(replace(literal, `\\\\`, `\\`), `\\'`, `'`);
370
447
  }
371
448
  consumeNumber(stream) {
372
449
  const start = this._current;
@@ -971,83 +1048,6 @@
971
1048
  }
972
1049
  }
973
1050
 
974
- const findFirst = (subject, sub, start, end) => {
975
- if (!subject || !sub) {
976
- return null;
977
- }
978
- start = Math.max(ensureInteger((start = start || 0)), 0);
979
- end = Math.min(ensureInteger((end = end || subject.length)), subject.length);
980
- const offset = subject.slice(start, end).indexOf(sub);
981
- return offset === -1 ? null : offset + start;
982
- };
983
- const findLast = (subject, sub, start, end) => {
984
- if (!subject || !sub) {
985
- return null;
986
- }
987
- start = Math.max(ensureInteger((start = start || 0)), 0);
988
- end = Math.min(ensureInteger((end = end || subject.length)), subject.length);
989
- const offset = subject.slice(start, end).lastIndexOf(sub);
990
- const result = offset === -1 ? null : offset + start;
991
- return result;
992
- };
993
- const lower = (subject) => subject.toLowerCase();
994
- const ensurePadFuncParams = (name, width, padding) => {
995
- padding = padding || ' ';
996
- if (padding.length > 1) {
997
- throw new Error(`invalid value, ${name} expects its 'pad' parameter to be a valid string with a single codepoint`);
998
- }
999
- ensurePositiveInteger(width);
1000
- return padding;
1001
- };
1002
- const padLeft = (subject, width, padding) => {
1003
- padding = ensurePadFuncParams('pad_left', width, padding);
1004
- return (subject && subject.padStart(width, padding)) || '';
1005
- };
1006
- const padRight = (subject, width, padding) => {
1007
- padding = ensurePadFuncParams('pad_right', width, padding);
1008
- return (subject && subject.padEnd(width, padding)) || '';
1009
- };
1010
- const replace = (subject, string, by, count) => {
1011
- if (count === 0) {
1012
- return subject;
1013
- }
1014
- if (!count) {
1015
- // emulating es2021: String.prototype.replaceAll()
1016
- return subject.split(string).join(by);
1017
- }
1018
- ensurePositiveInteger(count);
1019
- [...Array(count).keys()].map(() => (subject = subject.replace(string, by)));
1020
- return subject;
1021
- };
1022
- const split = (subject, search, count) => {
1023
- if (subject.length == 0 && search.length === 0) {
1024
- return [];
1025
- }
1026
- if (count === null || count === undefined) {
1027
- return subject.split(search);
1028
- }
1029
- ensurePositiveInteger(count);
1030
- if (count === 0) {
1031
- return [subject];
1032
- }
1033
- const split = subject.split(search);
1034
- return [...split.slice(0, count), split.slice(count).join(search)];
1035
- };
1036
- const trim = (subject, chars) => {
1037
- return trimLeft(trimRight(subject, chars), chars);
1038
- };
1039
- const trimLeft = (subject, chars) => {
1040
- return trimImpl(subject, list => new RegExp(`^[${list}]*(.*?)`), chars);
1041
- };
1042
- const trimRight = (subject, chars) => {
1043
- return trimImpl(subject, list => new RegExp(`(.*?)[${list}]*\$`), chars);
1044
- };
1045
- const trimImpl = (subject, regExper, chars) => {
1046
- const pattern = chars ? chars.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&') : '\\s\u0085';
1047
- return subject.replace(regExper(pattern), '$1');
1048
- };
1049
- const upper = (subject) => subject.toUpperCase();
1050
-
1051
1051
  var InputArgument;
1052
1052
  (function (InputArgument) {
1053
1053
  InputArgument[InputArgument["TYPE_NUMBER"] = 0] = "TYPE_NUMBER";
@@ -2084,7 +2084,9 @@
2084
2084
  }
2085
2085
  const base = this.visit(left, value);
2086
2086
  if (allowString && typeof base === 'string') {
2087
- return base;
2087
+ // a projection is really a sub-expression in disguise
2088
+ // we must evaluate the right hand expression
2089
+ return this.visit(right, base);
2088
2090
  }
2089
2091
  if (!Array.isArray(base)) {
2090
2092
  return null;
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).jmespath={})}(this,(function(t){"use strict";var e;!function(t){t.TOK_EOF="EOF",t.TOK_VARIABLE="Variable",t.TOK_ASSIGN="Assign",t.TOK_UNQUOTEDIDENTIFIER="UnquotedIdentifier",t.TOK_QUOTEDIDENTIFIER="QuotedIdentifier",t.TOK_RBRACKET="Rbracket",t.TOK_RPAREN="Rparen",t.TOK_COMMA="Comma",t.TOK_COLON="Colon",t.TOK_RBRACE="Rbrace",t.TOK_NUMBER="Number",t.TOK_CURRENT="Current",t.TOK_ROOT="Root",t.TOK_EXPREF="Expref",t.TOK_PIPE="Pipe",t.TOK_OR="Or",t.TOK_AND="And",t.TOK_EQ="EQ",t.TOK_GT="GT",t.TOK_LT="LT",t.TOK_GTE="GTE",t.TOK_LTE="LTE",t.TOK_NE="NE",t.TOK_PLUS="Plus",t.TOK_MINUS="Minus",t.TOK_MULTIPLY="Multiply",t.TOK_DIVIDE="Divide",t.TOK_MODULO="Modulo",t.TOK_DIV="Div",t.TOK_FLATTEN="Flatten",t.TOK_STAR="Star",t.TOK_FILTER="Filter",t.TOK_DOT="Dot",t.TOK_NOT="Not",t.TOK_LBRACE="Lbrace",t.TOK_LBRACKET="Lbracket",t.TOK_LPAREN="Lparen",t.TOK_LITERAL="Literal"}(e||(e={}));const r=t=>null!==t&&"[object Object]"===Object.prototype.toString.call(t),n=(t,e)=>{if(t===e)return!0;if(typeof t!=typeof e)return!1;if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r+=1)if(!n(t[r],e[r]))return!1;return!0}if(r(t)&&r(e)){const r=Object.entries(t),i=new Set(Object.keys(e));if(r.length!==i.size)return!1;for(const[t,s]of r){if(!n(s,e[t]))return!1;i.delete(t)}return 0===i.size}return!1},i=t=>{if("object"==typeof t){if(null===t)return!0;if(Array.isArray(t))return 0===t.length;for(const e in t)return!1;return!0}return!("number"==typeof t||t)},s=t=>t>="a"&&t<="z"||t>="A"&&t<="Z"||"_"===t,o=t=>t>="0"&&t<="9"||"-"===t,a=t=>{if("number"!=typeof t||Math.floor(t)!==t)throw new Error("invalid-value: expecting an integer.");return t},u=t=>{if("number"!=typeof t||t<0||Math.floor(t)!==t)throw new Error("invalid-value: expecting a non-negative integer.");return t},c=(...t)=>{for(let e=0;e<t.length;e++){if(null===t[e]||void 0===t[e])throw new Error("not-a-number: undefined");if("number"!=typeof t[e])throw new Error("not-a-number")}},h=t=>{if(!(t=+t))throw new Error("not-a-number: divide by zero");return t},T={"(":e.TOK_LPAREN,")":e.TOK_RPAREN,"*":e.TOK_STAR,",":e.TOK_COMMA,".":e.TOK_DOT,":":e.TOK_COLON,"@":e.TOK_CURRENT,"]":e.TOK_RBRACKET,"{":e.TOK_LBRACE,"}":e.TOK_RBRACE,"+":e.TOK_PLUS,"%":e.TOK_MODULO,"−":e.TOK_MINUS,"×":e.TOK_MULTIPLY,"÷":e.TOK_DIVIDE},_={"!":!0,"<":!0,"=":!0,">":!0,"&":!0,"|":!0,"/":!0},l={"\t":!0,"\n":!0,"\r":!0," ":!0};const E=new class{constructor(){this._current=0,this._enable_legacy_literals=!1}tokenize(t,r){const n=[];let i,a,u;for(this._current=0,this._enable_legacy_literals=(null==r?void 0:r.enable_legacy_literals)||!1;this._current<t.length;)if(s(t[this._current]))i=this._current,a=this.consumeUnquotedIdentifier(t),n.push({start:i,type:e.TOK_UNQUOTEDIDENTIFIER,value:a});else if(void 0!==T[t[this._current]])n.push({start:this._current,type:T[t[this._current]],value:t[this._current]}),this._current+=1;else if("$"===t[this._current])i=this._current,this._current+1<t.length&&s(t[this._current+1])?(this._current+=1,a=this.consumeUnquotedIdentifier(t),n.push({start:i,type:e.TOK_VARIABLE,value:a})):(n.push({start:i,type:e.TOK_ROOT,value:t[this._current]}),this._current+=1);else if("-"===t[this._current])if(this._current+1<t.length&&o(t[this._current+1])){const e=this.consumeNumber(t);e&&n.push(e)}else{const t={start:this._current,type:e.TOK_MINUS,value:"-"};n.push(t),this._current+=1}else if(o(t[this._current]))u=this.consumeNumber(t),n.push(u);else if("["===t[this._current])u=this.consumeLBracket(t),n.push(u);else if('"'===t[this._current])i=this._current,a=this.consumeQuotedIdentifier(t),n.push({start:i,type:e.TOK_QUOTEDIDENTIFIER,value:a});else if("'"===t[this._current])i=this._current,a=this.consumeRawStringLiteral(t),n.push({start:i,type:e.TOK_LITERAL,value:a});else if("`"===t[this._current]){i=this._current;const r=this.consumeLiteral(t);n.push({start:i,type:e.TOK_LITERAL,value:r})}else if(void 0!==_[t[this._current]])u=this.consumeOperator(t),u&&n.push(u);else{if(void 0===l[t[this._current]]){const e=new Error(`Syntax error: unknown character: ${t[this._current]}`);throw e.name="LexerError",e}this._current+=1}return n}consumeUnquotedIdentifier(t){const e=this._current;for(this._current+=1;this._current<t.length&&((r=t[this._current])>="a"&&r<="z"||r>="A"&&r<="Z"||r>="0"&&r<="9"||"_"===r);)this._current+=1;var r;return t.slice(e,this._current)}consumeQuotedIdentifier(t){const e=this._current;this._current+=1;const r=t.length;for(;'"'!==t[this._current]&&this._current<r;){let e=this._current;"\\"!==t[e]||"\\"!==t[e+1]&&'"'!==t[e+1]?e+=1:e+=2,this._current=e}this._current+=1;const[n,i]=this.parseJSON(t.slice(e,this._current));if(!i){const t=new Error("syntax: unexpected end of JSON input");throw t.name="LexerError",t}return n}consumeRawStringLiteral(t){const e=this._current;this._current+=1;const r=t.length;for(;"'"!==t[this._current]&&this._current<r;){let e=this._current;"\\"!==t[e]||"\\"!==t[e+1]&&"'"!==t[e+1]?e+=1:e+=2,this._current=e}this._current+=1;return t.slice(e+1,this._current-1).replace("\\'","'").replace("\\\\","\\")}consumeNumber(t){const r=this._current;this._current+=1;const n=t.length;for(;o(t[this._current])&&this._current<n;)this._current+=1;return{start:r,value:parseInt(t.slice(r,this._current),10),type:e.TOK_NUMBER}}consumeLBracket(t){const r=this._current;return this._current+=1,"?"===t[this._current]?(this._current+=1,{start:r,type:e.TOK_FILTER,value:"[?"}):"]"===t[this._current]?(this._current+=1,{start:r,type:e.TOK_FLATTEN,value:"[]"}):{start:r,type:e.TOK_LBRACKET,value:"["}}consumeOrElse(t,e,r,n){const i=this._current;return this._current+=1,this._current<t.length&&t[this._current]===e?(this._current+=1,{start:i,type:n,value:t.slice(i,this._current)}):{start:i,type:r,value:t[i]}}consumeOperator(t){switch(t[this._current]){case"!":return this.consumeOrElse(t,"=",e.TOK_NOT,e.TOK_NE);case"<":return this.consumeOrElse(t,"=",e.TOK_LT,e.TOK_LTE);case">":return this.consumeOrElse(t,"=",e.TOK_GT,e.TOK_GTE);case"=":return this.consumeOrElse(t,"=",e.TOK_ASSIGN,e.TOK_EQ);case"&":return this.consumeOrElse(t,"&",e.TOK_EXPREF,e.TOK_AND);case"|":return this.consumeOrElse(t,"|",e.TOK_PIPE,e.TOK_OR);case"/":return this.consumeOrElse(t,"/",e.TOK_DIVIDE,e.TOK_DIV)}}consumeLiteral(t){this._current+=1;const e=this._current,r=t.length;for(;"`"!==t[this._current]&&this._current<r;){let e=this._current;"\\"!==t[e]||"\\"!==t[e+1]&&"`"!==t[e+1]?e+=1:e+=2,this._current=e}let n=t.slice(e,this._current).trimStart();n=n.replace("\\`","`");let i=null,s=!1;if(this.looksLikeJSON(n)&&([i,s]=this.parseJSON(n)),!s&&this._enable_legacy_literals&&([i,s]=this.parseJSON(`"${n}"`)),!s){const e=new Error(`Syntax error: unexpected end of JSON input or invalid format for a JSON literal: ${t[this._current]}`);throw e.name="LexerError",e}return this._current+=1,i}looksLikeJSON(t){if(""===t)return!1;if('[{"'.includes(t[0]))return!0;if(["true","false","null"].includes(t))return!0;if("-0123456789".includes(t[0])){const[e,r]=this.parseJSON(t);return r}return!1}parseJSON(t){try{return[JSON.parse(t),!0]}catch(t){return[null,!1]}}},p={[e.TOK_EOF]:0,[e.TOK_VARIABLE]:0,[e.TOK_UNQUOTEDIDENTIFIER]:0,[e.TOK_QUOTEDIDENTIFIER]:0,[e.TOK_RBRACKET]:0,[e.TOK_RPAREN]:0,[e.TOK_COMMA]:0,[e.TOK_RBRACE]:0,[e.TOK_NUMBER]:0,[e.TOK_CURRENT]:0,[e.TOK_EXPREF]:0,[e.TOK_ROOT]:0,[e.TOK_ASSIGN]:1,[e.TOK_PIPE]:1,[e.TOK_OR]:2,[e.TOK_AND]:3,[e.TOK_EQ]:5,[e.TOK_GT]:5,[e.TOK_LT]:5,[e.TOK_GTE]:5,[e.TOK_LTE]:5,[e.TOK_NE]:5,[e.TOK_MINUS]:6,[e.TOK_PLUS]:6,[e.TOK_DIV]:7,[e.TOK_DIVIDE]:7,[e.TOK_MODULO]:7,[e.TOK_MULTIPLY]:7,[e.TOK_FLATTEN]:9,[e.TOK_STAR]:20,[e.TOK_FILTER]:21,[e.TOK_DOT]:40,[e.TOK_NOT]:45,[e.TOK_LBRACE]:50,[e.TOK_LBRACKET]:55,[e.TOK_LPAREN]:60};class R{constructor(){this.index=0,this.tokens=[]}parse(t,r){this.loadTokens(t,r||{enable_legacy_literals:!1}),this.index=0;const n=this.expression(0);if(this.lookahead(0)!==e.TOK_EOF){const t=this.lookaheadToken(0);this.errorToken(t,`Syntax error: unexpected token type: ${t.type}, value: ${t.value}`)}return n}loadTokens(t,r){this.tokens=[...E.tokenize(t,r),{type:e.TOK_EOF,value:"",start:t.length}]}expression(t){const e=this.lookaheadToken(0);this.advance();let r=this.nud(e),n=this.lookahead(0);for(;t<p[n];)this.advance(),r=this.led(n,r),n=this.lookahead(0);return r}lookahead(t){return this.tokens[this.index+t].type}lookaheadToken(t){return this.tokens[this.index+t]}advance(){this.index+=1}nud(t){switch(t.type){case e.TOK_VARIABLE:return{type:"Variable",name:t.value};case e.TOK_LITERAL:return{type:"Literal",value:t.value};case e.TOK_UNQUOTEDIDENTIFIER:return R.isKeyword(t,"let")&&this.lookahead(0)===e.TOK_VARIABLE?this.parseLetExpression():{type:"Field",name:t.value};case e.TOK_QUOTEDIDENTIFIER:if(this.lookahead(0)===e.TOK_LPAREN)throw new Error("Syntax error: quoted identifier not allowed for function names.");return{type:"Field",name:t.value};case e.TOK_NOT:return{type:"NotExpression",child:this.expression(p.Not)};case e.TOK_MINUS:{const e=this.expression(p.Minus);return{type:"Unary",operator:t.type,operand:e}}case e.TOK_PLUS:{const e=this.expression(p.Plus);return{type:"Unary",operator:t.type,operand:e}}case e.TOK_STAR:{const t={type:"Identity"};return{type:"ValueProjection",left:t,right:this.lookahead(0)===e.TOK_RBRACKET?t:this.parseProjectionRHS(p.Star)}}case e.TOK_FILTER:return this.led(t.type,{type:"Identity"});case e.TOK_LBRACE:return this.parseMultiselectHash();case e.TOK_FLATTEN:return{type:"Projection",left:{type:"Flatten",child:{type:"Identity"}},right:this.parseProjectionRHS(p.Flatten)};case e.TOK_LBRACKET:if(this.lookahead(0)===e.TOK_NUMBER||this.lookahead(0)===e.TOK_COLON){const t=this.parseIndexExpression();return this.projectIfSlice({type:"Identity"},t)}if(this.lookahead(0)===e.TOK_STAR&&this.lookahead(1)===e.TOK_RBRACKET){this.advance(),this.advance();return{left:{type:"Identity"},right:this.parseProjectionRHS(p.Star),type:"Projection"}}return this.parseMultiselectList();case e.TOK_CURRENT:return{type:e.TOK_CURRENT};case e.TOK_ROOT:return{type:e.TOK_ROOT};case e.TOK_EXPREF:return{type:"ExpressionReference",child:this.expression(p.Expref)};case e.TOK_LPAREN:{const t=[];for(;this.lookahead(0)!==e.TOK_RPAREN;){let r;this.lookahead(0)===e.TOK_CURRENT?(r={type:e.TOK_CURRENT},this.advance()):r=this.expression(0),t.push(r)}return this.match(e.TOK_RPAREN),t[0]}default:this.errorToken(t)}}led(t,r){switch(t){case e.TOK_DOT:{const t=p.Dot;if(this.lookahead(0)!==e.TOK_STAR){return{type:"Subexpression",left:r,right:this.parseDotRHS(t)}}this.advance();return{type:"ValueProjection",left:r,right:this.parseProjectionRHS(t)}}case e.TOK_PIPE:return{type:"Pipe",left:r,right:this.expression(p.Pipe)};case e.TOK_OR:return{type:"OrExpression",left:r,right:this.expression(p.Or)};case e.TOK_AND:return{type:"AndExpression",left:r,right:this.expression(p.And)};case e.TOK_LPAREN:if("Field"!==r.type)throw new Error("Syntax error: expected a Field node");return{name:r.name,type:"Function",children:this.parseCommaSeparatedExpressionsUntilToken(e.TOK_RPAREN)};case e.TOK_FILTER:{const t=this.expression(0);this.match(e.TOK_RBRACKET);return{type:"FilterProjection",left:r,right:this.lookahead(0)===e.TOK_FLATTEN?{type:"Identity"}:this.parseProjectionRHS(p.Filter),condition:t}}case e.TOK_FLATTEN:return{type:"Projection",left:{type:"Flatten",child:r},right:this.parseProjectionRHS(p.Flatten)};case e.TOK_ASSIGN:{const t=r,e=this.expression(0);return{type:"Binding",variable:t.name,reference:e}}case e.TOK_EQ:case e.TOK_NE:case e.TOK_GT:case e.TOK_GTE:case e.TOK_LT:case e.TOK_LTE:return this.parseComparator(r,t);case e.TOK_PLUS:case e.TOK_MINUS:case e.TOK_MULTIPLY:case e.TOK_STAR:case e.TOK_DIVIDE:case e.TOK_MODULO:case e.TOK_DIV:return this.parseArithmetic(r,t);case e.TOK_LBRACKET:{const t=this.lookaheadToken(0);if(t.type===e.TOK_NUMBER||t.type===e.TOK_COLON){const t=this.parseIndexExpression();return this.projectIfSlice(r,t)}this.match(e.TOK_STAR),this.match(e.TOK_RBRACKET);return{type:"Projection",left:r,right:this.parseProjectionRHS(p.Star)}}default:return this.errorToken(this.lookaheadToken(0))}}static isKeyword(t,r){return t.type===e.TOK_UNQUOTEDIDENTIFIER&&t.value===r}match(t){if(this.lookahead(0)!==t){const e=this.lookaheadToken(0);this.errorToken(e,`Syntax error: expected ${t}, got: ${e.type}`)}else this.advance()}errorToken(t,e=""){const r=new Error(e||`Syntax error: invalid token (${t.type}): "${t.value}"`);throw r.name="ParserError",r}parseIndexExpression(){if(this.lookahead(0)===e.TOK_COLON||this.lookahead(1)===e.TOK_COLON)return this.parseSliceExpression();const t=Number(this.lookaheadToken(0).value);return this.advance(),this.match(e.TOK_RBRACKET),{type:"Index",value:t}}projectIfSlice(t,e){const r={type:"IndexExpression",left:t,right:e};return"Slice"===e.type?{left:r,right:this.parseProjectionRHS(p.Star),type:"Projection"}:r}parseSliceExpression(){const t=[null,null,null];let r=0,n=this.lookaheadToken(0);for(;n.type!=e.TOK_RBRACKET&&r<3;){if(n.type===e.TOK_COLON)r++,3===r&&this.errorToken(this.lookaheadToken(0),"Syntax error, too many colons in slice expression"),this.advance();else if(n.type===e.TOK_NUMBER){const e=this.lookaheadToken(0).value;t[r]=e,this.advance()}else{const t=this.lookaheadToken(0);this.errorToken(t,`Syntax error, unexpected token: ${t.value}(${t.type})`)}n=this.lookaheadToken(0)}this.match(e.TOK_RBRACKET);const[i,s,o]=t;return{type:"Slice",start:i,stop:s,step:o}}parseLetExpression(){const t=this.parseCommaSeparatedExpressionsUntilKeyword("in"),e=this.expression(0);return{type:"LetExpression",bindings:t.map((t=>t)),expression:e}}parseCommaSeparatedExpressionsUntilKeyword(t){return this.parseCommaSeparatedExpressionsUntil((()=>R.isKeyword(this.lookaheadToken(0),t)),(()=>{this.advance()}))}parseCommaSeparatedExpressionsUntilToken(t){return this.parseCommaSeparatedExpressionsUntil((()=>this.lookahead(0)===t),(()=>this.match(t)))}parseCommaSeparatedExpressionsUntil(t,r){const n=[];let i;for(;!t();)i=this.expression(0),this.lookahead(0)===e.TOK_COMMA&&this.match(e.TOK_COMMA),n.push(i);return r(),n}parseComparator(t,e){return{type:"Comparator",name:e,left:t,right:this.expression(p[e])}}parseArithmetic(t,e){return{type:"Arithmetic",operator:e,left:t,right:this.expression(p[e])}}parseDotRHS(t){const r=this.lookahead(0);if([e.TOK_UNQUOTEDIDENTIFIER,e.TOK_QUOTEDIDENTIFIER,e.TOK_STAR].includes(r))return this.expression(t);if(r===e.TOK_LBRACKET)return this.match(e.TOK_LBRACKET),this.parseMultiselectList();if(r===e.TOK_LBRACE)return this.match(e.TOK_LBRACE),this.parseMultiselectHash();const n=this.lookaheadToken(0);this.errorToken(n,`Syntax error, unexpected token: ${n.value}(${n.type})`)}parseProjectionRHS(t){if(p[this.lookahead(0)]<10)return{type:"Identity"};if(this.lookahead(0)===e.TOK_LBRACKET)return this.expression(t);if(this.lookahead(0)===e.TOK_FILTER)return this.expression(t);if(this.lookahead(0)===e.TOK_DOT)return this.match(e.TOK_DOT),this.parseDotRHS(t);const r=this.lookaheadToken(0);this.errorToken(r,`Syntax error, unexpected token: ${r.value}(${r.type})`)}parseMultiselectList(){const t=[];for(;this.lookahead(0)!==e.TOK_RBRACKET;){const r=this.expression(0);if(t.push(r),this.lookahead(0)===e.TOK_COMMA&&(this.match(e.TOK_COMMA),this.lookahead(0)===e.TOK_RBRACKET))throw new Error("Syntax error: unexpected token Rbracket")}return this.match(e.TOK_RBRACKET),{type:"MultiSelectList",children:t}}parseMultiselectHash(){const t=[],r=[e.TOK_UNQUOTEDIDENTIFIER,e.TOK_QUOTEDIDENTIFIER];let n,i,s;for(;;){if(n=this.lookaheadToken(0),!r.includes(n.type))throw new Error(`Syntax error: expecting an identifier token, got: ${n.type}`);if(i=n.value,this.advance(),this.match(e.TOK_COLON),s=this.expression(0),t.push({value:s,type:"KeyValuePair",name:i}),this.lookahead(0)===e.TOK_COMMA)this.match(e.TOK_COMMA);else if(this.lookahead(0)===e.TOK_RBRACE){this.match(e.TOK_RBRACE);break}}return{type:"MultiSelectHash",children:t}}}const f=new R;class O{constructor(t){this._text=t}get string(){return this._text}get length(){return this.codePoints.length}compareTo(t){return O.compare(this,new O(t))}static get comparer(){return(t,e)=>new O(t).compareTo(e)}static compare(t,e){const r=t.codePoints,n=e.codePoints;for(let t=0;t<Math.min(r.length,n.length);t++)if(r[t]!==n[t])return r[t]-n[t]>0?1:-1;return r.length-n.length>0?1:-1}reverse(){return String.fromCodePoint(...this.codePoints.reverse())}get codePoints(){return[...this._text].map((t=>t.codePointAt(0)))}}const A=(t,e,r)=>{if((r=r||" ").length>1)throw new Error(`invalid value, ${t} expects its 'pad' parameter to be a valid string with a single codepoint`);return u(e),r},y=(t,e)=>P(t,(t=>new RegExp(`^[${t}]*(.*?)`)),e),d=(t,e)=>P(t,(t=>new RegExp(`(.*?)[${t}]*$`)),e),P=(t,e,r)=>{const n=r?r.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"):"\\s…";return t.replace(e(n),"$1")};var Y;!function(t){t[t.TYPE_NUMBER=0]="TYPE_NUMBER",t[t.TYPE_ANY=1]="TYPE_ANY",t[t.TYPE_STRING=2]="TYPE_STRING",t[t.TYPE_ARRAY=3]="TYPE_ARRAY",t[t.TYPE_OBJECT=4]="TYPE_OBJECT",t[t.TYPE_BOOLEAN=5]="TYPE_BOOLEAN",t[t.TYPE_EXPREF=6]="TYPE_EXPREF",t[t.TYPE_NULL=7]="TYPE_NULL",t[t.TYPE_ARRAY_NUMBER=8]="TYPE_ARRAY_NUMBER",t[t.TYPE_ARRAY_STRING=9]="TYPE_ARRAY_STRING",t[t.TYPE_ARRAY_OBJECT=10]="TYPE_ARRAY_OBJECT",t[t.TYPE_ARRAY_ARRAY=11]="TYPE_ARRAY_ARRAY"}(Y||(Y={}));class N{constructor(t){this.TYPE_NAME_TABLE={[Y.TYPE_NUMBER]:"number",[Y.TYPE_ANY]:"any",[Y.TYPE_STRING]:"string",[Y.TYPE_ARRAY]:"array",[Y.TYPE_OBJECT]:"object",[Y.TYPE_BOOLEAN]:"boolean",[Y.TYPE_EXPREF]:"expression",[Y.TYPE_NULL]:"null",[Y.TYPE_ARRAY_NUMBER]:"Array<number>",[Y.TYPE_ARRAY_OBJECT]:"Array<object>",[Y.TYPE_ARRAY_STRING]:"Array<string>",[Y.TYPE_ARRAY_ARRAY]:"Array<Array<any>>"},this.functionAbs=([t])=>Math.abs(t),this.functionAvg=([t])=>{if(!t||0==t.length)return null;let e=0;for(let r=0;r<t.length;r+=1)e+=t[r];return e/t.length},this.functionCeil=([t])=>Math.ceil(t),this.functionContains=([t,e])=>{if(Array.isArray(t)){return t.includes(e)}if("string"==typeof t){if("string"==typeof e)return t.includes(e)}return null},this.functionEndsWith=t=>{const[e,r]=t;return e.includes(r,e.length-r.length)},this.functionFindFirst=t=>((t,e,r,n)=>{if(!t||!e)return null;r=Math.max(a(r=r||0),0),n=Math.min(a(n=n||t.length),t.length);const i=t.slice(r,n).indexOf(e);return-1===i?null:i+r})(t[0],t[1],t.length>2&&t[2]||void 0,t.length>3&&t[3]||void 0),this.functionFindLast=t=>((t,e,r,n)=>{if(!t||!e)return null;r=Math.max(a(r=r||0),0),n=Math.min(a(n=n||t.length),t.length);const i=t.slice(r,n).lastIndexOf(e);return-1===i?null:i+r})(t[0],t[1],t.length>2&&t[2]||void 0,t.length>3&&t[3]||void 0),this.functionFloor=([t])=>Math.floor(t),this.functionFromItems=([t])=>(t.map((t=>{if(2!=t.length||"string"!=typeof t[0])throw new Error("invalid value, each array must contain two elements, a pair of string and value")})),Object.fromEntries(t)),this.functionGroupBy=([t,e])=>{const r=this.createKeyFunction(e,[Y.TYPE_STRING]);return t.reduce(((t,e)=>{const n=r(null!=e?e:{});return(t[n]=t[n]||[]).push(e),t}),{})},this.functionItems=([t])=>Object.entries(t),this.functionJoin=t=>{const[e,r]=t;return r.join(e)},this.functionKeys=([t])=>Object.keys(t),this.functionLength=([t])=>"string"==typeof t?new O(t).length:Array.isArray(t)?t.length:Object.keys(t).length,this.functionLower=([t])=>(t=>t.toLowerCase())(t),this.functionMap=([t,e])=>{if(!this._interpreter)return[];const r=[],n=this._interpreter;for(let i=0;i<e.length;i+=1)r.push(n.visit(t,e[i]));return r},this.functionMax=([t])=>{if(!t.length)return null;if(this.getTypeName(t[0])===Y.TYPE_NUMBER)return Math.max(...t);const e=t;let r=e[0];for(let t=1;t<e.length;t+=1)r.localeCompare(e[t])<0&&(r=e[t]);return r},this.functionMaxBy=t=>{const e=t[1],r=t[0],n=this.createKeyFunction(e,[Y.TYPE_NUMBER,Y.TYPE_STRING]);let i,s,o=-1/0;for(let t=0;t<r.length;t+=1)s=n&&n(r[t]),void 0!==s&&s>o&&(o=s,i=r[t]);return i||null},this.functionMerge=t=>{let e={};for(let r=0;r<t.length;r+=1){const n=t[r];e=Object.assign(e,n)}return e},this.functionMin=([t])=>{if(!t.length)return null;if(this.getTypeName(t[0])===Y.TYPE_NUMBER)return Math.min(...t);const e=t;let r=e[0];for(let t=1;t<e.length;t+=1)e[t].localeCompare(r)<0&&(r=e[t]);return r},this.functionMinBy=t=>{const e=t[1],r=t[0],n=this.createKeyFunction(e,[Y.TYPE_NUMBER,Y.TYPE_STRING]);let i,s,o=1/0;for(let t=0;t<r.length;t+=1)s=n&&n(r[t]),void 0!==s&&s<o&&(o=s,i=r[t]);return i||null},this.functionNotNull=t=>{for(let e=0;e<t.length;e+=1)if(this.getTypeName(t[e])!==Y.TYPE_NULL)return t[e];return null},this.functionPadLeft=t=>((t,e,r)=>(r=A("pad_left",e,r),t&&t.padStart(e,r)||""))(t[0],t[1],t.length>2&&t[2]||void 0),this.functionPadRight=t=>((t,e,r)=>(r=A("pad_right",e,r),t&&t.padEnd(e,r)||""))(t[0],t[1],t.length>2&&t[2]||void 0),this.functionReplace=t=>((t,e,r,n)=>0===n?t:n?(u(n),[...Array(n).keys()].map((()=>t=t.replace(e,r))),t):t.split(e).join(r))(t[0],t[1],t[2],t.length>3?t[3]:void 0),this.functionSplit=t=>((t,e,r)=>{if(0==t.length&&0===e.length)return[];if(null==r)return t.split(e);if(u(r),0===r)return[t];const n=t.split(e);return[...n.slice(0,r),n.slice(r).join(e)]})(t[0],t[1],t.length>2?t[2]:void 0),this.functionReverse=([t])=>{if(this.getTypeName(t)===Y.TYPE_STRING)return new O(t).reverse();const e=t.slice(0);return e.reverse(),e},this.functionSort=([t])=>0==t.length?t:"string"==typeof t[0]?[...t].sort(O.comparer):[...t].sort(),this.functionSortBy=t=>{const e=t[0].slice(0);if(0===e.length)return e;const r=this._interpreter,n=t[1],i=this.getTypeName(r.visit(n,e[0]));if(void 0!==i&&![Y.TYPE_NUMBER,Y.TYPE_STRING].includes(i))throw new Error(`Invalid type: unexpected type (${this.TYPE_NAME_TABLE[i]})`);function s(t,e){throw new Error(`Invalid type: expected (${t.TYPE_NAME_TABLE[i]}), received ${t.TYPE_NAME_TABLE[t.getTypeName(e)]}`)}return e.sort(((t,e)=>{const o=r.visit(n,t),a=r.visit(n,e);return this.getTypeName(o)!==i?s(this,o):this.getTypeName(a)!==i&&s(this,a),i===Y.TYPE_STRING?O.comparer(o,a):o-a}))},this.functionStartsWith=([t,e])=>t.startsWith(e),this.functionSum=([t])=>t.reduce(((t,e)=>t+e),0),this.functionToArray=([t])=>this.getTypeName(t)===Y.TYPE_ARRAY?t:[t],this.functionToNumber=([t])=>{const e=this.getTypeName(t);let r;return e===Y.TYPE_NUMBER?t:e!==Y.TYPE_STRING||(r=+t,isNaN(r))?null:r},this.functionToString=([t])=>this.getTypeName(t)===Y.TYPE_STRING?t:JSON.stringify(t),this.functionTrim=t=>((t,e)=>y(d(t,e),e))(t[0],t.length>1?t[1]:void 0),this.functionTrimLeft=t=>{const e=t[0];return y(e,t.length>1?t[1]:void 0)},this.functionTrimRight=t=>{const e=t[0];return d(e,t.length>1?t[1]:void 0)},this.functionType=([t])=>{switch(this.getTypeName(t)){case Y.TYPE_NUMBER:return"number";case Y.TYPE_STRING:return"string";case Y.TYPE_ARRAY:return"array";case Y.TYPE_OBJECT:return"object";case Y.TYPE_BOOLEAN:return"boolean";case Y.TYPE_NULL:return"null";default:throw new Error("invalid-type")}},this.functionUpper=([t])=>(t=>t.toUpperCase())(t),this.functionValues=([t])=>Object.values(t),this.functionZip=t=>{const e=Math.min(...t.map((t=>t.length)));return Array(e).fill(null).map(((e,r)=>t.map((t=>t[r]))))},this.functionTable={abs:{_func:this.functionAbs,_signature:[{types:[Y.TYPE_NUMBER]}]},avg:{_func:this.functionAvg,_signature:[{types:[Y.TYPE_ARRAY_NUMBER]}]},ceil:{_func:this.functionCeil,_signature:[{types:[Y.TYPE_NUMBER]}]},contains:{_func:this.functionContains,_signature:[{types:[Y.TYPE_STRING,Y.TYPE_ARRAY]},{types:[Y.TYPE_ANY]}]},ends_with:{_func:this.functionEndsWith,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING]}]},find_first:{_func:this.functionFindFirst,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING]},{types:[Y.TYPE_NUMBER],optional:!0},{types:[Y.TYPE_NUMBER],optional:!0}]},find_last:{_func:this.functionFindLast,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING]},{types:[Y.TYPE_NUMBER],optional:!0},{types:[Y.TYPE_NUMBER],optional:!0}]},floor:{_func:this.functionFloor,_signature:[{types:[Y.TYPE_NUMBER]}]},from_items:{_func:this.functionFromItems,_signature:[{types:[Y.TYPE_ARRAY_ARRAY]}]},group_by:{_func:this.functionGroupBy,_signature:[{types:[Y.TYPE_ARRAY]},{types:[Y.TYPE_EXPREF]}]},items:{_func:this.functionItems,_signature:[{types:[Y.TYPE_OBJECT]}]},join:{_func:this.functionJoin,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_ARRAY_STRING]}]},keys:{_func:this.functionKeys,_signature:[{types:[Y.TYPE_OBJECT]}]},length:{_func:this.functionLength,_signature:[{types:[Y.TYPE_STRING,Y.TYPE_ARRAY,Y.TYPE_OBJECT]}]},lower:{_func:this.functionLower,_signature:[{types:[Y.TYPE_STRING]}]},map:{_func:this.functionMap,_signature:[{types:[Y.TYPE_EXPREF]},{types:[Y.TYPE_ARRAY]}]},max:{_func:this.functionMax,_signature:[{types:[Y.TYPE_ARRAY_NUMBER,Y.TYPE_ARRAY_STRING]}]},max_by:{_func:this.functionMaxBy,_signature:[{types:[Y.TYPE_ARRAY]},{types:[Y.TYPE_EXPREF]}]},merge:{_func:this.functionMerge,_signature:[{types:[Y.TYPE_OBJECT],variadic:!0}]},min:{_func:this.functionMin,_signature:[{types:[Y.TYPE_ARRAY_NUMBER,Y.TYPE_ARRAY_STRING]}]},min_by:{_func:this.functionMinBy,_signature:[{types:[Y.TYPE_ARRAY]},{types:[Y.TYPE_EXPREF]}]},not_null:{_func:this.functionNotNull,_signature:[{types:[Y.TYPE_ANY],variadic:!0}]},pad_left:{_func:this.functionPadLeft,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_NUMBER]},{types:[Y.TYPE_STRING],optional:!0}]},pad_right:{_func:this.functionPadRight,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_NUMBER]},{types:[Y.TYPE_STRING],optional:!0}]},replace:{_func:this.functionReplace,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING]},{types:[Y.TYPE_NUMBER],optional:!0}]},split:{_func:this.functionSplit,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING]},{types:[Y.TYPE_NUMBER],optional:!0}]},reverse:{_func:this.functionReverse,_signature:[{types:[Y.TYPE_STRING,Y.TYPE_ARRAY]}]},sort:{_func:this.functionSort,_signature:[{types:[Y.TYPE_ARRAY_STRING,Y.TYPE_ARRAY_NUMBER]}]},sort_by:{_func:this.functionSortBy,_signature:[{types:[Y.TYPE_ARRAY]},{types:[Y.TYPE_EXPREF]}]},starts_with:{_func:this.functionStartsWith,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING]}]},sum:{_func:this.functionSum,_signature:[{types:[Y.TYPE_ARRAY_NUMBER]}]},to_array:{_func:this.functionToArray,_signature:[{types:[Y.TYPE_ANY]}]},to_number:{_func:this.functionToNumber,_signature:[{types:[Y.TYPE_ANY]}]},to_string:{_func:this.functionToString,_signature:[{types:[Y.TYPE_ANY]}]},trim:{_func:this.functionTrim,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING],optional:!0}]},trim_left:{_func:this.functionTrimLeft,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING],optional:!0}]},trim_right:{_func:this.functionTrimRight,_signature:[{types:[Y.TYPE_STRING]},{types:[Y.TYPE_STRING],optional:!0}]},type:{_func:this.functionType,_signature:[{types:[Y.TYPE_ANY]}]},upper:{_func:this.functionUpper,_signature:[{types:[Y.TYPE_STRING]}]},values:{_func:this.functionValues,_signature:[{types:[Y.TYPE_OBJECT]}]},zip:{_func:this.functionZip,_signature:[{types:[Y.TYPE_ARRAY],variadic:!0}]}},this._interpreter=t}registerFunction(t,e,r){if(t in this.functionTable)throw new Error(`Function already defined: ${t}()`);this.functionTable[t]={_func:e.bind(this),_signature:r}}callFunction(t,e){const r=this.functionTable[t];if(void 0===r)throw new Error(`Unknown function: ${t}()`);return this.validateArgs(t,e,r._signature),r._func.call(this,e)}validateInputSignatures(t,e){for(let r=0;r<e.length;r+=1)if("variadic"in e[r]&&r!==e.length-1)throw new Error(`Invalid arity: ${t}() 'variadic' argument ${r+1} must occur last`)}validateArgs(t,e,r){var n,i;let s;this.validateInputSignatures(t,r);const o=r.filter((t=>{var e;return null!==(e=!t.optional)&&void 0!==e&&e})).length,a=null!==(i=null===(n=r[r.length-1])||void 0===n?void 0:n.variadic)&&void 0!==i&&i,u=e.length<o,c=e.length>r.length,h=u&&(!a&&o>1||a)?"at least ":"";if(a&&u||!a&&(u||c))throw s=r.length>1,new Error(`Invalid arity: ${t}() takes ${h}${o} argument${s?"s":""} but received ${e.length}`);let T,_,l;for(let n=0;n<r.length;n+=1){let i;for(l=!1,T=r[n].types,_=this.getTypeName(e[n]),i=0;i<T.length;i+=1)if(void 0!==_&&this.typeMatches(_,T[i],e[n])){l=!0;break}if(!l&&void 0!==_){const e=T.map((t=>this.TYPE_NAME_TABLE[t])).join(" | ");throw new Error(`Invalid type: ${t}() expected argument ${n+1} to be type (${e}) but received type ${this.TYPE_NAME_TABLE[_]} instead.`)}}}typeMatches(t,e,r){if(e===Y.TYPE_ANY)return!0;if(e!==Y.TYPE_ARRAY_STRING&&e!==Y.TYPE_ARRAY_NUMBER&&e!==Y.TYPE_ARRAY_OBJECT&&e!==Y.TYPE_ARRAY_ARRAY&&e!==Y.TYPE_ARRAY)return t===e;if(e===Y.TYPE_ARRAY)return t===Y.TYPE_ARRAY;if(t===Y.TYPE_ARRAY){let t;e===Y.TYPE_ARRAY_NUMBER?t=Y.TYPE_NUMBER:e===Y.TYPE_ARRAY_OBJECT?t=Y.TYPE_OBJECT:e===Y.TYPE_ARRAY_STRING?t=Y.TYPE_STRING:e===Y.TYPE_ARRAY_ARRAY&&(t=Y.TYPE_ARRAY);const n=r;for(let e=0;e<n.length;e+=1){const r=this.getTypeName(n[e]);if(void 0!==r&&void 0!==t&&!this.typeMatches(r,t,n[e]))return!1}return!0}return!1}getTypeName(t){switch(Object.prototype.toString.call(t)){case"[object String]":return Y.TYPE_STRING;case"[object Number]":return Y.TYPE_NUMBER;case"[object Array]":return Y.TYPE_ARRAY;case"[object Boolean]":return Y.TYPE_BOOLEAN;case"[object Null]":return Y.TYPE_NULL;case"[object Object]":return t.expref?Y.TYPE_EXPREF:Y.TYPE_OBJECT;default:return}}createKeyFunction(t,e){const r=this._interpreter;return n=>{const i=r.visit(t,n);if(!e.includes(this.getTypeName(i))){const t=`Invalid type: expected one of (${e.map((t=>this.TYPE_NAME_TABLE[t])).join(" | ")}), received ${this.TYPE_NAME_TABLE[this.getTypeName(i)]}`;throw new Error(t)}return i}}}class g{constructor(){this.inner=void 0,this.data={}}withScope(t){const e=new g;return e.inner=this,e.data=t,e}getValue(t){if(t in this.data){const e=this.data[t];if(null!=e)return e}return this.inner?this.inner.getValue(t):null}}class K{constructor(){this._rootValue=null,this.runtime=new N(this),this._scope=new g}withScope(t){const e=new K;return e._rootValue=this._rootValue,e._scope=this._scope.withScope(t),e}search(t,e){return this._rootValue=e,this._scope=new g,this.visit(t,e)}visit(t,r){var s,o,a,u,T;switch(t.type){case"Field":const _=t.name;let l=null;return null===r||"object"!=typeof r||Array.isArray(r)||(l=null!==(s=r[_])&&void 0!==s?s:null),l;case"LetExpression":{const{bindings:e,expression:n}=t;let i={};return e.forEach((t=>{const e=this.visit(t,r);i=Object.assign(Object.assign({},i),e)})),this.withScope(i).visit(n,r)}case"Binding":{const{variable:e,reference:n}=t;return{[e]:this.visit(n,r)}}case"Variable":{const e=t.name,r=null!==(o=this._scope.getValue(e))&&void 0!==o?o:null;if(null==r)throw new Error(`Error referencing undefined variable ${e}`);return r}case"IndexExpression":return this.visit(t.right,this.visit(t.left,r));case"Subexpression":{const e=this.visit(t.left,r);return null!=e&&this.visit(t.right,e)||null}case"Index":{if(!Array.isArray(r))return null;const e=t.value<0?r.length+t.value:t.value;return null!==(a=r[e])&&void 0!==a?a:null}case"Slice":{if(!Array.isArray(r)&&"string"!=typeof r)return null;const{start:e,stop:n,step:i}=this.computeSliceParams(r.length,t);if("string"==typeof r){const t=[...r];return this.slice(t,e,n,i).join("")}return this.slice(r,e,n,i)}case"Projection":{const{left:e,right:n}=t;let i=!1;"IndexExpression"===e.type&&"Slice"===e.right.type&&(i=!0);const s=this.visit(e,r);if(i&&"string"==typeof s)return s;if(!Array.isArray(s))return null;const o=[];for(const t of s){const e=this.visit(n,t);null!==e&&o.push(e)}return o}case"ValueProjection":{const{left:e,right:n}=t,i=this.visit(e,r);if(null===i||"object"!=typeof i||Array.isArray(i))return null;const s=[],o=Object.values(i);for(const t of o){const e=this.visit(n,t);null!==e&&s.push(e)}return s}case"FilterProjection":{const{left:e,right:n,condition:s}=t,o=this.visit(e,r);if(!Array.isArray(o))return null;const a=[];for(const t of o){const e=this.visit(s,t);if(i(e))continue;const r=this.visit(n,t);null!==r&&a.push(r)}return a}case"Arithmetic":{const n=this.visit(t.left,r),i=this.visit(t.right,r);switch(t.operator){case e.TOK_PLUS:return c(u=n,T=i),u+T;case e.TOK_MINUS:return((t,e)=>(c(t,e),t-e))(n,i);case e.TOK_MULTIPLY:case e.TOK_STAR:return((t,e)=>(c(t,e),t*e))(n,i);case e.TOK_DIVIDE:return((t,e)=>(c(t,e),t/h(e)))(n,i);case e.TOK_MODULO:return((t,e)=>(c(t,e),t%e))(n,i);case e.TOK_DIV:return((t,e)=>(c(t,e),Math.floor(t/h(e))))(n,i);default:throw new Error(`Syntax error: unknown arithmetic operator: ${t.operator}`)}}case"Unary":{const n=this.visit(t.operand,r);switch(t.operator){case e.TOK_PLUS:return c(n),n;case e.TOK_MINUS:return c(n),-n;default:throw new Error(`Syntax error: unknown arithmetic operator: ${t.operator}`)}}case"Comparator":{const e=this.visit(t.left,r),i=this.visit(t.right,r);switch(t.name){case"EQ":return n(e,i);case"NE":return!n(e,i)}if("number"!=typeof e||"number"!=typeof i)return null;switch(t.name){case"GT":return e>i;case"GTE":return e>=i;case"LT":return e<i;case"LTE":return e<=i}}case"Flatten":{const e=this.visit(t.child,r);return Array.isArray(e)?e.flat():null}case"Root":return this._rootValue;case"MultiSelectList":{const e=[];for(const n of t.children)e.push(this.visit(n,r));return e}case"MultiSelectHash":{const e={};for(const n of t.children)e[n.name]=this.visit(n.value,r);return e}case"OrExpression":{const e=this.visit(t.left,r);return i(e)?this.visit(t.right,r):e}case"AndExpression":{const e=this.visit(t.left,r);return i(e)?e:this.visit(t.right,r)}case"NotExpression":return i(this.visit(t.child,r));case"Literal":return t.value;case"Pipe":return this.visit(t.right,this.visit(t.left,r));case"Function":{const e=[];for(const n of t.children)e.push(this.visit(n,r));return this.runtime.callFunction(t.name,e)}case"ExpressionReference":return Object.assign({expref:!0},t.child);case"Current":case"Identity":return r}}computeSliceParams(t,e){let{start:r,stop:n,step:i}=e;if(null===i)i=1;else if(0===i){const t=new Error("Invalid value: slice step cannot be 0");throw t.name="RuntimeError",t}return r=null===r?i<0?t-1:0:this.capSliceRange(t,r,i),n=null===n?i<0?-1:t:this.capSliceRange(t,n,i),{start:r,stop:n,step:i}}capSliceRange(t,e,r){let n=e;return n<0?(n+=t,n<0&&(n=r<0?-1:0)):n>=t&&(n=r<0?t-1:t),n}slice(t,e,r,n){const i=[];if(n>0)for(let s=e;s<r;s+=n)i.push(t[s]);else for(let s=e;s>r;s+=n)i.push(t[s]);return i}}const m=new K,I=Y.TYPE_ANY,S=Y.TYPE_ARRAY,v=Y.TYPE_ARRAY_ARRAY,L=Y.TYPE_ARRAY_NUMBER,M=Y.TYPE_ARRAY_OBJECT,B=Y.TYPE_ARRAY_STRING,x=Y.TYPE_BOOLEAN,U=Y.TYPE_EXPREF,k=Y.TYPE_NULL,w=Y.TYPE_NUMBER,C=Y.TYPE_OBJECT,b=Y.TYPE_STRING;function F(t,e){return f.parse(t,e)}function G(t,e){return E.tokenize(t,e)}const D=(t,e,r)=>{m.runtime.registerFunction(t,e,r)};function j(t,e,r){const n=f.parse(e,r);return m.search(n,t)}const $=m,J={compile:F,registerFunction:D,search:j,tokenize:G,TreeInterpreter:$,TYPE_ANY:I,TYPE_ARRAY_NUMBER:L,TYPE_ARRAY_STRING:B,TYPE_ARRAY:S,TYPE_BOOLEAN:x,TYPE_EXPREF:U,TYPE_NULL:k,TYPE_NUMBER:w,TYPE_OBJECT:C,TYPE_STRING:b};t.Scope=function(){return new g},t.TYPE_ANY=I,t.TYPE_ARRAY=S,t.TYPE_ARRAY_ARRAY=v,t.TYPE_ARRAY_NUMBER=L,t.TYPE_ARRAY_OBJECT=M,t.TYPE_ARRAY_STRING=B,t.TYPE_BOOLEAN=x,t.TYPE_EXPREF=U,t.TYPE_NULL=k,t.TYPE_NUMBER=w,t.TYPE_OBJECT=C,t.TYPE_STRING=b,t.TreeInterpreter=$,t.compile=F,t.default=J,t.jmespath=J,t.registerFunction=D,t.search=j,t.tokenize=G,Object.defineProperty(t,"__esModule",{value:!0})}));
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).jmespath={})}(this,(function(t){"use strict";const e=t=>null!==t&&"[object Object]"===Object.prototype.toString.call(t),r=(t,n)=>{if(t===n)return!0;if(typeof t!=typeof n)return!1;if(Array.isArray(t)&&Array.isArray(n)){if(t.length!==n.length)return!1;for(let e=0;e<t.length;e+=1)if(!r(t[e],n[e]))return!1;return!0}if(e(t)&&e(n)){const e=Object.entries(t),i=new Set(Object.keys(n));if(e.length!==i.size)return!1;for(const[t,s]of e){if(!r(s,n[t]))return!1;i.delete(t)}return 0===i.size}return!1},n=t=>{if("object"==typeof t){if(null===t)return!0;if(Array.isArray(t))return 0===t.length;for(const e in t)return!1;return!0}return!("number"==typeof t||t)},i=t=>t>="a"&&t<="z"||t>="A"&&t<="Z"||"_"===t,s=t=>t>="0"&&t<="9"||"-"===t,o=t=>{if("number"!=typeof t||Math.floor(t)!==t)throw new Error("invalid-value: expecting an integer.");return t},a=t=>{if("number"!=typeof t||t<0||Math.floor(t)!==t)throw new Error("invalid-value: expecting a non-negative integer.");return t},u=(...t)=>{for(let e=0;e<t.length;e++){if(null===t[e]||void 0===t[e])throw new Error("not-a-number: undefined");if("number"!=typeof t[e])throw new Error("not-a-number")}},c=t=>{if(!(t=+t))throw new Error("not-a-number: divide by zero");return t},h=(t,e,r)=>{if((r=r||" ").length>1)throw new Error(`invalid value, ${t} expects its 'pad' parameter to be a valid string with a single codepoint`);return a(e),r},T=(t,e,r,n)=>0===n?t:n?(a(n),[...Array(n).keys()].map((()=>t=t.replace(e,r))),t):t.split(e).join(r),_=(t,e)=>E(t,(t=>new RegExp(`^[${t}]*(.*?)`)),e),l=(t,e)=>E(t,(t=>new RegExp(`(.*?)[${t}]*$`)),e),E=(t,e,r)=>{const n=r?r.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"):"\\s…";return t.replace(e(n),"$1")};var p;!function(t){t.TOK_EOF="EOF",t.TOK_VARIABLE="Variable",t.TOK_ASSIGN="Assign",t.TOK_UNQUOTEDIDENTIFIER="UnquotedIdentifier",t.TOK_QUOTEDIDENTIFIER="QuotedIdentifier",t.TOK_RBRACKET="Rbracket",t.TOK_RPAREN="Rparen",t.TOK_COMMA="Comma",t.TOK_COLON="Colon",t.TOK_RBRACE="Rbrace",t.TOK_NUMBER="Number",t.TOK_CURRENT="Current",t.TOK_ROOT="Root",t.TOK_EXPREF="Expref",t.TOK_PIPE="Pipe",t.TOK_OR="Or",t.TOK_AND="And",t.TOK_EQ="EQ",t.TOK_GT="GT",t.TOK_LT="LT",t.TOK_GTE="GTE",t.TOK_LTE="LTE",t.TOK_NE="NE",t.TOK_PLUS="Plus",t.TOK_MINUS="Minus",t.TOK_MULTIPLY="Multiply",t.TOK_DIVIDE="Divide",t.TOK_MODULO="Modulo",t.TOK_DIV="Div",t.TOK_FLATTEN="Flatten",t.TOK_STAR="Star",t.TOK_FILTER="Filter",t.TOK_DOT="Dot",t.TOK_NOT="Not",t.TOK_LBRACE="Lbrace",t.TOK_LBRACKET="Lbracket",t.TOK_LPAREN="Lparen",t.TOK_LITERAL="Literal"}(p||(p={}));const R={"(":p.TOK_LPAREN,")":p.TOK_RPAREN,"*":p.TOK_STAR,",":p.TOK_COMMA,".":p.TOK_DOT,":":p.TOK_COLON,"@":p.TOK_CURRENT,"]":p.TOK_RBRACKET,"{":p.TOK_LBRACE,"}":p.TOK_RBRACE,"+":p.TOK_PLUS,"%":p.TOK_MODULO,"−":p.TOK_MINUS,"×":p.TOK_MULTIPLY,"÷":p.TOK_DIVIDE},f={"!":!0,"<":!0,"=":!0,">":!0,"&":!0,"|":!0,"/":!0},O={"\t":!0,"\n":!0,"\r":!0," ":!0};const A=new class{constructor(){this._current=0,this._enable_legacy_literals=!1}tokenize(t,e){const r=[];let n,o,a;for(this._current=0,this._enable_legacy_literals=(null==e?void 0:e.enable_legacy_literals)||!1;this._current<t.length;)if(i(t[this._current]))n=this._current,o=this.consumeUnquotedIdentifier(t),r.push({start:n,type:p.TOK_UNQUOTEDIDENTIFIER,value:o});else if(void 0!==R[t[this._current]])r.push({start:this._current,type:R[t[this._current]],value:t[this._current]}),this._current+=1;else if("$"===t[this._current])n=this._current,this._current+1<t.length&&i(t[this._current+1])?(this._current+=1,o=this.consumeUnquotedIdentifier(t),r.push({start:n,type:p.TOK_VARIABLE,value:o})):(r.push({start:n,type:p.TOK_ROOT,value:t[this._current]}),this._current+=1);else if("-"===t[this._current])if(this._current+1<t.length&&s(t[this._current+1])){const e=this.consumeNumber(t);e&&r.push(e)}else{const t={start:this._current,type:p.TOK_MINUS,value:"-"};r.push(t),this._current+=1}else if(s(t[this._current]))a=this.consumeNumber(t),r.push(a);else if("["===t[this._current])a=this.consumeLBracket(t),r.push(a);else if('"'===t[this._current])n=this._current,o=this.consumeQuotedIdentifier(t),r.push({start:n,type:p.TOK_QUOTEDIDENTIFIER,value:o});else if("'"===t[this._current])n=this._current,o=this.consumeRawStringLiteral(t),r.push({start:n,type:p.TOK_LITERAL,value:o});else if("`"===t[this._current]){n=this._current;const e=this.consumeLiteral(t);r.push({start:n,type:p.TOK_LITERAL,value:e})}else if(void 0!==f[t[this._current]])a=this.consumeOperator(t),a&&r.push(a);else{if(void 0===O[t[this._current]]){const e=new Error(`Syntax error: unknown character: ${t[this._current]}`);throw e.name="LexerError",e}this._current+=1}return r}consumeUnquotedIdentifier(t){const e=this._current;for(this._current+=1;this._current<t.length&&((r=t[this._current])>="a"&&r<="z"||r>="A"&&r<="Z"||r>="0"&&r<="9"||"_"===r);)this._current+=1;var r;return t.slice(e,this._current)}consumeQuotedIdentifier(t){const e=this._current;this._current+=1;const r=t.length;for(;'"'!==t[this._current]&&this._current<r;){let e=this._current;"\\"!==t[e]||"\\"!==t[e+1]&&'"'!==t[e+1]?e+=1:e+=2,this._current=e}this._current+=1;const[n,i]=this.parseJSON(t.slice(e,this._current));if(!i){const t=new Error("syntax: unexpected end of JSON input");throw t.name="LexerError",t}return n}consumeRawStringLiteral(t){const e=this._current;this._current+=1;const r=t.length;for(;"'"!==t[this._current]&&this._current<r;){let e=this._current;"\\"!==t[e]||"\\"!==t[e+1]&&"'"!==t[e+1]?e+=1:e+=2,this._current=e}this._current+=1;const n=t.slice(e+1,this._current-1);return T(T(n,"\\\\","\\"),"\\'","'")}consumeNumber(t){const e=this._current;this._current+=1;const r=t.length;for(;s(t[this._current])&&this._current<r;)this._current+=1;return{start:e,value:parseInt(t.slice(e,this._current),10),type:p.TOK_NUMBER}}consumeLBracket(t){const e=this._current;return this._current+=1,"?"===t[this._current]?(this._current+=1,{start:e,type:p.TOK_FILTER,value:"[?"}):"]"===t[this._current]?(this._current+=1,{start:e,type:p.TOK_FLATTEN,value:"[]"}):{start:e,type:p.TOK_LBRACKET,value:"["}}consumeOrElse(t,e,r,n){const i=this._current;return this._current+=1,this._current<t.length&&t[this._current]===e?(this._current+=1,{start:i,type:n,value:t.slice(i,this._current)}):{start:i,type:r,value:t[i]}}consumeOperator(t){switch(t[this._current]){case"!":return this.consumeOrElse(t,"=",p.TOK_NOT,p.TOK_NE);case"<":return this.consumeOrElse(t,"=",p.TOK_LT,p.TOK_LTE);case">":return this.consumeOrElse(t,"=",p.TOK_GT,p.TOK_GTE);case"=":return this.consumeOrElse(t,"=",p.TOK_ASSIGN,p.TOK_EQ);case"&":return this.consumeOrElse(t,"&",p.TOK_EXPREF,p.TOK_AND);case"|":return this.consumeOrElse(t,"|",p.TOK_PIPE,p.TOK_OR);case"/":return this.consumeOrElse(t,"/",p.TOK_DIVIDE,p.TOK_DIV)}}consumeLiteral(t){this._current+=1;const e=this._current,r=t.length;for(;"`"!==t[this._current]&&this._current<r;){let e=this._current;"\\"!==t[e]||"\\"!==t[e+1]&&"`"!==t[e+1]?e+=1:e+=2,this._current=e}let n=t.slice(e,this._current).trimStart();n=n.replace("\\`","`");let i=null,s=!1;if(this.looksLikeJSON(n)&&([i,s]=this.parseJSON(n)),!s&&this._enable_legacy_literals&&([i,s]=this.parseJSON(`"${n}"`)),!s){const e=new Error(`Syntax error: unexpected end of JSON input or invalid format for a JSON literal: ${t[this._current]}`);throw e.name="LexerError",e}return this._current+=1,i}looksLikeJSON(t){if(""===t)return!1;if('[{"'.includes(t[0]))return!0;if(["true","false","null"].includes(t))return!0;if("-0123456789".includes(t[0])){const[e,r]=this.parseJSON(t);return r}return!1}parseJSON(t){try{return[JSON.parse(t),!0]}catch(t){return[null,!1]}}},y={[p.TOK_EOF]:0,[p.TOK_VARIABLE]:0,[p.TOK_UNQUOTEDIDENTIFIER]:0,[p.TOK_QUOTEDIDENTIFIER]:0,[p.TOK_RBRACKET]:0,[p.TOK_RPAREN]:0,[p.TOK_COMMA]:0,[p.TOK_RBRACE]:0,[p.TOK_NUMBER]:0,[p.TOK_CURRENT]:0,[p.TOK_EXPREF]:0,[p.TOK_ROOT]:0,[p.TOK_ASSIGN]:1,[p.TOK_PIPE]:1,[p.TOK_OR]:2,[p.TOK_AND]:3,[p.TOK_EQ]:5,[p.TOK_GT]:5,[p.TOK_LT]:5,[p.TOK_GTE]:5,[p.TOK_LTE]:5,[p.TOK_NE]:5,[p.TOK_MINUS]:6,[p.TOK_PLUS]:6,[p.TOK_DIV]:7,[p.TOK_DIVIDE]:7,[p.TOK_MODULO]:7,[p.TOK_MULTIPLY]:7,[p.TOK_FLATTEN]:9,[p.TOK_STAR]:20,[p.TOK_FILTER]:21,[p.TOK_DOT]:40,[p.TOK_NOT]:45,[p.TOK_LBRACE]:50,[p.TOK_LBRACKET]:55,[p.TOK_LPAREN]:60};class d{constructor(){this.index=0,this.tokens=[]}parse(t,e){this.loadTokens(t,e||{enable_legacy_literals:!1}),this.index=0;const r=this.expression(0);if(this.lookahead(0)!==p.TOK_EOF){const t=this.lookaheadToken(0);this.errorToken(t,`Syntax error: unexpected token type: ${t.type}, value: ${t.value}`)}return r}loadTokens(t,e){this.tokens=[...A.tokenize(t,e),{type:p.TOK_EOF,value:"",start:t.length}]}expression(t){const e=this.lookaheadToken(0);this.advance();let r=this.nud(e),n=this.lookahead(0);for(;t<y[n];)this.advance(),r=this.led(n,r),n=this.lookahead(0);return r}lookahead(t){return this.tokens[this.index+t].type}lookaheadToken(t){return this.tokens[this.index+t]}advance(){this.index+=1}nud(t){switch(t.type){case p.TOK_VARIABLE:return{type:"Variable",name:t.value};case p.TOK_LITERAL:return{type:"Literal",value:t.value};case p.TOK_UNQUOTEDIDENTIFIER:return d.isKeyword(t,"let")&&this.lookahead(0)===p.TOK_VARIABLE?this.parseLetExpression():{type:"Field",name:t.value};case p.TOK_QUOTEDIDENTIFIER:if(this.lookahead(0)===p.TOK_LPAREN)throw new Error("Syntax error: quoted identifier not allowed for function names.");return{type:"Field",name:t.value};case p.TOK_NOT:return{type:"NotExpression",child:this.expression(y.Not)};case p.TOK_MINUS:{const e=this.expression(y.Minus);return{type:"Unary",operator:t.type,operand:e}}case p.TOK_PLUS:{const e=this.expression(y.Plus);return{type:"Unary",operator:t.type,operand:e}}case p.TOK_STAR:{const t={type:"Identity"};return{type:"ValueProjection",left:t,right:this.lookahead(0)===p.TOK_RBRACKET?t:this.parseProjectionRHS(y.Star)}}case p.TOK_FILTER:return this.led(t.type,{type:"Identity"});case p.TOK_LBRACE:return this.parseMultiselectHash();case p.TOK_FLATTEN:return{type:"Projection",left:{type:"Flatten",child:{type:"Identity"}},right:this.parseProjectionRHS(y.Flatten)};case p.TOK_LBRACKET:if(this.lookahead(0)===p.TOK_NUMBER||this.lookahead(0)===p.TOK_COLON){const t=this.parseIndexExpression();return this.projectIfSlice({type:"Identity"},t)}if(this.lookahead(0)===p.TOK_STAR&&this.lookahead(1)===p.TOK_RBRACKET){this.advance(),this.advance();return{left:{type:"Identity"},right:this.parseProjectionRHS(y.Star),type:"Projection"}}return this.parseMultiselectList();case p.TOK_CURRENT:return{type:p.TOK_CURRENT};case p.TOK_ROOT:return{type:p.TOK_ROOT};case p.TOK_EXPREF:return{type:"ExpressionReference",child:this.expression(y.Expref)};case p.TOK_LPAREN:{const t=[];for(;this.lookahead(0)!==p.TOK_RPAREN;){let e;this.lookahead(0)===p.TOK_CURRENT?(e={type:p.TOK_CURRENT},this.advance()):e=this.expression(0),t.push(e)}return this.match(p.TOK_RPAREN),t[0]}default:this.errorToken(t)}}led(t,e){switch(t){case p.TOK_DOT:{const t=y.Dot;if(this.lookahead(0)!==p.TOK_STAR){return{type:"Subexpression",left:e,right:this.parseDotRHS(t)}}this.advance();return{type:"ValueProjection",left:e,right:this.parseProjectionRHS(t)}}case p.TOK_PIPE:return{type:"Pipe",left:e,right:this.expression(y.Pipe)};case p.TOK_OR:return{type:"OrExpression",left:e,right:this.expression(y.Or)};case p.TOK_AND:return{type:"AndExpression",left:e,right:this.expression(y.And)};case p.TOK_LPAREN:if("Field"!==e.type)throw new Error("Syntax error: expected a Field node");return{name:e.name,type:"Function",children:this.parseCommaSeparatedExpressionsUntilToken(p.TOK_RPAREN)};case p.TOK_FILTER:{const t=this.expression(0);this.match(p.TOK_RBRACKET);return{type:"FilterProjection",left:e,right:this.lookahead(0)===p.TOK_FLATTEN?{type:"Identity"}:this.parseProjectionRHS(y.Filter),condition:t}}case p.TOK_FLATTEN:return{type:"Projection",left:{type:"Flatten",child:e},right:this.parseProjectionRHS(y.Flatten)};case p.TOK_ASSIGN:{const t=e,r=this.expression(0);return{type:"Binding",variable:t.name,reference:r}}case p.TOK_EQ:case p.TOK_NE:case p.TOK_GT:case p.TOK_GTE:case p.TOK_LT:case p.TOK_LTE:return this.parseComparator(e,t);case p.TOK_PLUS:case p.TOK_MINUS:case p.TOK_MULTIPLY:case p.TOK_STAR:case p.TOK_DIVIDE:case p.TOK_MODULO:case p.TOK_DIV:return this.parseArithmetic(e,t);case p.TOK_LBRACKET:{const t=this.lookaheadToken(0);if(t.type===p.TOK_NUMBER||t.type===p.TOK_COLON){const t=this.parseIndexExpression();return this.projectIfSlice(e,t)}this.match(p.TOK_STAR),this.match(p.TOK_RBRACKET);return{type:"Projection",left:e,right:this.parseProjectionRHS(y.Star)}}default:return this.errorToken(this.lookaheadToken(0))}}static isKeyword(t,e){return t.type===p.TOK_UNQUOTEDIDENTIFIER&&t.value===e}match(t){if(this.lookahead(0)!==t){const e=this.lookaheadToken(0);this.errorToken(e,`Syntax error: expected ${t}, got: ${e.type}`)}else this.advance()}errorToken(t,e=""){const r=new Error(e||`Syntax error: invalid token (${t.type}): "${t.value}"`);throw r.name="ParserError",r}parseIndexExpression(){if(this.lookahead(0)===p.TOK_COLON||this.lookahead(1)===p.TOK_COLON)return this.parseSliceExpression();const t=Number(this.lookaheadToken(0).value);return this.advance(),this.match(p.TOK_RBRACKET),{type:"Index",value:t}}projectIfSlice(t,e){const r={type:"IndexExpression",left:t,right:e};return"Slice"===e.type?{left:r,right:this.parseProjectionRHS(y.Star),type:"Projection"}:r}parseSliceExpression(){const t=[null,null,null];let e=0,r=this.lookaheadToken(0);for(;r.type!=p.TOK_RBRACKET&&e<3;){if(r.type===p.TOK_COLON)e++,3===e&&this.errorToken(this.lookaheadToken(0),"Syntax error, too many colons in slice expression"),this.advance();else if(r.type===p.TOK_NUMBER){const r=this.lookaheadToken(0).value;t[e]=r,this.advance()}else{const t=this.lookaheadToken(0);this.errorToken(t,`Syntax error, unexpected token: ${t.value}(${t.type})`)}r=this.lookaheadToken(0)}this.match(p.TOK_RBRACKET);const[n,i,s]=t;return{type:"Slice",start:n,stop:i,step:s}}parseLetExpression(){const t=this.parseCommaSeparatedExpressionsUntilKeyword("in"),e=this.expression(0);return{type:"LetExpression",bindings:t.map((t=>t)),expression:e}}parseCommaSeparatedExpressionsUntilKeyword(t){return this.parseCommaSeparatedExpressionsUntil((()=>d.isKeyword(this.lookaheadToken(0),t)),(()=>{this.advance()}))}parseCommaSeparatedExpressionsUntilToken(t){return this.parseCommaSeparatedExpressionsUntil((()=>this.lookahead(0)===t),(()=>this.match(t)))}parseCommaSeparatedExpressionsUntil(t,e){const r=[];let n;for(;!t();)n=this.expression(0),this.lookahead(0)===p.TOK_COMMA&&this.match(p.TOK_COMMA),r.push(n);return e(),r}parseComparator(t,e){return{type:"Comparator",name:e,left:t,right:this.expression(y[e])}}parseArithmetic(t,e){return{type:"Arithmetic",operator:e,left:t,right:this.expression(y[e])}}parseDotRHS(t){const e=this.lookahead(0);if([p.TOK_UNQUOTEDIDENTIFIER,p.TOK_QUOTEDIDENTIFIER,p.TOK_STAR].includes(e))return this.expression(t);if(e===p.TOK_LBRACKET)return this.match(p.TOK_LBRACKET),this.parseMultiselectList();if(e===p.TOK_LBRACE)return this.match(p.TOK_LBRACE),this.parseMultiselectHash();const r=this.lookaheadToken(0);this.errorToken(r,`Syntax error, unexpected token: ${r.value}(${r.type})`)}parseProjectionRHS(t){if(y[this.lookahead(0)]<10)return{type:"Identity"};if(this.lookahead(0)===p.TOK_LBRACKET)return this.expression(t);if(this.lookahead(0)===p.TOK_FILTER)return this.expression(t);if(this.lookahead(0)===p.TOK_DOT)return this.match(p.TOK_DOT),this.parseDotRHS(t);const e=this.lookaheadToken(0);this.errorToken(e,`Syntax error, unexpected token: ${e.value}(${e.type})`)}parseMultiselectList(){const t=[];for(;this.lookahead(0)!==p.TOK_RBRACKET;){const e=this.expression(0);if(t.push(e),this.lookahead(0)===p.TOK_COMMA&&(this.match(p.TOK_COMMA),this.lookahead(0)===p.TOK_RBRACKET))throw new Error("Syntax error: unexpected token Rbracket")}return this.match(p.TOK_RBRACKET),{type:"MultiSelectList",children:t}}parseMultiselectHash(){const t=[],e=[p.TOK_UNQUOTEDIDENTIFIER,p.TOK_QUOTEDIDENTIFIER];let r,n,i;for(;;){if(r=this.lookaheadToken(0),!e.includes(r.type))throw new Error(`Syntax error: expecting an identifier token, got: ${r.type}`);if(n=r.value,this.advance(),this.match(p.TOK_COLON),i=this.expression(0),t.push({value:i,type:"KeyValuePair",name:n}),this.lookahead(0)===p.TOK_COMMA)this.match(p.TOK_COMMA);else if(this.lookahead(0)===p.TOK_RBRACE){this.match(p.TOK_RBRACE);break}}return{type:"MultiSelectHash",children:t}}}const P=new d;class Y{constructor(t){this._text=t}get string(){return this._text}get length(){return this.codePoints.length}compareTo(t){return Y.compare(this,new Y(t))}static get comparer(){return(t,e)=>new Y(t).compareTo(e)}static compare(t,e){const r=t.codePoints,n=e.codePoints;for(let t=0;t<Math.min(r.length,n.length);t++)if(r[t]!==n[t])return r[t]-n[t]>0?1:-1;return r.length-n.length>0?1:-1}reverse(){return String.fromCodePoint(...this.codePoints.reverse())}get codePoints(){return[...this._text].map((t=>t.codePointAt(0)))}}var N;!function(t){t[t.TYPE_NUMBER=0]="TYPE_NUMBER",t[t.TYPE_ANY=1]="TYPE_ANY",t[t.TYPE_STRING=2]="TYPE_STRING",t[t.TYPE_ARRAY=3]="TYPE_ARRAY",t[t.TYPE_OBJECT=4]="TYPE_OBJECT",t[t.TYPE_BOOLEAN=5]="TYPE_BOOLEAN",t[t.TYPE_EXPREF=6]="TYPE_EXPREF",t[t.TYPE_NULL=7]="TYPE_NULL",t[t.TYPE_ARRAY_NUMBER=8]="TYPE_ARRAY_NUMBER",t[t.TYPE_ARRAY_STRING=9]="TYPE_ARRAY_STRING",t[t.TYPE_ARRAY_OBJECT=10]="TYPE_ARRAY_OBJECT",t[t.TYPE_ARRAY_ARRAY=11]="TYPE_ARRAY_ARRAY"}(N||(N={}));class g{constructor(t){this.TYPE_NAME_TABLE={[N.TYPE_NUMBER]:"number",[N.TYPE_ANY]:"any",[N.TYPE_STRING]:"string",[N.TYPE_ARRAY]:"array",[N.TYPE_OBJECT]:"object",[N.TYPE_BOOLEAN]:"boolean",[N.TYPE_EXPREF]:"expression",[N.TYPE_NULL]:"null",[N.TYPE_ARRAY_NUMBER]:"Array<number>",[N.TYPE_ARRAY_OBJECT]:"Array<object>",[N.TYPE_ARRAY_STRING]:"Array<string>",[N.TYPE_ARRAY_ARRAY]:"Array<Array<any>>"},this.functionAbs=([t])=>Math.abs(t),this.functionAvg=([t])=>{if(!t||0==t.length)return null;let e=0;for(let r=0;r<t.length;r+=1)e+=t[r];return e/t.length},this.functionCeil=([t])=>Math.ceil(t),this.functionContains=([t,e])=>{if(Array.isArray(t)){return t.includes(e)}if("string"==typeof t){if("string"==typeof e)return t.includes(e)}return null},this.functionEndsWith=t=>{const[e,r]=t;return e.includes(r,e.length-r.length)},this.functionFindFirst=t=>((t,e,r,n)=>{if(!t||!e)return null;r=Math.max(o(r=r||0),0),n=Math.min(o(n=n||t.length),t.length);const i=t.slice(r,n).indexOf(e);return-1===i?null:i+r})(t[0],t[1],t.length>2&&t[2]||void 0,t.length>3&&t[3]||void 0),this.functionFindLast=t=>((t,e,r,n)=>{if(!t||!e)return null;r=Math.max(o(r=r||0),0),n=Math.min(o(n=n||t.length),t.length);const i=t.slice(r,n).lastIndexOf(e);return-1===i?null:i+r})(t[0],t[1],t.length>2&&t[2]||void 0,t.length>3&&t[3]||void 0),this.functionFloor=([t])=>Math.floor(t),this.functionFromItems=([t])=>(t.map((t=>{if(2!=t.length||"string"!=typeof t[0])throw new Error("invalid value, each array must contain two elements, a pair of string and value")})),Object.fromEntries(t)),this.functionGroupBy=([t,e])=>{const r=this.createKeyFunction(e,[N.TYPE_STRING]);return t.reduce(((t,e)=>{const n=r(null!=e?e:{});return(t[n]=t[n]||[]).push(e),t}),{})},this.functionItems=([t])=>Object.entries(t),this.functionJoin=t=>{const[e,r]=t;return r.join(e)},this.functionKeys=([t])=>Object.keys(t),this.functionLength=([t])=>"string"==typeof t?new Y(t).length:Array.isArray(t)?t.length:Object.keys(t).length,this.functionLower=([t])=>(t=>t.toLowerCase())(t),this.functionMap=([t,e])=>{if(!this._interpreter)return[];const r=[],n=this._interpreter;for(let i=0;i<e.length;i+=1)r.push(n.visit(t,e[i]));return r},this.functionMax=([t])=>{if(!t.length)return null;if(this.getTypeName(t[0])===N.TYPE_NUMBER)return Math.max(...t);const e=t;let r=e[0];for(let t=1;t<e.length;t+=1)r.localeCompare(e[t])<0&&(r=e[t]);return r},this.functionMaxBy=t=>{const e=t[1],r=t[0],n=this.createKeyFunction(e,[N.TYPE_NUMBER,N.TYPE_STRING]);let i,s,o=-1/0;for(let t=0;t<r.length;t+=1)s=n&&n(r[t]),void 0!==s&&s>o&&(o=s,i=r[t]);return i||null},this.functionMerge=t=>{let e={};for(let r=0;r<t.length;r+=1){const n=t[r];e=Object.assign(e,n)}return e},this.functionMin=([t])=>{if(!t.length)return null;if(this.getTypeName(t[0])===N.TYPE_NUMBER)return Math.min(...t);const e=t;let r=e[0];for(let t=1;t<e.length;t+=1)e[t].localeCompare(r)<0&&(r=e[t]);return r},this.functionMinBy=t=>{const e=t[1],r=t[0],n=this.createKeyFunction(e,[N.TYPE_NUMBER,N.TYPE_STRING]);let i,s,o=1/0;for(let t=0;t<r.length;t+=1)s=n&&n(r[t]),void 0!==s&&s<o&&(o=s,i=r[t]);return i||null},this.functionNotNull=t=>{for(let e=0;e<t.length;e+=1)if(this.getTypeName(t[e])!==N.TYPE_NULL)return t[e];return null},this.functionPadLeft=t=>((t,e,r)=>(r=h("pad_left",e,r),t&&t.padStart(e,r)||""))(t[0],t[1],t.length>2&&t[2]||void 0),this.functionPadRight=t=>((t,e,r)=>(r=h("pad_right",e,r),t&&t.padEnd(e,r)||""))(t[0],t[1],t.length>2&&t[2]||void 0),this.functionReplace=t=>{const e=t[0],r=t[1],n=t[2];return T(e,r,n,t.length>3?t[3]:void 0)},this.functionSplit=t=>((t,e,r)=>{if(0==t.length&&0===e.length)return[];if(null==r)return t.split(e);if(a(r),0===r)return[t];const n=t.split(e);return[...n.slice(0,r),n.slice(r).join(e)]})(t[0],t[1],t.length>2?t[2]:void 0),this.functionReverse=([t])=>{if(this.getTypeName(t)===N.TYPE_STRING)return new Y(t).reverse();const e=t.slice(0);return e.reverse(),e},this.functionSort=([t])=>0==t.length?t:"string"==typeof t[0]?[...t].sort(Y.comparer):[...t].sort(),this.functionSortBy=t=>{const e=t[0].slice(0);if(0===e.length)return e;const r=this._interpreter,n=t[1],i=this.getTypeName(r.visit(n,e[0]));if(void 0!==i&&![N.TYPE_NUMBER,N.TYPE_STRING].includes(i))throw new Error(`Invalid type: unexpected type (${this.TYPE_NAME_TABLE[i]})`);function s(t,e){throw new Error(`Invalid type: expected (${t.TYPE_NAME_TABLE[i]}), received ${t.TYPE_NAME_TABLE[t.getTypeName(e)]}`)}return e.sort(((t,e)=>{const o=r.visit(n,t),a=r.visit(n,e);return this.getTypeName(o)!==i?s(this,o):this.getTypeName(a)!==i&&s(this,a),i===N.TYPE_STRING?Y.comparer(o,a):o-a}))},this.functionStartsWith=([t,e])=>t.startsWith(e),this.functionSum=([t])=>t.reduce(((t,e)=>t+e),0),this.functionToArray=([t])=>this.getTypeName(t)===N.TYPE_ARRAY?t:[t],this.functionToNumber=([t])=>{const e=this.getTypeName(t);let r;return e===N.TYPE_NUMBER?t:e!==N.TYPE_STRING||(r=+t,isNaN(r))?null:r},this.functionToString=([t])=>this.getTypeName(t)===N.TYPE_STRING?t:JSON.stringify(t),this.functionTrim=t=>((t,e)=>_(l(t,e),e))(t[0],t.length>1?t[1]:void 0),this.functionTrimLeft=t=>{const e=t[0];return _(e,t.length>1?t[1]:void 0)},this.functionTrimRight=t=>{const e=t[0];return l(e,t.length>1?t[1]:void 0)},this.functionType=([t])=>{switch(this.getTypeName(t)){case N.TYPE_NUMBER:return"number";case N.TYPE_STRING:return"string";case N.TYPE_ARRAY:return"array";case N.TYPE_OBJECT:return"object";case N.TYPE_BOOLEAN:return"boolean";case N.TYPE_NULL:return"null";default:throw new Error("invalid-type")}},this.functionUpper=([t])=>(t=>t.toUpperCase())(t),this.functionValues=([t])=>Object.values(t),this.functionZip=t=>{const e=Math.min(...t.map((t=>t.length)));return Array(e).fill(null).map(((e,r)=>t.map((t=>t[r]))))},this.functionTable={abs:{_func:this.functionAbs,_signature:[{types:[N.TYPE_NUMBER]}]},avg:{_func:this.functionAvg,_signature:[{types:[N.TYPE_ARRAY_NUMBER]}]},ceil:{_func:this.functionCeil,_signature:[{types:[N.TYPE_NUMBER]}]},contains:{_func:this.functionContains,_signature:[{types:[N.TYPE_STRING,N.TYPE_ARRAY]},{types:[N.TYPE_ANY]}]},ends_with:{_func:this.functionEndsWith,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING]}]},find_first:{_func:this.functionFindFirst,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING]},{types:[N.TYPE_NUMBER],optional:!0},{types:[N.TYPE_NUMBER],optional:!0}]},find_last:{_func:this.functionFindLast,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING]},{types:[N.TYPE_NUMBER],optional:!0},{types:[N.TYPE_NUMBER],optional:!0}]},floor:{_func:this.functionFloor,_signature:[{types:[N.TYPE_NUMBER]}]},from_items:{_func:this.functionFromItems,_signature:[{types:[N.TYPE_ARRAY_ARRAY]}]},group_by:{_func:this.functionGroupBy,_signature:[{types:[N.TYPE_ARRAY]},{types:[N.TYPE_EXPREF]}]},items:{_func:this.functionItems,_signature:[{types:[N.TYPE_OBJECT]}]},join:{_func:this.functionJoin,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_ARRAY_STRING]}]},keys:{_func:this.functionKeys,_signature:[{types:[N.TYPE_OBJECT]}]},length:{_func:this.functionLength,_signature:[{types:[N.TYPE_STRING,N.TYPE_ARRAY,N.TYPE_OBJECT]}]},lower:{_func:this.functionLower,_signature:[{types:[N.TYPE_STRING]}]},map:{_func:this.functionMap,_signature:[{types:[N.TYPE_EXPREF]},{types:[N.TYPE_ARRAY]}]},max:{_func:this.functionMax,_signature:[{types:[N.TYPE_ARRAY_NUMBER,N.TYPE_ARRAY_STRING]}]},max_by:{_func:this.functionMaxBy,_signature:[{types:[N.TYPE_ARRAY]},{types:[N.TYPE_EXPREF]}]},merge:{_func:this.functionMerge,_signature:[{types:[N.TYPE_OBJECT],variadic:!0}]},min:{_func:this.functionMin,_signature:[{types:[N.TYPE_ARRAY_NUMBER,N.TYPE_ARRAY_STRING]}]},min_by:{_func:this.functionMinBy,_signature:[{types:[N.TYPE_ARRAY]},{types:[N.TYPE_EXPREF]}]},not_null:{_func:this.functionNotNull,_signature:[{types:[N.TYPE_ANY],variadic:!0}]},pad_left:{_func:this.functionPadLeft,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_NUMBER]},{types:[N.TYPE_STRING],optional:!0}]},pad_right:{_func:this.functionPadRight,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_NUMBER]},{types:[N.TYPE_STRING],optional:!0}]},replace:{_func:this.functionReplace,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING]},{types:[N.TYPE_NUMBER],optional:!0}]},split:{_func:this.functionSplit,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING]},{types:[N.TYPE_NUMBER],optional:!0}]},reverse:{_func:this.functionReverse,_signature:[{types:[N.TYPE_STRING,N.TYPE_ARRAY]}]},sort:{_func:this.functionSort,_signature:[{types:[N.TYPE_ARRAY_STRING,N.TYPE_ARRAY_NUMBER]}]},sort_by:{_func:this.functionSortBy,_signature:[{types:[N.TYPE_ARRAY]},{types:[N.TYPE_EXPREF]}]},starts_with:{_func:this.functionStartsWith,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING]}]},sum:{_func:this.functionSum,_signature:[{types:[N.TYPE_ARRAY_NUMBER]}]},to_array:{_func:this.functionToArray,_signature:[{types:[N.TYPE_ANY]}]},to_number:{_func:this.functionToNumber,_signature:[{types:[N.TYPE_ANY]}]},to_string:{_func:this.functionToString,_signature:[{types:[N.TYPE_ANY]}]},trim:{_func:this.functionTrim,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING],optional:!0}]},trim_left:{_func:this.functionTrimLeft,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING],optional:!0}]},trim_right:{_func:this.functionTrimRight,_signature:[{types:[N.TYPE_STRING]},{types:[N.TYPE_STRING],optional:!0}]},type:{_func:this.functionType,_signature:[{types:[N.TYPE_ANY]}]},upper:{_func:this.functionUpper,_signature:[{types:[N.TYPE_STRING]}]},values:{_func:this.functionValues,_signature:[{types:[N.TYPE_OBJECT]}]},zip:{_func:this.functionZip,_signature:[{types:[N.TYPE_ARRAY],variadic:!0}]}},this._interpreter=t}registerFunction(t,e,r){if(t in this.functionTable)throw new Error(`Function already defined: ${t}()`);this.functionTable[t]={_func:e.bind(this),_signature:r}}callFunction(t,e){const r=this.functionTable[t];if(void 0===r)throw new Error(`Unknown function: ${t}()`);return this.validateArgs(t,e,r._signature),r._func.call(this,e)}validateInputSignatures(t,e){for(let r=0;r<e.length;r+=1)if("variadic"in e[r]&&r!==e.length-1)throw new Error(`Invalid arity: ${t}() 'variadic' argument ${r+1} must occur last`)}validateArgs(t,e,r){var n,i;let s;this.validateInputSignatures(t,r);const o=r.filter((t=>{var e;return null!==(e=!t.optional)&&void 0!==e&&e})).length,a=null!==(i=null===(n=r[r.length-1])||void 0===n?void 0:n.variadic)&&void 0!==i&&i,u=e.length<o,c=e.length>r.length,h=u&&(!a&&o>1||a)?"at least ":"";if(a&&u||!a&&(u||c))throw s=r.length>1,new Error(`Invalid arity: ${t}() takes ${h}${o} argument${s?"s":""} but received ${e.length}`);let T,_,l;for(let n=0;n<r.length;n+=1){let i;for(l=!1,T=r[n].types,_=this.getTypeName(e[n]),i=0;i<T.length;i+=1)if(void 0!==_&&this.typeMatches(_,T[i],e[n])){l=!0;break}if(!l&&void 0!==_){const e=T.map((t=>this.TYPE_NAME_TABLE[t])).join(" | ");throw new Error(`Invalid type: ${t}() expected argument ${n+1} to be type (${e}) but received type ${this.TYPE_NAME_TABLE[_]} instead.`)}}}typeMatches(t,e,r){if(e===N.TYPE_ANY)return!0;if(e!==N.TYPE_ARRAY_STRING&&e!==N.TYPE_ARRAY_NUMBER&&e!==N.TYPE_ARRAY_OBJECT&&e!==N.TYPE_ARRAY_ARRAY&&e!==N.TYPE_ARRAY)return t===e;if(e===N.TYPE_ARRAY)return t===N.TYPE_ARRAY;if(t===N.TYPE_ARRAY){let t;e===N.TYPE_ARRAY_NUMBER?t=N.TYPE_NUMBER:e===N.TYPE_ARRAY_OBJECT?t=N.TYPE_OBJECT:e===N.TYPE_ARRAY_STRING?t=N.TYPE_STRING:e===N.TYPE_ARRAY_ARRAY&&(t=N.TYPE_ARRAY);const n=r;for(let e=0;e<n.length;e+=1){const r=this.getTypeName(n[e]);if(void 0!==r&&void 0!==t&&!this.typeMatches(r,t,n[e]))return!1}return!0}return!1}getTypeName(t){switch(Object.prototype.toString.call(t)){case"[object String]":return N.TYPE_STRING;case"[object Number]":return N.TYPE_NUMBER;case"[object Array]":return N.TYPE_ARRAY;case"[object Boolean]":return N.TYPE_BOOLEAN;case"[object Null]":return N.TYPE_NULL;case"[object Object]":return t.expref?N.TYPE_EXPREF:N.TYPE_OBJECT;default:return}}createKeyFunction(t,e){const r=this._interpreter;return n=>{const i=r.visit(t,n);if(!e.includes(this.getTypeName(i))){const t=`Invalid type: expected one of (${e.map((t=>this.TYPE_NAME_TABLE[t])).join(" | ")}), received ${this.TYPE_NAME_TABLE[this.getTypeName(i)]}`;throw new Error(t)}return i}}}class K{constructor(){this.inner=void 0,this.data={}}withScope(t){const e=new K;return e.inner=this,e.data=t,e}getValue(t){if(t in this.data){const e=this.data[t];if(null!=e)return e}return this.inner?this.inner.getValue(t):null}}class m{constructor(){this._rootValue=null,this.runtime=new g(this),this._scope=new K}withScope(t){const e=new m;return e._rootValue=this._rootValue,e._scope=this._scope.withScope(t),e}search(t,e){return this._rootValue=e,this._scope=new K,this.visit(t,e)}visit(t,e){var i,s,o,a,h;switch(t.type){case"Field":const T=t.name;let _=null;return null===e||"object"!=typeof e||Array.isArray(e)||(_=null!==(i=e[T])&&void 0!==i?i:null),_;case"LetExpression":{const{bindings:r,expression:n}=t;let i={};return r.forEach((t=>{const r=this.visit(t,e);i=Object.assign(Object.assign({},i),r)})),this.withScope(i).visit(n,e)}case"Binding":{const{variable:r,reference:n}=t;return{[r]:this.visit(n,e)}}case"Variable":{const e=t.name,r=null!==(s=this._scope.getValue(e))&&void 0!==s?s:null;if(null==r)throw new Error(`Error referencing undefined variable ${e}`);return r}case"IndexExpression":return this.visit(t.right,this.visit(t.left,e));case"Subexpression":{const r=this.visit(t.left,e);return null!=r&&this.visit(t.right,r)||null}case"Index":{if(!Array.isArray(e))return null;const r=t.value<0?e.length+t.value:t.value;return null!==(o=e[r])&&void 0!==o?o:null}case"Slice":{if(!Array.isArray(e)&&"string"!=typeof e)return null;const{start:r,stop:n,step:i}=this.computeSliceParams(e.length,t);if("string"==typeof e){const t=[...e];return this.slice(t,r,n,i).join("")}return this.slice(e,r,n,i)}case"Projection":{const{left:r,right:n}=t;let i=!1;"IndexExpression"===r.type&&"Slice"===r.right.type&&(i=!0);const s=this.visit(r,e);if(i&&"string"==typeof s)return this.visit(n,s);if(!Array.isArray(s))return null;const o=[];for(const t of s){const e=this.visit(n,t);null!==e&&o.push(e)}return o}case"ValueProjection":{const{left:r,right:n}=t,i=this.visit(r,e);if(null===i||"object"!=typeof i||Array.isArray(i))return null;const s=[],o=Object.values(i);for(const t of o){const e=this.visit(n,t);null!==e&&s.push(e)}return s}case"FilterProjection":{const{left:r,right:i,condition:s}=t,o=this.visit(r,e);if(!Array.isArray(o))return null;const a=[];for(const t of o){const e=this.visit(s,t);if(n(e))continue;const r=this.visit(i,t);null!==r&&a.push(r)}return a}case"Arithmetic":{const r=this.visit(t.left,e),n=this.visit(t.right,e);switch(t.operator){case p.TOK_PLUS:return u(a=r,h=n),a+h;case p.TOK_MINUS:return((t,e)=>(u(t,e),t-e))(r,n);case p.TOK_MULTIPLY:case p.TOK_STAR:return((t,e)=>(u(t,e),t*e))(r,n);case p.TOK_DIVIDE:return((t,e)=>(u(t,e),t/c(e)))(r,n);case p.TOK_MODULO:return((t,e)=>(u(t,e),t%e))(r,n);case p.TOK_DIV:return((t,e)=>(u(t,e),Math.floor(t/c(e))))(r,n);default:throw new Error(`Syntax error: unknown arithmetic operator: ${t.operator}`)}}case"Unary":{const r=this.visit(t.operand,e);switch(t.operator){case p.TOK_PLUS:return u(r),r;case p.TOK_MINUS:return u(r),-r;default:throw new Error(`Syntax error: unknown arithmetic operator: ${t.operator}`)}}case"Comparator":{const n=this.visit(t.left,e),i=this.visit(t.right,e);switch(t.name){case"EQ":return r(n,i);case"NE":return!r(n,i)}if("number"!=typeof n||"number"!=typeof i)return null;switch(t.name){case"GT":return n>i;case"GTE":return n>=i;case"LT":return n<i;case"LTE":return n<=i}}case"Flatten":{const r=this.visit(t.child,e);return Array.isArray(r)?r.flat():null}case"Root":return this._rootValue;case"MultiSelectList":{const r=[];for(const n of t.children)r.push(this.visit(n,e));return r}case"MultiSelectHash":{const r={};for(const n of t.children)r[n.name]=this.visit(n.value,e);return r}case"OrExpression":{const r=this.visit(t.left,e);return n(r)?this.visit(t.right,e):r}case"AndExpression":{const r=this.visit(t.left,e);return n(r)?r:this.visit(t.right,e)}case"NotExpression":return n(this.visit(t.child,e));case"Literal":return t.value;case"Pipe":return this.visit(t.right,this.visit(t.left,e));case"Function":{const r=[];for(const n of t.children)r.push(this.visit(n,e));return this.runtime.callFunction(t.name,r)}case"ExpressionReference":return Object.assign({expref:!0},t.child);case"Current":case"Identity":return e}}computeSliceParams(t,e){let{start:r,stop:n,step:i}=e;if(null===i)i=1;else if(0===i){const t=new Error("Invalid value: slice step cannot be 0");throw t.name="RuntimeError",t}return r=null===r?i<0?t-1:0:this.capSliceRange(t,r,i),n=null===n?i<0?-1:t:this.capSliceRange(t,n,i),{start:r,stop:n,step:i}}capSliceRange(t,e,r){let n=e;return n<0?(n+=t,n<0&&(n=r<0?-1:0)):n>=t&&(n=r<0?t-1:t),n}slice(t,e,r,n){const i=[];if(n>0)for(let s=e;s<r;s+=n)i.push(t[s]);else for(let s=e;s>r;s+=n)i.push(t[s]);return i}}const I=new m,S=N.TYPE_ANY,v=N.TYPE_ARRAY,L=N.TYPE_ARRAY_ARRAY,M=N.TYPE_ARRAY_NUMBER,B=N.TYPE_ARRAY_OBJECT,x=N.TYPE_ARRAY_STRING,U=N.TYPE_BOOLEAN,k=N.TYPE_EXPREF,w=N.TYPE_NULL,C=N.TYPE_NUMBER,b=N.TYPE_OBJECT,F=N.TYPE_STRING;function G(t,e){return P.parse(t,e)}function D(t,e){return A.tokenize(t,e)}const j=(t,e,r)=>{I.runtime.registerFunction(t,e,r)};function $(t,e,r){const n=P.parse(e,r);return I.search(n,t)}const J=I,V={compile:G,registerFunction:j,search:$,tokenize:D,TreeInterpreter:J,TYPE_ANY:S,TYPE_ARRAY_NUMBER:M,TYPE_ARRAY_STRING:x,TYPE_ARRAY:v,TYPE_BOOLEAN:U,TYPE_EXPREF:k,TYPE_NULL:w,TYPE_NUMBER:C,TYPE_OBJECT:b,TYPE_STRING:F};t.Scope=function(){return new K},t.TYPE_ANY=S,t.TYPE_ARRAY=v,t.TYPE_ARRAY_ARRAY=L,t.TYPE_ARRAY_NUMBER=M,t.TYPE_ARRAY_OBJECT=B,t.TYPE_ARRAY_STRING=x,t.TYPE_BOOLEAN=U,t.TYPE_EXPREF=k,t.TYPE_NULL=w,t.TYPE_NUMBER=C,t.TYPE_OBJECT=b,t.TYPE_STRING=F,t.TreeInterpreter=J,t.compile=G,t.default=V,t.jmespath=V,t.registerFunction=j,t.search=$,t.tokenize=D,Object.defineProperty(t,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=jmespath.umd.min.js.map