@revisium/formula 0.3.0 → 0.5.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ohm/grammar/index.ts","../src/ohm/semantics/index.ts","../src/ohm/core/parser.ts","../src/parse-formula.ts","../src/validate-syntax.ts","../src/dependency-graph.ts","../src/extract-schema.ts","../src/validate-schema.ts"],"names":["grammar"],"mappings":"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","file":"chunk-INF4CK6N.js","sourcesContent":["import * as ohm from 'ohm-js';\n\n// Using String.raw to avoid double-escaping backslashes in Ohm grammar\n// In Ohm grammar, we need single backslashes for escape sequences\nconst grammarText = String.raw`Formula {\n Expression = Ternary\n\n // Ternary: condition ? then : else\n Ternary\n = LogicalOr \"?\" Ternary \":\" Ternary -- ternary\n | LogicalOr\n\n // Logical OR: a || b\n LogicalOr\n = LogicalOr \"||\" LogicalAnd -- or\n | LogicalAnd\n\n // Logical AND: a && b\n LogicalAnd\n = LogicalAnd \"&&\" Equality -- and\n | Equality\n\n // Equality: a == b, a != b\n Equality\n = Equality \"==\" Comparison -- eq\n | Equality \"!=\" Comparison -- neq\n | Comparison\n\n // Comparison: a > b, a < b, a >= b, a <= b\n Comparison\n = Comparison \">=\" Additive -- gte\n | Comparison \"<=\" Additive -- lte\n | Comparison \">\" Additive -- gt\n | Comparison \"<\" Additive -- lt\n | Additive\n\n // Additive: a + b, a - b\n Additive\n = Additive \"+\" Multiplicative -- plus\n | Additive \"-\" Multiplicative -- minus\n | Multiplicative\n\n // Multiplicative: a * b, a / b, a % b\n Multiplicative\n = Multiplicative \"*\" Unary -- times\n | Multiplicative \"/\" Unary -- div\n | Multiplicative \"%\" Unary -- mod\n | Unary\n\n // Unary: -a, !a\n Unary\n = \"-\" Unary -- neg\n | \"!\" Unary -- not\n | Postfix\n\n // Postfix: function calls, property access, array access\n Postfix\n = Postfix \"(\" Arguments? \")\" -- call\n | Postfix \".\" identifier -- property\n | Postfix \"[\" Expression \"]\" -- index\n | Postfix \"[\" \"*\" \"]\" -- wildcard\n | Primary\n\n // Arguments for function calls\n Arguments\n = Expression (\",\" Expression)*\n\n // Primary expressions\n Primary\n = \"(\" Expression \")\" -- paren\n | number\n | string\n | boolean\n | null\n | rootPath\n | relativePath\n | contextToken\n | identifier\n\n // Literals\n number\n = \"-\"? digit+ \".\" digit+ -- float\n | \"-\"? digit+ -- int\n\n string\n = \"\\\"\" doubleStringChar* \"\\\"\"\n | \"'\" singleStringChar* \"'\"\n\n doubleStringChar\n = ~(\"\\\"\" | \"\\\\\") any -- regular\n | \"\\\\\" any -- escape\n\n singleStringChar\n = ~(\"'\" | \"\\\\\") any -- regular\n | \"\\\\\" any -- escape\n\n boolean\n = \"true\" ~identifierPart -- true\n | \"false\" ~identifierPart -- false\n\n null = \"null\" ~identifierPart\n\n // Identifiers and paths\n identifier = ~reserved identifierStart identifierPart*\n\n identifierStart = letter | \"_\"\n identifierPart = letter | digit | \"_\"\n\n // Special paths\n rootPath = \"/\" identifierPart+\n\n relativePathPrefix = \"..\" \"/\"\n relativePath = relativePathPrefix+ identifierPart+\n\n contextToken\n = \"@\" identifierPart+ -- at\n | \"#\" identifierPart+ -- hash\n\n // Reserved words (cannot be used as identifiers)\n reserved\n = (\"true\" | \"false\" | \"null\") ~identifierPart\n\n // Whitespace (implicit, Ohm handles automatically)\n}`;\n\nexport const grammar = ohm.grammar(grammarText);\n","import type { NonterminalNode, TerminalNode, IterationNode } from 'ohm-js';\nimport { grammar } from '../grammar';\nimport type { ASTNode } from '../core/types';\nimport type { FormulaFeature } from '../../types';\n\ntype OhmNode = NonterminalNode | TerminalNode | IterationNode;\n\nfunction childrenToAST(children: OhmNode[]): ASTNode[] {\n return children\n .filter((c): c is NonterminalNode => 'toAST' in c)\n .map((c) => c.toAST() as ASTNode);\n}\n\nfunction childrenDependencies(children: OhmNode[]): string[] {\n return children\n .filter((c): c is NonterminalNode => 'dependencies' in c)\n .flatMap((c) => c.dependencies() as string[]);\n}\n\nfunction childrenFeatures(children: OhmNode[]): FormulaFeature[] {\n return children\n .filter((c): c is NonterminalNode => 'features' in c)\n .flatMap((c) => c.features() as FormulaFeature[]);\n}\n\nexport const semantics = grammar.createSemantics();\n\n// ============ toAST Operation ============\nsemantics.addOperation<ASTNode>('toAST', {\n Expression(e) {\n return e.toAST();\n },\n\n Ternary_ternary(cond, _q, cons, _c, alt) {\n return {\n type: 'TernaryOp',\n condition: cond.toAST(),\n consequent: cons.toAST(),\n alternate: alt.toAST(),\n };\n },\n Ternary(e) {\n return e.toAST();\n },\n\n LogicalOr_or(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '||',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n LogicalOr(e) {\n return e.toAST();\n },\n\n LogicalAnd_and(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '&&',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n LogicalAnd(e) {\n return e.toAST();\n },\n\n Equality_eq(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '==',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Equality_neq(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '!=',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Equality(e) {\n return e.toAST();\n },\n\n Comparison_gte(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '>=',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Comparison_lte(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '<=',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Comparison_gt(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '>',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Comparison_lt(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '<',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Comparison(e) {\n return e.toAST();\n },\n\n Additive_plus(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '+',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Additive_minus(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '-',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Additive(e) {\n return e.toAST();\n },\n\n Multiplicative_times(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '*',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Multiplicative_div(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '/',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Multiplicative_mod(left, _op, right) {\n return {\n type: 'BinaryOp',\n op: '%',\n left: left.toAST(),\n right: right.toAST(),\n };\n },\n Multiplicative(e) {\n return e.toAST();\n },\n\n Unary_neg(_op, expr) {\n return { type: 'UnaryOp', op: '-', argument: expr.toAST() };\n },\n Unary_not(_op, expr) {\n return { type: 'UnaryOp', op: '!', argument: expr.toAST() };\n },\n Unary(e) {\n return e.toAST();\n },\n\n Postfix_call(callee, _lp, args, _rp) {\n const firstArg = args.children[0];\n const argList = firstArg ? firstArg.toAST() : [];\n return {\n type: 'CallExpression',\n callee: callee.toAST(),\n arguments: Array.isArray(argList) ? argList : [argList],\n };\n },\n Postfix_property(obj, _dot, prop) {\n return {\n type: 'MemberExpression',\n object: obj.toAST(),\n property: prop.sourceString,\n };\n },\n Postfix_index(obj, _lb, index, _rb) {\n return {\n type: 'IndexExpression',\n object: obj.toAST(),\n index: index.toAST(),\n };\n },\n Postfix_wildcard(obj, _lb, _star, _rb) {\n return {\n type: 'WildcardExpression',\n object: obj.toAST(),\n };\n },\n Postfix(e) {\n return e.toAST();\n },\n\n // Returns an array of arguments, not a single ASTNode\n // @ts-expect-error - intentionally returns array for function arguments\n Arguments(first, _comma, rest) {\n return [first.toAST(), ...rest.children.map((c) => c.toAST())];\n },\n\n Primary_paren(_lp, expr, _rp) {\n return expr.toAST();\n },\n Primary(e) {\n return e.toAST();\n },\n\n number_float(_neg, _int, _dot, _frac) {\n return {\n type: 'NumberLiteral',\n value: Number.parseFloat(this.sourceString),\n };\n },\n number_int(_neg, _digits) {\n return {\n type: 'NumberLiteral',\n value: Number.parseInt(this.sourceString, 10),\n };\n },\n\n string(_open, chars, _close) {\n const raw = chars.sourceString;\n return { type: 'StringLiteral', value: raw.replaceAll(/\\\\(.)/g, '$1') };\n },\n\n boolean_true(_) {\n return { type: 'BooleanLiteral', value: true };\n },\n boolean_false(_) {\n return { type: 'BooleanLiteral', value: false };\n },\n\n null(_) {\n return { type: 'NullLiteral' };\n },\n\n identifier(_start, _rest) {\n return { type: 'Identifier', name: this.sourceString };\n },\n\n rootPath(_slash, _path) {\n return { type: 'RootPath', path: this.sourceString };\n },\n\n relativePath(_dotSlashes, _parts) {\n return { type: 'RelativePath', path: this.sourceString };\n },\n\n contextToken_at(_at, _name) {\n return { type: 'ContextToken', name: this.sourceString };\n },\n contextToken_hash(_hash, _name) {\n return { type: 'ContextToken', name: this.sourceString };\n },\n\n // @ts-expect-error - _iter returns array for iteration nodes\n _iter(...children) {\n return childrenToAST(children);\n },\n\n _terminal() {\n return { type: 'Identifier', name: this.sourceString };\n },\n});\n\n// ============ dependencies Operation ============\nsemantics.addOperation<string[]>('dependencies', {\n identifier(_start, _rest) {\n return [this.sourceString];\n },\n\n rootPath(_slash, _path) {\n return [this.sourceString];\n },\n\n relativePath(_dotSlashes, _parts) {\n return [this.sourceString];\n },\n\n contextToken_at(_at, _name) {\n return [];\n },\n contextToken_hash(_hash, _name) {\n return [];\n },\n\n Postfix_property(obj, _dot, prop) {\n const objDeps = obj.dependencies() as string[];\n if (objDeps.length === 1) {\n return [`${objDeps[0]}.${prop.sourceString}`];\n }\n return objDeps;\n },\n\n Postfix_index(obj, _lb, index, _rb) {\n const objDeps = obj.dependencies() as string[];\n const indexNode = index.toAST() as ASTNode;\n\n const getNumericIndex = (node: ASTNode): number | null => {\n if (node.type === 'NumberLiteral') {\n return node.value;\n }\n if (\n node.type === 'UnaryOp' &&\n node.op === '-' &&\n node.argument.type === 'NumberLiteral'\n ) {\n return -node.argument.value;\n }\n return null;\n };\n\n const numericIndex = getNumericIndex(indexNode);\n if (objDeps.length === 1 && numericIndex !== null) {\n return [`${objDeps[0]}[${numericIndex}]`];\n }\n return [...objDeps, ...(index.dependencies() as string[])];\n },\n\n Postfix_wildcard(obj, _lb, _star, _rb) {\n const objDeps = obj.dependencies() as string[];\n if (objDeps.length === 1) {\n return [`${objDeps[0]}[*]`];\n }\n return objDeps;\n },\n\n Postfix_call(callee, _lp, args, _rp) {\n const calleeDeps = callee.dependencies() as string[];\n const calleeAST = callee.toAST() as ASTNode;\n const argDeps = childrenDependencies(args.children);\n\n if (calleeAST.type === 'Identifier') {\n return argDeps;\n }\n return [...calleeDeps, ...argDeps];\n },\n\n number_float(_neg, _int, _dot, _frac) {\n return [];\n },\n number_int(_neg, _digits) {\n return [];\n },\n\n string(_open, _chars, _close) {\n return [];\n },\n\n boolean_true(_) {\n return [];\n },\n boolean_false(_) {\n return [];\n },\n\n null(_) {\n return [];\n },\n\n _nonterminal(...children) {\n return childrenDependencies(children);\n },\n\n _iter(...children) {\n return childrenDependencies(children);\n },\n\n _terminal() {\n return [];\n },\n});\n\n// ============ features Operation ============\nconst ARRAY_FUNCTIONS = new Set([\n 'sum',\n 'avg',\n 'count',\n 'first',\n 'last',\n 'join',\n 'includes',\n]);\n\nsemantics.addOperation<FormulaFeature[]>('features', {\n rootPath(_slash, _path) {\n const path = this.sourceString;\n const features: FormulaFeature[] = ['root_path'];\n if (path.includes('.')) {\n features.push('nested_path');\n }\n return features;\n },\n\n relativePath(_dotSlashes, _parts) {\n const path = this.sourceString;\n const features: FormulaFeature[] = ['relative_path'];\n const withoutPrefix = path.replace(/^(\\.\\.\\/)+/, '');\n if (withoutPrefix.includes('.')) {\n features.push('nested_path');\n }\n return features;\n },\n\n contextToken_at(_at, _name) {\n return ['context_token'];\n },\n contextToken_hash(_hash, _name) {\n return ['context_token'];\n },\n\n Postfix_property(obj, _dot, _prop) {\n const objFeatures = obj.features() as FormulaFeature[];\n return [...objFeatures, 'nested_path'];\n },\n\n Postfix_index(obj, _lb, index, _rb) {\n const objFeatures = obj.features() as FormulaFeature[];\n const indexFeatures = index.features() as FormulaFeature[];\n return [...objFeatures, ...indexFeatures, 'array_index'];\n },\n\n Postfix_wildcard(obj, _lb, _star, _rb) {\n const objFeatures = obj.features() as FormulaFeature[];\n return [...objFeatures, 'array_wildcard'];\n },\n\n Postfix_call(callee, _lp, args, _rp) {\n const calleeAST = callee.toAST() as ASTNode;\n const argFeatures = childrenFeatures(args.children);\n\n if (\n calleeAST.type === 'Identifier' &&\n ARRAY_FUNCTIONS.has(calleeAST.name.toLowerCase())\n ) {\n return [...argFeatures, 'array_function'];\n }\n return argFeatures;\n },\n\n _nonterminal(...children) {\n return childrenFeatures(children);\n },\n\n _iter(...children) {\n return childrenFeatures(children);\n },\n\n _terminal() {\n return [];\n },\n});\n\n// ============ eval Operation ============\nconst BUILTINS: Record<string, (...args: unknown[]) => unknown> = {\n // Logical\n and: (a, b) => Boolean(a) && Boolean(b),\n or: (a, b) => Boolean(a) || Boolean(b),\n not: (a) => !a,\n\n // String\n concat: (...args) => args.map(String).join(''),\n upper: (s) => String(s).toUpperCase(),\n lower: (s) => String(s).toLowerCase(),\n trim: (s) => String(s).trim(),\n left: (s, n) => String(s).slice(0, Math.max(0, Math.floor(Number(n)))),\n right: (s, n) => {\n const str = String(s);\n const count = Math.max(0, Math.floor(Number(n)));\n return count === 0 ? '' : str.slice(-count);\n },\n replace: (s, search, repl) => String(s).replace(String(search), String(repl)),\n tostring: String,\n length: (s) => {\n if (Array.isArray(s)) return s.length;\n if (typeof s === 'string') return s.length;\n if (s !== null && typeof s === 'object') return Object.keys(s).length;\n return String(s).length;\n },\n contains: (s, search) => String(s).includes(String(search)),\n startswith: (s, search) => String(s).startsWith(String(search)),\n endswith: (s, search) => String(s).endsWith(String(search)),\n join: (arr: unknown, sep: unknown) => {\n if (!Array.isArray(arr)) return '';\n if (sep === undefined || sep === null) return arr.join(',');\n if (typeof sep !== 'string' && typeof sep !== 'number') {\n return arr.join(',');\n }\n return arr.join(String(sep));\n },\n\n // Numeric\n tonumber: Number,\n toboolean: Boolean,\n isnull: (v) => v === null || v === undefined,\n coalesce: (...args) =>\n args.find((v) => v !== null && v !== undefined) ?? null,\n round: (n, dec) => {\n const factor = 10 ** (dec === undefined ? 0 : Number(dec));\n return Math.round(Number(n) * factor) / factor;\n },\n floor: (n) => Math.floor(Number(n)),\n ceil: (n) => Math.ceil(Number(n)),\n abs: (n) => Math.abs(Number(n)),\n sqrt: (n) => Math.sqrt(Number(n)),\n pow: (base, exp) => Math.pow(Number(base), Number(exp)),\n min: (...args) =>\n args.length === 0 ? Number.NaN : Math.min(...args.map(Number)),\n max: (...args) =>\n args.length === 0 ? Number.NaN : Math.max(...args.map(Number)),\n log: (n) => Math.log(Number(n)),\n log10: (n) => Math.log10(Number(n)),\n exp: (n) => Math.exp(Number(n)),\n sign: (n) => Math.sign(Number(n)),\n\n // Array\n sum: (arr) =>\n Array.isArray(arr) ? arr.reduce((a, b) => a + Number(b), 0) : 0,\n avg: (arr) =>\n Array.isArray(arr) && arr.length > 0\n ? arr.reduce((a, b) => a + Number(b), 0) / arr.length\n : 0,\n count: (arr) => (Array.isArray(arr) ? arr.length : 0),\n first: (arr) => (Array.isArray(arr) ? arr[0] : undefined),\n last: (arr) => (Array.isArray(arr) ? arr.at(-1) : undefined),\n includes: (arr, val) => (Array.isArray(arr) ? arr.includes(val) : false),\n\n // Conditional\n if: (cond, ifTrue, ifFalse) => (cond ? ifTrue : ifFalse),\n};\n\nfunction getByPath(obj: unknown, path: string): unknown {\n const parts = path.split('.');\n let current = obj;\n for (const part of parts) {\n if (current === null || current === undefined) return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nsemantics.addOperation<unknown>('eval(ctx)', {\n Expression(e) {\n return e.eval(this.args.ctx);\n },\n\n Ternary_ternary(cond, _q, cons, _c, alt) {\n return cond.eval(this.args.ctx)\n ? cons.eval(this.args.ctx)\n : alt.eval(this.args.ctx);\n },\n Ternary(e) {\n return e.eval(this.args.ctx);\n },\n\n LogicalOr_or(left, _op, right) {\n return left.eval(this.args.ctx) || right.eval(this.args.ctx);\n },\n LogicalOr(e) {\n return e.eval(this.args.ctx);\n },\n\n LogicalAnd_and(left, _op, right) {\n return left.eval(this.args.ctx) && right.eval(this.args.ctx);\n },\n LogicalAnd(e) {\n return e.eval(this.args.ctx);\n },\n\n Equality_eq(left, _op, right) {\n return left.eval(this.args.ctx) == right.eval(this.args.ctx);\n },\n Equality_neq(left, _op, right) {\n return left.eval(this.args.ctx) != right.eval(this.args.ctx);\n },\n Equality(e) {\n return e.eval(this.args.ctx);\n },\n\n Comparison_gte(left, _op, right) {\n return (\n (left.eval(this.args.ctx) as number) >=\n (right.eval(this.args.ctx) as number)\n );\n },\n Comparison_lte(left, _op, right) {\n return (\n (left.eval(this.args.ctx) as number) <=\n (right.eval(this.args.ctx) as number)\n );\n },\n Comparison_gt(left, _op, right) {\n return (\n (left.eval(this.args.ctx) as number) >\n (right.eval(this.args.ctx) as number)\n );\n },\n Comparison_lt(left, _op, right) {\n return (\n (left.eval(this.args.ctx) as number) <\n (right.eval(this.args.ctx) as number)\n );\n },\n Comparison(e) {\n return e.eval(this.args.ctx);\n },\n\n Additive_plus(left, _op, right): unknown {\n const l = left.eval(this.args.ctx);\n const r = right.eval(this.args.ctx);\n if (typeof l === 'string' || typeof r === 'string') {\n return String(l) + String(r);\n }\n return (l as number) + (r as number);\n },\n Additive_minus(left, _op, right) {\n return (\n (left.eval(this.args.ctx) as number) -\n (right.eval(this.args.ctx) as number)\n );\n },\n Additive(e) {\n return e.eval(this.args.ctx);\n },\n\n Multiplicative_times(left, _op, right) {\n return (\n (left.eval(this.args.ctx) as number) *\n (right.eval(this.args.ctx) as number)\n );\n },\n Multiplicative_div(left, _op, right) {\n return (\n (left.eval(this.args.ctx) as number) /\n (right.eval(this.args.ctx) as number)\n );\n },\n Multiplicative_mod(left, _op, right) {\n return (\n (left.eval(this.args.ctx) as number) %\n (right.eval(this.args.ctx) as number)\n );\n },\n Multiplicative(e) {\n return e.eval(this.args.ctx);\n },\n\n Unary_neg(_op, expr) {\n return -(expr.eval(this.args.ctx) as number);\n },\n Unary_not(_op, expr) {\n return !expr.eval(this.args.ctx);\n },\n Unary(e) {\n return e.eval(this.args.ctx);\n },\n\n Postfix_call(callee, _lp, args, _rp) {\n const calleeAST = callee.toAST() as ASTNode;\n\n const getArgValues = (): unknown[] => {\n const argsNode = args.children[0];\n if (!argsNode) {\n return [];\n }\n return argsNode.eval(this.args.ctx) as unknown[];\n };\n\n if (calleeAST.type === 'Identifier') {\n const fnName = calleeAST.name.toLowerCase();\n const builtinFn = BUILTINS[fnName];\n if (builtinFn) {\n return builtinFn(...getArgValues());\n }\n }\n\n const fn = callee.eval(this.args.ctx);\n if (typeof fn === 'function') {\n return fn(...getArgValues());\n }\n\n const calleeName =\n calleeAST.type === 'Identifier' ? calleeAST.name : 'expression';\n throw new Error(`'${calleeName}' is not a function`);\n },\n Postfix_property(obj, _dot, prop) {\n const objVal = obj.eval(this.args.ctx) as Record<string, unknown>;\n return objVal?.[prop.sourceString];\n },\n Postfix_index(obj, _lb, index, _rb) {\n const objVal = obj.eval(this.args.ctx) as unknown[];\n const idx = index.eval(this.args.ctx) as number;\n if (idx < 0) {\n return objVal?.[objVal.length + idx];\n }\n return objVal?.[idx];\n },\n Postfix_wildcard(obj, _lb, _star, _rb) {\n return obj.eval(this.args.ctx);\n },\n Postfix(e) {\n return e.eval(this.args.ctx);\n },\n\n Arguments(first, _comma, rest) {\n return [\n first.eval(this.args.ctx),\n ...rest.children.map((c) => c.eval(this.args.ctx)),\n ];\n },\n\n Primary_paren(_lp, expr, _rp) {\n return expr.eval(this.args.ctx);\n },\n Primary(e) {\n return e.eval(this.args.ctx);\n },\n\n number_float(_neg, _int, _dot, _frac) {\n return Number.parseFloat(this.sourceString);\n },\n number_int(_neg, _digits) {\n return Number.parseInt(this.sourceString, 10);\n },\n\n string(_open, chars, _close) {\n return chars.sourceString.replaceAll(/\\\\(.)/g, '$1');\n },\n\n boolean_true(_) {\n return true;\n },\n boolean_false(_) {\n return false;\n },\n\n null(_) {\n return null;\n },\n\n identifier(_start, _rest) {\n const name = this.sourceString;\n return this.args.ctx[name];\n },\n\n rootPath(_slash, _path) {\n const fullPath = this.sourceString;\n if (fullPath in this.args.ctx) {\n return this.args.ctx[fullPath];\n }\n const parts = fullPath.slice(1).split('.');\n const firstPart = parts[0];\n if (!firstPart) return undefined;\n const rootKey = '/' + firstPart;\n let value = this.args.ctx[rootKey];\n for (let i = 1; i < parts.length; i++) {\n if (value === null || value === undefined) return undefined;\n const part = parts[i];\n if (!part) continue;\n value = (value as Record<string, unknown>)[part];\n }\n return value;\n },\n\n relativePath(_dotSlashes, _parts) {\n const fullPath = this.sourceString;\n if (fullPath in this.args.ctx) {\n return this.args.ctx[fullPath];\n }\n const path = fullPath.replace(/^(\\.\\.\\/)+/, '');\n return getByPath(this.args.ctx, path);\n },\n\n contextToken_at(_at, _name) {\n return this.args.ctx[this.sourceString];\n },\n contextToken_hash(_hash, _name) {\n return this.args.ctx[this.sourceString];\n },\n\n _nonterminal(...children) {\n const ctx = this.args.ctx;\n for (const child of children) {\n if ('eval' in child) {\n return child.eval(ctx);\n }\n }\n return undefined;\n },\n\n _iter(...children) {\n return children.map((c) => c.eval(this.args.ctx));\n },\n\n _terminal() {\n return undefined;\n },\n});\n","import { grammar } from '../grammar';\nimport { semantics } from '../semantics';\nimport type { ASTNode } from './types';\nimport type { FormulaFeature, FormulaMinorVersion } from '../../types';\n\nexport interface ParseResult {\n ast: ASTNode;\n dependencies: string[];\n features: FormulaFeature[];\n minVersion: FormulaMinorVersion;\n}\n\nexport function parseFormula(expression: string): ParseResult {\n const trimmed = expression.trim();\n if (!trimmed) {\n throw new Error('Empty expression');\n }\n\n const matchResult = grammar.match(trimmed);\n if (matchResult.failed()) {\n throw new Error(matchResult.message ?? 'Parse error');\n }\n\n const adapter = semantics(matchResult);\n const ast = adapter.toAST() as ASTNode;\n const dependencies = [...new Set(adapter.dependencies() as string[])];\n const allFeatures = adapter.features() as FormulaFeature[];\n const features = [...new Set(allFeatures)];\n const minVersion: FormulaMinorVersion = features.length > 0 ? '1.1' : '1.0';\n\n return { ast, dependencies, features, minVersion };\n}\n\nexport function validateSyntax(\n expression: string,\n): { isValid: true } | { isValid: false; error: string; position?: number } {\n const trimmed = expression.trim();\n if (!trimmed) {\n return { isValid: false, error: 'Empty expression' };\n }\n\n const matchResult = grammar.match(trimmed);\n if (matchResult.failed()) {\n const pos = matchResult.getRightmostFailurePosition?.();\n return {\n isValid: false,\n error: matchResult.message ?? 'Parse error',\n position: pos,\n };\n }\n\n return { isValid: true };\n}\n\nexport function evaluate(\n expression: string,\n context: Record<string, unknown>,\n): unknown {\n const trimmed = expression.trim();\n if (!trimmed) {\n throw new Error('Empty expression');\n }\n\n const matchResult = grammar.match(trimmed);\n if (matchResult.failed()) {\n throw new Error(matchResult.message ?? 'Parse error');\n }\n\n const safeContext: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(context)) {\n if (typeof value !== 'function') {\n safeContext[key] = value;\n }\n }\n\n return semantics(matchResult).eval(safeContext);\n}\n\nexport interface EvaluateContextOptions {\n rootData: Record<string, unknown>;\n itemData?: Record<string, unknown>;\n currentPath?: string;\n}\n\nfunction getValueByPath(data: Record<string, unknown>, path: string): unknown {\n const segments = path.split('.');\n let current: unknown = data;\n\n for (const segment of segments) {\n if (current === null || current === undefined) {\n return undefined;\n }\n if (typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n}\n\nfunction extractRootField(fieldPath: string): string {\n const dotIndex = fieldPath.indexOf('.');\n const bracketIndex = fieldPath.indexOf('[');\n\n if (dotIndex === -1 && bracketIndex === -1) {\n return fieldPath;\n }\n if (dotIndex === -1) {\n return fieldPath.slice(0, bracketIndex);\n }\n if (bracketIndex === -1) {\n return fieldPath.slice(0, dotIndex);\n }\n return fieldPath.slice(0, Math.min(dotIndex, bracketIndex));\n}\n\nfunction buildPathReferences(\n rootData: Record<string, unknown>,\n dependencies: string[],\n): Record<string, unknown> {\n const refs: Record<string, unknown> = {};\n\n for (const dep of dependencies) {\n if (dep.startsWith('/')) {\n const fieldPath = dep.slice(1);\n const rootField = extractRootField(fieldPath);\n const contextKey = '/' + rootField;\n if (!(contextKey in refs)) {\n refs[contextKey] = getValueByPath(rootData, rootField);\n }\n } else if (dep.startsWith('../')) {\n const fieldPath = dep.slice(3);\n refs[dep] = getValueByPath(rootData, fieldPath);\n }\n }\n\n return refs;\n}\n\nexport function evaluateWithContext(\n expression: string,\n options: EvaluateContextOptions,\n): unknown {\n const { rootData, itemData } = options;\n const trimmed = expression.trim();\n\n if (!trimmed) {\n throw new Error('Empty expression');\n }\n\n const parsed = parseFormula(trimmed);\n const pathRefs = buildPathReferences(rootData, parsed.dependencies);\n\n const context: Record<string, unknown> = {\n ...rootData,\n ...itemData,\n ...pathRefs,\n };\n\n return evaluate(trimmed, context);\n}\n\nexport type InferredType = 'number' | 'boolean' | 'string' | 'unknown';\n\nexport interface FieldTypes {\n [fieldName: string]: 'number' | 'string' | 'boolean' | 'object' | 'array';\n}\n\nconst ARITHMETIC_OPS = new Set(['+', '-', '*', '/', '%']);\nconst COMPARISON_OPS = new Set(['<', '>', '<=', '>=', '==', '!=']);\nconst LOGICAL_OPS = new Set(['&&', '||', '!']);\nconst NUMERIC_FUNCTIONS = new Set([\n 'round',\n 'floor',\n 'ceil',\n 'abs',\n 'sqrt',\n 'pow',\n 'min',\n 'max',\n 'log',\n 'log10',\n 'exp',\n 'sign',\n 'sum',\n 'avg',\n 'count',\n 'tonumber',\n 'length',\n]);\nconst STRING_FUNCTIONS = new Set([\n 'concat',\n 'upper',\n 'lower',\n 'trim',\n 'left',\n 'right',\n 'replace',\n 'tostring',\n 'join',\n]);\nconst BOOLEAN_FUNCTIONS = new Set([\n 'and',\n 'or',\n 'not',\n 'contains',\n 'startswith',\n 'endswith',\n 'isnull',\n 'toboolean',\n 'includes',\n]);\n\nfunction getFieldType(path: string, fieldTypes: FieldTypes): InferredType {\n const rootField = path.split('.')[0]?.split('[')[0] || path;\n const schemaType = fieldTypes[rootField];\n if (schemaType === 'number') return 'number';\n if (schemaType === 'string') return 'string';\n if (schemaType === 'boolean') return 'boolean';\n return 'unknown';\n}\n\nfunction inferLiteralType(node: ASTNode): InferredType | null {\n switch (node.type) {\n case 'NumberLiteral':\n return 'number';\n case 'BooleanLiteral':\n return 'boolean';\n case 'StringLiteral':\n return 'string';\n case 'NullLiteral':\n return 'unknown';\n default:\n return null;\n }\n}\n\nfunction inferBinaryOpType(\n node: ASTNode & { type: 'BinaryOp' },\n fieldTypes: FieldTypes,\n): InferredType {\n const { op } = node;\n if (op === '+') {\n const leftType = inferTypeFromAST(node.left, fieldTypes);\n const rightType = inferTypeFromAST(node.right, fieldTypes);\n if (leftType === 'string' || rightType === 'string') return 'string';\n if (leftType === 'unknown' || rightType === 'unknown') return 'unknown';\n return 'number';\n }\n if (ARITHMETIC_OPS.has(op)) return 'number';\n if (COMPARISON_OPS.has(op)) return 'boolean';\n if (LOGICAL_OPS.has(op)) return 'boolean';\n return 'unknown';\n}\n\nfunction inferCallExpressionType(\n node: ASTNode & { type: 'CallExpression' },\n fieldTypes: FieldTypes,\n): InferredType {\n const funcName =\n node.callee.type === 'Identifier' ? node.callee.name.toLowerCase() : '';\n if (NUMERIC_FUNCTIONS.has(funcName)) return 'number';\n if (STRING_FUNCTIONS.has(funcName)) return 'string';\n if (BOOLEAN_FUNCTIONS.has(funcName)) return 'boolean';\n if (funcName === 'if' && node.arguments.length >= 3) {\n const thenArg = node.arguments[1];\n const elseArg = node.arguments[2];\n if (thenArg && elseArg) {\n const thenType = inferTypeFromAST(thenArg, fieldTypes);\n const elseType = inferTypeFromAST(elseArg, fieldTypes);\n if (thenType === elseType) return thenType;\n }\n }\n return 'unknown';\n}\n\nfunction inferTypeFromAST(node: ASTNode, fieldTypes: FieldTypes): InferredType {\n const literalType = inferLiteralType(node);\n if (literalType !== null) return literalType;\n\n switch (node.type) {\n case 'Identifier':\n return getFieldType(node.name, fieldTypes);\n case 'RootPath':\n case 'RelativePath':\n case 'ContextToken':\n case 'IndexExpression':\n case 'WildcardExpression':\n return 'unknown';\n case 'MemberExpression': {\n const objectType = inferTypeFromAST(node.object, fieldTypes);\n if (objectType !== 'unknown') return objectType;\n if (node.object.type === 'Identifier') {\n return getFieldType(`${node.object.name}.${node.property}`, fieldTypes);\n }\n return 'unknown';\n }\n case 'BinaryOp':\n return inferBinaryOpType(node, fieldTypes);\n case 'UnaryOp': {\n if (node.op === '-') return 'number';\n if (node.op === '!') return 'boolean';\n return 'unknown';\n }\n case 'TernaryOp': {\n const thenType = inferTypeFromAST(node.consequent, fieldTypes);\n const elseType = inferTypeFromAST(node.alternate, fieldTypes);\n return thenType === elseType ? thenType : 'unknown';\n }\n case 'CallExpression':\n return inferCallExpressionType(node, fieldTypes);\n default:\n return 'unknown';\n }\n}\n\nexport function inferFormulaType(\n expression: string,\n fieldTypes: FieldTypes = {},\n): InferredType {\n const trimmed = expression.trim();\n if (!trimmed) {\n return 'unknown';\n }\n\n try {\n const { ast } = parseFormula(trimmed);\n return inferTypeFromAST(ast, fieldTypes);\n } catch {\n return 'unknown';\n }\n}\n","import { FormulaFeature, FormulaMinorVersion } from './types';\nimport { parseFormula } from './ohm';\n\nexport interface ParsedExpression {\n expression: string;\n dependencies: string[];\n minVersion: FormulaMinorVersion;\n features: FormulaFeature[];\n}\n\n/**\n * Parse a formula expression string\n *\n * @param expression - Formula expression string\n * @returns Parsed expression with dependencies and version info\n *\n * @example\n * parseExpression('price * 1.1')\n * // { expression: 'price * 1.1', dependencies: ['price'], minVersion: '1.0', features: [] }\n *\n * parseExpression('stats.damage * multiplier')\n * // { expression: '...', dependencies: ['stats.damage', 'multiplier'], minVersion: '1.1', features: ['nested_path'] }\n */\nexport function parseExpression(expression: string): ParsedExpression {\n const result = parseFormula(expression);\n return {\n expression,\n dependencies: result.dependencies,\n minVersion: result.minVersion,\n features: result.features,\n };\n}\n","import { validateSyntax } from './ohm';\n\nexport type SyntaxValidationResult =\n | { isValid: true }\n | { isValid: false; error: string; position?: number };\n\n/**\n * Validate formula expression syntax\n *\n * @param expression - Formula expression string\n * @returns Validation result with error details if invalid\n *\n * @example\n * validateFormulaSyntax('price * 1.1')\n * // { isValid: true }\n *\n * validateFormulaSyntax('price * (1.1')\n * // { isValid: false, error: 'Unclosed (', position: 8 }\n */\nexport function validateFormulaSyntax(\n expression: string,\n): SyntaxValidationResult {\n const result = validateSyntax(expression);\n\n if (result.isValid) {\n return { isValid: true };\n }\n\n return {\n isValid: false,\n error: result.error,\n position: result.position,\n };\n}\n","export interface DependencyGraph {\n nodes: Set<string>;\n edges: Map<string, Set<string>>;\n}\n\nexport interface CircularDependencyResult {\n hasCircular: boolean;\n cycle: string[] | null;\n}\n\nexport interface TopologicalOrderResult {\n success: boolean;\n order: string[];\n error?: string;\n}\n\n/**\n * Build a dependency graph from a dependencies map\n *\n * @param dependencies - Map of node names to their dependencies\n * @returns Dependency graph with nodes and edges\n *\n * @example\n * const graph = buildDependencyGraph({\n * tax: ['price'],\n * total: ['price', 'tax']\n * });\n * // graph.edges.get('tax') = Set(['price'])\n * // graph.edges.get('total') = Set(['price', 'tax'])\n */\nexport function buildDependencyGraph(\n dependencies: Record<string, string[]>,\n): DependencyGraph {\n const nodes = new Set<string>();\n const edges = new Map<string, Set<string>>();\n\n for (const [node, deps] of Object.entries(dependencies)) {\n nodes.add(node);\n edges.set(node, new Set(deps));\n\n for (const dep of deps) {\n nodes.add(dep);\n }\n }\n\n return { nodes, edges };\n}\n\n/**\n * Detect first circular dependency in a dependency graph\n *\n * @param graph - Dependency graph\n * @returns Result with detected cycle (null if no cycle)\n *\n * @example\n * detectCircularDependencies(graph)\n * // { hasCircular: true, cycle: ['a', 'b', 'c', 'a'] }\n */\nexport function detectCircularDependencies(\n graph: DependencyGraph,\n): CircularDependencyResult {\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n for (const node of graph.nodes) {\n if (!visited.has(node)) {\n const cycle = dfsVisit(node, graph, visited, recursionStack, path);\n if (cycle) {\n return { hasCircular: true, cycle };\n }\n }\n }\n\n return { hasCircular: false, cycle: null };\n}\n\nfunction dfsVisit(\n node: string,\n graph: DependencyGraph,\n visited: Set<string>,\n recursionStack: Set<string>,\n path: string[],\n): string[] | null {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const deps = graph.edges.get(node);\n if (deps) {\n for (const dep of deps) {\n if (!visited.has(dep)) {\n const cycle = dfsVisit(dep, graph, visited, recursionStack, path);\n if (cycle) {\n return cycle;\n }\n } else if (recursionStack.has(dep)) {\n const cycleStart = path.indexOf(dep);\n return [...path.slice(cycleStart), dep];\n }\n }\n }\n\n path.pop();\n recursionStack.delete(node);\n return null;\n}\n\n/**\n * Get topological order for formula evaluation\n *\n * @param graph - Dependency graph\n * @returns Ordered list of field names for evaluation\n *\n * @example\n * getTopologicalOrder(graph)\n * // { success: true, order: ['price', 'tax', 'total'] }\n */\nexport function getTopologicalOrder(\n graph: DependencyGraph,\n): TopologicalOrderResult {\n const circularCheck = detectCircularDependencies(graph);\n if (circularCheck.hasCircular && circularCheck.cycle) {\n return {\n success: false,\n order: [],\n error: `Circular dependency detected: ${circularCheck.cycle.join(' -> ')}`,\n };\n }\n\n const inDegree = initializeInDegree(graph);\n const queue = findZeroInDegreeNodes(inDegree);\n const order = processQueue(queue, graph, inDegree);\n\n order.reverse();\n return { success: true, order };\n}\n\nfunction initializeInDegree(graph: DependencyGraph): Map<string, number> {\n const inDegree = new Map<string, number>();\n\n for (const node of graph.nodes) {\n inDegree.set(node, 0);\n }\n\n for (const deps of graph.edges.values()) {\n for (const dep of deps) {\n inDegree.set(dep, (inDegree.get(dep) ?? 0) + 1);\n }\n }\n\n return inDegree;\n}\n\nfunction findZeroInDegreeNodes(inDegree: Map<string, number>): string[] {\n const result: string[] = [];\n for (const [node, degree] of inDegree) {\n if (degree === 0) {\n result.push(node);\n }\n }\n return result;\n}\n\nfunction processQueue(\n queue: string[],\n graph: DependencyGraph,\n inDegree: Map<string, number>,\n): string[] {\n const order: string[] = [];\n let head = 0;\n\n while (head < queue.length) {\n const node = queue[head]!;\n head++;\n order.push(node);\n\n const deps = graph.edges.get(node);\n if (deps) {\n for (const dep of deps) {\n const newDegree = (inDegree.get(dep) ?? 0) - 1;\n inDegree.set(dep, newDegree);\n if (newDegree === 0) {\n queue.push(dep);\n }\n }\n }\n }\n\n return order;\n}\n","interface XFormulaInput {\n version: number;\n expression: string;\n}\n\ninterface SchemaProperty {\n type?: string;\n 'x-formula'?: XFormulaInput;\n properties?: Record<string, SchemaProperty>;\n items?: SchemaProperty;\n [key: string]: unknown;\n}\n\nexport interface JsonSchema {\n type?: string;\n properties?: Record<string, SchemaProperty>;\n items?: SchemaProperty;\n [key: string]: unknown;\n}\n\nexport interface ExtractedFormula {\n fieldName: string;\n expression: string;\n fieldType: string;\n}\n\n/**\n * Extract formula definitions from a JSON Schema\n *\n * @param schema - JSON Schema object with properties\n * @returns Array of extracted formulas with field names and expressions\n *\n * @example\n * extractSchemaFormulas({\n * type: 'object',\n * properties: {\n * price: { type: 'number' },\n * tax: { type: 'number', 'x-formula': { version: 1, expression: 'price * 0.1' } }\n * }\n * });\n * // [{ fieldName: 'tax', expression: 'price * 0.1', fieldType: 'number' }]\n */\nexport function extractSchemaFormulas(schema: JsonSchema): ExtractedFormula[] {\n const formulas: ExtractedFormula[] = [];\n extractFormulasRecursive(schema, '', formulas);\n return formulas;\n}\n\nfunction extractFormulasRecursive(\n schema: SchemaProperty | JsonSchema,\n pathPrefix: string,\n formulas: ExtractedFormula[],\n): void {\n if (schema.type === 'array' && schema.items) {\n extractFormulasRecursive(schema.items, `${pathPrefix}[]`, formulas);\n return;\n }\n\n const properties = schema.properties ?? {};\n\n for (const [fieldName, fieldSchema] of Object.entries(properties)) {\n const fullPath = pathPrefix ? `${pathPrefix}.${fieldName}` : fieldName;\n\n const xFormula = fieldSchema['x-formula'];\n if (xFormula) {\n formulas.push({\n fieldName: fullPath,\n expression: xFormula.expression,\n fieldType: fieldSchema.type ?? 'string',\n });\n }\n\n if (fieldSchema.type === 'object' && fieldSchema.properties) {\n extractFormulasRecursive(fieldSchema, fullPath, formulas);\n }\n\n if (fieldSchema.type === 'array' && fieldSchema.items) {\n extractFormulasRecursive(fieldSchema.items, `${fullPath}[]`, formulas);\n }\n }\n}\n","import { parseExpression } from './parse-formula';\nimport { validateFormulaSyntax } from './validate-syntax';\nimport { extractSchemaFormulas, JsonSchema } from './extract-schema';\nimport {\n buildDependencyGraph,\n detectCircularDependencies,\n} from './dependency-graph';\nimport { inferFormulaType, FieldTypes, InferredType } from './ohm';\n\ninterface SchemaProperty {\n type?: string;\n properties?: Record<string, SchemaProperty>;\n items?: SchemaProperty;\n [key: string]: unknown;\n}\n\nexport interface FormulaValidationError {\n field: string;\n error: string;\n position?: number;\n}\n\nexport interface SchemaValidationResult {\n isValid: boolean;\n errors: FormulaValidationError[];\n}\n\nfunction resolveSubSchema(\n schema: JsonSchema,\n fieldPath: string,\n): SchemaProperty | null {\n if (!fieldPath) {\n return schema;\n }\n\n const segments = parsePathSegments(fieldPath);\n let current: SchemaProperty | JsonSchema = schema;\n\n for (const segment of segments) {\n if (segment === '[]') {\n if (current.type === 'array' && current.items) {\n current = current.items;\n } else {\n return null;\n }\n } else {\n if (current.properties?.[segment]) {\n current = current.properties[segment];\n } else {\n return null;\n }\n }\n }\n\n return current;\n}\n\nfunction parsePathSegments(path: string): string[] {\n const segments: string[] = [];\n let current = '';\n let inBracket = false;\n\n for (const char of path) {\n if (char === '[') {\n if (current) {\n segments.push(current);\n current = '';\n }\n inBracket = true;\n } else if (char === ']') {\n inBracket = false;\n segments.push('[]');\n } else if (char === '.' && !inBracket) {\n if (current) {\n segments.push(current);\n current = '';\n }\n } else if (!inBracket) {\n current += char;\n }\n }\n\n if (current) {\n segments.push(current);\n }\n\n return segments;\n}\n\nfunction getParentPath(fieldPath: string): string {\n const lastDotIndex = fieldPath.lastIndexOf('.');\n const lastBracketIndex = fieldPath.lastIndexOf('[');\n const splitIndex = Math.max(lastDotIndex, lastBracketIndex);\n\n if (splitIndex <= 0) {\n return '';\n }\n\n return fieldPath.substring(0, splitIndex);\n}\n\nfunction getFieldName(fieldPath: string): string {\n const lastDotIndex = fieldPath.lastIndexOf('.');\n const lastBracketIndex = fieldPath.lastIndexOf(']');\n const splitIndex = Math.max(lastDotIndex, lastBracketIndex);\n\n if (splitIndex === -1) {\n return fieldPath;\n }\n\n return fieldPath.substring(splitIndex + 1);\n}\n\nfunction getSchemaFields(schema: SchemaProperty | JsonSchema): Set<string> {\n const fields = new Set<string>();\n const properties = schema.properties ?? {};\n\n for (const fieldName of Object.keys(properties)) {\n fields.add(fieldName);\n }\n\n return fields;\n}\n\nfunction getSchemaFieldTypes(schema: SchemaProperty | JsonSchema): FieldTypes {\n const fieldTypes: FieldTypes = {};\n const properties = schema.properties ?? {};\n\n for (const [fieldName, fieldSchema] of Object.entries(properties)) {\n const schemaType = fieldSchema.type;\n if (\n schemaType === 'number' ||\n schemaType === 'string' ||\n schemaType === 'boolean' ||\n schemaType === 'object' ||\n schemaType === 'array'\n ) {\n fieldTypes[fieldName] = schemaType;\n }\n }\n\n return fieldTypes;\n}\n\nfunction schemaTypeToInferred(\n schemaType: string | undefined,\n): InferredType | null {\n if (schemaType === 'number') return 'number';\n if (schemaType === 'string') return 'string';\n if (schemaType === 'boolean') return 'boolean';\n return null;\n}\n\nfunction isTypeCompatible(\n inferredType: InferredType,\n expectedType: InferredType | null,\n): boolean {\n if (expectedType === null) return true;\n if (inferredType === 'unknown') return true;\n return inferredType === expectedType;\n}\n\nfunction extractFieldRoot(dependency: string): string {\n const root = dependency.split('.')[0]?.split('[')[0];\n return root || dependency;\n}\n\nfunction validateFormulaInContext(\n expression: string,\n fieldPath: string,\n rootSchema: JsonSchema,\n): FormulaValidationError | null {\n const syntaxResult = validateFormulaSyntax(expression);\n if (!syntaxResult.isValid) {\n return {\n field: fieldPath,\n error: syntaxResult.error,\n position: syntaxResult.position,\n };\n }\n\n const parentPath = getParentPath(fieldPath);\n const localFieldName = getFieldName(fieldPath);\n const contextSchema = resolveSubSchema(rootSchema, parentPath);\n\n if (!contextSchema) {\n return {\n field: fieldPath,\n error: `Cannot resolve schema context for path '${parentPath}'`,\n };\n }\n\n const parseResult = parseExpression(expression);\n const schemaFields = getSchemaFields(contextSchema);\n\n for (const dep of parseResult.dependencies) {\n const rootField = extractFieldRoot(dep);\n if (!schemaFields.has(rootField)) {\n return {\n field: fieldPath,\n error: `Unknown field '${rootField}' in formula`,\n };\n }\n }\n\n if (\n parseResult.dependencies.some((d) => extractFieldRoot(d) === localFieldName)\n ) {\n return {\n field: fieldPath,\n error: `Formula cannot reference itself`,\n };\n }\n\n const fieldSchema = contextSchema.properties?.[localFieldName];\n const expectedType = schemaTypeToInferred(fieldSchema?.type);\n const fieldTypes = getSchemaFieldTypes(contextSchema);\n const inferredType = inferFormulaType(expression, fieldTypes);\n\n if (!isTypeCompatible(inferredType, expectedType)) {\n return {\n field: fieldPath,\n error: `Type mismatch: formula returns '${inferredType}' but field expects '${expectedType}'`,\n };\n }\n\n return null;\n}\n\nexport function validateFormulaAgainstSchema(\n expression: string,\n fieldName: string,\n schema: JsonSchema,\n): FormulaValidationError | null {\n return validateFormulaInContext(expression, fieldName, schema);\n}\n\nexport function validateSchemaFormulas(\n schema: JsonSchema,\n): SchemaValidationResult {\n const errors: FormulaValidationError[] = [];\n const formulas = extractSchemaFormulas(schema);\n\n for (const formula of formulas) {\n const error = validateFormulaAgainstSchema(\n formula.expression,\n formula.fieldName,\n schema,\n );\n if (error) {\n errors.push(error);\n }\n }\n\n if (errors.length > 0) {\n return { isValid: false, errors };\n }\n\n const dependencies: Record<string, string[]> = {};\n for (const formula of formulas) {\n const parseResult = parseExpression(formula.expression);\n const parentPath = getParentPath(formula.fieldName);\n const prefix = parentPath ? `${parentPath}.` : '';\n\n dependencies[formula.fieldName] = parseResult.dependencies.map((dep) => {\n const rootField = extractFieldRoot(dep);\n return `${prefix}${rootField}`;\n });\n }\n\n const graph = buildDependencyGraph(dependencies);\n const circularCheck = detectCircularDependencies(graph);\n\n const cycle = circularCheck.cycle;\n if (circularCheck.hasCircular && cycle && cycle.length > 0) {\n const firstField = cycle[0];\n if (firstField) {\n errors.push({\n field: firstField,\n error: `Circular dependency: ${cycle.join(' → ')}`,\n });\n return { isValid: false, errors };\n }\n }\n\n return { isValid: true, errors: [] };\n}\n"]}