@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.
@@ -467,7 +467,11 @@ class StreamLexer {
467
467
  this._current += 1;
468
468
  if (this._current < stream.length && stream[this._current] === peek) {
469
469
  this._current += 1;
470
- return { start: start, type: orElse, value: stream.slice(start, this._current) };
470
+ return {
471
+ start: start,
472
+ type: orElse,
473
+ value: stream.slice(start, this._current),
474
+ };
471
475
  }
472
476
  return { start: start, type: token, value: stream[start] };
473
477
  }
@@ -665,11 +669,19 @@ class TokenParser {
665
669
  }
666
670
  case Token.TOK_MINUS: {
667
671
  const child = this.expression(bindingPower.Minus);
668
- return { type: 'Unary', operator: token.type, operand: child };
672
+ return {
673
+ type: 'Unary',
674
+ operator: token.type,
675
+ operand: child,
676
+ };
669
677
  }
670
678
  case Token.TOK_PLUS: {
671
679
  const child = this.expression(bindingPower.Plus);
672
- return { type: 'Unary', operator: token.type, operand: child };
680
+ return {
681
+ type: 'Unary',
682
+ operator: token.type,
683
+ operand: child,
684
+ };
673
685
  }
674
686
  case Token.TOK_STAR: {
675
687
  const left = { type: 'Identity' };
@@ -681,7 +693,10 @@ class TokenParser {
681
693
  case Token.TOK_LBRACE:
682
694
  return this.parseMultiselectHash();
683
695
  case Token.TOK_FLATTEN: {
684
- const left = { type: 'Flatten', child: { type: 'Identity' } };
696
+ const left = {
697
+ type: 'Flatten',
698
+ child: { type: 'Identity' },
699
+ };
685
700
  const right = this.parseProjectionRHS(bindingPower.Flatten);
686
701
  return { type: 'Projection', left, right };
687
702
  }
@@ -712,17 +727,8 @@ class TokenParser {
712
727
  }
713
728
  case Token.TOK_LPAREN: {
714
729
  const args = [];
715
- while (this.lookahead(0) !== Token.TOK_RPAREN) {
716
- let expression;
717
- if (this.lookahead(0) === Token.TOK_CURRENT) {
718
- expression = { type: Token.TOK_CURRENT };
719
- this.advance();
720
- }
721
- else {
722
- expression = this.expression(0);
723
- }
724
- args.push(expression);
725
- }
730
+ let expression = this.expression(0);
731
+ args.push(expression);
726
732
  this.match(Token.TOK_RPAREN);
727
733
  return args[0];
728
734
  }
@@ -841,7 +847,11 @@ class TokenParser {
841
847
  return { type: 'Index', value };
842
848
  }
843
849
  projectIfSlice(left, right) {
844
- const indexExpr = { type: 'IndexExpression', left, right };
850
+ const indexExpr = {
851
+ type: 'IndexExpression',
852
+ left,
853
+ right,
854
+ };
845
855
  if (right.type === 'Slice') {
846
856
  return {
847
857
  left: indexExpr,
@@ -1819,18 +1829,19 @@ class Runtime {
1819
1829
  },
1820
1830
  };
1821
1831
  this._interpreter = interpreter;
1832
+ this._functionTable = this.functionTable;
1822
1833
  }
1823
1834
  registerFunction(name, customFunction, signature) {
1824
- if (name in this.functionTable) {
1835
+ if (name in this._functionTable) {
1825
1836
  throw new Error(`Function already defined: ${name}()`);
1826
1837
  }
1827
- this.functionTable[name] = {
1838
+ this._functionTable[name] = {
1828
1839
  _func: customFunction.bind(this),
1829
1840
  _signature: signature,
1830
1841
  };
1831
1842
  }
1832
1843
  callFunction(name, resolvedArgs) {
1833
- const functionEntry = this.functionTable[name];
1844
+ const functionEntry = this._functionTable[name];
1834
1845
  if (functionEntry === undefined) {
1835
1846
  throw new Error(`Unknown function: ${name}()`);
1836
1847
  }
@@ -1848,7 +1859,7 @@ class Runtime {
1848
1859
  var _a, _b;
1849
1860
  let pluralized;
1850
1861
  this.validateInputSignatures(name, signature);
1851
- const numberOfRequiredArgs = signature.filter(argSignature => { var _a; return (_a = !argSignature.optional) !== null && _a !== void 0 ? _a : false; }).length;
1862
+ const numberOfRequiredArgs = signature.filter(argSignature => { var _a; return !((_a = argSignature.optional) !== null && _a !== void 0 ? _a : false); }).length;
1852
1863
  const lastArgIsVariadic = (_b = (_a = signature[signature.length - 1]) === null || _a === void 0 ? void 0 : _a.variadic) !== null && _b !== void 0 ? _b : false;
1853
1864
  const tooFewArgs = args.length < numberOfRequiredArgs;
1854
1865
  const tooManyArgs = args.length > signature.length;
@@ -1964,6 +1975,9 @@ class ScopeChain {
1964
1975
  this.inner = undefined;
1965
1976
  this.data = {};
1966
1977
  }
1978
+ get currentScopeData() {
1979
+ return this.data;
1980
+ }
1967
1981
  withScope(data) {
1968
1982
  const outer = new ScopeChain();
1969
1983
  outer.inner = this;
@@ -1971,11 +1985,8 @@ class ScopeChain {
1971
1985
  return outer;
1972
1986
  }
1973
1987
  getValue(identifier) {
1974
- if (identifier in this.data) {
1975
- const result = this.data[identifier];
1976
- if (result !== null && result !== undefined) {
1977
- return result;
1978
- }
1988
+ if (Object.prototype.hasOwnProperty.call(this.data, identifier)) {
1989
+ return this.data[identifier];
1979
1990
  }
1980
1991
  if (this.inner) {
1981
1992
  return this.inner.getValue(identifier);
@@ -1992,6 +2003,7 @@ class TreeInterpreter$1 {
1992
2003
  }
1993
2004
  withScope(scope) {
1994
2005
  const interpreter = new TreeInterpreter$1();
2006
+ interpreter.runtime._functionTable = this.runtime._functionTable;
1995
2007
  interpreter._rootValue = this._rootValue;
1996
2008
  interpreter._scope = this._scope.withScope(scope);
1997
2009
  return interpreter;
@@ -2027,17 +2039,17 @@ class TreeInterpreter$1 {
2027
2039
  }
2028
2040
  case 'Variable': {
2029
2041
  const variable = node.name;
2030
- const result = (_b = this._scope.getValue(variable)) !== null && _b !== void 0 ? _b : null;
2031
- if (result === null || result === undefined) {
2042
+ if (!this._scope.getValue(variable) &&
2043
+ !Object.prototype.hasOwnProperty.call(this._scope.currentScopeData, variable)) {
2032
2044
  throw new Error(`Error referencing undefined variable ${variable}`);
2033
2045
  }
2034
- return result;
2046
+ return this._scope.getValue(variable);
2035
2047
  }
2036
2048
  case 'IndexExpression':
2037
2049
  return this.visit(node.right, this.visit(node.left, value));
2038
2050
  case 'Subexpression': {
2039
2051
  const result = this.visit(node.left, value);
2040
- return (result != null && this.visit(node.right, result)) || null;
2052
+ return result != null ? (_b = this.visit(node.right, result)) !== null && _b !== void 0 ? _b : null : null;
2041
2053
  }
2042
2054
  case 'Index': {
2043
2055
  if (!Array.isArray(value)) {
@@ -1,2 +1,2 @@
1
- const t=t=>null!==t&&"[object Object]"===Object.prototype.toString.call(t),e=(r,n)=>{if(r===n)return!0;if(typeof r!=typeof n)return!1;if(Array.isArray(r)&&Array.isArray(n)){if(r.length!==n.length)return!1;for(let t=0;t<r.length;t+=1)if(!e(r[t],n[t]))return!1;return!0}if(t(r)&&t(n)){const t=Object.entries(r),i=new Set(Object.keys(n));if(t.length!==i.size)return!1;for(const[r,s]of t){if(!e(s,n[r]))return!1;i.delete(r)}return 0===i.size}return!1},r=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)},n=t=>t>="a"&&t<="z"||t>="A"&&t<="Z"||"_"===t,i=t=>t>="0"&&t<="9"||"-"===t,s=t=>{if("number"!=typeof t||Math.floor(t)!==t)throw new Error("invalid-value: expecting an integer.");return t},o=t=>{if("number"!=typeof t||t<0||Math.floor(t)!==t)throw new Error("invalid-value: expecting a non-negative integer.");return t},a=(...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},c=(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 o(e),r},h=(t,e,r,n)=>0===n?t:n?(o(n),[...Array(n).keys()].map((()=>t=t.replace(e,r))),t):t.split(e).join(r),T=(t,e)=>l(t,(t=>new RegExp(`^[${t}]*(.*?)`)),e),_=(t,e)=>l(t,(t=>new RegExp(`(.*?)[${t}]*$`)),e),l=(t,e,r)=>{const n=r?r.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"):"\\s…";return t.replace(e(n),"$1")};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 p={"(":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},R={"!":!0,"<":!0,"=":!0,">":!0,"&":!0,"|":!0,"/":!0},f={"\t":!0,"\n":!0,"\r":!0," ":!0};const O=new class{constructor(){this._current=0,this._enable_legacy_literals=!1}tokenize(t,e){const r=[];let s,o,a;for(this._current=0,this._enable_legacy_literals=(null==e?void 0:e.enable_legacy_literals)||!1;this._current<t.length;)if(n(t[this._current]))s=this._current,o=this.consumeUnquotedIdentifier(t),r.push({start:s,type:E.TOK_UNQUOTEDIDENTIFIER,value:o});else if(void 0!==p[t[this._current]])r.push({start:this._current,type:p[t[this._current]],value:t[this._current]}),this._current+=1;else if("$"===t[this._current])s=this._current,this._current+1<t.length&&n(t[this._current+1])?(this._current+=1,o=this.consumeUnquotedIdentifier(t),r.push({start:s,type:E.TOK_VARIABLE,value:o})):(r.push({start:s,type:E.TOK_ROOT,value:t[this._current]}),this._current+=1);else if("-"===t[this._current])if(this._current+1<t.length&&i(t[this._current+1])){const e=this.consumeNumber(t);e&&r.push(e)}else{const t={start:this._current,type:E.TOK_MINUS,value:"-"};r.push(t),this._current+=1}else if(i(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])s=this._current,o=this.consumeQuotedIdentifier(t),r.push({start:s,type:E.TOK_QUOTEDIDENTIFIER,value:o});else if("'"===t[this._current])s=this._current,o=this.consumeRawStringLiteral(t),r.push({start:s,type:E.TOK_LITERAL,value:o});else if("`"===t[this._current]){s=this._current;const e=this.consumeLiteral(t);r.push({start:s,type:E.TOK_LITERAL,value:e})}else if(void 0!==R[t[this._current]])a=this.consumeOperator(t),a&&r.push(a);else{if(void 0===f[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 h(h(n,"\\\\","\\"),"\\'","'")}consumeNumber(t){const e=this._current;this._current+=1;const r=t.length;for(;i(t[this._current])&&this._current<r;)this._current+=1;return{start:e,value:parseInt(t.slice(e,this._current),10),type:E.TOK_NUMBER}}consumeLBracket(t){const e=this._current;return this._current+=1,"?"===t[this._current]?(this._current+=1,{start:e,type:E.TOK_FILTER,value:"[?"}):"]"===t[this._current]?(this._current+=1,{start:e,type:E.TOK_FLATTEN,value:"[]"}):{start:e,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]}}},y={[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 A{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)!==E.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=[...O.tokenize(t,e),{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<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 E.TOK_VARIABLE:return{type:"Variable",name:t.value};case E.TOK_LITERAL:return{type:"Literal",value:t.value};case E.TOK_UNQUOTEDIDENTIFIER:return A.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(y.Not)};case E.TOK_MINUS:{const e=this.expression(y.Minus);return{type:"Unary",operator:t.type,operand:e}}case E.TOK_PLUS:{const e=this.expression(y.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(y.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(y.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(y.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(y.Expref)};case E.TOK_LPAREN:{const t=[];for(;this.lookahead(0)!==E.TOK_RPAREN;){let e;this.lookahead(0)===E.TOK_CURRENT?(e={type:E.TOK_CURRENT},this.advance()):e=this.expression(0),t.push(e)}return this.match(E.TOK_RPAREN),t[0]}default:this.errorToken(t)}}led(t,e){switch(t){case E.TOK_DOT:{const t=y.Dot;if(this.lookahead(0)!==E.TOK_STAR){return{type:"Subexpression",left:e,right:this.parseDotRHS(t)}}this.advance();return{type:"ValueProjection",left:e,right:this.parseProjectionRHS(t)}}case E.TOK_PIPE:return{type:"Pipe",left:e,right:this.expression(y.Pipe)};case E.TOK_OR:return{type:"OrExpression",left:e,right:this.expression(y.Or)};case E.TOK_AND:return{type:"AndExpression",left:e,right:this.expression(y.And)};case E.TOK_LPAREN:if("Field"!==e.type)throw new Error("Syntax error: expected a Field node");return{name:e.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:e,right:this.lookahead(0)===E.TOK_FLATTEN?{type:"Identity"}:this.parseProjectionRHS(y.Filter),condition:t}}case E.TOK_FLATTEN:return{type:"Projection",left:{type:"Flatten",child:e},right:this.parseProjectionRHS(y.Flatten)};case E.TOK_ASSIGN:{const t=e,r=this.expression(0);return{type:"Binding",variable:t.name,reference:r}}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(e,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(e,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(e,t)}this.match(E.TOK_STAR),this.match(E.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===E.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)===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(y.Star),type:"Projection"}:r}parseSliceExpression(){const t=[null,null,null];let e=0,r=this.lookaheadToken(0);for(;r.type!=E.TOK_RBRACKET&&e<3;){if(r.type===E.TOK_COLON)e++,3===e&&this.errorToken(this.lookaheadToken(0),"Syntax error, too many colons in slice expression"),this.advance();else if(r.type===E.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(E.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((()=>A.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)===E.TOK_COMMA&&this.match(E.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([E.TOK_UNQUOTEDIDENTIFIER,E.TOK_QUOTEDIDENTIFIER,E.TOK_STAR].includes(e))return this.expression(t);if(e===E.TOK_LBRACKET)return this.match(E.TOK_LBRACKET),this.parseMultiselectList();if(e===E.TOK_LBRACE)return this.match(E.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)===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 e=this.lookaheadToken(0);this.errorToken(e,`Syntax error, unexpected token: ${e.value}(${e.type})`)}parseMultiselectList(){const t=[];for(;this.lookahead(0)!==E.TOK_RBRACKET;){const e=this.expression(0);if(t.push(e),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=[],e=[E.TOK_UNQUOTEDIDENTIFIER,E.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(E.TOK_COLON),i=this.expression(0),t.push({value:i,type:"KeyValuePair",name:n}),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 d=new A;class P{constructor(t){this._text=t}get string(){return this._text}get length(){return this.codePoints.length}compareTo(t){return P.compare(this,new P(t))}static get comparer(){return(t,e)=>new P(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 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(s(r=r||0),0),n=Math.min(s(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(s(r=r||0),0),n=Math.min(s(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 P(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=c("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=c("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 h(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(o(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 P(t).reverse();const e=t.slice(0);return e.reverse(),e},this.functionSort=([t])=>0==t.length?t:"string"==typeof t[0]?[...t].sort(P.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?P.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)=>T(_(t,e),e))(t[0],t.length>1?t[1]:void 0),this.functionTrimLeft=t=>{const e=t[0];return T(e,t.length>1?t[1]:void 0)},this.functionTrimRight=t=>{const e=t[0];return _(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 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 g{constructor(){this._rootValue=null,this.runtime=new N(this),this._scope=new K}withScope(t){const e=new g;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,n){var i,s,o,c,h;switch(t.type){case"Field":const T=t.name;let _=null;return null===n||"object"!=typeof n||Array.isArray(n)||(_=null!==(i=n[T])&&void 0!==i?i:null),_;case"LetExpression":{const{bindings:e,expression:r}=t;let i={};return e.forEach((t=>{const e=this.visit(t,n);i=Object.assign(Object.assign({},i),e)})),this.withScope(i).visit(r,n)}case"Binding":{const{variable:e,reference:r}=t;return{[e]:this.visit(r,n)}}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,n));case"Subexpression":{const e=this.visit(t.left,n);return null!=e&&this.visit(t.right,e)||null}case"Index":{if(!Array.isArray(n))return null;const e=t.value<0?n.length+t.value:t.value;return null!==(o=n[e])&&void 0!==o?o:null}case"Slice":{if(!Array.isArray(n)&&"string"!=typeof n)return null;const{start:e,stop:r,step:i}=this.computeSliceParams(n.length,t);if("string"==typeof n){const t=[...n];return this.slice(t,e,r,i).join("")}return this.slice(n,e,r,i)}case"Projection":{const{left:e,right:r}=t;let i=!1;"IndexExpression"===e.type&&"Slice"===e.right.type&&(i=!0);const s=this.visit(e,n);if(i&&"string"==typeof s)return this.visit(r,s);if(!Array.isArray(s))return null;const o=[];for(const t of s){const e=this.visit(r,t);null!==e&&o.push(e)}return o}case"ValueProjection":{const{left:e,right:r}=t,i=this.visit(e,n);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(r,t);null!==e&&s.push(e)}return s}case"FilterProjection":{const{left:e,right:i,condition:s}=t,o=this.visit(e,n);if(!Array.isArray(o))return null;const a=[];for(const t of o){const e=this.visit(s,t);if(r(e))continue;const n=this.visit(i,t);null!==n&&a.push(n)}return a}case"Arithmetic":{const e=this.visit(t.left,n),r=this.visit(t.right,n);switch(t.operator){case E.TOK_PLUS:return a(c=e,h=r),c+h;case E.TOK_MINUS:return((t,e)=>(a(t,e),t-e))(e,r);case E.TOK_MULTIPLY:case E.TOK_STAR:return((t,e)=>(a(t,e),t*e))(e,r);case E.TOK_DIVIDE:return((t,e)=>(a(t,e),t/u(e)))(e,r);case E.TOK_MODULO:return((t,e)=>(a(t,e),t%e))(e,r);case E.TOK_DIV:return((t,e)=>(a(t,e),Math.floor(t/u(e))))(e,r);default:throw new Error(`Syntax error: unknown arithmetic operator: ${t.operator}`)}}case"Unary":{const e=this.visit(t.operand,n);switch(t.operator){case E.TOK_PLUS:return a(e),e;case E.TOK_MINUS:return a(e),-e;default:throw new Error(`Syntax error: unknown arithmetic operator: ${t.operator}`)}}case"Comparator":{const r=this.visit(t.left,n),i=this.visit(t.right,n);switch(t.name){case"EQ":return e(r,i);case"NE":return!e(r,i)}if("number"!=typeof r||"number"!=typeof i)return null;switch(t.name){case"GT":return r>i;case"GTE":return r>=i;case"LT":return r<i;case"LTE":return r<=i}}case"Flatten":{const e=this.visit(t.child,n);return Array.isArray(e)?e.flat():null}case"Root":return this._rootValue;case"MultiSelectList":{const e=[];for(const r of t.children)e.push(this.visit(r,n));return e}case"MultiSelectHash":{const e={};for(const r of t.children)e[r.name]=this.visit(r.value,n);return e}case"OrExpression":{const e=this.visit(t.left,n);return r(e)?this.visit(t.right,n):e}case"AndExpression":{const e=this.visit(t.left,n);return r(e)?e:this.visit(t.right,n)}case"NotExpression":return r(this.visit(t.child,n));case"Literal":return t.value;case"Pipe":return this.visit(t.right,this.visit(t.left,n));case"Function":{const e=[];for(const r of t.children)e.push(this.visit(r,n));return this.runtime.callFunction(t.name,e)}case"ExpressionReference":return Object.assign({expref:!0},t.child);case"Current":case"Identity":return n}}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 g,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 d.parse(t,e)}function G(t,e){return O.tokenize(t,e)}const D=(t,e,r)=>{m.runtime.registerFunction(t,e,r)};function j(t,e,r){const n=d.parse(e,r);return m.search(n,t)}function $(){return new K}const J=m,V={compile:F,registerFunction:D,search:j,tokenize:G,TreeInterpreter:J,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};export{$ as Scope,I as TYPE_ANY,S as TYPE_ARRAY,v as TYPE_ARRAY_ARRAY,L as TYPE_ARRAY_NUMBER,M as TYPE_ARRAY_OBJECT,B as TYPE_ARRAY_STRING,x as TYPE_BOOLEAN,U as TYPE_EXPREF,k as TYPE_NULL,w as TYPE_NUMBER,C as TYPE_OBJECT,b as TYPE_STRING,J as TreeInterpreter,F as compile,V as default,V as jmespath,D as registerFunction,j as search,G as tokenize};
1
+ const t=t=>null!==t&&"[object Object]"===Object.prototype.toString.call(t),e=(r,n)=>{if(r===n)return!0;if(typeof r!=typeof n)return!1;if(Array.isArray(r)&&Array.isArray(n)){if(r.length!==n.length)return!1;for(let t=0;t<r.length;t+=1)if(!e(r[t],n[t]))return!1;return!0}if(t(r)&&t(n)){const t=Object.entries(r),i=new Set(Object.keys(n));if(t.length!==i.size)return!1;for(const[r,s]of t){if(!e(s,n[r]))return!1;i.delete(r)}return 0===i.size}return!1},r=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)},n=t=>t>="a"&&t<="z"||t>="A"&&t<="Z"||"_"===t,i=t=>t>="0"&&t<="9"||"-"===t,s=t=>{if("number"!=typeof t||Math.floor(t)!==t)throw new Error("invalid-value: expecting an integer.");return t},o=t=>{if("number"!=typeof t||t<0||Math.floor(t)!==t)throw new Error("invalid-value: expecting a non-negative integer.");return t},a=(...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},u=(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 o(e),r},h=(t,e,r,n)=>0===n?t:n?(o(n),[...Array(n).keys()].map((()=>t=t.replace(e,r))),t):t.split(e).join(r),T=(t,e)=>l(t,(t=>new RegExp(`^[${t}]*(.*?)`)),e),_=(t,e)=>l(t,(t=>new RegExp(`(.*?)[${t}]*$`)),e),l=(t,e,r)=>{const n=r?r.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"):"\\s…";return t.replace(e(n),"$1")};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 p={"(":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},R={"!":!0,"<":!0,"=":!0,">":!0,"&":!0,"|":!0,"/":!0},f={"\t":!0,"\n":!0,"\r":!0," ":!0};const O=new class{constructor(){this._current=0,this._enable_legacy_literals=!1}tokenize(t,e){const r=[];let s,o,a;for(this._current=0,this._enable_legacy_literals=(null==e?void 0:e.enable_legacy_literals)||!1;this._current<t.length;)if(n(t[this._current]))s=this._current,o=this.consumeUnquotedIdentifier(t),r.push({start:s,type:E.TOK_UNQUOTEDIDENTIFIER,value:o});else if(void 0!==p[t[this._current]])r.push({start:this._current,type:p[t[this._current]],value:t[this._current]}),this._current+=1;else if("$"===t[this._current])s=this._current,this._current+1<t.length&&n(t[this._current+1])?(this._current+=1,o=this.consumeUnquotedIdentifier(t),r.push({start:s,type:E.TOK_VARIABLE,value:o})):(r.push({start:s,type:E.TOK_ROOT,value:t[this._current]}),this._current+=1);else if("-"===t[this._current])if(this._current+1<t.length&&i(t[this._current+1])){const e=this.consumeNumber(t);e&&r.push(e)}else{const t={start:this._current,type:E.TOK_MINUS,value:"-"};r.push(t),this._current+=1}else if(i(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])s=this._current,o=this.consumeQuotedIdentifier(t),r.push({start:s,type:E.TOK_QUOTEDIDENTIFIER,value:o});else if("'"===t[this._current])s=this._current,o=this.consumeRawStringLiteral(t),r.push({start:s,type:E.TOK_LITERAL,value:o});else if("`"===t[this._current]){s=this._current;const e=this.consumeLiteral(t);r.push({start:s,type:E.TOK_LITERAL,value:e})}else if(void 0!==R[t[this._current]])a=this.consumeOperator(t),a&&r.push(a);else{if(void 0===f[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 h(h(n,"\\\\","\\"),"\\'","'")}consumeNumber(t){const e=this._current;this._current+=1;const r=t.length;for(;i(t[this._current])&&this._current<r;)this._current+=1;return{start:e,value:parseInt(t.slice(e,this._current),10),type:E.TOK_NUMBER}}consumeLBracket(t){const e=this._current;return this._current+=1,"?"===t[this._current]?(this._current+=1,{start:e,type:E.TOK_FILTER,value:"[?"}):"]"===t[this._current]?(this._current+=1,{start:e,type:E.TOK_FLATTEN,value:"[]"}):{start:e,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]}}},y={[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 A{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)!==E.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=[...O.tokenize(t,e),{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<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 E.TOK_VARIABLE:return{type:"Variable",name:t.value};case E.TOK_LITERAL:return{type:"Literal",value:t.value};case E.TOK_UNQUOTEDIDENTIFIER:return A.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(y.Not)};case E.TOK_MINUS:{const e=this.expression(y.Minus);return{type:"Unary",operator:t.type,operand:e}}case E.TOK_PLUS:{const e=this.expression(y.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(y.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(y.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(y.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(y.Expref)};case E.TOK_LPAREN:{const t=[];let e=this.expression(0);return t.push(e),this.match(E.TOK_RPAREN),t[0]}default:this.errorToken(t)}}led(t,e){switch(t){case E.TOK_DOT:{const t=y.Dot;if(this.lookahead(0)!==E.TOK_STAR){return{type:"Subexpression",left:e,right:this.parseDotRHS(t)}}this.advance();return{type:"ValueProjection",left:e,right:this.parseProjectionRHS(t)}}case E.TOK_PIPE:return{type:"Pipe",left:e,right:this.expression(y.Pipe)};case E.TOK_OR:return{type:"OrExpression",left:e,right:this.expression(y.Or)};case E.TOK_AND:return{type:"AndExpression",left:e,right:this.expression(y.And)};case E.TOK_LPAREN:if("Field"!==e.type)throw new Error("Syntax error: expected a Field node");return{name:e.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:e,right:this.lookahead(0)===E.TOK_FLATTEN?{type:"Identity"}:this.parseProjectionRHS(y.Filter),condition:t}}case E.TOK_FLATTEN:return{type:"Projection",left:{type:"Flatten",child:e},right:this.parseProjectionRHS(y.Flatten)};case E.TOK_ASSIGN:{const t=e,r=this.expression(0);return{type:"Binding",variable:t.name,reference:r}}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(e,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(e,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(e,t)}this.match(E.TOK_STAR),this.match(E.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===E.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)===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(y.Star),type:"Projection"}:r}parseSliceExpression(){const t=[null,null,null];let e=0,r=this.lookaheadToken(0);for(;r.type!=E.TOK_RBRACKET&&e<3;){if(r.type===E.TOK_COLON)e++,3===e&&this.errorToken(this.lookaheadToken(0),"Syntax error, too many colons in slice expression"),this.advance();else if(r.type===E.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(E.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((()=>A.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)===E.TOK_COMMA&&this.match(E.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([E.TOK_UNQUOTEDIDENTIFIER,E.TOK_QUOTEDIDENTIFIER,E.TOK_STAR].includes(e))return this.expression(t);if(e===E.TOK_LBRACKET)return this.match(E.TOK_LBRACKET),this.parseMultiselectList();if(e===E.TOK_LBRACE)return this.match(E.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)===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 e=this.lookaheadToken(0);this.errorToken(e,`Syntax error, unexpected token: ${e.value}(${e.type})`)}parseMultiselectList(){const t=[];for(;this.lookahead(0)!==E.TOK_RBRACKET;){const e=this.expression(0);if(t.push(e),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=[],e=[E.TOK_UNQUOTEDIDENTIFIER,E.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(E.TOK_COLON),i=this.expression(0),t.push({value:i,type:"KeyValuePair",name:n}),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 d=new A;class P{constructor(t){this._text=t}get string(){return this._text}get length(){return this.codePoints.length}compareTo(t){return P.compare(this,new P(t))}static get comparer(){return(t,e)=>new P(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 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(s(r=r||0),0),n=Math.min(s(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(s(r=r||0),0),n=Math.min(s(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 P(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=u("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=u("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 h(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(o(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 P(t).reverse();const e=t.slice(0);return e.reverse(),e},this.functionSort=([t])=>0==t.length?t:"string"==typeof t[0]?[...t].sort(P.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?P.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)=>T(_(t,e),e))(t[0],t.length>1?t[1]:void 0),this.functionTrimLeft=t=>{const e=t[0];return T(e,t.length>1?t[1]:void 0)},this.functionTrimRight=t=>{const e=t[0];return _(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,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===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={}}get currentScopeData(){return this.data}withScope(t){const e=new g;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 K{constructor(){this._rootValue=null,this.runtime=new N(this),this._scope=new g}withScope(t){const e=new K;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 g,this.visit(t,e)}visit(t,n){var i,s,o,u,h;switch(t.type){case"Field":const T=t.name;let _=null;return null===n||"object"!=typeof n||Array.isArray(n)||(_=null!==(i=n[T])&&void 0!==i?i:null),_;case"LetExpression":{const{bindings:e,expression:r}=t;let i={};return e.forEach((t=>{const e=this.visit(t,n);i=Object.assign(Object.assign({},i),e)})),this.withScope(i).visit(r,n)}case"Binding":{const{variable:e,reference:r}=t;return{[e]:this.visit(r,n)}}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,n));case"Subexpression":{const e=this.visit(t.left,n);return null!=e&&null!==(s=this.visit(t.right,e))&&void 0!==s?s:null}case"Index":{if(!Array.isArray(n))return null;const e=t.value<0?n.length+t.value:t.value;return null!==(o=n[e])&&void 0!==o?o:null}case"Slice":{if(!Array.isArray(n)&&"string"!=typeof n)return null;const{start:e,stop:r,step:i}=this.computeSliceParams(n.length,t);if("string"==typeof n){const t=[...n];return this.slice(t,e,r,i).join("")}return this.slice(n,e,r,i)}case"Projection":{const{left:e,right:r}=t;let i=!1;"IndexExpression"===e.type&&"Slice"===e.right.type&&(i=!0);const s=this.visit(e,n);if(i&&"string"==typeof s)return this.visit(r,s);if(!Array.isArray(s))return null;const o=[];for(const t of s){const e=this.visit(r,t);null!==e&&o.push(e)}return o}case"ValueProjection":{const{left:e,right:r}=t,i=this.visit(e,n);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(r,t);null!==e&&s.push(e)}return s}case"FilterProjection":{const{left:e,right:i,condition:s}=t,o=this.visit(e,n);if(!Array.isArray(o))return null;const a=[];for(const t of o){const e=this.visit(s,t);if(r(e))continue;const n=this.visit(i,t);null!==n&&a.push(n)}return a}case"Arithmetic":{const e=this.visit(t.left,n),r=this.visit(t.right,n);switch(t.operator){case E.TOK_PLUS:return a(u=e,h=r),u+h;case E.TOK_MINUS:return((t,e)=>(a(t,e),t-e))(e,r);case E.TOK_MULTIPLY:case E.TOK_STAR:return((t,e)=>(a(t,e),t*e))(e,r);case E.TOK_DIVIDE:return((t,e)=>(a(t,e),t/c(e)))(e,r);case E.TOK_MODULO:return((t,e)=>(a(t,e),t%e))(e,r);case E.TOK_DIV:return((t,e)=>(a(t,e),Math.floor(t/c(e))))(e,r);default:throw new Error(`Syntax error: unknown arithmetic operator: ${t.operator}`)}}case"Unary":{const e=this.visit(t.operand,n);switch(t.operator){case E.TOK_PLUS:return a(e),e;case E.TOK_MINUS:return a(e),-e;default:throw new Error(`Syntax error: unknown arithmetic operator: ${t.operator}`)}}case"Comparator":{const r=this.visit(t.left,n),i=this.visit(t.right,n);switch(t.name){case"EQ":return e(r,i);case"NE":return!e(r,i)}if("number"!=typeof r||"number"!=typeof i)return null;switch(t.name){case"GT":return r>i;case"GTE":return r>=i;case"LT":return r<i;case"LTE":return r<=i}}case"Flatten":{const e=this.visit(t.child,n);return Array.isArray(e)?e.flat():null}case"Root":return this._rootValue;case"MultiSelectList":{const e=[];for(const r of t.children)e.push(this.visit(r,n));return e}case"MultiSelectHash":{const e={};for(const r of t.children)e[r.name]=this.visit(r.value,n);return e}case"OrExpression":{const e=this.visit(t.left,n);return r(e)?this.visit(t.right,n):e}case"AndExpression":{const e=this.visit(t.left,n);return r(e)?e:this.visit(t.right,n)}case"NotExpression":return r(this.visit(t.child,n));case"Literal":return t.value;case"Pipe":return this.visit(t.right,this.visit(t.left,n));case"Function":{const e=[];for(const r of t.children)e.push(this.visit(r,n));return this.runtime.callFunction(t.name,e)}case"ExpressionReference":return Object.assign({expref:!0},t.child);case"Current":case"Identity":return n}}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,b=Y.TYPE_OBJECT,C=Y.TYPE_STRING;function F(t,e){return d.parse(t,e)}function G(t,e){return O.tokenize(t,e)}const D=(t,e,r)=>{m.runtime.registerFunction(t,e,r)};function j(t,e,r){const n=d.parse(e,r);return m.search(n,t)}function $(){return new g}const V=m,J={compile:F,registerFunction:D,search:j,tokenize:G,TreeInterpreter:V,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:b,TYPE_STRING:C};export{$ as Scope,I as TYPE_ANY,S as TYPE_ARRAY,v as TYPE_ARRAY_ARRAY,L as TYPE_ARRAY_NUMBER,M as TYPE_ARRAY_OBJECT,B as TYPE_ARRAY_STRING,x as TYPE_BOOLEAN,U as TYPE_EXPREF,k as TYPE_NULL,w as TYPE_NUMBER,b as TYPE_OBJECT,C as TYPE_STRING,V as TreeInterpreter,F as compile,J as default,J as jmespath,D as registerFunction,j as search,G as tokenize};
2
2
  //# sourceMappingURL=jmespath.esm.min.js.map