@jmespath-community/jmespath 1.1.3 → 1.1.5

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.
@@ -473,7 +473,11 @@
473
473
  this._current += 1;
474
474
  if (this._current < stream.length && stream[this._current] === peek) {
475
475
  this._current += 1;
476
- return { start: start, type: orElse, value: stream.slice(start, this._current) };
476
+ return {
477
+ start: start,
478
+ type: orElse,
479
+ value: stream.slice(start, this._current),
480
+ };
477
481
  }
478
482
  return { start: start, type: token, value: stream[start] };
479
483
  }
@@ -671,11 +675,19 @@
671
675
  }
672
676
  case Token.TOK_MINUS: {
673
677
  const child = this.expression(bindingPower.Minus);
674
- return { type: 'Unary', operator: token.type, operand: child };
678
+ return {
679
+ type: 'Unary',
680
+ operator: token.type,
681
+ operand: child,
682
+ };
675
683
  }
676
684
  case Token.TOK_PLUS: {
677
685
  const child = this.expression(bindingPower.Plus);
678
- return { type: 'Unary', operator: token.type, operand: child };
686
+ return {
687
+ type: 'Unary',
688
+ operator: token.type,
689
+ operand: child,
690
+ };
679
691
  }
680
692
  case Token.TOK_STAR: {
681
693
  const left = { type: 'Identity' };
@@ -687,7 +699,10 @@
687
699
  case Token.TOK_LBRACE:
688
700
  return this.parseMultiselectHash();
689
701
  case Token.TOK_FLATTEN: {
690
- const left = { type: 'Flatten', child: { type: 'Identity' } };
702
+ const left = {
703
+ type: 'Flatten',
704
+ child: { type: 'Identity' },
705
+ };
691
706
  const right = this.parseProjectionRHS(bindingPower.Flatten);
692
707
  return { type: 'Projection', left, right };
693
708
  }
@@ -718,17 +733,8 @@
718
733
  }
719
734
  case Token.TOK_LPAREN: {
720
735
  const args = [];
721
- while (this.lookahead(0) !== Token.TOK_RPAREN) {
722
- let expression;
723
- if (this.lookahead(0) === Token.TOK_CURRENT) {
724
- expression = { type: Token.TOK_CURRENT };
725
- this.advance();
726
- }
727
- else {
728
- expression = this.expression(0);
729
- }
730
- args.push(expression);
731
- }
736
+ let expression = this.expression(0);
737
+ args.push(expression);
732
738
  this.match(Token.TOK_RPAREN);
733
739
  return args[0];
734
740
  }
@@ -847,7 +853,11 @@
847
853
  return { type: 'Index', value };
848
854
  }
849
855
  projectIfSlice(left, right) {
850
- const indexExpr = { type: 'IndexExpression', left, right };
856
+ const indexExpr = {
857
+ type: 'IndexExpression',
858
+ left,
859
+ right,
860
+ };
851
861
  if (right.type === 'Slice') {
852
862
  return {
853
863
  left: indexExpr,
@@ -1825,18 +1835,19 @@
1825
1835
  },
1826
1836
  };
1827
1837
  this._interpreter = interpreter;
1838
+ this._functionTable = this.functionTable;
1828
1839
  }
