@jmespath-community/jmespath 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +228 -12
  2. package/dist/cli.cjs +2816 -0
  3. package/dist/cli.cjs.map +1 -0
  4. package/dist/cli.d.cts +2 -0
  5. package/dist/cli.d.ts +2 -0
  6. package/dist/cli.mjs +2794 -0
  7. package/dist/cli.mjs.map +1 -0
  8. package/dist/index.cjs +2699 -0
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.cts +464 -0
  11. package/dist/index.d.ts +464 -0
  12. package/dist/index.esm.js +2707 -0
  13. package/dist/index.esm.js.map +1 -0
  14. package/dist/index.esm.min.js +6 -0
  15. package/dist/index.esm.min.js.map +1 -0
  16. package/dist/index.mjs +2697 -0
  17. package/dist/index.mjs.map +1 -0
  18. package/dist/index.umd.js +2712 -0
  19. package/dist/index.umd.js.map +1 -0
  20. package/dist/index.umd.min.js +6 -0
  21. package/dist/index.umd.min.js.map +1 -0
  22. package/package.json +68 -11
  23. package/dist/jmespath.esm.js +0 -2369
  24. package/dist/jmespath.esm.min.js +0 -2
  25. package/dist/jmespath.esm.min.js.map +0 -1
  26. package/dist/jmespath.umd.js +0 -2398
  27. package/dist/jmespath.umd.min.js +0 -2
  28. package/dist/jmespath.umd.min.js.map +0 -1
  29. package/dist/lib/bin/jp.js +0 -127
  30. package/dist/lib/bin/jp.js.map +0 -1
  31. package/dist/lib/package.json +0 -70
  32. package/dist/lib/src/AST.type.js +0 -3
  33. package/dist/lib/src/AST.type.js.map +0 -1
  34. package/dist/lib/src/JSON.type.js +0 -3
  35. package/dist/lib/src/JSON.type.js.map +0 -1
  36. package/dist/lib/src/Lexer.js +0 -327
  37. package/dist/lib/src/Lexer.js.map +0 -1
  38. package/dist/lib/src/Lexer.type.js +0 -46
  39. package/dist/lib/src/Lexer.type.js.map +0 -1
  40. package/dist/lib/src/Parser.js +0 -468
  41. package/dist/lib/src/Parser.js.map +0 -1
  42. package/dist/lib/src/Parser.type.js +0 -3
  43. package/dist/lib/src/Parser.type.js.map +0 -1
  44. package/dist/lib/src/Runtime.js +0 -924
  45. package/dist/lib/src/Runtime.js.map +0 -1
  46. package/dist/lib/src/Scope.js +0 -29
  47. package/dist/lib/src/Scope.js.map +0 -1
  48. package/dist/lib/src/TreeInterpreter.js +0 -319
  49. package/dist/lib/src/TreeInterpreter.js.map +0 -1
  50. package/dist/lib/src/index.js +0 -65
  51. package/dist/lib/src/index.js.map +0 -1
  52. package/dist/lib/src/utils/index.js +0 -145
  53. package/dist/lib/src/utils/index.js.map +0 -1
  54. package/dist/lib/src/utils/strings.js +0 -92
  55. package/dist/lib/src/utils/strings.js.map +0 -1
  56. package/dist/lib/src/utils/text.js +0 -45
  57. package/dist/lib/src/utils/text.js.map +0 -1
  58. package/dist/types/bin/jp.d.ts +0 -2
  59. package/dist/types/src/AST.type.d.ts +0 -104
  60. package/dist/types/src/JSON.type.d.ts +0 -10
  61. package/dist/types/src/Lexer.d.ts +0 -19
  62. package/dist/types/src/Lexer.type.d.ts +0 -51
  63. package/dist/types/src/Parser.d.ts +0 -33
  64. package/dist/types/src/Parser.type.d.ts +0 -4
  65. package/dist/types/src/Runtime.d.ts +0 -87
  66. package/dist/types/src/Scope.d.ts +0 -8
  67. package/dist/types/src/TreeInterpreter.d.ts +0 -22
  68. package/dist/types/src/index.d.ts +0 -45
  69. package/dist/types/src/utils/index.d.ts +0 -16
  70. package/dist/types/src/utils/strings.d.ts +0 -11
  71. package/dist/types/src/utils/text.d.ts +0 -11
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/ast.ts","../src/utils/index.ts","../src/Lexer.ts","../src/Parser.ts","../src/utils/strings.ts","../src/utils/text.ts","../src/Runtime.ts","../src/Scope.ts","../src/TreeInterpreter.ts","../src/Stream.ts","../src/index.ts"],"names":["token","right","sub","search","split","TreeInterpreter"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ExpressionNode, FunctionNode } from '../AST.type';\nimport type { Options } from '../Parser.type';\n\nconst CHILD_PROPS = ['left', 'right', 'condition', 'child', 'operand', 'trueExpr', 'falseExpr', 'expression'] as const;\n\nfunction pushChildren(node: ExpressionNode, stack: ExpressionNode[]): void {\n const n = node as unknown as Record<string, unknown>;\n\n for (const prop of CHILD_PROPS) {\n const val = n[prop];\n if (val && typeof val === 'object' && 'type' in val) {\n stack.push(val as ExpressionNode);\n }\n }\n\n if (Array.isArray(n.children)) {\n for (const item of n.children) {\n if (!item) {\n continue;\n }\n stack.push(item);\n if (item.type === 'KeyValuePair' && item.value) {\n stack.push(item.value);\n }\n }\n }\n\n if (Array.isArray(n.bindings)) {\n for (const item of n.bindings) {\n if (!item) {\n continue;\n }\n stack.push(item);\n if (item.reference) {\n stack.push(item.reference);\n }\n }\n }\n}\n\nexport function forEachNode(root: ExpressionNode, visitor: (node: ExpressionNode) => boolean): void {\n const stack: ExpressionNode[] = [root];\n while (stack.length > 0) {\n const current = stack.pop();\n if (!current) {\n break;\n }\n if (visitor(current) === false) {\n return;\n }\n pushChildren(current, stack);\n }\n}\n\nexport function countNodes(root: ExpressionNode): number {\n let count = 0;\n forEachNode(root, () => {\n count += 1;\n return true;\n });\n return count;\n}\n\nexport function findDisallowedFunction(root: ExpressionNode, options: Options): string | null {\n const { allowedFunctions, disallowedFunctions } = options;\n if (!allowedFunctions && !disallowedFunctions) {\n return null;\n }\n\n let violation: string | null = null;\n forEachNode(root, node => {\n if (node.type !== 'Function') {\n return true;\n }\n const name = (node as FunctionNode).name;\n\n if (allowedFunctions && !allowedFunctions.includes(name)) {\n violation = `Function '${name}' is not allowed`;\n return false;\n }\n\n if (disallowedFunctions && disallowedFunctions.includes(name)) {\n violation = `Function '${name}' is disallowed`;\n return false;\n }\n\n return true;\n });\n\n return violation;\n}\n","import { JSONValue } from '../JSON.type';\n\nexport const isObject = (obj: unknown): obj is Record<string, unknown> => {\n return obj !== null && Object.prototype.toString.call(obj) === '[object Object]';\n};\n\nexport const strictDeepEqual = (first: unknown, second: unknown): boolean => {\n if (first === second) {\n return true;\n }\n if (typeof first !== typeof second) {\n return false;\n }\n if (Array.isArray(first) && Array.isArray(second)) {\n if (first.length !== second.length) {\n return false;\n }\n for (let i = 0; i < first.length; i += 1) {\n if (!strictDeepEqual(first[i], second[i])) {\n return false;\n }\n }\n return true;\n }\n if (isObject(first) && isObject(second)) {\n const firstEntries = Object.entries(first);\n const secondKeys = new Set(Object.keys(second));\n if (firstEntries.length !== secondKeys.size) {\n return false;\n }\n for (const [key, value] of firstEntries) {\n if (!strictDeepEqual(value, second[key])) {\n return false;\n }\n secondKeys.delete(key);\n }\n return secondKeys.size === 0;\n }\n return false;\n};\n\nexport const isFalse = (obj: unknown): boolean => {\n // falsey values\n if (obj === null || obj === undefined || obj === false) {\n return true;\n }\n if (typeof obj === 'string') {\n return obj === '';\n }\n if (typeof obj === 'object') {\n if (Array.isArray(obj)) {\n return obj.length === 0;\n }\n // check if object is empty\n return Object.keys(obj).length === 0;\n }\n return false;\n};\n\nexport const isAlpha = (ch: string): boolean => {\n return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch === '_';\n};\n\nexport const isNum = (ch: string): boolean => {\n return (ch >= '0' && ch <= '9') || ch === '-';\n};\nexport const isAlphaNum = (ch: string): boolean => {\n return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || ch === '_';\n};\n\nexport const ensureInteger = (value: unknown): number => {\n if (!(typeof value === 'number') || Math.floor(value) !== value) {\n throw new Error('invalid-value: expecting an integer.');\n }\n return <number>value;\n};\nexport const ensurePositiveInteger = (value: unknown): number => {\n if (!(typeof value === 'number') || <number>value < 0 || Math.floor(value) !== value) {\n throw new Error('invalid-value: expecting a non-negative integer.');\n }\n return <number>value;\n};\n\nexport const ensureNumbers = (...operands: (JSONValue | undefined)[]): void => {\n for (let i = 0; i < operands.length; i++) {\n if (operands[i] === null || operands[i] === undefined) {\n throw new Error('not-a-number: undefined');\n }\n if (typeof operands[i] !== 'number') {\n throw new Error('not-a-number');\n }\n }\n};\n\nconst notZero = (n: number): number => {\n n = +n; // coerce to number\n if (!n) {\n // matches -0, +0, NaN\n throw new Error('not-a-number: divide by zero');\n }\n return n;\n};\n\nexport const add = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n return (left as number) + (right as number);\n};\nexport const sub = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n return (left as number) - (right as number);\n};\nexport const mul = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n return (left as number) * (right as number);\n};\nexport const divide = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n return (left as number) / notZero(right as number);\n};\nexport const div = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n return Math.floor((left as number) / notZero(right as number));\n};\nexport const mod = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n return (left as number) % (right as number);\n};\n\nexport * from './ast';\n","import { JSONValue } from './JSON.type';\nimport { LexerOptions, LexerToken, Token } from './Lexer.type';\nimport { isAlpha, isAlphaNum, isNum } from './utils/index';\n\nexport const basicTokens: Record<string, Token> = {\n '(': Token.TOK_LPAREN,\n ')': Token.TOK_RPAREN,\n '*': Token.TOK_STAR,\n ',': Token.TOK_COMMA,\n '.': Token.TOK_DOT,\n ':': Token.TOK_COLON,\n '@': Token.TOK_CURRENT,\n ']': Token.TOK_RBRACKET,\n '{': Token.TOK_LBRACE,\n '}': Token.TOK_RBRACE,\n '+': Token.TOK_PLUS,\n '%': Token.TOK_MODULO,\n '?': Token.TOK_QUESTION,\n '\\u2212': Token.TOK_MINUS,\n '\\u00d7': Token.TOK_MULTIPLY,\n '\\u00f7': Token.TOK_DIVIDE,\n};\n\nconst operatorStartToken: Record<string, boolean> = {\n '!': true,\n '<': true,\n '=': true,\n '>': true,\n '&': true,\n '|': true,\n '/': true,\n};\n\nconst skipChars: Record<string, boolean> = {\n '\\t': true,\n '\\n': true,\n '\\r': true,\n ' ': true,\n};\n\nclass StreamLexer {\n private _current = 0;\n private _enable_legacy_literals = false;\n\n tokenize(stream: string, options?: LexerOptions): LexerToken[] {\n const tokens: LexerToken[] = [];\n this._current = 0;\n this._enable_legacy_literals = options?.enable_legacy_literals || false;\n\n let start;\n let identifier;\n let token;\n while (this._current < stream.length) {\n if (isAlpha(stream[this._current])) {\n start = this._current;\n identifier = this.consumeUnquotedIdentifier(stream);\n tokens.push({\n start,\n type: Token.TOK_UNQUOTEDIDENTIFIER,\n value: identifier,\n });\n } else if (basicTokens[stream[this._current]] !== undefined) {\n tokens.push({\n start: this._current,\n type: basicTokens[stream[this._current]],\n value: stream[this._current],\n });\n this._current += 1;\n } else if (stream[this._current] === '$') {\n start = this._current;\n if (this._current + 1 < stream.length && isAlpha(stream[this._current + 1])) {\n this._current += 1;\n identifier = this.consumeUnquotedIdentifier(stream);\n tokens.push({\n start,\n type: Token.TOK_VARIABLE,\n value: identifier,\n });\n } else {\n tokens.push({\n start: start,\n type: Token.TOK_ROOT,\n value: stream[this._current],\n });\n this._current += 1;\n }\n } else if (stream[this._current] === '-') {\n if (this._current + 1 < stream.length && isNum(stream[this._current + 1])) {\n const token = this.consumeNumber(stream);\n token && tokens.push(token);\n } else {\n const token = {\n start: this._current,\n type: Token.TOK_MINUS,\n value: '-',\n };\n tokens.push(token);\n this._current += 1;\n }\n } else if (isNum(stream[this._current])) {\n token = this.consumeNumber(stream);\n tokens.push(token);\n } else if (stream[this._current] === '[') {\n token = this.consumeLBracket(stream);\n tokens.push(token);\n } else if (stream[this._current] === '\"') {\n start = this._current;\n identifier = this.consumeQuotedIdentifier(stream);\n tokens.push({\n start,\n type: Token.TOK_QUOTEDIDENTIFIER,\n value: identifier,\n });\n } else if (stream[this._current] === `'`) {\n start = this._current;\n identifier = this.consumeRawStringLiteral(stream);\n tokens.push({\n start,\n type: Token.TOK_LITERAL,\n value: identifier,\n });\n } else if (stream[this._current] === '`') {\n start = this._current;\n const literal = this.consumeLiteral(stream);\n tokens.push({\n start,\n type: Token.TOK_LITERAL,\n value: literal,\n });\n } else if (operatorStartToken[stream[this._current]] !== undefined) {\n token = this.consumeOperator(stream);\n token && tokens.push(token);\n } else if (skipChars[stream[this._current]] !== undefined) {\n this._current += 1;\n } else {\n const error = new Error(`Syntax error: unknown character: ${stream[this._current]}`);\n error.name = 'LexerError';\n throw error;\n }\n }\n return tokens;\n }\n\n private consumeUnquotedIdentifier(stream: string): string {\n const start = this._current;\n this._current += 1;\n while (this._current < stream.length && isAlphaNum(stream[this._current])) {\n this._current += 1;\n }\n return stream.slice(start, this._current);\n }\n\n private consumeQuotedIdentifier(stream: string): string {\n const start = this._current;\n this._current += 1;\n const maxLength = stream.length;\n while (stream[this._current] !== '\"' && this._current < maxLength) {\n let current = this._current;\n if (stream[current] === '\\\\' && (stream[current + 1] === '\\\\' || stream[current + 1] === '\"')) {\n current += 2;\n } else {\n current += 1;\n }\n this._current = current;\n }\n this._current += 1;\n const [value, ok] = this.parseJSON(stream.slice(start, this._current));\n if (!ok) {\n const error = new Error(`syntax: unexpected end of JSON input`);\n error.name = 'LexerError';\n throw error;\n }\n return <string>value;\n }\n\n private consumeRawStringLiteral(stream: string): string {\n const start = this._current;\n this._current += 1;\n const maxLength = stream.length;\n while (stream[this._current] !== `'` && this._current < maxLength) {\n let current = this._current;\n if (stream[current] === '\\\\' && (stream[current + 1] === '\\\\' || stream[current + 1] === `'`)) {\n current += 2;\n } else {\n current += 1;\n }\n this._current = current;\n }\n this._current += 1;\n const literal = stream.slice(start + 1, this._current - 1);\n return literal.replace(/\\\\(['\\\\])/g, '$1');\n }\n\n private consumeNumber(stream: string): LexerToken {\n const start = this._current;\n this._current += 1;\n const maxLength = stream.length;\n while (isNum(stream[this._current]) && this._current < maxLength) {\n this._current += 1;\n }\n const value = parseInt(stream.slice(start, this._current), 10);\n return { start, value, type: Token.TOK_NUMBER };\n }\n\n private consumeLBracket(stream: string): LexerToken {\n const start = this._current;\n this._current += 1;\n if (stream[this._current] === '?') {\n this._current += 1;\n return { start, type: Token.TOK_FILTER, value: '[?' };\n }\n if (stream[this._current] === ']') {\n this._current += 1;\n return { start, type: Token.TOK_FLATTEN, value: '[]' };\n }\n return { start, type: Token.TOK_LBRACKET, value: '[' };\n }\n\n private consumeOrElse(stream: string, peek: string, token: Token, orElse: Token): LexerToken {\n const start = this._current;\n this._current += 1;\n if (this._current < stream.length && stream[this._current] === peek) {\n this._current += 1;\n return {\n start: start,\n type: orElse,\n value: stream.slice(start, this._current),\n };\n }\n return { start: start, type: token, value: stream[start] };\n }\n\n private consumeOperator(stream: string): LexerToken | void {\n const start = this._current;\n const startingChar = stream[start];\n switch (startingChar) {\n case '!':\n return this.consumeOrElse(stream, '=', Token.TOK_NOT, Token.TOK_NE);\n case '<':\n return this.consumeOrElse(stream, '=', Token.TOK_LT, Token.TOK_LTE);\n case '>':\n return this.consumeOrElse(stream, '=', Token.TOK_GT, Token.TOK_GTE);\n case '=':\n return this.consumeOrElse(stream, '=', Token.TOK_ASSIGN, Token.TOK_EQ);\n case '&':\n return this.consumeOrElse(stream, '&', Token.TOK_EXPREF, Token.TOK_AND);\n case '|':\n return this.consumeOrElse(stream, '|', Token.TOK_PIPE, Token.TOK_OR);\n case '/':\n return this.consumeOrElse(stream, '/', Token.TOK_DIVIDE, Token.TOK_DIV);\n }\n }\n\n private consumeLiteral(stream: string): JSONValue {\n this._current += 1;\n const start = this._current;\n const maxLength = stream.length;\n\n while (stream[this._current] !== '`' && this._current < maxLength) {\n let current = this._current;\n if (stream[current] === '\\\\' && (stream[current + 1] === '\\\\' || stream[current + 1] === '`')) {\n current += 2;\n } else {\n current += 1;\n }\n this._current = current;\n }\n let literalString = stream.slice(start, this._current).trimStart();\n literalString = literalString.replace('\\\\`', '`');\n\n let literal: JSONValue = null;\n let ok = false;\n\n // attempts to detect and parse valid JSON\n\n if (this.looksLikeJSON(literalString)) {\n [literal, ok] = this.parseJSON(literalString);\n }\n\n // invalid JSON values should be converted to quoted\n // JSON strings during the JEP-12 deprecation period.\n\n if (!ok && this._enable_legacy_literals) {\n [literal, ok] = this.parseJSON(`\"${literalString}\"`);\n }\n\n if (!ok) {\n const error = new Error(\n `Syntax error: unexpected end of JSON input or invalid format for a JSON literal: ${stream[this._current]}`,\n );\n error.name = 'LexerError';\n throw error;\n }\n\n this._current += 1;\n return literal;\n }\n\n private looksLikeJSON(literalString: string): boolean {\n const startingChars = '[{\"';\n const jsonLiterals = ['true', 'false', 'null'];\n const numberLooking = '-0123456789';\n\n if (literalString === '') {\n return false;\n }\n if (startingChars.includes(literalString[0])) {\n return true;\n }\n if (jsonLiterals.includes(literalString)) {\n return true;\n }\n if (numberLooking.includes(literalString[0])) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const [_, ok] = this.parseJSON(literalString);\n return ok;\n }\n return false;\n }\n\n private parseJSON(text: string): [JSONValue, boolean] {\n try {\n const json = JSON.parse(text);\n return [json, true];\n } catch {\n return [null, false];\n }\n }\n}\n\nexport const Lexer = new StreamLexer();\nexport default Lexer;\n","import type {\n BinaryArithmeticNode,\n BinaryExpressionNode,\n BinaryOperatorType,\n BindingNode,\n ComparatorNode,\n ComparatorType,\n ExpressionNode,\n FunctionNode,\n IndexNode,\n KeyValuePairNode,\n LetExpressionNode,\n SliceNode,\n UnaryArithmeticNode,\n UnaryExpressionNode,\n VariableNode,\n} from './AST.type';\nimport Lexer from './Lexer';\nimport { LexerToken, Token } from './Lexer.type';\nimport { Options } from './Parser.type';\nimport { countNodes } from './utils/ast';\n\nconst bindingPower: Record<string, number> = {\n [Token.TOK_EOF]: 0,\n [Token.TOK_VARIABLE]: 0,\n [Token.TOK_UNQUOTEDIDENTIFIER]: 0,\n [Token.TOK_QUOTEDIDENTIFIER]: 0,\n [Token.TOK_RBRACKET]: 0,\n [Token.TOK_RPAREN]: 0,\n [Token.TOK_COMMA]: 0,\n [Token.TOK_RBRACE]: 0,\n [Token.TOK_NUMBER]: 0,\n [Token.TOK_CURRENT]: 0,\n [Token.TOK_EXPREF]: 0,\n [Token.TOK_ROOT]: 0,\n [Token.TOK_ASSIGN]: 1,\n [Token.TOK_PIPE]: 1,\n [Token.TOK_QUESTION]: 2,\n [Token.TOK_OR]: 3,\n [Token.TOK_AND]: 4,\n [Token.TOK_EQ]: 5,\n [Token.TOK_GT]: 5,\n [Token.TOK_LT]: 5,\n [Token.TOK_GTE]: 5,\n [Token.TOK_LTE]: 5,\n [Token.TOK_NE]: 5,\n [Token.TOK_MINUS]: 6,\n [Token.TOK_PLUS]: 6,\n [Token.TOK_DIV]: 7,\n [Token.TOK_DIVIDE]: 7,\n [Token.TOK_MODULO]: 7,\n [Token.TOK_MULTIPLY]: 7,\n [Token.TOK_FLATTEN]: 9,\n [Token.TOK_STAR]: 20,\n [Token.TOK_FILTER]: 21,\n [Token.TOK_DOT]: 40,\n [Token.TOK_NOT]: 45,\n [Token.TOK_LBRACE]: 50,\n [Token.TOK_LBRACKET]: 55,\n [Token.TOK_LPAREN]: 60,\n};\n\nclass TokenParser {\n index = 0;\n tokens: LexerToken[] = [];\n private depth = 0;\n private maxDepth?: number;\n private nodeCount = 0;\n private maxNodes?: number;\n\n parse(expression: string, options?: Options): ExpressionNode {\n this.loadTokens(expression, options || { enable_legacy_literals: false });\n this.index = 0;\n this.depth = 0;\n this.nodeCount = 0;\n this.maxDepth = options?.maxDepth;\n this.maxNodes = options?.maxNodes;\n\n const ast = this.expression(0);\n if (this.lookahead(0) !== Token.TOK_EOF) {\n const token = this.lookaheadToken(0);\n this.errorToken(token, `Syntax error: unexpected token type: ${token.type}, value: ${token.value}`);\n }\n if (this.maxNodes !== undefined && countNodes(ast) > this.maxNodes) {\n throw new Error(`Expression exceeds maximum allowed node count of ${this.maxNodes}`);\n }\n return ast;\n }\n\n private loadTokens(expression: string, options: Options): void {\n this.tokens = Lexer.tokenize(expression, options);\n this.tokens.push({ type: Token.TOK_EOF, value: '', start: expression.length });\n }\n\n expression(rbp: number): ExpressionNode {\n if (this.maxDepth !== undefined && this.depth >= this.maxDepth) {\n throw new Error(`Expression exceeds maximum allowed depth of ${this.maxDepth}`);\n }\n this.depth += 1;\n this.trackNode();\n try {\n const leftToken = this.lookaheadToken(0);\n this.advance();\n let left = this.nud(leftToken);\n let currentTokenType = this.lookahead(0);\n while (rbp < bindingPower[currentTokenType]) {\n this.trackNode();\n this.advance();\n left = this.led(currentTokenType, left);\n currentTokenType = this.lookahead(0);\n }\n return left;\n } finally {\n this.depth -= 1;\n }\n }\n\n private trackNode(): void {\n this.nodeCount += 1;\n if (this.maxNodes !== undefined && this.nodeCount > this.maxNodes) {\n throw new Error(`Expression exceeds maximum allowed node count of ${this.maxNodes}`);\n }\n }\n\n private lookahead(offset: number): Token {\n return this.tokens[this.index + offset].type;\n }\n\n private lookaheadToken(offset: number): LexerToken {\n return this.tokens[this.index + offset];\n }\n\n private advance(): void {\n this.index += 1;\n }\n\n nud(token: LexerToken): ExpressionNode {\n switch (token.type) {\n case Token.TOK_VARIABLE:\n return { type: 'Variable', name: token.value as string };\n case Token.TOK_LITERAL:\n return { type: 'Literal', value: token.value };\n case Token.TOK_UNQUOTEDIDENTIFIER: {\n if (TokenParser.isKeyword(token, 'let') && this.lookahead(0) === Token.TOK_VARIABLE) {\n return this.parseLetExpression();\n } else {\n return { type: 'Field', name: token.value as string };\n }\n }\n case Token.TOK_QUOTEDIDENTIFIER:\n if (this.lookahead(0) === Token.TOK_LPAREN) {\n throw new Error('Syntax error: quoted identifier not allowed for function names.');\n } else {\n return { type: 'Field', name: token.value as string };\n }\n case Token.TOK_NOT: {\n const child = this.expression(bindingPower.Not);\n return { type: 'NotExpression', child };\n }\n case Token.TOK_MINUS: {\n const child = this.expression(bindingPower.Minus);\n return {\n type: 'Unary',\n operator: token.type,\n operand: child,\n } as UnaryArithmeticNode;\n }\n case Token.TOK_PLUS: {\n const child = this.expression(bindingPower.Plus);\n return {\n type: 'Unary',\n operator: token.type,\n operand: child,\n } as UnaryArithmeticNode;\n }\n case Token.TOK_STAR: {\n const left: ExpressionNode = { type: 'Identity' };\n return { type: 'ValueProjection', left, right: this.parseProjectionRHS(bindingPower.Star) };\n }\n case Token.TOK_FILTER:\n return this.led(token.type, { type: 'Identity' });\n case Token.TOK_LBRACE:\n return this.parseMultiselectHash();\n case Token.TOK_FLATTEN: {\n const left: ExpressionNode = {\n type: 'Flatten',\n child: { type: 'Identity' },\n };\n const right: ExpressionNode = this.parseProjectionRHS(bindingPower.Flatten);\n return { type: 'Projection', left, right };\n }\n case Token.TOK_LBRACKET: {\n if (this.lookahead(0) === Token.TOK_NUMBER || this.lookahead(0) === Token.TOK_COLON) {\n const right = this.parseIndexExpression();\n return this.projectIfSlice({ type: 'Identity' }, right);\n }\n if (this.lookahead(0) === Token.TOK_STAR && this.lookahead(1) === Token.TOK_RBRACKET) {\n this.advance();\n this.advance();\n const right = this.parseProjectionRHS(bindingPower.Star);\n return {\n left: { type: 'Identity' },\n right,\n type: 'Projection',\n };\n }\n return this.parseMultiselectList();\n }\n case Token.TOK_CURRENT:\n return { type: Token.TOK_CURRENT };\n case Token.TOK_ROOT:\n return { type: Token.TOK_ROOT };\n case Token.TOK_EXPREF: {\n const child = this.expression(bindingPower.Expref);\n return { type: 'ExpressionReference', child };\n }\n case Token.TOK_LPAREN: {\n const expression = this.expression(0);\n this.match(Token.TOK_RPAREN);\n return expression;\n }\n default:\n this.errorToken(token);\n }\n }\n\n led(tokenName: string, left: ExpressionNode): ExpressionNode {\n switch (tokenName) {\n case Token.TOK_QUESTION: {\n const trueExpr = this.expression(0);\n this.match(Token.TOK_COLON);\n const falseExpr = this.expression(0);\n return {\n type: 'Ternary',\n condition: left,\n trueExpr,\n falseExpr,\n };\n }\n case Token.TOK_DOT: {\n const rbp = bindingPower.Dot;\n if (this.lookahead(0) !== Token.TOK_STAR) {\n const right = this.parseDotRHS(rbp);\n return { type: 'Subexpression', left, right };\n }\n this.advance();\n const right = this.parseProjectionRHS(rbp);\n return { type: 'ValueProjection', left, right };\n }\n case Token.TOK_PIPE: {\n const right = this.expression(bindingPower.Pipe);\n return { type: 'Pipe', left, right };\n }\n case Token.TOK_OR: {\n const right = this.expression(bindingPower.Or);\n return { type: 'OrExpression', left, right };\n }\n case Token.TOK_AND: {\n const right = this.expression(bindingPower.And);\n return { type: 'AndExpression', left, right };\n }\n case Token.TOK_LPAREN: {\n if (left.type !== 'Field') {\n throw new Error('Syntax error: expected a Field node');\n }\n const name = left.name;\n const args = this.parseCommaSeparatedExpressionsUntilToken(Token.TOK_RPAREN);\n const node: FunctionNode = { name, type: 'Function', children: args };\n return node;\n }\n case Token.TOK_FILTER: {\n const condition = this.expression(0);\n this.match(Token.TOK_RBRACKET);\n const right: ExpressionNode =\n this.lookahead(0) === Token.TOK_FLATTEN ? { type: 'Identity' } : this.parseProjectionRHS(bindingPower.Filter);\n return { type: 'FilterProjection', left, right, condition };\n }\n case Token.TOK_FLATTEN: {\n const leftNode: UnaryExpressionNode = { type: 'Flatten', child: left };\n const right = this.parseProjectionRHS(bindingPower.Flatten);\n return { type: 'Projection', left: leftNode, right };\n }\n case Token.TOK_ASSIGN: {\n const leftNode = left as VariableNode;\n const right = this.expression(0);\n return {\n type: 'Binding',\n variable: leftNode.name,\n reference: right,\n };\n }\n case Token.TOK_EQ:\n case Token.TOK_NE:\n case Token.TOK_GT:\n case Token.TOK_GTE:\n case Token.TOK_LT:\n case Token.TOK_LTE:\n return this.parseComparator(left, tokenName);\n case Token.TOK_PLUS:\n case Token.TOK_MINUS:\n case Token.TOK_MULTIPLY:\n case Token.TOK_STAR:\n case Token.TOK_DIVIDE:\n case Token.TOK_MODULO:\n case Token.TOK_DIV:\n return this.parseArithmetic(left, tokenName);\n case Token.TOK_LBRACKET: {\n const token = this.lookaheadToken(0);\n if (token.type === Token.TOK_NUMBER || token.type === Token.TOK_COLON) {\n const right = this.parseIndexExpression();\n return this.projectIfSlice(left, right);\n }\n this.match(Token.TOK_STAR);\n this.match(Token.TOK_RBRACKET);\n const right = this.parseProjectionRHS(bindingPower.Star);\n return { type: 'Projection', left, right };\n }\n\n default:\n return this.errorToken(this.lookaheadToken(0));\n }\n }\n\n private static isKeyword(token: LexerToken, keyword: string): boolean {\n return token.type === Token.TOK_UNQUOTEDIDENTIFIER && token.value === keyword;\n }\n\n private match(tokenType: Token | LexerToken): void {\n if (this.lookahead(0) === tokenType) {\n this.advance();\n return;\n } else {\n const token = this.lookaheadToken(0);\n this.errorToken(token, `Syntax error: expected ${tokenType}, got: ${token.type}`);\n }\n }\n\n private errorToken(token: LexerToken, message = ''): never {\n const error = new Error(message || `Syntax error: invalid token (${token.type}): \"${token.value}\"`);\n error.name = 'ParserError';\n throw error;\n }\n\n private parseIndexExpression(): SliceNode | IndexNode {\n if (this.lookahead(0) === Token.TOK_COLON || this.lookahead(1) === Token.TOK_COLON) {\n return this.parseSliceExpression();\n }\n const value = Number(this.lookaheadToken(0).value);\n this.advance();\n this.match(Token.TOK_RBRACKET);\n return { type: 'Index', value };\n }\n\n private projectIfSlice(\n left: ExpressionNode,\n right: ExpressionNode,\n ): BinaryExpressionNode<'Projection' | 'IndexExpression'> {\n const indexExpr: BinaryExpressionNode<'IndexExpression'> = {\n type: 'IndexExpression',\n left,\n right,\n };\n if (right.type === 'Slice') {\n const rhs = this.parseProjectionRHS(bindingPower.Star);\n if (rhs.type === 'Identity') {\n return indexExpr;\n }\n return {\n left: indexExpr,\n right: rhs,\n type: 'Projection',\n };\n }\n return indexExpr;\n }\n\n private parseSliceExpression(): SliceNode {\n const parts: (number | null)[] = [null, null, null];\n\n let index = 0;\n let current = this.lookaheadToken(0);\n\n while (current.type != Token.TOK_RBRACKET && index < 3) {\n if (current.type === Token.TOK_COLON) {\n index++;\n if (index === 3) {\n this.errorToken(this.lookaheadToken(0), 'Syntax error, too many colons in slice expression');\n }\n this.advance();\n } else if (current.type === Token.TOK_NUMBER) {\n const part = this.lookaheadToken(0).value as number;\n parts[index] = part;\n this.advance();\n } else {\n const next = this.lookaheadToken(0);\n this.errorToken(next, `Syntax error, unexpected token: ${next.value}(${next.type})`);\n }\n\n current = this.lookaheadToken(0);\n }\n\n this.match(Token.TOK_RBRACKET);\n\n const [start, stop, step] = parts;\n return { type: 'Slice', start, stop, step };\n }\n\n private parseLetExpression(): LetExpressionNode {\n const separated = this.parseCommaSeparatedExpressionsUntilKeyword('in');\n const expression = this.expression(0);\n const bindings = separated.map(binding => binding as BindingNode);\n return {\n type: 'LetExpression',\n bindings: bindings,\n expression: expression,\n };\n }\n\n private parseCommaSeparatedExpressionsUntilKeyword(keyword: string): ExpressionNode[] {\n return this.parseCommaSeparatedExpressionsUntil(\n () => {\n return TokenParser.isKeyword(this.lookaheadToken(0), keyword);\n },\n () => {\n this.advance();\n },\n );\n }\n\n private parseCommaSeparatedExpressionsUntilToken(token: Token): ExpressionNode[] {\n return this.parseCommaSeparatedExpressionsUntil(\n () => {\n return this.lookahead(0) === token;\n },\n () => {\n return this.match(token);\n },\n );\n }\n\n private parseCommaSeparatedExpressionsUntil(isEndToken: () => boolean, matchEndToken: () => void): ExpressionNode[] {\n const args: ExpressionNode[] = [];\n let expression: ExpressionNode;\n while (!isEndToken()) {\n expression = this.expression(0);\n if (this.lookahead(0) === Token.TOK_COMMA) {\n this.match(Token.TOK_COMMA);\n }\n args.push(expression);\n }\n matchEndToken();\n return args;\n }\n\n private parseComparator(left: ExpressionNode, comparator: ComparatorType): ComparatorNode {\n const right = this.expression(bindingPower[comparator]);\n return { type: 'Comparator', name: comparator, left, right };\n }\n\n private parseArithmetic(left: ExpressionNode, operator: BinaryOperatorType): BinaryArithmeticNode {\n const right = this.expression(bindingPower[operator]);\n return { type: 'Arithmetic', operator: operator, left, right };\n }\n\n private parseDotRHS(rbp: number): ExpressionNode {\n const lookahead = this.lookahead(0);\n const exprTokens = [Token.TOK_UNQUOTEDIDENTIFIER, Token.TOK_QUOTEDIDENTIFIER, Token.TOK_STAR];\n if (exprTokens.includes(lookahead)) {\n return this.expression(rbp);\n }\n if (lookahead === Token.TOK_LBRACKET) {\n this.match(Token.TOK_LBRACKET);\n return this.parseMultiselectList();\n }\n if (lookahead === Token.TOK_LBRACE) {\n this.match(Token.TOK_LBRACE);\n return this.parseMultiselectHash();\n }\n const token = this.lookaheadToken(0);\n this.errorToken(token, `Syntax error, unexpected token: ${token.value}(${token.type})`);\n }\n\n private parseProjectionRHS(rbp: number): ExpressionNode {\n if (bindingPower[this.lookahead(0)] < 10) {\n return { type: 'Identity' };\n }\n if (this.lookahead(0) === Token.TOK_LBRACKET) {\n return this.expression(rbp);\n }\n if (this.lookahead(0) === Token.TOK_FILTER) {\n return this.expression(rbp);\n }\n if (this.lookahead(0) === Token.TOK_DOT) {\n this.match(Token.TOK_DOT);\n return this.parseDotRHS(rbp);\n }\n const token = this.lookaheadToken(0);\n this.errorToken(token, `Syntax error, unexpected token: ${token.value}(${token.type})`);\n }\n\n private parseMultiselectList(): ExpressionNode {\n const expressions: ExpressionNode[] = [];\n while (this.lookahead(0) !== Token.TOK_RBRACKET) {\n const expression = this.expression(0);\n expressions.push(expression);\n if (this.lookahead(0) === Token.TOK_COMMA) {\n this.match(Token.TOK_COMMA);\n if (this.lookahead(0) === Token.TOK_RBRACKET) {\n throw new Error('Syntax error: unexpected token Rbracket');\n }\n }\n }\n this.match(Token.TOK_RBRACKET);\n return { type: 'MultiSelectList', children: expressions };\n }\n\n private parseMultiselectHash(): ExpressionNode {\n const pairs: KeyValuePairNode[] = [];\n const identifierTypes = [Token.TOK_UNQUOTEDIDENTIFIER, Token.TOK_QUOTEDIDENTIFIER];\n let keyToken;\n let keyName: string;\n let value: ExpressionNode;\n for (;;) {\n keyToken = this.lookaheadToken(0);\n if (!identifierTypes.includes(keyToken.type)) {\n throw new Error(`Syntax error: expecting an identifier token, got: ${keyToken.type}`);\n }\n keyName = keyToken.value as string;\n this.advance();\n this.match(Token.TOK_COLON);\n value = this.expression(0);\n pairs.push({ value, type: 'KeyValuePair', name: keyName });\n if (this.lookahead(0) === Token.TOK_COMMA) {\n this.match(Token.TOK_COMMA);\n } else if (this.lookahead(0) === Token.TOK_RBRACE) {\n this.match(Token.TOK_RBRACE);\n break;\n }\n }\n return { type: 'MultiSelectHash', children: pairs };\n }\n}\n\nexport const Parser = new TokenParser();\nexport default Parser;\n","import { ensureInteger, ensurePositiveInteger } from '.';\n\nexport const findFirst = (subject: string, sub: string, start?: number, end?: number): number | null => {\n if (!subject || !sub) {\n return null;\n }\n const s = Math.max(ensureInteger(start ?? 0), 0);\n const e = Math.min(ensureInteger(end ?? subject.length), subject.length);\n const offset = subject.slice(s, e).indexOf(sub);\n return offset === -1 ? null : offset + s;\n};\nexport const findLast = (subject: string, sub: string, start?: number, end?: number): number | null => {\n if (!subject || !sub) {\n return null;\n }\n const s = Math.max(ensureInteger(start ?? 0), 0);\n const e = Math.min(ensureInteger(end ?? subject.length), subject.length);\n const offset = subject.slice(s, e).lastIndexOf(sub);\n return offset === -1 ? null : offset + s;\n};\nexport const lower = (subject: string): string => subject.toLowerCase();\nconst ensurePadFuncParams = (name: string, width: number, padding = ' '): string => {\n if (padding.length > 1) {\n throw new Error(`invalid value, ${name} expects its 'pad' parameter to be a valid string with a single codepoint`);\n }\n ensurePositiveInteger(width);\n return padding;\n};\nexport const padLeft = (subject: string, width: number, padding?: string): string => {\n padding = ensurePadFuncParams('pad_left', width, padding);\n return (subject && subject.padStart(width, padding)) || '';\n};\nexport const padRight = (subject: string, width: number, padding?: string): string => {\n padding = ensurePadFuncParams('pad_right', width, padding);\n return (subject && subject.padEnd(width, padding)) || '';\n};\nexport const replace = (subject: string, string: string, by: string, count?: number): string => {\n if (count === 0) {\n return subject;\n }\n if (!count) {\n return subject.split(string).join(by);\n }\n ensurePositiveInteger(count);\n while (count-- > 0 && subject.includes(string)) {\n subject = subject.replace(string, by);\n }\n return subject;\n};\nexport const split = (subject: string, search: string, count?: number): string[] => {\n if (subject.length == 0 && search.length === 0) {\n return [];\n }\n if (count === null || count === undefined) {\n return subject.split(search);\n }\n ensurePositiveInteger(count);\n if (count === 0) {\n return [subject];\n }\n const split = subject.split(search);\n return [...split.slice(0, count), split.slice(count).join(search)];\n};\nexport const trim = (subject: string, chars?: string): string => {\n return trimLeft(trimRight(subject, chars), chars);\n};\nexport const trimLeft = (subject: string, chars?: string): string => {\n return trimImpl(subject, list => new RegExp(`^[${list}]*(.*?)`), chars);\n};\nexport const trimRight = (subject: string, chars?: string): string => {\n return trimImpl(subject, list => new RegExp(`(.*?)[${list}]*$`), chars);\n};\nconst trimImpl = (subject: string, regExper: (arg: string) => RegExp, chars?: string): string => {\n const pattern = chars ? chars.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') : '\\\\s\\u0085';\n return subject.replace(regExper(pattern), '$1');\n};\n\nexport const upper = (subject: string): string => subject.toUpperCase();\n","export class Text {\n private _text: string;\n constructor(text: string) {\n this._text = text;\n }\n\n public get string(): string {\n return this._text;\n }\n\n public get length(): number {\n let count = 0;\n for (const _ of this._text) {\n count += 1;\n }\n return count;\n }\n\n public compareTo(other: string): number {\n return Text.compare(this, new Text(other));\n }\n\n public static get comparer(): (lhs: string, rhs: string) => number {\n const stringComparer = (left: string, right: string): number => {\n return new Text(left).compareTo(right);\n };\n return stringComparer;\n }\n\n public static compare(left: Text, right: Text): number {\n const leftCp = left.codePoints;\n const rightCp = right.codePoints;\n for (let index = 0; index < Math.min(leftCp.length, rightCp.length); index++) {\n if (leftCp[index] === rightCp[index]) {\n continue;\n }\n return leftCp[index] - rightCp[index] > 0 ? 1 : -1;\n }\n return leftCp.length - rightCp.length > 0 ? 1 : -1;\n }\n\n public reverse(): string {\n return String.fromCodePoint(...this.codePoints.reverse());\n }\n\n private get codePoints(): number[] {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n // biome-ignore lint: lint/style/noNonNullAssertion\n const array = [...this._text].map(s => s.codePointAt(0)!);\n return array;\n }\n}\n","import type { ExpressionNode } from './AST.type';\nimport type {\n JSONArray,\n JSONArrayArray,\n JSONArrayKeyValuePairs,\n JSONArrayObject,\n JSONObject,\n JSONValue,\n ObjectDict,\n} from './JSON.type';\nimport type { TreeInterpreter } from './TreeInterpreter';\nimport {\n findFirst,\n findLast,\n lower,\n padLeft,\n padRight,\n replace,\n split,\n trim,\n trimLeft,\n trimRight,\n upper,\n} from './utils/strings';\nimport { Text } from './utils/text';\n\nexport enum InputArgument {\n TYPE_NUMBER = 0,\n TYPE_ANY = 1,\n TYPE_STRING = 2,\n TYPE_ARRAY = 3,\n TYPE_OBJECT = 4,\n TYPE_BOOLEAN = 5,\n TYPE_EXPREF = 6,\n TYPE_NULL = 7,\n TYPE_ARRAY_NUMBER = 8,\n TYPE_ARRAY_STRING = 9,\n TYPE_ARRAY_OBJECT = 10,\n TYPE_ARRAY_ARRAY = 11,\n}\n\nexport interface InputSignature {\n types: InputArgument[];\n variadic?: boolean;\n optional?: boolean;\n}\n\nexport type RuntimeFunction<T extends ReadonlyArray<JSONValue | ExpressionNode>, U> = (resolvedArgs: T) => U;\n\nexport interface FunctionSignature {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // biome-ignore lint: lint/suspicious/noExplicitAny\n _func: RuntimeFunction<any, JSONValue>;\n _signature: InputSignature[];\n}\n\nexport interface FunctionTable {\n [functionName: string]: FunctionSignature;\n}\n\n// Built-in function names for TypeScript 5.x template literal type checking\nexport type BuiltInFunctionNames =\n | 'abs'\n | 'avg'\n | 'ceil'\n | 'contains'\n | 'ends_with'\n | 'find_first'\n | 'find_last'\n | 'floor'\n | 'from_items'\n | 'group_by'\n | 'items'\n | 'join'\n | 'keys'\n | 'length'\n | 'lower'\n | 'map'\n | 'max'\n | 'max_by'\n | 'merge'\n | 'min'\n | 'min_by'\n | 'not_null'\n | 'pad_left'\n | 'pad_right'\n | 'replace'\n | 'reverse'\n | 'sort'\n | 'sort_by'\n | 'split'\n | 'starts_with'\n | 'sum'\n | 'to_array'\n | 'to_number'\n | 'to_string'\n | 'type'\n | 'upper'\n | 'values'\n | 'zip';\n\n// Registration options for enhanced registerFunction behavior\nexport interface RegisterOptions {\n /**\n * Allow overriding existing functions. Default: false\n * When true, replaces existing function without error\n * When false, throws error if function already exists (backward compatible)\n */\n override?: boolean;\n /**\n * Emit warning when overriding existing functions. Default: false\n * Only applies when override is true\n */\n warn?: boolean;\n}\n\n// Registration result for better error handling and introspection\nexport type RegistrationResult =\n | { success: true; message?: string }\n | { success: false; reason: 'already-exists' | 'invalid-signature' | 'invalid-name'; message: string };\n\n// Enhanced function registry interface for state management\nexport interface FunctionRegistry {\n /**\n * Register a new function with optional override behavior\n */\n register<T extends string>(\n name: T extends BuiltInFunctionNames ? never : T,\n func: RuntimeFunction<(JSONValue | ExpressionNode)[], JSONValue>,\n signature: InputSignature[],\n options?: RegisterOptions,\n ): RegistrationResult;\n\n /**\n * Unregister a custom function (built-in functions cannot be unregistered)\n */\n unregister<T extends string>(name: T extends BuiltInFunctionNames ? never : T): boolean;\n\n /**\n * Check if a function is registered\n */\n isRegistered(name: string): boolean;\n\n /**\n * Get list of all registered function names\n */\n getRegistered(): string[];\n\n /**\n * Get list of custom (non-built-in) function names\n */\n getCustomFunctions(): string[];\n\n /**\n * Clear all custom functions (built-in functions remain)\n */\n clearCustomFunctions(): void;\n}\n\n// Factory functions for common function patterns\nconst createMathFunction =\n (mathFn: (n: number) => number): RuntimeFunction<[number], number> =>\n ([value]) =>\n mathFn(value);\n\nconst createStringFunction =\n (stringFn: (s: string) => string): RuntimeFunction<[string], string> =>\n ([subject]) =>\n stringFn(subject);\n\nconst createObjectFunction =\n <T>(objFn: (obj: JSONObject) => T): RuntimeFunction<[JSONObject], T> =>\n ([obj]) =>\n objFn(obj);\n\nconst ARRAY_SUBTYPES: Partial<Record<InputArgument, InputArgument>> = {\n [InputArgument.TYPE_ARRAY_NUMBER]: InputArgument.TYPE_NUMBER,\n [InputArgument.TYPE_ARRAY_OBJECT]: InputArgument.TYPE_OBJECT,\n [InputArgument.TYPE_ARRAY_STRING]: InputArgument.TYPE_STRING,\n [InputArgument.TYPE_ARRAY_ARRAY]: InputArgument.TYPE_ARRAY,\n};\n\nexport class Runtime implements FunctionRegistry {\n _interpreter: TreeInterpreter;\n _functionTable: FunctionTable;\n private _customFunctions: Set<string> = new Set();\n TYPE_NAME_TABLE = Object.freeze({\n [InputArgument.TYPE_NUMBER]: 'number',\n [InputArgument.TYPE_ANY]: 'any',\n [InputArgument.TYPE_STRING]: 'string',\n [InputArgument.TYPE_ARRAY]: 'array',\n [InputArgument.TYPE_OBJECT]: 'object',\n [InputArgument.TYPE_BOOLEAN]: 'boolean',\n [InputArgument.TYPE_EXPREF]: 'expression',\n [InputArgument.TYPE_NULL]: 'null',\n [InputArgument.TYPE_ARRAY_NUMBER]: 'Array<number>',\n [InputArgument.TYPE_ARRAY_OBJECT]: 'Array<object>',\n [InputArgument.TYPE_ARRAY_STRING]: 'Array<string>',\n [InputArgument.TYPE_ARRAY_ARRAY]: 'Array<Array<any>>',\n } as const);\n\n constructor(interpreter: TreeInterpreter) {\n this._interpreter = interpreter;\n this._functionTable = this.buildFunctionTable();\n }\n\n private buildFunctionTable(): FunctionTable {\n return {\n // Math functions\n abs: { _func: createMathFunction(Math.abs), _signature: [{ types: [InputArgument.TYPE_NUMBER] }] },\n ceil: { _func: createMathFunction(Math.ceil), _signature: [{ types: [InputArgument.TYPE_NUMBER] }] },\n floor: { _func: createMathFunction(Math.floor), _signature: [{ types: [InputArgument.TYPE_NUMBER] }] },\n\n // String functions\n lower: { _func: createStringFunction(lower), _signature: [{ types: [InputArgument.TYPE_STRING] }] },\n upper: { _func: createStringFunction(upper), _signature: [{ types: [InputArgument.TYPE_STRING] }] },\n\n // Object functions\n keys: { _func: createObjectFunction(Object.keys), _signature: [{ types: [InputArgument.TYPE_OBJECT] }] },\n values: { _func: createObjectFunction(Object.values), _signature: [{ types: [InputArgument.TYPE_OBJECT] }] },\n\n // Complex functions that need custom implementations\n avg: { _func: this.functionAvg, _signature: [{ types: [InputArgument.TYPE_ARRAY_NUMBER] }] },\n contains: {\n _func: this.functionContains,\n _signature: [\n { types: [InputArgument.TYPE_STRING, InputArgument.TYPE_ARRAY] },\n { types: [InputArgument.TYPE_ANY] },\n ],\n },\n ends_with: {\n _func: this.functionEndsWith,\n _signature: [{ types: [InputArgument.TYPE_STRING] }, { types: [InputArgument.TYPE_STRING] }],\n },\n find_first: {\n _func: this.functionFindFirst,\n _signature: [\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_NUMBER], optional: true },\n { types: [InputArgument.TYPE_NUMBER], optional: true },\n ],\n },\n find_last: {\n _func: this.functionFindLast,\n _signature: [\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_NUMBER], optional: true },\n { types: [InputArgument.TYPE_NUMBER], optional: true },\n ],\n },\n from_items: { _func: this.functionFromItems, _signature: [{ types: [InputArgument.TYPE_ARRAY_ARRAY] }] },\n group_by: {\n _func: this.functionGroupBy,\n _signature: [{ types: [InputArgument.TYPE_ARRAY] }, { types: [InputArgument.TYPE_EXPREF] }],\n },\n items: { _func: this.functionItems, _signature: [{ types: [InputArgument.TYPE_OBJECT] }] },\n join: {\n _func: this.functionJoin,\n _signature: [{ types: [InputArgument.TYPE_STRING] }, { types: [InputArgument.TYPE_ARRAY_STRING] }],\n },\n length: {\n _func: this.functionLength,\n _signature: [{ types: [InputArgument.TYPE_STRING, InputArgument.TYPE_ARRAY, InputArgument.TYPE_OBJECT] }],\n },\n map: {\n _func: this.functionMap,\n _signature: [{ types: [InputArgument.TYPE_EXPREF] }, { types: [InputArgument.TYPE_ARRAY] }],\n },\n max: {\n _func: this.functionMax,\n _signature: [{ types: [InputArgument.TYPE_ARRAY_NUMBER, InputArgument.TYPE_ARRAY_STRING] }],\n },\n max_by: {\n _func: this.functionMaxBy,\n _signature: [{ types: [InputArgument.TYPE_ARRAY] }, { types: [InputArgument.TYPE_EXPREF] }],\n },\n merge: { _func: this.functionMerge, _signature: [{ types: [InputArgument.TYPE_OBJECT], variadic: true }] },\n min: {\n _func: this.functionMin,\n _signature: [{ types: [InputArgument.TYPE_ARRAY_NUMBER, InputArgument.TYPE_ARRAY_STRING] }],\n },\n min_by: {\n _func: this.functionMinBy,\n _signature: [{ types: [InputArgument.TYPE_ARRAY] }, { types: [InputArgument.TYPE_EXPREF] }],\n },\n not_null: { _func: this.functionNotNull, _signature: [{ types: [InputArgument.TYPE_ANY], variadic: true }] },\n pad_left: {\n _func: this.functionPadLeft,\n _signature: [\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_NUMBER] },\n { types: [InputArgument.TYPE_STRING], optional: true },\n ],\n },\n pad_right: {\n _func: this.functionPadRight,\n _signature: [\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_NUMBER] },\n { types: [InputArgument.TYPE_STRING], optional: true },\n ],\n },\n replace: {\n _func: this.functionReplace,\n _signature: [\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_NUMBER], optional: true },\n ],\n },\n reverse: {\n _func: this.functionReverse,\n _signature: [{ types: [InputArgument.TYPE_STRING, InputArgument.TYPE_ARRAY] }],\n },\n sort: {\n _func: this.functionSort,\n _signature: [{ types: [InputArgument.TYPE_ARRAY_STRING, InputArgument.TYPE_ARRAY_NUMBER] }],\n },\n sort_by: {\n _func: this.functionSortBy,\n _signature: [{ types: [InputArgument.TYPE_ARRAY] }, { types: [InputArgument.TYPE_EXPREF] }],\n },\n split: {\n _func: this.functionSplit,\n _signature: [\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_STRING] },\n { types: [InputArgument.TYPE_NUMBER], optional: true },\n ],\n },\n starts_with: {\n _func: this.functionStartsWith,\n _signature: [{ types: [InputArgument.TYPE_STRING] }, { types: [InputArgument.TYPE_STRING] }],\n },\n sum: { _func: this.functionSum, _signature: [{ types: [InputArgument.TYPE_ARRAY_NUMBER] }] },\n to_array: { _func: this.functionToArray, _signature: [{ types: [InputArgument.TYPE_ANY] }] },\n to_number: { _func: this.functionToNumber, _signature: [{ types: [InputArgument.TYPE_ANY] }] },\n to_string: { _func: this.functionToString, _signature: [{ types: [InputArgument.TYPE_ANY] }] },\n trim: {\n _func: this.functionTrim,\n _signature: [{ types: [InputArgument.TYPE_STRING] }, { types: [InputArgument.TYPE_STRING], optional: true }],\n },\n trim_left: {\n _func: this.functionTrimLeft,\n _signature: [{ types: [InputArgument.TYPE_STRING] }, { types: [InputArgument.TYPE_STRING], optional: true }],\n },\n trim_right: {\n _func: this.functionTrimRight,\n _signature: [{ types: [InputArgument.TYPE_STRING] }, { types: [InputArgument.TYPE_STRING], optional: true }],\n },\n type: { _func: this.functionType, _signature: [{ types: [InputArgument.TYPE_ANY] }] },\n zip: { _func: this.functionZip, _signature: [{ types: [InputArgument.TYPE_ARRAY], variadic: true }] },\n };\n }\n\n /**\n * Enhanced registerFunction with backward compatibility and new options\n * @deprecated Use register() method for enhanced functionality\n */\n registerFunction(\n name: string,\n customFunction: RuntimeFunction<(JSONValue | ExpressionNode)[], JSONValue>,\n signature: InputSignature[],\n options?: RegisterOptions,\n ): void {\n // For backward compatibility, we bypass the type checking here\n // The register method will still validate the function name at runtime\n const result = this._registerInternal(name, customFunction, signature, options);\n if (!result.success) {\n throw new Error(result.message);\n }\n }\n\n /**\n * Internal registration method that bypasses TypeScript type checking\n */\n private _registerInternal(\n name: string,\n customFunction: RuntimeFunction<(JSONValue | ExpressionNode)[], JSONValue>,\n signature: InputSignature[],\n options: RegisterOptions = {},\n ): RegistrationResult {\n // Validate function name\n if (!name || typeof name !== 'string' || name.trim() === '') {\n return {\n success: false,\n reason: 'invalid-name',\n message: 'Function name must be a non-empty string',\n };\n }\n\n // Validate signature\n try {\n this.validateInputSignatures(name, signature);\n } catch (error) {\n return {\n success: false,\n reason: 'invalid-signature',\n message: error instanceof Error ? error.message : 'Invalid function signature',\n };\n }\n\n const { override = false, warn = false } = options;\n const exists = name in this._functionTable;\n\n // Handle existing function\n if (exists && !override) {\n return {\n success: false,\n reason: 'already-exists',\n message: `Function already defined: ${name}(). Use { override: true } to replace it.`,\n };\n }\n\n // Emit warning if requested\n if (exists && override && warn) {\n console.warn(`Warning: Overriding existing function: ${name}()`);\n }\n\n // Register the function\n this._functionTable[name] = {\n _func: customFunction.bind(this),\n _signature: signature,\n };\n\n // Track custom functions (exclude built-ins)\n this._customFunctions.add(name);\n\n const message = exists\n ? `Function ${name}() overridden successfully`\n : `Function ${name}() registered successfully`;\n return { success: true, message };\n }\n\n /**\n * Register a new function with enhanced options and type safety\n */\n register<T extends string>(\n name: T extends BuiltInFunctionNames ? never : T,\n customFunction: RuntimeFunction<(JSONValue | ExpressionNode)[], JSONValue>,\n signature: InputSignature[],\n options: RegisterOptions = {},\n ): RegistrationResult {\n return this._registerInternal(name, customFunction, signature, options);\n }\n\n /**\n * Unregister a custom function (built-in functions cannot be unregistered)\n */\n unregister<T extends string>(name: T extends BuiltInFunctionNames ? never : T): boolean {\n if (!this._customFunctions.has(name)) {\n return false; // Function doesn't exist or is built-in\n }\n\n delete this._functionTable[name];\n this._customFunctions.delete(name);\n return true;\n }\n\n /**\n * Check if a function is registered\n */\n isRegistered(name: string): boolean {\n return name in this._functionTable;\n }\n\n /**\n * Get list of all registered function names\n */\n getRegistered(): string[] {\n return Object.keys(this._functionTable);\n }\n\n /**\n * Get list of custom (non-built-in) function names\n */\n getCustomFunctions(): string[] {\n return Array.from(this._customFunctions);\n }\n\n /**\n * Clear all custom functions (built-in functions remain)\n */\n clearCustomFunctions(): void {\n for (const name of this._customFunctions) {\n delete this._functionTable[name];\n }\n this._customFunctions.clear();\n }\n\n callFunction(name: string, resolvedArgs: (JSONValue | ExpressionNode)[]): JSONValue {\n const functionEntry = this._functionTable[name];\n if (functionEntry === undefined) {\n throw new Error(`Unknown function: ${name}()`);\n }\n this.validateArgs(name, resolvedArgs, functionEntry._signature);\n return functionEntry._func.call(this, resolvedArgs);\n }\n\n private validateInputSignatures(name: string, signature: InputSignature[]): void {\n for (let i = 0; i < signature.length; i += 1) {\n if ('variadic' in signature[i] && i !== signature.length - 1) {\n throw new Error(`Invalid arity: ${name}() 'variadic' argument ${i + 1} must occur last`);\n }\n }\n }\n\n private validateArgs(name: string, args: (JSONValue | ExpressionNode)[], signature: InputSignature[]): void {\n this.validateInputSignatures(name, signature);\n this.validateArity(name, args, signature);\n this.validateTypes(name, args, signature);\n }\n\n private validateArity(name: string, args: (JSONValue | ExpressionNode)[], signature: InputSignature[]): void {\n const numberOfRequiredArgs = signature.filter(argSignature => !(argSignature.optional ?? false)).length;\n const lastArgIsVariadic = signature[signature.length - 1]?.variadic ?? false;\n const tooFewArgs = args.length < numberOfRequiredArgs;\n const tooManyArgs = args.length > signature.length;\n\n if ((lastArgIsVariadic && tooFewArgs) || (!lastArgIsVariadic && (tooFewArgs || tooManyArgs))) {\n const tooFewModifier =\n tooFewArgs && ((!lastArgIsVariadic && numberOfRequiredArgs > 1) || lastArgIsVariadic) ? 'at least ' : '';\n const pluralized = signature.length > 1;\n throw new Error(\n `Invalid arity: ${name}() takes ${tooFewModifier}${numberOfRequiredArgs} argument${\n (pluralized && 's') || ''\n } but received ${args.length}`,\n );\n }\n }\n\n private validateTypes(name: string, args: (JSONValue | ExpressionNode)[], signature: InputSignature[]): void {\n for (let i = 0; i < signature.length; i += 1) {\n const currentSpec = signature[i].types;\n const actualType = this.getTypeName(args[i]) as InputArgument;\n\n if (actualType === undefined) {\n continue;\n }\n\n const typeMatched = currentSpec.some(expectedType => this.typeMatches(actualType, expectedType, args[i]));\n\n if (!typeMatched) {\n const expected = currentSpec.map(typeId => this.TYPE_NAME_TABLE[typeId]).join(' | ');\n throw new Error(\n `Invalid type: ${name}() expected argument ${i + 1} to be type (${expected}) but received type ${\n this.TYPE_NAME_TABLE[actualType]\n } instead.`,\n );\n }\n }\n }\n\n private typeMatches(actual: InputArgument, expected: InputArgument, argValue: unknown): boolean {\n if (expected === InputArgument.TYPE_ANY) {\n return true;\n }\n const subtype = ARRAY_SUBTYPES[expected];\n if (subtype !== undefined) {\n if (actual !== InputArgument.TYPE_ARRAY) {\n return false;\n }\n const array = argValue as JSONValue[];\n return array.every(item => {\n const typeName = this.getTypeName(item);\n return typeName === undefined || this.typeMatches(typeName, subtype, item);\n });\n }\n return actual === expected;\n }\n private getTypeName(obj: JSONValue | ExpressionNode): InputArgument | undefined {\n if (obj === null) {\n return InputArgument.TYPE_NULL;\n }\n if (typeof obj === 'string') {\n return InputArgument.TYPE_STRING;\n }\n if (typeof obj === 'number') {\n return InputArgument.TYPE_NUMBER;\n }\n if (typeof obj === 'boolean') {\n return InputArgument.TYPE_BOOLEAN;\n }\n if (Array.isArray(obj)) {\n return InputArgument.TYPE_ARRAY;\n }\n if (typeof obj === 'object') {\n if ((obj as ObjectDict).expref) {\n return InputArgument.TYPE_EXPREF;\n }\n return InputArgument.TYPE_OBJECT;\n }\n return;\n }\n\n createKeyFunction(exprefNode: ExpressionNode, allowedTypes: InputArgument[]): (x: JSONValue) => JSONValue {\n const interpreter = this._interpreter;\n const keyFunc = (x: JSONValue): JSONValue => {\n const current = interpreter.visit(exprefNode, x) as JSONValue;\n if (!allowedTypes.includes(this.getTypeName(current) as InputArgument)) {\n const msg = `Invalid type: expected one of (${allowedTypes\n .map(t => this.TYPE_NAME_TABLE[t])\n .join(' | ')}), received ${this.TYPE_NAME_TABLE[this.getTypeName(current) as InputArgument]}`;\n throw new Error(msg);\n }\n return current;\n };\n return keyFunc;\n }\n\n private functionAvg: RuntimeFunction<[number[]], number | null> = ([inputArray]) => {\n if (!inputArray || inputArray.length == 0) {\n return null;\n }\n\n let sum = 0;\n for (let i = 0; i < inputArray.length; i += 1) {\n sum += inputArray[i];\n }\n return sum / inputArray.length;\n };\n\n private functionContains: RuntimeFunction<[string[] | JSONArray, JSONValue], JSONValue> = ([\n searchable,\n searchValue,\n ]) => {\n if (Array.isArray(searchable)) {\n const array = <JSONArray>searchable;\n return array.includes(searchValue);\n }\n\n if (typeof searchable === 'string') {\n const text = <string>searchable;\n if (typeof searchValue === 'string') {\n return text.includes(searchValue);\n }\n }\n\n return null;\n };\n\n private functionEndsWith: RuntimeFunction<[string, string], boolean> = ([searchStr, suffix]) => {\n return searchStr.endsWith(suffix);\n };\n\n private functionFindFirst = this.createFindFunction(findFirst);\n private functionFindLast = this.createFindFunction(findLast);\n\n private createFindFunction(\n findFn: (subject: string, search: string, start?: number, end?: number) => number | null,\n ): RuntimeFunction<JSONValue[], number | null> {\n return resolvedArgs => {\n const subject = resolvedArgs[0] as string;\n const search = resolvedArgs[1] as string;\n const start = resolvedArgs.length > 2 ? (resolvedArgs[2] as number) : undefined;\n const end = resolvedArgs.length > 3 ? (resolvedArgs[3] as number) : undefined;\n return findFn(subject, search, start, end);\n };\n }\n\n private functionFromItems: RuntimeFunction<[JSONArrayKeyValuePairs], JSONObject> = ([array]) => {\n for (const pair of array) {\n if (pair.length !== 2 || typeof pair[0] !== 'string') {\n throw new Error('invalid value, each array must contain two elements, a pair of string and value');\n }\n }\n return Object.fromEntries(array);\n };\n\n private functionGroupBy: RuntimeFunction<[JSONArrayObject, ExpressionNode], JSONValue> = ([array, exprefNode]) => {\n const keyFunction = this.createKeyFunction(exprefNode, [InputArgument.TYPE_STRING]);\n const groups: Record<string, JSONValue[]> = {};\n for (const item of array) {\n const key = keyFunction(item) as string;\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n }\n return groups;\n };\n\n private functionItems: RuntimeFunction<[JSONObject], JSONArray> = ([inputValue]) => {\n return Object.entries(inputValue);\n };\n\n private functionJoin: RuntimeFunction<[string, string[]], string> = resolvedArgs => {\n const [joinChar, listJoin] = resolvedArgs;\n return listJoin.join(joinChar);\n };\n\n private functionLength: RuntimeFunction<[string | JSONArray | JSONObject], number> = ([inputValue]) => {\n if (typeof inputValue === 'string') {\n return new Text(inputValue).length;\n }\n if (Array.isArray(inputValue)) {\n return inputValue.length;\n }\n return Object.keys(inputValue).length;\n };\n\n private functionMap: RuntimeFunction<[ExpressionNode, JSONArray], JSONArray> = ([exprefNode, elements]) => {\n if (!this._interpreter) {\n return [];\n }\n const mapped: JSONValue[] = [];\n const interpreter = this._interpreter;\n for (let i = 0; i < elements.length; i += 1) {\n mapped.push(<JSONValue>interpreter.visit(exprefNode, elements[i]));\n }\n return mapped;\n };\n\n private functionMax: RuntimeFunction<[(string | number)[]], string | number | null> = ([inputValue]) => {\n if (!inputValue.length) {\n return null;\n }\n\n const typeName = this.getTypeName(inputValue[0]);\n if (typeName === InputArgument.TYPE_NUMBER) {\n return Math.max(...(inputValue as number[]));\n }\n\n const elements = inputValue as string[];\n let maxElement = elements[0];\n for (let i = 1; i < elements.length; i += 1) {\n if (maxElement.localeCompare(elements[i]) < 0) {\n maxElement = elements[i];\n }\n }\n return maxElement;\n };\n\n private functionMaxBy: RuntimeFunction<[number[] | string[], ExpressionNode], JSONValue> = resolvedArgs => {\n const exprefNode = resolvedArgs[1];\n const resolvedArray = resolvedArgs[0];\n const keyFunction = this.createKeyFunction(exprefNode, [InputArgument.TYPE_NUMBER, InputArgument.TYPE_STRING]);\n let maxNumber = -Infinity;\n let maxRecord!: JSONValue;\n let current: number | undefined;\n for (let i = 0; i < resolvedArray.length; i += 1) {\n current = keyFunction && (keyFunction(resolvedArray[i]) as number);\n if (current !== undefined && current > maxNumber) {\n maxNumber = current;\n maxRecord = resolvedArray[i];\n }\n }\n return maxRecord || null;\n };\n\n private functionMerge: RuntimeFunction<JSONObject[], JSONObject> = resolvedArgs => {\n return Object.assign({}, ...resolvedArgs);\n };\n\n private functionMin: RuntimeFunction<[(string | number)[]], string | number | null> = ([inputValue]) => {\n if (!inputValue.length) {\n return null;\n }\n\n const typeName = this.getTypeName(inputValue[0]);\n if (typeName === InputArgument.TYPE_NUMBER) {\n return Math.min(...(inputValue as number[]));\n }\n\n const elements = inputValue as string[];\n let minElement = elements[0];\n for (let i = 1; i < elements.length; i += 1) {\n if (elements[i].localeCompare(minElement) < 0) {\n minElement = elements[i];\n }\n }\n return minElement;\n };\n\n private functionMinBy: RuntimeFunction<[number[] | string[], ExpressionNode], JSONValue> = resolvedArgs => {\n const exprefNode = resolvedArgs[1];\n const resolvedArray = resolvedArgs[0];\n const keyFunction = this.createKeyFunction(exprefNode, [InputArgument.TYPE_NUMBER, InputArgument.TYPE_STRING]);\n let minNumber = Infinity;\n let minRecord!: JSONValue;\n let current: number | undefined;\n for (let i = 0; i < resolvedArray.length; i += 1) {\n current = keyFunction && (keyFunction(resolvedArray[i]) as number);\n if (current !== undefined && current < minNumber) {\n minNumber = current;\n minRecord = resolvedArray[i];\n }\n }\n return minRecord || null;\n };\n\n private functionNotNull: RuntimeFunction<JSONArray, JSONValue> = resolvedArgs => {\n return resolvedArgs.find(arg => arg !== null) ?? null;\n };\n\n private functionPadLeft = this.createPadFunction(padLeft);\n private functionPadRight = this.createPadFunction(padRight);\n\n private createPadFunction(\n padFn: (subject: string, width: number, padding?: string) => string,\n ): RuntimeFunction<JSONValue[], string> {\n return resolvedArgs => {\n const subject = resolvedArgs[0] as string;\n const width = resolvedArgs[1] as number;\n const padding = resolvedArgs.length > 2 ? (resolvedArgs[2] as string) : undefined;\n return padFn(subject, width, padding);\n };\n }\n\n private functionReplace: RuntimeFunction<JSONValue[], string> = resolvedArgs => {\n const subject = <string>resolvedArgs[0];\n const string = <string>resolvedArgs[1];\n const by = <string>resolvedArgs[2];\n return replace(subject, string, by, resolvedArgs.length > 3 ? <number>resolvedArgs[3] : undefined);\n };\n\n private functionSplit: RuntimeFunction<JSONValue[], string[]> = resolvedArgs => {\n const subject = <string>resolvedArgs[0];\n const search = <string>resolvedArgs[1];\n return split(subject, search, resolvedArgs.length > 2 ? <number>resolvedArgs[2] : undefined);\n };\n\n private functionReverse: RuntimeFunction<[string | JSONArray], string | JSONArray> = ([inputValue]) => {\n const typeName = this.getTypeName(inputValue);\n if (typeName === InputArgument.TYPE_STRING) {\n return new Text(inputValue as string).reverse();\n }\n const reversedArray = [...(inputValue as JSONArray)];\n reversedArray.reverse();\n return reversedArray;\n };\n\n private functionSort: RuntimeFunction<[(string | number)[]], (string | number)[]> = ([inputValue]) => {\n if (inputValue.length <= 1) {\n return inputValue;\n }\n if (typeof inputValue[0] === 'string') {\n return (<string[]>[...inputValue]).sort(Text.comparer);\n }\n return [...inputValue].sort();\n };\n\n private functionSortBy: RuntimeFunction<[number[] | string[], ExpressionNode], JSONValue> = resolvedArgs => {\n const sortedArray = [...resolvedArgs[0]];\n if (sortedArray.length <= 1) {\n return sortedArray;\n }\n const interpreter = this._interpreter;\n const exprefNode = resolvedArgs[1];\n const requiredType = this.getTypeName(interpreter.visit(exprefNode, sortedArray[0]) as JSONValue);\n if (requiredType !== undefined && ![InputArgument.TYPE_NUMBER, InputArgument.TYPE_STRING].includes(requiredType)) {\n throw new Error(`Invalid type: unexpected type (${this.TYPE_NAME_TABLE[requiredType]})`);\n }\n function throwInvalidTypeError(rt: Runtime, item: string | number): never {\n throw new Error(\n `Invalid type: expected (${rt.TYPE_NAME_TABLE[requiredType as InputArgument]}), received ${\n rt.TYPE_NAME_TABLE[rt.getTypeName(item) as InputArgument]\n }`,\n );\n }\n\n return sortedArray.sort((a, b) => {\n const exprA = interpreter.visit(exprefNode, a) as number | string;\n const exprB = interpreter.visit(exprefNode, b) as number | string;\n if (this.getTypeName(exprA) !== requiredType) {\n throwInvalidTypeError(this, exprA);\n } else if (this.getTypeName(exprB) !== requiredType) {\n throwInvalidTypeError(this, exprB);\n }\n if (requiredType === InputArgument.TYPE_STRING) {\n return Text.comparer(<string>exprA, <string>exprB);\n }\n return <number>exprA - <number>exprB;\n });\n };\n\n private functionStartsWith: RuntimeFunction<[string, string], boolean> = ([searchable, searchStr]) => {\n return searchable.startsWith(searchStr);\n };\n\n private functionSum: RuntimeFunction<[number[]], number> = ([inputValue]) => {\n return inputValue.reduce((x, y) => x + y, 0);\n };\n\n private functionToArray: RuntimeFunction<[JSONValue], JSONArray> = ([inputValue]) => {\n return Array.isArray(inputValue) ? inputValue : [inputValue];\n };\n\n private functionToNumber: RuntimeFunction<[JSONValue], number | null> = ([inputValue]) => {\n const typeName = this.getTypeName(inputValue);\n let convertedValue: number;\n if (typeName === InputArgument.TYPE_NUMBER) {\n return inputValue as number;\n }\n if (typeName === InputArgument.TYPE_STRING) {\n convertedValue = +(inputValue as string);\n if (!isNaN(convertedValue)) {\n return convertedValue;\n }\n }\n return null;\n };\n\n private functionToString: RuntimeFunction<[JSONValue], string> = ([inputValue]) => {\n return typeof inputValue === 'string' ? inputValue : JSON.stringify(inputValue);\n };\n\n private functionTrim = this.createTrimFunction(trim);\n private functionTrimLeft = this.createTrimFunction(trimLeft);\n private functionTrimRight = this.createTrimFunction(trimRight);\n\n private createTrimFunction(\n trimFn: (subject: string, chars?: string) => string,\n ): RuntimeFunction<JSONValue[], string> {\n return resolvedArgs => {\n const subject = resolvedArgs[0] as string;\n const chars = resolvedArgs.length > 1 ? (resolvedArgs[1] as string) : undefined;\n return trimFn(subject, chars);\n };\n }\n\n private functionType: RuntimeFunction<[JSONValue], string> = ([inputValue]) => {\n const type = this.getTypeName(inputValue);\n const name = type !== undefined ? this.TYPE_NAME_TABLE[type] : undefined;\n if (!name) {\n throw new Error('invalid-type');\n }\n return name;\n };\n\n private functionZip: RuntimeFunction<JSONArrayArray, JSONArray> = array => {\n const length = Math.min(...array.map(arr => arr.length));\n return Array.from({ length }, (_, index) => array.map(arr => arr[index])) as unknown as JSONArray;\n };\n}\n","import { JSONObject, JSONValue } from './JSON.type';\n\nexport class ScopeChain {\n private inner?: ScopeChain = undefined;\n private data: JSONObject = {};\n\n get currentScopeData(): JSONObject {\n return this.data;\n }\n\n public withScope(data: JSONObject): ScopeChain {\n const outer: ScopeChain = new ScopeChain();\n outer.inner = this;\n outer.data = data;\n return outer;\n }\n\n public getValue(identifier: string): JSONValue {\n if (Object.prototype.hasOwnProperty.call(this.data, identifier)) {\n return this.data[identifier];\n }\n\n if (this.inner) {\n return this.inner.getValue(identifier);\n }\n\n return null;\n }\n}\n","import type { ExpressionNode, ExpressionReference, SliceNode } from './AST.type';\nimport type { JSONArray, JSONObject, JSONValue } from './JSON.type';\nimport { Token } from './Lexer.type';\nimport { Options, ScopeEntry } from './Parser.type';\nimport { Runtime } from './Runtime';\nimport { ScopeChain } from './Scope';\nimport { add, countNodes, div, divide, ensureNumbers, isFalse, mod, mul, strictDeepEqual, sub } from './utils';\n\nconst emptyScopeChain = new ScopeChain();\n\nexport class TreeInterpreter {\n runtime: Runtime;\n private _rootValue: JSONValue | null = null;\n private _scope: ScopeChain;\n private _options?: Options;\n private _depth = 0;\n private _deadline = 0;\n\n constructor(options?: Options) {\n this.runtime = new Runtime(this);\n this._scope = new ScopeChain();\n if (options) {\n this._options = options;\n this._deadline = options.timeoutMs !== undefined ? Date.now() + options.timeoutMs : 0;\n }\n }\n\n withScope(scope: ScopeEntry): TreeInterpreter {\n const interpreter = new TreeInterpreter(this._options);\n interpreter.runtime._functionTable = this.runtime._functionTable;\n interpreter._rootValue = this._rootValue;\n interpreter._scope = this._scope.withScope(scope);\n interpreter._depth = this._depth;\n interpreter._deadline = this._deadline;\n return interpreter;\n }\n\n search(node: ExpressionNode, value: JSONValue, options?: Options): JSONValue {\n if (options?.maxNodes !== undefined && countNodes(node) > options.maxNodes) {\n throw new Error(`Expression exceeds maximum allowed node count of ${options.maxNodes}`);\n }\n this._rootValue = value;\n this._scope = emptyScopeChain;\n this._options = options;\n this._depth = 0;\n this._deadline = options?.timeoutMs !== undefined ? Date.now() + options.timeoutMs : 0;\n const result = this.visit(node, value) as JSONValue;\n this.checkOutputSize(result);\n return result;\n }\n\n private checkOutputSize(val: unknown): void {\n const max = this._options?.maxOutputSize;\n if (max === undefined || val == null) {\n return;\n }\n\n const size =\n Array.isArray(val) || typeof val === 'string'\n ? val.length\n : typeof val === 'object'\n ? Object.keys(val).length\n : 0;\n\n if (size > max) {\n throw new Error(`Output size exceeds maximum allowed size of ${max}`);\n }\n }\n\n private collect(target: JSONValue[], item: JSONValue): void {\n target.push(item);\n if (this._options?.maxOutputSize !== undefined && target.length > this._options.maxOutputSize) {\n throw new Error(`Output size exceeds maximum allowed size of ${this._options.maxOutputSize}`);\n }\n }\n\n private evaluateProjectionItems(items: JSONArray, right: ExpressionNode): JSONValue {\n const collected: JSONValue[] = [];\n if (right.type === 'Field') {\n const key = right.name;\n for (let i = 0; i < items.length; i++) {\n if (this._deadline > 0 && Date.now() >= this._deadline) {\n throw new Error(`Query execution timed out after ${this._options?.timeoutMs}ms`);\n }\n const elem = items[i];\n if (!elem || typeof elem !== 'object' || Array.isArray(elem)) {\n continue;\n }\n const val = (elem as JSONObject)[key];\n if (val !== undefined && val !== null) {\n this.collect(collected, val);\n }\n }\n return collected;\n }\n if (right.type === 'Identity') {\n for (let i = 0; i < items.length; i++) {\n const elem = items[i];\n if (elem !== null) {\n this.collect(collected, elem);\n }\n }\n return collected;\n }\n for (const elem of items) {\n const current = this.visit(right, elem) as JSONValue;\n if (current !== null) {\n this.collect(collected, current);\n }\n }\n return collected;\n }\n\n visit(node: ExpressionNode, value: JSONValue | ExpressionNode): JSONValue | ExpressionNode | ExpressionReference {\n if (this._options) {\n if (this._options.maxDepth !== undefined && this._depth >= this._options.maxDepth) {\n throw new Error(`Evaluation exceeds maximum allowed depth of ${this._options.maxDepth}`);\n }\n if (this._deadline > 0 && Date.now() >= this._deadline) {\n throw new Error(`Query execution timed out after ${this._options.timeoutMs}ms`);\n }\n }\n this._depth += 1;\n try {\n return this.evaluateNode(node, value);\n } finally {\n this._depth -= 1;\n }\n }\n\n private evaluateNode(\n node: ExpressionNode,\n value: JSONValue | ExpressionNode,\n ): JSONValue | ExpressionNode | ExpressionReference {\n switch (node.type) {\n case 'Ternary': {\n const condition = this.visit(node.condition, value);\n if (!isFalse(condition)) {\n return this.visit(node.trueExpr, value);\n }\n return this.visit(node.falseExpr, value);\n }\n case 'Field':\n const identifier = node.name;\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n // return the value of the field\n return (value as JSONObject)[identifier] ?? null;\n case 'LetExpression': {\n const scope: JSONObject = {};\n for (const binding of node.bindings) {\n Object.assign(scope, this.visit(binding, value));\n }\n return this.withScope(scope).visit(node.expression, value);\n }\n case 'Binding': {\n const { variable, reference } = node;\n const result = this.visit(reference, value);\n return { [variable]: result } as JSONObject;\n }\n case 'Variable': {\n const variable = node.name;\n if (\n !this._scope.getValue(variable) &&\n !Object.prototype.hasOwnProperty.call(this._scope.currentScopeData, variable)\n ) {\n throw new Error(`Error referencing undefined variable ${variable}`);\n }\n return this._scope.getValue(variable);\n }\n case 'IndexExpression':\n return this.visit(node.right, this.visit(node.left, value));\n case 'Subexpression': {\n const result = this.visit(node.left, value);\n return result != null ? (this.visit(node.right, result) ?? null) : null;\n }\n case 'Index': {\n if (!Array.isArray(value)) {\n return null;\n }\n const index = node.value < 0 ? value.length + node.value : node.value;\n return value[index] ?? null;\n }\n case 'Slice': {\n if (!Array.isArray(value) && typeof value !== 'string') {\n return null;\n }\n const { start, stop, step } = this.computeSliceParams(value.length, node);\n const target = typeof value === 'string' ? [...value] : value;\n const sliced = this.slice(target, start, stop, step);\n const res = typeof value === 'string' ? (sliced as string[]).join('') : sliced;\n this.checkOutputSize(res);\n return res;\n }\n case 'Projection': {\n const { left, right } = node;\n const allowString = left.type === 'IndexExpression' && left.right.type === 'Slice';\n const base = this.visit(left, value);\n if (allowString && typeof base === 'string') {\n return this.visit(right, base) as JSONValue;\n }\n return Array.isArray(base) ? this.evaluateProjectionItems(base, right) : null;\n }\n case 'ValueProjection': {\n const base = this.visit(node.left, value);\n if (base === null || typeof base !== 'object' || Array.isArray(base)) {\n return null;\n }\n return this.evaluateProjectionItems(Object.values(base), node.right);\n }\n case 'FilterProjection': {\n const { left, right, condition } = node;\n\n const base = this.visit(left, value);\n if (!Array.isArray(base)) {\n return null;\n }\n\n const results: JSONValue[] = [];\n if (right.type === 'Field') {\n const key = right.name;\n for (let i = 0; i < base.length; i++) {\n const elem = base[i];\n if (isFalse(this.visit(condition, elem))) {\n continue;\n }\n if (!elem || typeof elem !== 'object' || Array.isArray(elem)) {\n continue;\n }\n const val = (elem as JSONObject)[key];\n if (val !== undefined && val !== null) {\n this.collect(results, val);\n }\n }\n return results;\n }\n if (right.type === 'Identity') {\n for (let i = 0; i < base.length; i++) {\n const elem = base[i];\n if (isFalse(this.visit(condition, elem))) {\n continue;\n }\n if (elem !== null) {\n this.collect(results, elem);\n }\n }\n return results;\n }\n for (const elem of base) {\n if (isFalse(this.visit(condition, elem))) {\n continue;\n }\n const result = this.visit(right, elem) as JSONValue;\n if (result !== null) {\n this.collect(results, result);\n }\n }\n return results;\n }\n case 'Arithmetic': {\n const first = this.visit(node.left, value) as JSONValue;\n const second = this.visit(node.right, value) as JSONValue;\n switch (node.operator) {\n case Token.TOK_PLUS:\n return add(first, second);\n\n case Token.TOK_MINUS:\n return sub(first, second);\n\n case Token.TOK_MULTIPLY:\n case Token.TOK_STAR:\n return mul(first, second);\n\n case Token.TOK_DIVIDE:\n return divide(first, second);\n\n case Token.TOK_MODULO:\n return mod(first, second);\n\n case Token.TOK_DIV:\n return div(first, second);\n\n default:\n throw new Error(`Syntax error: unknown arithmetic operator: ${node.operator}`);\n }\n }\n case 'Unary': {\n const operand = this.visit(node.operand, value) as JSONValue;\n switch (node.operator) {\n case Token.TOK_PLUS:\n ensureNumbers(operand);\n return operand as number;\n\n case Token.TOK_MINUS:\n ensureNumbers(operand);\n return -(operand as number);\n\n default:\n throw new Error(`Syntax error: unknown arithmetic operator: ${node.operator}`);\n }\n }\n case 'Comparator': {\n const first = this.visit(node.left, value);\n const second = this.visit(node.right, value);\n\n // equality is an exact match\n\n switch (node.name) {\n case 'EQ':\n return strictDeepEqual(first, second);\n case 'NE':\n return !strictDeepEqual(first, second);\n }\n\n // ordering operators are only valid for numbers\n\n if (typeof first !== 'number' || typeof second !== 'number') {\n return null;\n }\n\n switch (node.name) {\n case 'GT':\n return (first as number) > (second as number);\n case 'GTE':\n return (first as number) >= (second as number);\n case 'LT':\n return (first as number) < (second as number);\n case 'LTE':\n return (first as number) <= (second as number);\n }\n }\n case 'Flatten': {\n const original = this.visit(node.child, value);\n const res = Array.isArray(original) ? original.flat() : null;\n this.checkOutputSize(res);\n return res;\n }\n case 'Root':\n return this._rootValue;\n case 'MultiSelectList': {\n const collected: JSONValue[] = [];\n for (const child of node.children) {\n collected.push(this.visit(child, value) as JSONValue);\n }\n this.checkOutputSize(collected);\n return collected;\n }\n case 'MultiSelectHash': {\n const collected: Record<string, JSONValue> = {};\n for (const child of node.children) {\n collected[child.name] = this.visit(child.value, value) as JSONValue;\n }\n this.checkOutputSize(collected);\n return collected;\n }\n case 'OrExpression': {\n const result = this.visit(node.left, value);\n if (isFalse(result)) {\n return this.visit(node.right, value);\n }\n return result;\n }\n case 'AndExpression': {\n const result = this.visit(node.left, value);\n if (isFalse(result)) {\n return result;\n }\n return this.visit(node.right, value);\n }\n case 'NotExpression':\n return isFalse(this.visit(node.child, value));\n case 'Literal':\n return node.value;\n case 'Pipe':\n return this.visit(node.right, this.visit(node.left, value));\n case 'Function': {\n if (this._options?.allowedFunctions && !this._options.allowedFunctions.includes(node.name)) {\n throw new Error(`Function '${node.name}' is not allowed`);\n }\n if (this._options?.disallowedFunctions && this._options.disallowedFunctions.includes(node.name)) {\n throw new Error(`Function '${node.name}' is disallowed`);\n }\n const args: JSONValue[] = [];\n for (const child of node.children) {\n args.push(this.visit(child, value) as JSONValue);\n }\n const res = this.runtime.callFunction(node.name, args);\n this.checkOutputSize(res);\n return res;\n }\n case 'ExpressionReference':\n return {\n expref: true,\n ...node.child,\n };\n case 'Current':\n case 'Identity':\n return value;\n }\n }\n\n computeSliceParams(arrayLength: number, sliceNode: SliceNode): { start: number; stop: number; step: number } {\n let { start, stop, step } = sliceNode;\n\n if (step === null) {\n step = 1;\n } else if (step === 0) {\n const error = new Error('Invalid value: slice step cannot be 0');\n error.name = 'RuntimeError';\n throw error;\n }\n\n start = start === null ? (step < 0 ? arrayLength - 1 : 0) : this.capSliceRange(arrayLength, start, step);\n stop = stop === null ? (step < 0 ? -1 : arrayLength) : this.capSliceRange(arrayLength, stop, step);\n\n return { start, stop, step };\n }\n\n capSliceRange(arrayLength: number, actualValue: number, step: number): number {\n let nextActualValue = actualValue;\n if (nextActualValue < 0) {\n nextActualValue += arrayLength;\n if (nextActualValue < 0) {\n nextActualValue = step < 0 ? -1 : 0;\n }\n } else if (nextActualValue >= arrayLength) {\n nextActualValue = step < 0 ? arrayLength - 1 : arrayLength;\n }\n return nextActualValue;\n }\n\n slice(collection: JSONArray, start: number, end: number, step: number): JSONArray {\n if (step === 1) {\n return collection.slice(start, end);\n }\n const len = Math.ceil(Math.abs(start - end) / Math.abs(step));\n const result = new Array(len);\n let idx = 0;\n if (step > 0) {\n for (let i = start; i < end; i += step) {\n result[idx++] = collection[i];\n }\n } else {\n for (let i = start; i > end; i += step) {\n result[idx++] = collection[i];\n }\n }\n return result;\n }\n}\n\nexport const TreeInterpreterInstance = new TreeInterpreter();\nexport default TreeInterpreterInstance;\n","import type { ExpressionNode } from './AST.type';\nimport type { JSONValue } from './JSON.type';\nimport Parser from './Parser';\nimport type { Options } from './Parser.type';\nimport { TreeInterpreter, TreeInterpreterInstance } from './TreeInterpreter';\nimport { findDisallowedFunction, isFalse } from './utils';\n\nexport type StreamSource<T = unknown> = AsyncIterable<T> | Iterable<T> | ReadableStream<T> | NodeJS.ReadableStream;\n\nexport interface StreamOptions extends Options {\n /**\n * If true, splits string chunks by newline and parses each line as JSON.\n * If 'auto', detects string lines that look like JSON objects/arrays.\n * If false, does not parse string chunks.\n * Defaults to 'auto'.\n */\n parseJson?: boolean | 'auto';\n\n /**\n * If true, array chunks emitted by the stream are flattened so their elements\n * are yielded individually.\n * Defaults to true.\n */\n flattenChunks?: boolean;\n\n /**\n * Maximum number of results to yield before ending stream evaluation early.\n */\n limit?: number;\n}\n\n/**\n * Converts any StreamSource (AsyncIterable, Iterable, or ReadableStream) into a standard AsyncGenerator.\n */\nexport async function* toAsyncIterable<T>(source: StreamSource<T>): AsyncGenerator<T, void, unknown> {\n if (source == null) {\n return;\n }\n if (typeof source !== 'object' && typeof source !== 'function') {\n throw new TypeError('Invalid stream source: expected AsyncIterable, Iterable, or ReadableStream');\n }\n // Check for Symbol.asyncIterator (AsyncIterable, Node Readable, modern ReadableStream)\n if (Symbol.asyncIterator in (source as AsyncIterable<T>)) {\n for await (const chunk of source as AsyncIterable<T>) {\n yield chunk;\n }\n return;\n }\n // Check for WHATWG ReadableStream via getReader()\n if (typeof (source as ReadableStream<T>).getReader === 'function') {\n const reader = (source as ReadableStream<T>).getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n return;\n }\n // Check for Symbol.iterator (arrays, Sets, sync generators)\n if (Symbol.iterator in (source as Iterable<T>)) {\n for (const chunk of source as Iterable<T>) {\n yield chunk;\n }\n return;\n }\n throw new TypeError('Invalid stream source: expected AsyncIterable, Iterable, or ReadableStream');\n}\n\nfunction parseItem(str: string, parseJson: boolean | 'auto'): unknown {\n if (parseJson === true) {\n return JSON.parse(str);\n }\n if (parseJson === 'auto') {\n try {\n return JSON.parse(str);\n } catch {\n return str;\n }\n }\n return str;\n}\n\n/**\n * Normalizes input chunks into discrete JSON items, handling NDJSON splitting and array flattening.\n */\nexport async function* normalizeSource<T>(\n source: StreamSource<T>,\n options?: StreamOptions,\n): AsyncGenerator<unknown, void, unknown> {\n const parseJson = options?.parseJson ?? 'auto';\n const flatten = options?.flattenChunks ?? true;\n\n let buffer = '';\n const textDecoder = typeof TextDecoder !== 'undefined' ? new TextDecoder() : null;\n\n for await (const chunk of toAsyncIterable(source)) {\n if (chunk instanceof Uint8Array && textDecoder) {\n buffer += textDecoder.decode(chunk, { stream: true });\n if (buffer.includes('\\n')) {\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed) {\n yield parseItem(trimmed, parseJson);\n }\n }\n }\n } else if (typeof chunk === 'string') {\n if (parseJson === false) {\n yield chunk;\n } else {\n buffer += chunk;\n if (buffer.includes('\\n')) {\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed) {\n yield parseItem(trimmed, parseJson);\n }\n }\n }\n }\n } else if (flatten && Array.isArray(chunk)) {\n if (buffer.trim()) {\n yield parseItem(buffer.trim(), parseJson);\n buffer = '';\n }\n for (let i = 0; i < chunk.length; i++) {\n yield chunk[i];\n }\n } else {\n if (buffer.trim()) {\n yield parseItem(buffer.trim(), parseJson);\n buffer = '';\n }\n yield chunk;\n }\n }\n\n if (textDecoder && buffer) {\n buffer += textDecoder.decode();\n }\n if (buffer.trim()) {\n yield parseItem(buffer.trim(), parseJson);\n }\n}\n\n/**\n * Checks whether an AST node can be evaluated incrementally item-by-item on a stream.\n */\nexport function isStreamableNode(node: ExpressionNode): boolean {\n switch (node.type) {\n case 'Projection':\n if (node.left.type === 'Identity' || node.left.type === 'Current') {\n return true;\n }\n if (node.left.type === 'IndexExpression' && node.left.right.type === 'Slice') {\n const slice = node.left.right;\n return (\n (slice.start === null || slice.start >= 0) &&\n (slice.stop === null || slice.stop >= 0) &&\n (slice.step === null || slice.step > 0)\n );\n }\n return false;\n case 'FilterProjection':\n return node.left.type === 'Identity' || node.left.type === 'Current';\n case 'IndexExpression':\n if (node.right.type === 'Slice' && (node.left.type === 'Identity' || node.left.type === 'Current')) {\n const slice = node.right;\n return (\n (slice.start === null || slice.start >= 0) &&\n (slice.stop === null || slice.stop >= 0) &&\n (slice.step === null || slice.step > 0)\n );\n }\n return true;\n case 'Field':\n case 'Identity':\n case 'Current':\n case 'Subexpression':\n case 'MultiSelectHash':\n case 'MultiSelectList':\n case 'Ternary':\n case 'Comparator':\n case 'Arithmetic':\n case 'NotExpression':\n return true;\n case 'Pipe':\n return isStreamableNode(node.left) && isStreamableNode(node.right);\n default:\n return false;\n }\n}\n\n/**\n * Evaluates an AST node over an AsyncIterable stream of items.\n */\nexport async function* evaluateStreamNode(\n source: AsyncIterable<unknown>,\n node: ExpressionNode,\n interpreter: TreeInterpreter,\n options?: StreamOptions,\n): AsyncGenerator<JSONValue, void, unknown> {\n const deadline = options?.timeoutMs !== undefined ? Date.now() + options.timeoutMs : 0;\n\n function checkDeadline() {\n if (deadline > 0 && Date.now() >= deadline) {\n throw new Error(`Query execution timed out after ${options?.timeoutMs}ms`);\n }\n }\n\n switch (node.type) {\n case 'Projection': {\n const { left, right } = node;\n let streamSource = source;\n if (left.type === 'IndexExpression' && left.right.type === 'Slice') {\n streamSource = evaluateStreamNode(source, left, interpreter, options);\n }\n if (right.type === 'Identity' || right.type === 'Current') {\n for await (const item of streamSource) {\n checkDeadline();\n if (item !== null && item !== undefined) {\n yield item as JSONValue;\n }\n }\n return;\n }\n if (right.type === 'Field') {\n const key = right.name;\n for await (const item of streamSource) {\n checkDeadline();\n if (item && typeof item === 'object' && !Array.isArray(item)) {\n const val = (item as Record<string, unknown>)[key];\n if (val !== undefined && val !== null) {\n yield val as JSONValue;\n }\n }\n }\n return;\n }\n for await (const item of streamSource) {\n checkDeadline();\n const res = interpreter.visit(right, item as JSONValue) as JSONValue;\n if (res !== null && res !== undefined) {\n yield res;\n }\n }\n return;\n }\n\n case 'IndexExpression': {\n if (node.right.type === 'Slice' && (node.left.type === 'Identity' || node.left.type === 'Current')) {\n const slice = node.right;\n const start = slice.start ?? 0;\n const stop = slice.stop ?? Infinity;\n const step = slice.step ?? 1;\n\n if (start >= 0 && stop >= 0 && step > 0) {\n let index = 0;\n for await (const item of source) {\n checkDeadline();\n if (index >= stop) {\n break;\n }\n if (index >= start && (index - start) % step === 0) {\n yield item as JSONValue;\n }\n index++;\n if (index >= stop) {\n break;\n }\n }\n return;\n }\n\n // Slices with negative indices require accumulating the stream\n const collected: JSONValue[] = [];\n for await (const item of source) {\n checkDeadline();\n collected.push(item as JSONValue);\n if (options?.maxOutputSize !== undefined && collected.length > options.maxOutputSize) {\n throw new Error(`Output size exceeds maximum allowed size of ${options.maxOutputSize}`);\n }\n }\n const result = interpreter.search(node, collected, options);\n if (Array.isArray(result)) {\n for (const item of result) {\n yield item;\n }\n }\n return;\n }\n for await (const item of source) {\n checkDeadline();\n const res = interpreter.visit(node, item as JSONValue) as JSONValue;\n if (res !== null && res !== undefined) {\n yield res;\n }\n }\n return;\n }\n\n case 'FilterProjection': {\n const { condition, right } = node;\n if (right.type === 'Identity' || right.type === 'Current') {\n for await (const item of source) {\n checkDeadline();\n if (!isFalse(interpreter.visit(condition, item as JSONValue))) {\n yield item as JSONValue;\n }\n }\n return;\n }\n if (right.type === 'Field') {\n const key = right.name;\n for await (const item of source) {\n checkDeadline();\n if (!isFalse(interpreter.visit(condition, item as JSONValue))) {\n if (item && typeof item === 'object' && !Array.isArray(item)) {\n const val = (item as Record<string, unknown>)[key];\n if (val !== undefined && val !== null) {\n yield val as JSONValue;\n }\n }\n }\n }\n return;\n }\n for await (const item of source) {\n checkDeadline();\n if (!isFalse(interpreter.visit(condition, item as JSONValue))) {\n const res = interpreter.visit(right, item as JSONValue) as JSONValue;\n if (res !== null && res !== undefined) {\n yield res;\n }\n }\n }\n return;\n }\n\n case 'Pipe': {\n const leftStream = evaluateStreamNode(source, node.left, interpreter, options);\n if (isStreamableNode(node.right)) {\n for await (const res of evaluateStreamNode(leftStream, node.right, interpreter, options)) {\n yield res;\n }\n } else {\n // Collect left results and evaluate terminal non-streamable stage\n const collected: JSONValue[] = [];\n for await (const item of leftStream) {\n checkDeadline();\n collected.push(item);\n if (options?.maxOutputSize !== undefined && collected.length > options.maxOutputSize) {\n throw new Error(`Output size exceeds maximum allowed size of ${options.maxOutputSize}`);\n }\n }\n const result = interpreter.search(node.right, collected, options);\n if (result !== null && result !== undefined) {\n yield result;\n }\n }\n return;\n }\n\n case 'Identity':\n case 'Current': {\n for await (const item of source) {\n checkDeadline();\n yield item as JSONValue;\n }\n return;\n }\n\n case 'Field': {\n const key = node.name;\n for await (const item of source) {\n checkDeadline();\n if (item && typeof item === 'object' && !Array.isArray(item)) {\n const val = (item as Record<string, unknown>)[key];\n if (val !== undefined && val !== null) {\n yield val as JSONValue;\n }\n }\n }\n return;\n }\n\n default: {\n // General expression on each item\n if (isStreamableNode(node)) {\n for await (const item of source) {\n checkDeadline();\n const res = interpreter.visit(node, item as JSONValue) as JSONValue;\n if (res !== null && res !== undefined) {\n yield res;\n }\n }\n return;\n }\n\n // Non-streamable root: accumulate items and evaluate\n const collected: JSONValue[] = [];\n for await (const item of source) {\n checkDeadline();\n collected.push(item as JSONValue);\n if (options?.maxOutputSize !== undefined && collected.length > options.maxOutputSize) {\n throw new Error(`Output size exceeds maximum allowed size of ${options.maxOutputSize}`);\n }\n }\n const result = interpreter.search(node, collected, options);\n if (result !== null && result !== undefined) {\n yield result;\n }\n return;\n }\n }\n}\n\nfunction isExpressionNode(val: unknown): val is ExpressionNode {\n return (\n typeof val === 'object' &&\n val !== null &&\n 'type' in val &&\n typeof (val as { type: unknown }).type === 'string' &&\n !(Symbol.iterator in val) &&\n !(Symbol.asyncIterator in val)\n );\n}\n\n/**\n * Incremental Result Streaming evaluation.\n * Evaluates a JMESPath expression incrementally over an AsyncIterable or ReadableStream source.\n */\nexport async function* searchStream<T = JSONValue, D = unknown>(\n sourceOrExpression: StreamSource<D> | string | ExpressionNode,\n expressionOrSource: string | ExpressionNode | StreamSource<D>,\n options?: StreamOptions,\n): AsyncGenerator<T, void, unknown> {\n let expression: string | ExpressionNode;\n let source: StreamSource<D>;\n\n if (typeof sourceOrExpression === 'string' || isExpressionNode(sourceOrExpression)) {\n expression = sourceOrExpression;\n source = expressionOrSource as StreamSource<D>;\n } else {\n source = sourceOrExpression as StreamSource<D>;\n expression = expressionOrSource as string | ExpressionNode;\n }\n\n if (typeof expression !== 'string' && !isExpressionNode(expression)) {\n throw new TypeError('Expression must be a string or AST ExpressionNode');\n }\n\n const ast: ExpressionNode = typeof expression === 'string' ? Parser.parse(expression, options) : expression;\n\n if (options) {\n const fnError = findDisallowedFunction(ast, options);\n if (fnError) {\n throw new Error(fnError);\n }\n }\n\n const interpreter = new TreeInterpreter(options);\n interpreter.runtime._functionTable = TreeInterpreterInstance.runtime._functionTable;\n\n const items = normalizeSource(source, options);\n const results = evaluateStreamNode(items, ast, interpreter, options);\n\n const limit = options?.limit;\n const maxOutputSize = options?.maxOutputSize;\n let count = 0;\n\n for await (const result of results) {\n yield result as T;\n count++;\n if (limit !== undefined && count >= limit) {\n break;\n }\n if (maxOutputSize !== undefined && count > maxOutputSize) {\n throw new Error(`Output size exceeds maximum allowed size of ${maxOutputSize}`);\n }\n }\n}\n","import { ExpressionNode } from './AST.type';\nimport { JSONValue } from './JSON.type';\nimport Lexer from './Lexer';\nimport { LexerOptions, LexerToken } from './Lexer.type';\nimport Parser from './Parser';\nimport { Options } from './Parser.type';\nimport type { PathValue } from './Path.type';\nimport {\n BuiltInFunctionNames,\n InputArgument,\n InputSignature,\n RegisterOptions,\n RegistrationResult,\n RuntimeFunction,\n} from './Runtime';\nimport { ScopeChain } from './Scope';\nimport TreeInterpreterInst from './TreeInterpreter';\nimport { findDisallowedFunction } from './utils';\n\nexport type { JSONArray, JSONObject, JSONPrimitive, JSONValue } from './JSON.type';\nexport type { Options } from './Parser.type';\nexport type { PathValue } from './Path.type';\n\nexport interface ValidationResult {\n valid: boolean;\n error?: string;\n ast?: ExpressionNode;\n}\n\nimport { type StreamOptions, type StreamSource, searchStream } from './Stream';\n\nexport type { StreamOptions, StreamSource };\n\nexport interface CompiledQuery<T = JSONValue, D = unknown> {\n (data: D): T;\n search: (data: D) => T;\n searchStream: (source: StreamSource<D>, options?: StreamOptions) => AsyncGenerator<T, void, unknown>;\n ast: ExpressionNode;\n}\nexport type {\n BuiltInFunctionNames,\n FunctionRegistry,\n FunctionSignature,\n InputSignature,\n RegisterOptions,\n RegistrationResult,\n RuntimeFunction,\n} from './Runtime';\n\nconst TYPE_ANY = InputArgument.TYPE_ANY;\nconst TYPE_ARRAY = InputArgument.TYPE_ARRAY;\nconst TYPE_ARRAY_ARRAY = InputArgument.TYPE_ARRAY_ARRAY;\nconst TYPE_ARRAY_NUMBER = InputArgument.TYPE_ARRAY_NUMBER;\nconst TYPE_ARRAY_OBJECT = InputArgument.TYPE_ARRAY_OBJECT;\nconst TYPE_ARRAY_STRING = InputArgument.TYPE_ARRAY_STRING;\nconst TYPE_BOOLEAN = InputArgument.TYPE_BOOLEAN;\nconst TYPE_EXPREF = InputArgument.TYPE_EXPREF;\nconst TYPE_NULL = InputArgument.TYPE_NULL;\nconst TYPE_NUMBER = InputArgument.TYPE_NUMBER;\nconst TYPE_OBJECT = InputArgument.TYPE_OBJECT;\nconst TYPE_STRING = InputArgument.TYPE_STRING;\n\nfunction compile(expression: string, options?: Options): ExpressionNode {\n return Parser.parse(expression, options);\n}\n\nfunction compileQuery<T = JSONValue, D = unknown>(expression: string, options?: Options): CompiledQuery<T, D> {\n const nodeTree = Parser.parse(expression, options);\n const fn = function (data: D): T {\n return TreeInterpreterInst.search(nodeTree, data as JSONValue, options) as T;\n } as CompiledQuery<T, D>;\n fn.search = (data: D): T => TreeInterpreterInst.search(nodeTree, data as JSONValue, options) as T;\n fn.searchStream = (source: StreamSource<D>, streamOptions?: StreamOptions) =>\n searchStream<T, D>(source, nodeTree, { ...options, ...streamOptions });\n fn.ast = nodeTree;\n return fn;\n}\n\nfunction validate(expression: string, options?: Options): ValidationResult {\n if (typeof expression !== 'string') {\n return { valid: false, error: 'Expression must be a string' };\n }\n try {\n const ast = Parser.parse(expression, options);\n if (options) {\n const fnError = findDisallowedFunction(ast, options);\n if (fnError) {\n return { valid: false, error: fnError };\n }\n }\n return { valid: true, ast };\n } catch (err) {\n return {\n valid: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\nfunction tokenize(expression: string, options?: LexerOptions): LexerToken[] {\n return Lexer.tokenize(expression, options);\n}\n\n// Enhanced registerFunction with backward compatibility\nconst registerFunction = (\n functionName: string,\n customFunction: RuntimeFunction<(JSONValue | ExpressionNode)[], JSONValue>,\n signature: InputSignature[],\n options?: RegisterOptions,\n): void => {\n TreeInterpreterInst.runtime.registerFunction(functionName, customFunction, signature, options);\n};\n\n// Enhanced registry functions with type safety\nconst register = <T extends string>(\n name: T extends BuiltInFunctionNames ? never : T,\n customFunction: RuntimeFunction<(JSONValue | ExpressionNode)[], JSONValue>,\n signature: InputSignature[],\n options?: RegisterOptions,\n): RegistrationResult => {\n return TreeInterpreterInst.runtime.register(name, customFunction, signature, options);\n};\n\nconst unregisterFunction = <T extends string>(name: T extends BuiltInFunctionNames ? never : T): boolean => {\n return TreeInterpreterInst.runtime.unregister(name);\n};\n\nconst isRegistered = (name: string): boolean => {\n return TreeInterpreterInst.runtime.isRegistered(name);\n};\n\nconst getRegisteredFunctions = (): string[] => {\n return TreeInterpreterInst.runtime.getRegistered();\n};\n\nconst getCustomFunctions = (): string[] => {\n return TreeInterpreterInst.runtime.getCustomFunctions();\n};\n\nconst clearCustomFunctions = (): void => {\n TreeInterpreterInst.runtime.clearCustomFunctions();\n};\n\nconst MAX_CACHE_SIZE = 1000;\nconst astCache = new Map<string, ExpressionNode>();\n\nfunction search<T, P extends string>(data: T, expression: P, options?: Options): PathValue<T, P>;\nfunction search<T = JSONValue, D = unknown>(data: D, expression: string, options?: Options): T;\nfunction search(data: unknown, expression: string, options?: Options): unknown {\n let nodeTree: ExpressionNode | undefined;\n if (!options) {\n nodeTree = astCache.get(expression);\n if (!nodeTree) {\n nodeTree = Parser.parse(expression);\n if (astCache.size >= MAX_CACHE_SIZE) {\n const firstKey = astCache.keys().next().value;\n if (firstKey !== undefined) {\n astCache.delete(firstKey);\n }\n }\n astCache.set(expression, nodeTree);\n }\n } else {\n nodeTree = Parser.parse(expression, options);\n }\n return TreeInterpreterInst.search(nodeTree, data as JSONValue, options);\n}\n\nfunction Scope(): ScopeChain {\n return new ScopeChain();\n}\n\nconst TreeInterpreter = TreeInterpreterInst;\n\nconst jmespath = {\n compile,\n compileQuery,\n searchStream,\n validate,\n registerFunction,\n register,\n unregisterFunction,\n isRegistered,\n getRegisteredFunctions,\n getCustomFunctions,\n clearCustomFunctions,\n search,\n tokenize,\n TreeInterpreter,\n TYPE_ANY,\n TYPE_ARRAY_NUMBER,\n TYPE_ARRAY_STRING,\n TYPE_ARRAY,\n TYPE_BOOLEAN,\n TYPE_EXPREF,\n TYPE_NULL,\n TYPE_NUMBER,\n TYPE_OBJECT,\n TYPE_STRING,\n TYPE_ARRAY_ARRAY,\n TYPE_ARRAY_OBJECT,\n Scope,\n};\n\n// Export as default for backward compatibility\n// Supports both: import jmespath from '...' and import { jmespath } from '...'\nexport default jmespath;\n"]}