@jmespath-community/jmespath 1.1.2 → 1.1.4

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;
@@ -640,18 +717,10 @@
640
717
  return { type: 'ExpressionReference', child };
641
718
  }
642
719
  case Token.TOK_LPAREN: {
720
+ console.log('nud::TOK_LPAREN');
643
721
  const args = [];
644
- while (this.lookahead(0) !== Token.TOK_RPAREN) {
645
- let expression;
646
- if (this.lookahead(0) === Token.TOK_CURRENT) {
647
- expression = { type: Token.TOK_CURRENT };
648
- this.advance();
649
- }
650
- else {
651
- expression = this.expression(0);
652
- }
653
- args.push(expression);
654
- }
722
+ let expression = this.expression(0);
723
+ args.push(expression);
655
724
  this.match(Token.TOK_RPAREN);
656
725
  return args[0];
657
726
  }
@@ -971,83 +1040,6 @@
971
1040
  }
972
1041
  }
973
1042
 
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
1043
  var InputArgument;
1052
1044
  (function (InputArgument) {
1053
1045
  InputArgument[InputArgument["TYPE_NUMBER"] = 0] = "TYPE_NUMBER";
@@ -1825,18 +1817,19 @@
1825
1817
  },
1826
1818
  };
1827
1819
  this._interpreter = interpreter;
1820
+ this._functionTable = this.functionTable;
1828
1821
  }
1829
1822
  registerFunction(name, customFunction, signature) {
1830
- if (name in this.functionTable) {
1823
+ if (name in this._functionTable) {
1831
1824
  throw new Error(`Function already defined: ${name}()`);
1832
1825
  }
1833
- this.functionTable[name] = {
1826
+ this._functionTable[name] = {
1834
1827
  _func: customFunction.bind(this),
1835
1828
  _signature: signature,
1836
1829
  };
1837
1830
  }
1838
1831
  callFunction(name, resolvedArgs) {
1839
- const functionEntry = this.functionTable[name];
1832
+ const functionEntry = this._functionTable[name];
1840
1833
  if (functionEntry === undefined) {
1841
1834
  throw new Error(`Unknown function: ${name}()`);
1842
1835
  }
@@ -1854,7 +1847,7 @@
1854
1847
  var _a, _b;
1855
1848
  let pluralized;
1856
1849
  this.validateInputSignatures(name, signature);
1857
- const numberOfRequiredArgs = signature.filter(argSignature => { var _a; return (_a = !argSignature.optional) !== null && _a !== void 0 ? _a : false; }).length;
1850
+ const numberOfRequiredArgs = signature.filter(argSignature => { var _a; return !((_a = argSignature.optional) !== null && _a !== void 0 ? _a : false); }).length;
1858
1851
  const lastArgIsVariadic = (_b = (_a = signature[signature.length - 1]) === null || _a === void 0 ? void 0 : _a.variadic) !== null && _b !== void 0 ? _b : false;
1859
1852
  const tooFewArgs = args.length < numberOfRequiredArgs;
1860
1853
  const tooManyArgs = args.length > signature.length;
@@ -1998,6 +1991,7 @@
1998
1991
  }
1999
1992
  withScope(scope) {
2000
1993
  const interpreter = new TreeInterpreter$1();
1994
+ interpreter.runtime._functionTable = this.runtime._functionTable;
2001
1995
  interpreter._rootValue = this._rootValue;
2002
1996
  interpreter._scope = this._scope.withScope(scope);
2003
1997
  return interpreter;
@@ -2008,7 +2002,7 @@
2008
2002
  return this.visit(node, value);
2009
2003
  }
2010
2004
  visit(node, value) {
2011
- var _a, _b, _c;
2005
+ var _a, _b, _c, _d;
2012
2006
  switch (node.type) {
2013
2007
  case 'Field':
2014
2008
  const identifier = node.name;
@@ -2043,14 +2037,14 @@
2043
2037
  return this.visit(node.right, this.visit(node.left, value));
2044
2038
  case 'Subexpression': {
2045
2039
  const result = this.visit(node.left, value);
2046
- return (result != null && this.visit(node.right, result)) || null;
2040
+ return result != null ? (_c = this.visit(node.right, result)) !== null && _c !== void 0 ? _c : null : null;
2047
2041
  }
2048
2042
  case 'Index': {
2049
2043
  if (!Array.isArray(value)) {
2050
2044
  return null;
2051
2045
  }
2052
2046
  const index = node.value < 0 ? value.length + node.value : node.value;
2053
- return (_c = value[index]) !== null && _c !== void 0 ? _c : null;
2047
+ return (_d = value[index]) !== null && _d !== void 0 ? _d : null;
2054
2048
  }
2055
2049
  case 'Slice': {
2056
2050
  if (!Array.isArray(value) && typeof value !== 'string') {
@@ -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 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: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:{console.log("nud::TOK_LPAREN");const t=[];let e=this.expression(0);return t.push(e),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,this._functionTable=this.functionTable}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.runtime._functionTable=this.runtime._functionTable,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,T;switch(t.type){case"Field":const _=t.name;let l=null;return null===e||"object"!=typeof e||Array.isArray(e)||(l=null!==(i=e[_])&&void 0!==i?i:null),l;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&&null!==(o=this.visit(t.right,r))&&void 0!==o?o:null}case"Index":{if(!Array.isArray(e))return null;const r=t.value<0?e.length+t.value:t.value;return null!==(a=e[r])&&void 0!==a?a: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(h=r,T=n),h+T;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,b=N.TYPE_NUMBER,C=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:b,TYPE_OBJECT:C,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=b,t.TYPE_OBJECT=C,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