@jmespath-community/jmespath 1.1.5 → 1.3.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 (64) hide show
  1. package/README.md +175 -68
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.mjs +2181 -0
  4. package/dist/cli.mjs.map +1 -0
  5. package/dist/index.cjs +2118 -0
  6. package/dist/index.cjs.map +1 -0
  7. package/dist/index.d.cts +412 -0
  8. package/dist/index.d.ts +412 -0
  9. package/dist/index.esm.js +2099 -0
  10. package/dist/index.esm.js.map +1 -0
  11. package/dist/index.esm.min.js +2 -0
  12. package/dist/index.esm.min.js.map +1 -0
  13. package/dist/index.mjs +2089 -0
  14. package/dist/index.mjs.map +1 -0
  15. package/dist/index.umd.js +2133 -0
  16. package/dist/index.umd.js.map +1 -0
  17. package/dist/index.umd.min.js +2 -0
  18. package/dist/index.umd.min.js.map +1 -0
  19. package/package.json +30 -5
  20. package/dist/jmespath.esm.js +0 -2351
  21. package/dist/jmespath.esm.min.js +0 -2
  22. package/dist/jmespath.esm.min.js.map +0 -1
  23. package/dist/jmespath.umd.js +0 -2380
  24. package/dist/jmespath.umd.min.js +0 -2
  25. package/dist/jmespath.umd.min.js.map +0 -1
  26. package/dist/lib/AST.type.js +0 -3
  27. package/dist/lib/AST.type.js.map +0 -1
  28. package/dist/lib/JSON.type.js +0 -3
  29. package/dist/lib/JSON.type.js.map +0 -1
  30. package/dist/lib/Lexer.js +0 -326
  31. package/dist/lib/Lexer.js.map +0 -1
  32. package/dist/lib/Lexer.type.js +0 -45
  33. package/dist/lib/Lexer.type.js.map +0 -1
  34. package/dist/lib/Parser.js +0 -459
  35. package/dist/lib/Parser.js.map +0 -1
  36. package/dist/lib/Parser.type.js +0 -3
  37. package/dist/lib/Parser.type.js.map +0 -1
  38. package/dist/lib/Runtime.js +0 -924
  39. package/dist/lib/Runtime.js.map +0 -1
  40. package/dist/lib/Scope.js +0 -29
  41. package/dist/lib/Scope.js.map +0 -1
  42. package/dist/lib/TreeInterpreter.js +0 -312
  43. package/dist/lib/TreeInterpreter.js.map +0 -1
  44. package/dist/lib/index.js +0 -67
  45. package/dist/lib/index.js.map +0 -1
  46. package/dist/lib/utils/index.js +0 -144
  47. package/dist/lib/utils/index.js.map +0 -1
  48. package/dist/lib/utils/strings.js +0 -92
  49. package/dist/lib/utils/strings.js.map +0 -1
  50. package/dist/lib/utils/text.js +0 -44
  51. package/dist/lib/utils/text.js.map +0 -1
  52. package/dist/types/AST.type.d.ts +0 -98
  53. package/dist/types/JSON.type.d.ts +0 -10
  54. package/dist/types/Lexer.d.ts +0 -19
  55. package/dist/types/Lexer.type.d.ts +0 -50
  56. package/dist/types/Parser.d.ts +0 -33
  57. package/dist/types/Parser.type.d.ts +0 -4
  58. package/dist/types/Runtime.d.ts +0 -87
  59. package/dist/types/Scope.d.ts +0 -8
  60. package/dist/types/TreeInterpreter.d.ts +0 -22
  61. package/dist/types/index.d.ts +0 -45
  62. package/dist/types/utils/index.d.ts +0 -16
  63. package/dist/types/utils/strings.d.ts +0 -11
  64. package/dist/types/utils/text.d.ts +0 -11
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/index.ts","../src/utils/strings.ts","../src/Lexer.ts","../src/Parser.ts","../src/utils/text.ts","../src/Runtime.ts","../src/Scope.ts","../src/TreeInterpreter.ts","../src/index.ts"],"names":["sub","search","split","token","right","TreeInterpreter"],"mappings":"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","file":"index.mjs","sourcesContent":["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 if (obj === null) {\n return true;\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 const result = (left as number) + (right as number);\n return result;\n};\nexport const sub = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n const result = (left as number) - (right as number);\n return result;\n};\nexport const mul = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n const result = (left as number) * (right as number);\n return result;\n};\nexport const divide = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n const result = (left as number) / notZero(right as number);\n return result;\n};\nexport const div = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n const result = Math.floor((left as number) / notZero(right as number));\n return result;\n};\nexport const mod = (left?: JSONValue, right?: JSONValue): number => {\n ensureNumbers(left, right);\n const result = (left as number) % (right as number);\n return result;\n};\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 start = Math.max(ensureInteger((start = start || 0)), 0);\n end = Math.min(ensureInteger((end = end || subject.length)), subject.length);\n const offset = subject.slice(start, end).indexOf(sub);\n return offset === -1 ? null : offset + start;\n};\nexport const findLast = (subject: string, sub: string, start?: number, end?: number): number | null => {\n if (!subject || !sub) {\n return null;\n }\n start = Math.max(ensureInteger((start = start || 0)), 0);\n end = Math.min(ensureInteger((end = end || subject.length)), subject.length);\n const offset = subject.slice(start, end).lastIndexOf(sub);\n const result = offset === -1 ? null : offset + start;\n return result;\n};\nexport const lower = (subject: string): string => subject.toLowerCase();\nconst ensurePadFuncParams = (name: string, width: number, padding?: string): string => {\n padding = padding || ' ';\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 // emulating es2021: String.prototype.replaceAll()\n return subject.split(string).join(by);\n }\n ensurePositiveInteger(count);\n [...Array(count).keys()].map(() => (subject = subject.replace(string, by)));\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","import { JSONValue } from './JSON.type';\nimport { LexerOptions, LexerToken, Token } from './Lexer.type';\nimport { isAlpha, isAlphaNum, isNum } from './utils/index';\nimport { replace } from './utils/strings';\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 replace(replace(literal, `\\\\\\\\`, `\\\\`), `\\\\'`, `'`);\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';\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\n parse(expression: string, options?: Options): ExpressionNode {\n this.loadTokens(expression, options || { enable_legacy_literals: false });\n this.index = 0;\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 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 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.advance();\n left = this.led(currentTokenType, left);\n currentTokenType = this.lookahead(0);\n }\n return left;\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 return {\n left: indexExpr,\n right: this.parseProjectionRHS(bindingPower.Star),\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 // tslint:disable-next-line: prettier\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","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 return this.codePoints.length;\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 (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\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 if (\n expected === InputArgument.TYPE_ARRAY_STRING ||\n expected === InputArgument.TYPE_ARRAY_NUMBER ||\n expected === InputArgument.TYPE_ARRAY_OBJECT ||\n expected === InputArgument.TYPE_ARRAY_ARRAY ||\n expected === InputArgument.TYPE_ARRAY\n ) {\n if (expected === InputArgument.TYPE_ARRAY) {\n return actual === InputArgument.TYPE_ARRAY;\n }\n if (actual === InputArgument.TYPE_ARRAY) {\n let subtype;\n if (expected === InputArgument.TYPE_ARRAY_NUMBER) {\n subtype = InputArgument.TYPE_NUMBER;\n } else if (expected === InputArgument.TYPE_ARRAY_OBJECT) {\n subtype = InputArgument.TYPE_OBJECT;\n } else if (expected === InputArgument.TYPE_ARRAY_STRING) {\n subtype = InputArgument.TYPE_STRING;\n } else if (expected === InputArgument.TYPE_ARRAY_ARRAY) {\n subtype = InputArgument.TYPE_ARRAY;\n }\n const array = <JSONValue[]>argValue;\n for (let i = 0; i < array.length; i += 1) {\n const typeName = this.getTypeName(array[i]);\n if (typeName !== undefined && subtype !== undefined && !this.typeMatches(typeName, subtype, array[i])) {\n return false;\n }\n }\n return true;\n }\n } else {\n return actual === expected;\n }\n return false;\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> = resolvedArgs => {\n const [searchStr, suffix] = resolvedArgs;\n return searchStr.includes(suffix, searchStr.length - suffix.length);\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 array.map((pair: [string, JSONValue]) => {\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 return array.reduce((acc, cur) => {\n const k = keyFunction(cur ?? {});\n const target = <JSONArray>(acc[<string>k] = acc[<string>k] || []);\n target.push(cur);\n return acc;\n }, {});\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 = [];\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 let merged = {};\n for (let i = 0; i < resolvedArgs.length; i += 1) {\n const current = resolvedArgs[i];\n merged = Object.assign(merged, current);\n }\n return merged;\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 for (let i = 0; i < resolvedArgs.length; i += 1) {\n if (this.getTypeName(resolvedArgs[i]) !== InputArgument.TYPE_NULL) {\n return resolvedArgs[i];\n }\n }\n return 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).slice(0);\n reversedArray.reverse();\n return reversedArray;\n };\n\n private functionSort: RuntimeFunction<[(string | number)[]], (string | number)[]> = ([inputValue]) => {\n if (inputValue.length == 0) {\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].slice(0);\n if (sortedArray.length === 0) {\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 if (this.getTypeName(inputValue) === InputArgument.TYPE_ARRAY) {\n return inputValue as JSONArray;\n }\n return [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 if (this.getTypeName(inputValue) === InputArgument.TYPE_STRING) {\n return inputValue as string;\n }\n return 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 switch (this.getTypeName(inputValue)) {\n case InputArgument.TYPE_NUMBER:\n return 'number';\n case InputArgument.TYPE_STRING:\n return 'string';\n case InputArgument.TYPE_ARRAY:\n return 'array';\n case InputArgument.TYPE_OBJECT:\n return 'object';\n case InputArgument.TYPE_BOOLEAN:\n return 'boolean';\n case InputArgument.TYPE_NULL:\n return 'null';\n default:\n throw new Error('invalid-type');\n }\n };\n\n private functionZip: RuntimeFunction<JSONArrayArray, JSONArray> = array => {\n const length = Math.min(...array.map(arr => arr.length));\n const result = Array(length)\n .fill(null)\n .map((_, index) => array.map(arr => arr[index]));\n return result;\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 { ScopeEntry } from './Parser.type';\nimport { Runtime } from './Runtime';\nimport { ScopeChain } from './Scope';\nimport { add, 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\n constructor() {\n this.runtime = new Runtime(this);\n this._scope = new ScopeChain();\n }\n\n withScope(scope: ScopeEntry): TreeInterpreter {\n const interpreter = new TreeInterpreter();\n interpreter.runtime._functionTable = this.runtime._functionTable;\n interpreter._rootValue = this._rootValue;\n interpreter._scope = this._scope.withScope(scope);\n return interpreter;\n }\n\n search(node: ExpressionNode, value: JSONValue): JSONValue {\n this._rootValue = value;\n this._scope = emptyScopeChain;\n return this.visit(node, value) as JSONValue;\n }\n\n visit(node: ExpressionNode, value: JSONValue | ExpressionNode): 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 { bindings, expression } = node;\n let scope = {};\n bindings.forEach(binding => {\n const reference = this.visit(binding, value) as JSONObject;\n scope = {\n ...scope,\n ...reference,\n };\n });\n return this.withScope(scope).visit(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 if (typeof value === 'string') {\n // string slices is implemented by slicing\n // the corresponding array of codepoints and\n // converting the result back to a string\n const chars = [...value];\n const sliced = this.slice(chars, start, stop, step);\n return sliced.join('');\n } else {\n return this.slice(value, start, stop, step);\n }\n }\n case 'Projection': {\n const { left, right } = node;\n\n // projections typically operate on arrays\n // string slicing produces a 'Projection' whose\n // first child is an 'IndexExpression' whose\n // second child is an 'Slice'\n\n // we allow execution of the left index-expression\n // to return a string only if the AST has this\n // specific shape\n\n let allowString = false;\n if (left.type === 'IndexExpression' && left.right.type === 'Slice') {\n allowString = true;\n }\n\n const base = this.visit(left, value);\n if (allowString && typeof base === 'string') {\n // a projection is really a sub-expression in disguise\n // we must evaluate the right hand expression\n return this.visit(right, base) as JSONValue;\n }\n\n if (!Array.isArray(base)) {\n return null;\n }\n const collected: JSONArray = [];\n for (const elem of base) {\n const current = this.visit(right, elem) as JSONValue;\n if (current !== null) {\n collected.push(current);\n }\n }\n return collected as JSONValue;\n }\n case 'ValueProjection': {\n const { left, right } = node;\n\n const base = this.visit(left, value);\n if (base === null || typeof base !== 'object' || Array.isArray(base)) {\n return null;\n }\n const collected: JSONArray = [];\n const values = Object.values(base);\n for (const elem of values) {\n const current = this.visit(right, elem) as JSONValue;\n if (current !== null) {\n collected.push(current);\n }\n }\n return collected;\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: JSONArray = [];\n for (const elem of base) {\n const matched = this.visit(condition, elem);\n if (isFalse(matched)) {\n continue;\n }\n const result = this.visit(right, elem) as JSONValue;\n if (result !== null) {\n results.push(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 return Array.isArray(original) ? original.flat() : null;\n }\n case 'Root':\n return this._rootValue;\n case 'MultiSelectList': {\n const collected: JSONArray = [];\n for (const child of node.children) {\n collected.push(this.visit(child, value) as JSONValue);\n }\n return collected;\n }\n case 'MultiSelectHash': {\n const collected: JSONObject = {};\n for (const child of node.children) {\n collected[child.name] = this.visit(child.value, value) as JSONValue;\n }\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 const args: JSONArray = [];\n for (const child of node.children) {\n args.push(this.visit(child, value) as JSONValue);\n }\n return this.runtime.callFunction(node.name, args);\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 const result = [];\n if (step > 0) {\n for (let i = start; i < end; i += step) {\n result.push(collection[i]);\n }\n } else {\n for (let i = start; i > end; i += step) {\n result.push(collection[i]);\n }\n }\n return result;\n }\n}\n\nexport const TreeInterpreterInstance = new TreeInterpreter();\nexport default TreeInterpreterInstance;\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 {\n BuiltInFunctionNames,\n InputArgument,\n InputSignature,\n RegisterOptions,\n RegistrationResult,\n RuntimeFunction,\n} from './Runtime';\nimport { ScopeChain } from './Scope';\nimport TreeInterpreterInst from './TreeInterpreter';\n\nexport type { JSONArray, JSONObject, JSONPrimitive, JSONValue } from './JSON.type';\nexport type { Options } from './Parser.type';\nexport type {\n BuiltInFunctionNames,\n FunctionRegistry,\n FunctionSignature,\n InputSignature,\n RegisterOptions,\n RegistrationResult,\n RuntimeFunction,\n} from './Runtime';\n\nexport const TYPE_ANY = InputArgument.TYPE_ANY;\nexport const TYPE_ARRAY = InputArgument.TYPE_ARRAY;\nexport const TYPE_ARRAY_ARRAY = InputArgument.TYPE_ARRAY_ARRAY;\nexport const TYPE_ARRAY_NUMBER = InputArgument.TYPE_ARRAY_NUMBER;\nexport const TYPE_ARRAY_OBJECT = InputArgument.TYPE_ARRAY_OBJECT;\nexport const TYPE_ARRAY_STRING = InputArgument.TYPE_ARRAY_STRING;\nexport const TYPE_BOOLEAN = InputArgument.TYPE_BOOLEAN;\nexport const TYPE_EXPREF = InputArgument.TYPE_EXPREF;\nexport const TYPE_NULL = InputArgument.TYPE_NULL;\nexport const TYPE_NUMBER = InputArgument.TYPE_NUMBER;\nexport const TYPE_OBJECT = InputArgument.TYPE_OBJECT;\nexport const TYPE_STRING = InputArgument.TYPE_STRING;\n\nexport function compile(expression: string, options?: Options): ExpressionNode {\n const nodeTree = Parser.parse(expression, options);\n return nodeTree;\n}\n\nexport function tokenize(expression: string, options?: LexerOptions): LexerToken[] {\n return Lexer.tokenize(expression, options);\n}\n\n// Enhanced registerFunction with backward compatibility\nexport const 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\nexport const 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\nexport const unregisterFunction = <T extends string>(name: T extends BuiltInFunctionNames ? never : T): boolean => {\n return TreeInterpreterInst.runtime.unregister(name);\n};\n\nexport const isRegistered = (name: string): boolean => {\n return TreeInterpreterInst.runtime.isRegistered(name);\n};\n\nexport const getRegisteredFunctions = (): string[] => {\n return TreeInterpreterInst.runtime.getRegistered();\n};\n\nexport const getCustomFunctions = (): string[] => {\n return TreeInterpreterInst.runtime.getCustomFunctions();\n};\n\nexport const clearCustomFunctions = (): void => {\n TreeInterpreterInst.runtime.clearCustomFunctions();\n};\n\nexport function search(data: JSONValue, expression: string, options?: Options): JSONValue {\n const nodeTree = Parser.parse(expression, options);\n return TreeInterpreterInst.search(nodeTree, data);\n}\n\nexport function Scope(): ScopeChain {\n return new ScopeChain();\n}\n\nexport const TreeInterpreter = TreeInterpreterInst;\n\nexport const jmespath = {\n compile,\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};\n\n// Export as default for backward compatibility\n// Supports both: import jmespath from '...' and import { jmespath } from '...'\nexport { jmespath as default };\n"]}