1829
1840
  registerFunction(name, customFunction, signature) {
1830
- if (name in this.functionTable) {
1841
+ if (name in this._functionTable) {
1831
1842
  throw new Error(`Function already defined: ${name}()`);
1832
1843
  }
1833
- this.functionTable[name] = {
1844
+ this._functionTable[name] = {
1834
1845
  _func: customFunction.bind(this),
1835
1846
  _signature: signature,
1836
1847
  };
1837
1848
  }
1838
1849
  callFunction(name, resolvedArgs) {
1839
- const functionEntry = this.functionTable[name];
1850
+ const functionEntry = this._functionTable[name];
1840
1851
  if (functionEntry === undefined) {
1841
1852
  throw new Error(`Unknown function: ${name}()`);
1842
1853
  }
@@ -1854,7 +1865,7 @@
1854
1865
  var _a, _b;
1855
1866
  let pluralized;
1856
1867
  this.validateInputSignatures(name, signature);
1857
- const numberOfRequiredArgs = signature.filter(argSignature => { var _a; return (_a = !argSignature.optional) !== null && _a !== void 0 ? _a : false; }).length;
1868
+ const numberOfRequiredArgs = signature.filter(argSignature => { var _a; return !((_a = argSignature.optional) !== null && _a !== void 0 ? _a : false); }).length;
1858
1869
  const lastArgIsVariadic = (_b = (_a = signature[signature.length - 1]) === null || _a === void 0 ? void 0 : _a.variadic) !== null && _b !== void 0 ? _b : false;
1859
1870
  const tooFewArgs = args.length < numberOfRequiredArgs;
1860
1871
  const tooManyArgs = args.length > signature.length;
@@ -1970,6 +1981,9 @@
1970
1981
  this.inner = undefined;
1971
1982
  this.data = {};
1972
1983
  }
1984
+ get currentScopeData() {
1985
+ return this.data;
1986
+ }
1973
1987
  withScope(data) {
1974
1988
  const outer = new ScopeChain();
1975
1989
  outer.inner = this;
@@ -1977,11 +1991,8 @@
1977
1991
  return outer;
1978
1992
  }
1979
1993
  getValue(identifier) {
1980
- if (identifier in this.data) {
1981
- const result = this.data[identifier];
1982
- if (result !== null && result !== undefined) {
1983
- return result;
1984
- }
1994
+ if (Object.prototype.hasOwnProperty.call(this.data, identifier)) {
1995
+ return this.data[identifier];
1985
1996
  }
1986
1997
  if (this.inner) {
1987
1998
  return this.inner.getValue(identifier);
@@ -1998,6 +2009,7 @@
1998
2009
  }
1999
2010
  withScope(scope) {
2000
2011
  const interpreter = new TreeInterpreter$1();
2012
+ interpreter.runtime._functionTable = this.runtime._functionTable;
2001
2013
  interpreter._rootValue = this._rootValue;
2002
2014
  interpreter._scope = this._scope.withScope(scope);
2003
2015
  return interpreter;
@@ -2033,17 +2045,17 @@
2033
2045
  }
2034
2046
  case 'Variable': {
2035
2047
  const variable = node.name;
2036
- const result = (_b = this._scope.getValue(variable)) !== null && _b !== void 0 ? _b : null;
2037
- if (result === null || result === undefined) {
2048
+ if (!this._scope.getValue(variable) &&
2049
+ !Object.prototype.hasOwnProperty.call(this._scope.currentScopeData, variable)) {
2038
2050
  throw new Error(`Error referencing undefined variable ${variable}`);
2039
2051
  }
2040
- return result;
2052
+ return this._scope.getValue(variable);
2041
2053
  }
2042
2054
  case 'IndexExpression':
2043
2055
  return this.visit(node.right, this.visit(node.left, value));
2044
2056
  case 'Subexpression': {
2045
2057
  const result = this.visit(node.left, value);
2046
- return (result != null && this.visit(node.right, result)) || null;
2058
+ return result != null ? (_b = this.visit(node.right, result)) !== null && _b !== void 0 ? _b : null : null;
2047
2059
  }
2048
2060
  case 'Index': {
2049
2061
  if (!Array.isArray(value)) {
@@ -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";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})}));
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},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")}},u=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 y=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]}}},A={[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=[...y.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<A[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(A.Not)};case p.TOK_MINUS:{const e=this.expression(A.Minus);return{type:"Unary",operator:t.type,operand:e}}case p.TOK_PLUS:{const e=this.expression(A.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(A.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(A.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(A.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(A.Expref)};case p.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=A.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(A.Pipe)};case p.TOK_OR:return{type:"OrExpression",left:e,right:this.expression(A.Or)};case p.TOK_AND:return{type:"AndExpression",left:e,right:this.expression(A.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(A.Filter),condition:t}}case p.TOK_FLATTEN:return{type:"Projection",left:{type:"Flatten",child:e},right:this.parseProjectionRHS(A.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(A.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(A.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(A[e])}}parseArithmetic(t,e){return{type:"Arithmetic",operator:e,left:t,right:this.expression(A[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(A[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,c=e.length<o,u=e.length>r.length,h=c&&(!a&&o>1||a)?"at least ":"";if(a&&c||!a&&(c||u))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={}}get currentScopeData(){return this.data}withScope(t){const e=new K;return e.inner=this,e.data=t,e}getValue(t){return Object.prototype.hasOwnProperty.call(this.data,t)?this.data[t]: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;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;if(!this._scope.getValue(e)&&!Object.prototype.hasOwnProperty.call(this._scope.currentScopeData,e))throw new Error(`Error referencing undefined variable ${e}`);return this._scope.getValue(e)}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!==(s=this.visit(t.right,r))&&void 0!==s?s: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 c(a=r,h=n),a+h;case p.TOK_MINUS:return((t,e)=>(c(t,e),t-e))(r,n);case p.TOK_MULTIPLY:case p.TOK_STAR:return((t,e)=>(c(t,e),t*e))(r,n);case p.TOK_DIVIDE:return((t,e)=>(c(t,e),t/u(e)))(r,n);case p.TOK_MODULO:return((t,e)=>(c(t,e),t%e))(r,n);case p.TOK_DIV:return((t,e)=>(c(t,e),Math.floor(t/u(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 c(r),r;case p.TOK_MINUS:return c(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 y.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