@revisium/formula 0.6.1 → 0.7.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.
@@ -89,6 +89,7 @@ var grammarText = String.raw`Formula {
89
89
  // Primary expressions
90
90
  Primary
91
91
  = "(" Expression ")" -- paren
92
+ | "[" string "]" -- bracketedField
92
93
  | number
93
94
  | string
94
95
  | boolean
@@ -146,6 +147,9 @@ var grammarText = String.raw`Formula {
146
147
  var grammar2 = ohm__namespace.grammar(grammarText);
147
148
 
148
149
  // src/ohm/semantics/index.ts
150
+ function isSafePropertyName(name) {
151
+ return name !== "__proto__";
152
+ }
149
153
  function childrenToAST(children) {
150
154
  return children.filter((c) => "toAST" in c).map((c) => c.toAST());
151
155
  }
@@ -319,10 +323,18 @@ semantics.addOperation("toAST", {
319
323
  };
320
324
  },
321
325
  Postfix_index(obj, _lb, index, _rb) {
326
+ const indexAST = index.toAST();
327
+ if (indexAST.type === "StringLiteral") {
328
+ return {
329
+ type: "BracketedMemberExpression",
330
+ object: obj.toAST(),
331
+ property: indexAST.value
332
+ };
333
+ }
322
334
  return {
323
335
  type: "IndexExpression",
324
336
  object: obj.toAST(),
325
- index: index.toAST()
337
+ index: indexAST
326
338
  };
327
339
  },
328
340
  Postfix_wildcard(obj, _lb, _star, _rb) {
@@ -342,6 +354,10 @@ semantics.addOperation("toAST", {
342
354
  Primary_paren(_lp, expr, _rp) {
343
355
  return expr.toAST();
344
356
  },
357
+ Primary_bracketedField(_lb, str, _rb) {
358
+ const strAST = str.toAST();
359
+ return { type: "BracketedIdentifier", name: strAST.value };
360
+ },
345
361
  Primary(e) {
346
362
  return e.toAST();
347
363
  },
@@ -397,6 +413,9 @@ semantics.addOperation("dependencies", {
397
413
  identifier(_start, _rest) {
398
414
  return [this.sourceString];
399
415
  },
416
+ Primary_bracketedField(_lb, _str, _rb) {
417
+ return [this.sourceString];
418
+ },
400
419
  rootPath(_slash, _path) {
401
420
  return [this.sourceString];
402
421
  },
@@ -419,6 +438,14 @@ semantics.addOperation("dependencies", {
419
438
  Postfix_index(obj, _lb, index, _rb) {
420
439
  const objDeps = obj.dependencies();
421
440
  const indexNode = index.toAST();
441
+ if (indexNode.type === "StringLiteral") {
442
+ const strValue = indexNode.value;
443
+ const quote = this.sourceString.includes('"') ? '"' : "'";
444
+ if (objDeps.length === 1) {
445
+ return [`${objDeps[0]}[${quote}${strValue}${quote}]`];
446
+ }
447
+ return objDeps;
448
+ }
422
449
  const getNumericIndex = (node) => {
423
450
  if (node.type === "NumberLiteral") {
424
451
  return node.value;
@@ -488,6 +515,9 @@ var ARRAY_FUNCTIONS = /* @__PURE__ */ new Set([
488
515
  "includes"
489
516
  ]);
490
517
  semantics.addOperation("features", {
518
+ Primary_bracketedField(_lb, _str, _rb) {
519
+ return ["bracket_notation"];
520
+ },
491
521
  rootPath(_slash, _path) {
492
522
  const path = this.sourceString;
493
523
  const features = ["root_path"];
@@ -518,6 +548,10 @@ semantics.addOperation("features", {
518
548
  Postfix_index(obj, _lb, index, _rb) {
519
549
  const objFeatures = obj.features();
520
550
  const indexFeatures = index.features();
551
+ const indexNode = index.toAST();
552
+ if (indexNode.type === "StringLiteral") {
553
+ return [...objFeatures, ...indexFeatures, "bracket_notation"];
554
+ }
521
555
  return [...objFeatures, ...indexFeatures, "array_index"];
522
556
  },
523
557
  Postfix_wildcard(obj, _lb, _star, _rb) {
@@ -727,10 +761,17 @@ semantics.addOperation("eval(ctx)", {
727
761
  Postfix_index(obj, _lb, index, _rb) {
728
762
  const objVal = obj.eval(this.args.ctx);
729
763
  const idx = index.eval(this.args.ctx);
730
- if (idx < 0) {
731
- return objVal?.[objVal.length + idx];
764
+ if (typeof idx === "string") {
765
+ if (!isSafePropertyName(idx)) {
766
+ return void 0;
767
+ }
768
+ return objVal?.[idx];
769
+ }
770
+ const numIdx = idx;
771
+ if (numIdx < 0) {
772
+ return objVal?.[objVal.length + numIdx];
732
773
  }
733
- return objVal?.[idx];
774
+ return objVal?.[numIdx];
734
775
  },
735
776
  Postfix_wildcard(obj, _lb, _star, _rb) {
736
777
  return obj.eval(this.args.ctx);
@@ -747,6 +788,13 @@ semantics.addOperation("eval(ctx)", {
747
788
  Primary_paren(_lp, expr, _rp) {
748
789
  return expr.eval(this.args.ctx);
749
790
  },
791
+ Primary_bracketedField(_lb, str, _rb) {
792
+ const fieldName = str.eval(this.args.ctx);
793
+ if (!isSafePropertyName(fieldName)) {
794
+ return void 0;
795
+ }
796
+ return this.args.ctx[fieldName];
797
+ },
750
798
  Primary(e) {
751
799
  return e.eval(this.args.ctx);
752
800
  },
@@ -872,8 +920,33 @@ function evaluate(expression, context) {
872
920
  }
873
921
  return semantics(matchResult).eval(safeContext);
874
922
  }
923
+ function parseCurrentPath(currentPath) {
924
+ const segments = [];
925
+ let current = "";
926
+ let inBracket = false;
927
+ for (const char of currentPath) {
928
+ if (char === "[") {
929
+ inBracket = true;
930
+ current += char;
931
+ } else if (char === "]") {
932
+ inBracket = false;
933
+ current += char;
934
+ } else if (char === "." && !inBracket) {
935
+ if (current) {
936
+ segments.push(current);
937
+ current = "";
938
+ }
939
+ } else {
940
+ current += char;
941
+ }
942
+ }
943
+ if (current) {
944
+ segments.push(current);
945
+ }
946
+ return segments;
947
+ }
875
948
  function getValueByPath(data, path) {
876
- const segments = path.split(".");
949
+ const segments = parseCurrentPath(path);
877
950
  let current = data;
878
951
  for (const segment of segments) {
879
952
  if (current === null || current === void 0) {
@@ -882,7 +955,18 @@ function getValueByPath(data, path) {
882
955
  if (typeof current !== "object") {
883
956
  return void 0;
884
957
  }
885
- current = current[segment];
958
+ const bracketMatch = /^([^[]+)\[(\d+)\]$/.exec(segment);
959
+ if (bracketMatch?.[1] && bracketMatch[2]) {
960
+ const fieldName = bracketMatch[1];
961
+ const index = Number.parseInt(bracketMatch[2], 10);
962
+ const arr = current[fieldName];
963
+ if (!Array.isArray(arr)) {
964
+ return void 0;
965
+ }
966
+ current = arr[index];
967
+ } else {
968
+ current = current[segment];
969
+ }
886
970
  }
887
971
  return current;
888
972
  }
@@ -900,7 +984,43 @@ function extractRootField(fieldPath) {
900
984
  }
901
985
  return fieldPath.slice(0, Math.min(dotIndex, bracketIndex));
902
986
  }
903
- function buildPathReferences(rootData, dependencies) {
987
+ function countParentLevels(path) {
988
+ let count = 0;
989
+ let remaining = path;
990
+ while (remaining.startsWith("../")) {
991
+ count++;
992
+ remaining = remaining.slice(3);
993
+ }
994
+ return count;
995
+ }
996
+ function getPathAfterParents(path) {
997
+ return path.replace(/^(\.\.\/)+/, "");
998
+ }
999
+ function resolveRelativePath(rootData, currentPath, relativePath) {
1000
+ const parentLevels = countParentLevels(relativePath);
1001
+ const fieldPath = getPathAfterParents(relativePath);
1002
+ if (!currentPath) {
1003
+ return getValueByPath(rootData, fieldPath);
1004
+ }
1005
+ const pathSegments = parseCurrentPath(currentPath);
1006
+ const targetLevel = pathSegments.length - parentLevels;
1007
+ if (targetLevel <= 0) {
1008
+ return getValueByPath(rootData, fieldPath);
1009
+ }
1010
+ const basePath = pathSegments.slice(0, targetLevel).join(".");
1011
+ const fullPath = basePath ? `${basePath}.${fieldPath}` : fieldPath;
1012
+ return getValueByPath(rootData, fullPath);
1013
+ }
1014
+ function extractRelativeBase(relativePath) {
1015
+ const pathAfterParents = getPathAfterParents(relativePath);
1016
+ const baseField = extractRootField(pathAfterParents);
1017
+ const prefix = relativePath.slice(
1018
+ 0,
1019
+ relativePath.length - pathAfterParents.length
1020
+ );
1021
+ return prefix + baseField;
1022
+ }
1023
+ function buildPathReferences(rootData, dependencies, currentPath) {
904
1024
  const refs = {};
905
1025
  for (const dep of dependencies) {
906
1026
  if (dep.startsWith("/")) {
@@ -911,20 +1031,30 @@ function buildPathReferences(rootData, dependencies) {
911
1031
  refs[contextKey] = getValueByPath(rootData, rootField);
912
1032
  }
913
1033
  } else if (dep.startsWith("../")) {
914
- const fieldPath = dep.slice(3);
915
- refs[dep] = getValueByPath(rootData, fieldPath);
1034
+ const contextKey = extractRelativeBase(dep);
1035
+ if (!(contextKey in refs)) {
1036
+ refs[contextKey] = resolveRelativePath(
1037
+ rootData,
1038
+ currentPath,
1039
+ contextKey
1040
+ );
1041
+ }
916
1042
  }
917
1043
  }
918
1044
  return refs;
919
1045
  }
920
1046
  function evaluateWithContext(expression, options) {
921
- const { rootData, itemData } = options;
1047
+ const { rootData, itemData, currentPath } = options;
922
1048
  const trimmed = expression.trim();
923
1049
  if (!trimmed) {
924
1050
  throw new Error("Empty expression");
925
1051
  }
926
1052
  const parsed = parseFormula(trimmed);
927
- const pathRefs = buildPathReferences(rootData, parsed.dependencies);
1053
+ const pathRefs = buildPathReferences(
1054
+ rootData,
1055
+ parsed.dependencies,
1056
+ currentPath
1057
+ );
928
1058
  const context = {
929
1059
  ...rootData,
930
1060
  ...itemData,
@@ -1110,5 +1240,5 @@ exports.parseExpression = parseExpression;
1110
1240
  exports.parseFormula = parseFormula;
1111
1241
  exports.validateFormulaSyntax = validateFormulaSyntax;
1112
1242
  exports.validateSyntax = validateSyntax;
1113
- //# sourceMappingURL=chunk-GOMUE724.cjs.map
1114
- //# sourceMappingURL=chunk-GOMUE724.cjs.map
1243
+ //# sourceMappingURL=chunk-IM22W645.cjs.map
1244
+ //# sourceMappingURL=chunk-IM22W645.cjs.map
@@ -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"],"names":["grammar","ohm"],"mappings":"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","file":"chunk-IM22W645.cjs","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 | \"[\" string \"]\" -- bracketedField\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 isSafePropertyName(name: string): boolean {\n return name !== '__proto__';\n}\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 const indexAST = index.toAST() as ASTNode;\n if (indexAST.type === 'StringLiteral') {\n return {\n type: 'BracketedMemberExpression',\n object: obj.toAST(),\n property: indexAST.value,\n };\n }\n return {\n type: 'IndexExpression',\n object: obj.toAST(),\n index: indexAST,\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_bracketedField(_lb, str, _rb) {\n const strAST = str.toAST() as { type: 'StringLiteral'; value: string };\n return { type: 'BracketedIdentifier', name: strAST.value };\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 Primary_bracketedField(_lb, _str, _rb) {\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 if (indexNode.type === 'StringLiteral') {\n const strValue = indexNode.value;\n const quote = this.sourceString.includes('\"') ? '\"' : \"'\";\n if (objDeps.length === 1) {\n return [`${objDeps[0]}[${quote}${strValue}${quote}]`];\n }\n return objDeps;\n }\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 Primary_bracketedField(_lb, _str, _rb) {\n return ['bracket_notation'];\n },\n\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 const indexNode = index.toAST() as ASTNode;\n if (indexNode.type === 'StringLiteral') {\n return [...objFeatures, ...indexFeatures, 'bracket_notation'];\n }\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);\n const idx = index.eval(this.args.ctx);\n if (typeof idx === 'string') {\n if (!isSafePropertyName(idx)) {\n return undefined;\n }\n return (objVal as Record<string, unknown>)?.[idx];\n }\n const numIdx = idx as number;\n if (numIdx < 0) {\n return (objVal as unknown[])?.[(objVal as unknown[]).length + numIdx];\n }\n return (objVal as unknown[])?.[numIdx];\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_bracketedField(_lb, str, _rb) {\n const fieldName = str.eval(this.args.ctx) as string;\n if (!isSafePropertyName(fieldName)) {\n return undefined;\n }\n return this.args.ctx[fieldName];\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 parseCurrentPath(currentPath: string): string[] {\n const segments: string[] = [];\n let current = '';\n let inBracket = false;\n\n for (const char of currentPath) {\n if (char === '[') {\n inBracket = true;\n current += char;\n } else if (char === ']') {\n inBracket = false;\n current += char;\n } else if (char === '.' && !inBracket) {\n if (current) {\n segments.push(current);\n current = '';\n }\n } else {\n current += char;\n }\n }\n\n if (current) {\n segments.push(current);\n }\n\n return segments;\n}\n\nfunction getValueByPath(data: Record<string, unknown>, path: string): unknown {\n const segments = parseCurrentPath(path);\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\n const bracketMatch = /^([^[]+)\\[(\\d+)\\]$/.exec(segment);\n if (bracketMatch?.[1] && bracketMatch[2]) {\n const fieldName = bracketMatch[1];\n const index = Number.parseInt(bracketMatch[2], 10);\n const arr = (current as Record<string, unknown>)[fieldName];\n if (!Array.isArray(arr)) {\n return undefined;\n }\n current = arr[index];\n } else {\n current = (current as Record<string, unknown>)[segment];\n }\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 countParentLevels(path: string): number {\n let count = 0;\n let remaining = path;\n while (remaining.startsWith('../')) {\n count++;\n remaining = remaining.slice(3);\n }\n return count;\n}\n\nfunction getPathAfterParents(path: string): string {\n return path.replace(/^(\\.\\.\\/)+/, '');\n}\n\nfunction resolveRelativePath(\n rootData: Record<string, unknown>,\n currentPath: string | undefined,\n relativePath: string,\n): unknown {\n const parentLevels = countParentLevels(relativePath);\n const fieldPath = getPathAfterParents(relativePath);\n\n if (!currentPath) {\n return getValueByPath(rootData, fieldPath);\n }\n\n const pathSegments = parseCurrentPath(currentPath);\n const targetLevel = pathSegments.length - parentLevels;\n\n if (targetLevel <= 0) {\n return getValueByPath(rootData, fieldPath);\n }\n\n const basePath = pathSegments.slice(0, targetLevel).join('.');\n const fullPath = basePath ? `${basePath}.${fieldPath}` : fieldPath;\n\n return getValueByPath(rootData, fullPath);\n}\n\nfunction extractRelativeBase(relativePath: string): string {\n const pathAfterParents = getPathAfterParents(relativePath);\n const baseField = extractRootField(pathAfterParents);\n const prefix = relativePath.slice(\n 0,\n relativePath.length - pathAfterParents.length,\n );\n return prefix + baseField;\n}\n\nfunction buildPathReferences(\n rootData: Record<string, unknown>,\n dependencies: string[],\n currentPath?: 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 contextKey = extractRelativeBase(dep);\n if (!(contextKey in refs)) {\n refs[contextKey] = resolveRelativePath(\n rootData,\n currentPath,\n contextKey,\n );\n }\n }\n }\n\n return refs;\n}\n\nexport function evaluateWithContext(\n expression: string,\n options: EvaluateContextOptions,\n): unknown {\n const { rootData, itemData, currentPath } = 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(\n rootData,\n parsed.dependencies,\n currentPath,\n );\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"]}
@@ -1,20 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunkGOMUE724_cjs = require('../chunk-GOMUE724.cjs');
3
+ var chunkIM22W645_cjs = require('../chunk-IM22W645.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "parseExpression", {
8
8
  enumerable: true,
9
- get: function () { return chunkGOMUE724_cjs.parseExpression; }
9
+ get: function () { return chunkIM22W645_cjs.parseExpression; }
10
10
  });
11
11
  Object.defineProperty(exports, "parseFormula", {
12
12
  enumerable: true,
13
- get: function () { return chunkGOMUE724_cjs.parseFormula; }
13
+ get: function () { return chunkIM22W645_cjs.parseFormula; }
14
14
  });
15
15
  Object.defineProperty(exports, "validateFormulaSyntax", {
16
16
  enumerable: true,
17
- get: function () { return chunkGOMUE724_cjs.validateFormulaSyntax; }
17
+ get: function () { return chunkIM22W645_cjs.validateFormulaSyntax; }
18
18
  });
19
19
  //# sourceMappingURL=index.cjs.map
20
20
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- export { A as ASTNode, h as FormulaAnalysis, g as FormulaFeature, f as FormulaMinorVersion, P as ParseResult, c as ParsedExpression, k as ParsedPath, j as PathSegment, l as PathValidationResult, S as SyntaxValidationResult, X as XFormula, b as parseExpression, p as parseFormula, d as validateFormulaSyntax } from '../index-PFKKFfeI.cjs';
1
+ export { A as ASTNode, h as FormulaAnalysis, g as FormulaFeature, f as FormulaMinorVersion, P as ParseResult, c as ParsedExpression, k as ParsedPath, j as PathSegment, l as PathValidationResult, S as SyntaxValidationResult, X as XFormula, b as parseExpression, p as parseFormula, d as validateFormulaSyntax } from '../index-CPsOPCQ6.cjs';
@@ -1 +1 @@
1
- export { A as ASTNode, h as FormulaAnalysis, g as FormulaFeature, f as FormulaMinorVersion, P as ParseResult, c as ParsedExpression, k as ParsedPath, j as PathSegment, l as PathValidationResult, S as SyntaxValidationResult, X as XFormula, b as parseExpression, p as parseFormula, d as validateFormulaSyntax } from '../index-PFKKFfeI.js';
1
+ export { A as ASTNode, h as FormulaAnalysis, g as FormulaFeature, f as FormulaMinorVersion, P as ParseResult, c as ParsedExpression, k as ParsedPath, j as PathSegment, l as PathValidationResult, S as SyntaxValidationResult, X as XFormula, b as parseExpression, p as parseFormula, d as validateFormulaSyntax } from '../index-CPsOPCQ6.js';
@@ -1,3 +1,3 @@
1
- export { parseExpression, parseFormula, validateFormulaSyntax } from '../chunk-LFEHEGBL.js';
1
+ export { parseExpression, parseFormula, validateFormulaSyntax } from '../chunk-5TM76LGI.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map