@affino/datagrid-formula-engine 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/dist/analysis/index.d.ts +2 -0
  4. package/dist/analysis/index.d.ts.map +1 -0
  5. package/dist/analysis/index.js +1 -0
  6. package/dist/analysis/types.d.ts +44 -0
  7. package/dist/analysis/types.d.ts.map +1 -0
  8. package/dist/analysis/types.js +1 -0
  9. package/dist/contracts.d.ts +177 -0
  10. package/dist/contracts.d.ts.map +1 -0
  11. package/dist/contracts.js +140 -0
  12. package/dist/coreTypes.d.ts +2 -0
  13. package/dist/coreTypes.d.ts.map +1 -0
  14. package/dist/coreTypes.js +1 -0
  15. package/dist/dependency/index.d.ts +2 -0
  16. package/dist/dependency/index.d.ts.map +1 -0
  17. package/dist/dependency/index.js +1 -0
  18. package/dist/evaluators/columnar.d.ts +6 -0
  19. package/dist/evaluators/columnar.d.ts.map +1 -0
  20. package/dist/evaluators/columnar.js +39 -0
  21. package/dist/evaluators/index.d.ts +5 -0
  22. package/dist/evaluators/index.d.ts.map +1 -0
  23. package/dist/evaluators/index.js +4 -0
  24. package/dist/evaluators/interpreter.d.ts +6 -0
  25. package/dist/evaluators/interpreter.d.ts.map +1 -0
  26. package/dist/evaluators/interpreter.js +156 -0
  27. package/dist/evaluators/jit.d.ts +7 -0
  28. package/dist/evaluators/jit.d.ts.map +1 -0
  29. package/dist/evaluators/jit.js +158 -0
  30. package/dist/evaluators/shared.d.ts +36 -0
  31. package/dist/evaluators/shared.d.ts.map +1 -0
  32. package/dist/evaluators/shared.js +242 -0
  33. package/dist/evaluators/vector.d.ts +6 -0
  34. package/dist/evaluators/vector.d.ts.map +1 -0
  35. package/dist/evaluators/vector.js +228 -0
  36. package/dist/formulaEngine/compile.d.ts +2 -0
  37. package/dist/formulaEngine/compile.d.ts.map +1 -0
  38. package/dist/formulaEngine/compile.js +1 -0
  39. package/dist/formulaEngine/core.d.ts +2 -0
  40. package/dist/formulaEngine/core.d.ts.map +1 -0
  41. package/dist/formulaEngine/core.js +1 -0
  42. package/dist/formulaEngine/evaluators.d.ts +2 -0
  43. package/dist/formulaEngine/evaluators.d.ts.map +1 -0
  44. package/dist/formulaEngine/evaluators.js +1 -0
  45. package/dist/formulaEngine/index.d.ts +5 -0
  46. package/dist/formulaEngine/index.d.ts.map +1 -0
  47. package/dist/formulaEngine/index.js +2 -0
  48. package/dist/formulaExecutionPlan.d.ts +2 -0
  49. package/dist/formulaExecutionPlan.d.ts.map +1 -0
  50. package/dist/formulaExecutionPlan.js +1 -0
  51. package/dist/graph/executionPlan.d.ts +66 -0
  52. package/dist/graph/executionPlan.d.ts.map +1 -0
  53. package/dist/graph/executionPlan.js +534 -0
  54. package/dist/graph/index.d.ts +2 -0
  55. package/dist/graph/index.d.ts.map +1 -0
  56. package/dist/graph/index.js +3 -0
  57. package/dist/index.d.ts +8 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +4 -0
  60. package/dist/runtime/compile.d.ts +7 -0
  61. package/dist/runtime/compile.d.ts.map +1 -0
  62. package/dist/runtime/compile.js +453 -0
  63. package/dist/runtime/evaluators.d.ts +5 -0
  64. package/dist/runtime/evaluators.d.ts.map +1 -0
  65. package/dist/runtime/evaluators.js +6 -0
  66. package/dist/runtime/index.d.ts +3 -0
  67. package/dist/runtime/index.d.ts.map +1 -0
  68. package/dist/runtime/index.js +2 -0
  69. package/dist/runtime/types.d.ts +63 -0
  70. package/dist/runtime/types.d.ts.map +1 -0
  71. package/dist/runtime/types.js +1 -0
  72. package/dist/syntax/analysis.d.ts +14 -0
  73. package/dist/syntax/analysis.d.ts.map +1 -0
  74. package/dist/syntax/analysis.js +159 -0
  75. package/dist/syntax/ast.d.ts +18 -0
  76. package/dist/syntax/ast.d.ts.map +1 -0
  77. package/dist/syntax/ast.js +54 -0
  78. package/dist/syntax/core.d.ts +4 -0
  79. package/dist/syntax/core.d.ts.map +1 -0
  80. package/dist/syntax/core.js +1 -0
  81. package/dist/syntax/functionGroups/advancedFunctions.d.ts +2 -0
  82. package/dist/syntax/functionGroups/advancedFunctions.d.ts.map +1 -0
  83. package/dist/syntax/functionGroups/advancedFunctions.js +252 -0
  84. package/dist/syntax/functionGroups/dateFunctions.d.ts +2 -0
  85. package/dist/syntax/functionGroups/dateFunctions.d.ts.map +1 -0
  86. package/dist/syntax/functionGroups/dateFunctions.js +144 -0
  87. package/dist/syntax/functionGroups/logicFunctions.d.ts +2 -0
  88. package/dist/syntax/functionGroups/logicFunctions.d.ts.map +1 -0
  89. package/dist/syntax/functionGroups/logicFunctions.js +140 -0
  90. package/dist/syntax/functionGroups/numericFunctions.d.ts +2 -0
  91. package/dist/syntax/functionGroups/numericFunctions.d.ts.map +1 -0
  92. package/dist/syntax/functionGroups/numericFunctions.js +268 -0
  93. package/dist/syntax/functionGroups/textFunctions.d.ts +2 -0
  94. package/dist/syntax/functionGroups/textFunctions.d.ts.map +1 -0
  95. package/dist/syntax/functionGroups/textFunctions.js +118 -0
  96. package/dist/syntax/functionHelpers.d.ts +45 -0
  97. package/dist/syntax/functionHelpers.d.ts.map +1 -0
  98. package/dist/syntax/functionHelpers.js +553 -0
  99. package/dist/syntax/functions.d.ts +9 -0
  100. package/dist/syntax/functions.d.ts.map +1 -0
  101. package/dist/syntax/functions.js +139 -0
  102. package/dist/syntax/index.d.ts +10 -0
  103. package/dist/syntax/index.d.ts.map +1 -0
  104. package/dist/syntax/index.js +7 -0
  105. package/dist/syntax/legacy.d.ts +29 -0
  106. package/dist/syntax/legacy.d.ts.map +1 -0
  107. package/dist/syntax/legacy.js +188 -0
  108. package/dist/syntax/optimizer.d.ts +6 -0
  109. package/dist/syntax/optimizer.d.ts.map +1 -0
  110. package/dist/syntax/optimizer.js +362 -0
  111. package/dist/syntax/parser.d.ts +7 -0
  112. package/dist/syntax/parser.d.ts.map +1 -0
  113. package/dist/syntax/parser.js +239 -0
  114. package/dist/syntax/tokenizer.d.ts +14 -0
  115. package/dist/syntax/tokenizer.d.ts.map +1 -0
  116. package/dist/syntax/tokenizer.js +852 -0
  117. package/dist/syntax/types.d.ts +120 -0
  118. package/dist/syntax/types.d.ts.map +1 -0
  119. package/dist/syntax/types.js +1 -0
  120. package/dist/syntax/values.d.ts +25 -0
  121. package/dist/syntax/values.d.ts.map +1 -0
  122. package/dist/syntax/values.js +270 -0
  123. package/dist/tsconfig.tsbuildinfo +1 -0
  124. package/package.json +42 -0
@@ -0,0 +1,453 @@
1
+ import {} from "../syntax/core.js";
2
+ import { collectFormulaContextKeys, normalizeFormulaFieldName, normalizeFormulaFunctionRegistry, normalizeFormulaText, } from "../syntax/functions.js";
3
+ import { foldFormulaConstants, collectFormulaIdentifiers, validateFormulaFunctions, } from "../syntax/optimizer.js";
4
+ import { createFormulaErrorValue, normalizeFormulaRuntimeError, } from "../syntax/values.js";
5
+ import { throwFormulaError, } from "../syntax/ast.js";
6
+ import { parseFormula } from "../syntax/parser.js";
7
+ import { parseDataGridFormulaIdentifier, tokenizeFormula } from "../syntax/tokenizer.js";
8
+ import { compileFormulaAstBatchEvaluatorJit, compileFormulaAstColumnarBatchEvaluatorFused, compileFormulaAstColumnarBatchEvaluatorVector, compileFormulaAstColumnarBatchEvaluatorJit, compileFormulaAstEvaluator, compileFormulaAstEvaluatorJit, compileFormulaAstTokenIndexEvaluator, } from "./evaluators.js";
9
+ function hasRowAwareFormulaIdentifiers(root) {
10
+ if (root.kind === "identifier") {
11
+ return root.rowSelector.kind !== "current";
12
+ }
13
+ if (root.kind === "call") {
14
+ return root.args.some(hasRowAwareFormulaIdentifiers);
15
+ }
16
+ if (root.kind === "unary") {
17
+ return hasRowAwareFormulaIdentifiers(root.value);
18
+ }
19
+ if (root.kind === "binary") {
20
+ return hasRowAwareFormulaIdentifiers(root.left) || hasRowAwareFormulaIdentifiers(root.right);
21
+ }
22
+ return false;
23
+ }
24
+ function hasRuntimeContextFormulaFunctions(root, functionRegistry) {
25
+ if (root.kind === "call") {
26
+ const functionDefinition = functionRegistry.get(root.name.trim().toUpperCase());
27
+ if (functionDefinition === null || functionDefinition === void 0 ? void 0 : functionDefinition.requiresRuntimeContext) {
28
+ return true;
29
+ }
30
+ return root.args.some(arg => hasRuntimeContextFormulaFunctions(arg, functionRegistry));
31
+ }
32
+ if (root.kind === "unary") {
33
+ return hasRuntimeContextFormulaFunctions(root.value, functionRegistry);
34
+ }
35
+ if (root.kind === "binary") {
36
+ return hasRuntimeContextFormulaFunctions(root.left, functionRegistry)
37
+ || hasRuntimeContextFormulaFunctions(root.right, functionRegistry);
38
+ }
39
+ return false;
40
+ }
41
+ function serializeFormulaValue(value) {
42
+ var _a, _b;
43
+ if (Array.isArray(value)) {
44
+ return `[${value.map(item => serializeFormulaValue(item)).join(",")}]`;
45
+ }
46
+ if (value == null) {
47
+ return "null";
48
+ }
49
+ if (typeof value === "number") {
50
+ return Number.isFinite(value) ? `n:${value}` : `n:${String(value)}`;
51
+ }
52
+ if (typeof value === "string") {
53
+ return `s:${JSON.stringify(value)}`;
54
+ }
55
+ if (typeof value === "boolean") {
56
+ return value ? "b:1" : "b:0";
57
+ }
58
+ if (typeof value === "object" && "kind" in value && value.kind === "error") {
59
+ const errorValue = value;
60
+ return `e:${String((_a = errorValue.code) !== null && _a !== void 0 ? _a : "")}:${String((_b = errorValue.message) !== null && _b !== void 0 ? _b : "")}`;
61
+ }
62
+ return `u:${String(value)}`;
63
+ }
64
+ function serializeFormulaAstRowSelector(node) {
65
+ if (node.rowSelector.kind === "current") {
66
+ return "current";
67
+ }
68
+ if (node.rowSelector.kind === "absolute") {
69
+ return `absolute:${node.rowSelector.rowIndex}`;
70
+ }
71
+ if (node.rowSelector.kind === "absolute-window") {
72
+ return `absolute-window:${node.rowSelector.startRowIndex}:${node.rowSelector.endRowIndex}`;
73
+ }
74
+ if (node.rowSelector.kind === "relative") {
75
+ return `relative:${node.rowSelector.offset}`;
76
+ }
77
+ return `window:${node.rowSelector.startOffset}:${node.rowSelector.endOffset}`;
78
+ }
79
+ function serializeFormulaAst(node) {
80
+ var _a, _b;
81
+ switch (node.kind) {
82
+ case "number":
83
+ return `num(${node.value})`;
84
+ case "literal":
85
+ return `lit(${serializeFormulaValue(node.value)})`;
86
+ case "identifier":
87
+ return `id(${JSON.stringify((_a = node.sheetReference) !== null && _a !== void 0 ? _a : "")}:${JSON.stringify(node.referenceName)}:${JSON.stringify((_b = node.rangeReferenceName) !== null && _b !== void 0 ? _b : "")}:${serializeFormulaAstRowSelector(node)})`;
88
+ case "call":
89
+ return `call(${JSON.stringify(node.name)}:${node.args.map(arg => serializeFormulaAst(arg)).join(",")})`;
90
+ case "unary":
91
+ return `unary(${node.operator}:${serializeFormulaAst(node.value)})`;
92
+ case "binary":
93
+ return `binary(${node.operator}:${serializeFormulaAst(node.left)}:${serializeFormulaAst(node.right)})`;
94
+ }
95
+ }
96
+ function hashFormulaAst(node) {
97
+ const serialized = serializeFormulaAst(node);
98
+ let hash = 0x811c9dc5;
99
+ for (let index = 0; index < serialized.length; index += 1) {
100
+ hash ^= serialized.charCodeAt(index);
101
+ hash = Math.imul(hash, 0x01000193);
102
+ }
103
+ return `fnv1a:${(hash >>> 0).toString(16).padStart(8, "0")}`;
104
+ }
105
+ function normalizeFormulaIdentifierKey(identifier, referenceParserOptions) {
106
+ return parseDataGridFormulaIdentifier(identifier, referenceParserOptions).name.trim();
107
+ }
108
+ function analyzeFormulaExpression(formulaText, options = {}) {
109
+ var _a;
110
+ const formula = normalizeFormulaText(formulaText);
111
+ const tokens = tokenizeFormula(formula, options.referenceParserOptions);
112
+ const ast = parseFormula(tokens, options.referenceParserOptions);
113
+ const functionRegistry = normalizeFormulaFunctionRegistry(options.functionRegistry, {
114
+ onFunctionOverride: options.onFunctionOverride,
115
+ });
116
+ validateFormulaFunctions(ast, functionRegistry);
117
+ const optimizedAst = foldFormulaConstants(ast);
118
+ const references = [];
119
+ collectFormulaIdentifiers(optimizedAst, references);
120
+ const identifiers = [];
121
+ const seenIdentifiers = new Set();
122
+ for (const reference of references) {
123
+ const normalized = normalizeFormulaIdentifierKey(reference, options.referenceParserOptions);
124
+ if (normalized.length === 0 || seenIdentifiers.has(normalized)) {
125
+ continue;
126
+ }
127
+ seenIdentifiers.add(normalized);
128
+ identifiers.push(normalized);
129
+ }
130
+ const contextKeys = Array.from(new Set((() => {
131
+ const collected = [];
132
+ collectFormulaContextKeys(optimizedAst, functionRegistry, collected);
133
+ return collected.map(key => key.trim()).filter(key => key.length > 0);
134
+ })()));
135
+ const resolveDependencyToken = (_a = options.resolveDependencyToken) !== null && _a !== void 0 ? _a : ((identifier) => `field:${identifier}`);
136
+ const deps = [];
137
+ const dependencyTokenByIdentifier = new Map();
138
+ const seenDependencyTokens = new Set();
139
+ for (const identifier of identifiers) {
140
+ const token = resolveDependencyToken(identifier);
141
+ dependencyTokenByIdentifier.set(identifier, token);
142
+ if (seenDependencyTokens.has(token)) {
143
+ continue;
144
+ }
145
+ seenDependencyTokens.add(token);
146
+ deps.push(token);
147
+ }
148
+ return {
149
+ formula,
150
+ functionRegistry,
151
+ optimizedAst,
152
+ expressionHash: hashFormulaAst(optimizedAst),
153
+ identifiers,
154
+ deps,
155
+ contextKeys,
156
+ dependencyTokenByIdentifier,
157
+ hasRowAwareIdentifiers: hasRowAwareFormulaIdentifiers(optimizedAst),
158
+ hasRuntimeContextFunctions: hasRuntimeContextFormulaFunctions(optimizedAst, functionRegistry),
159
+ };
160
+ }
161
+ export function analyzeDataGridFormulaFieldDefinition(definition, options = {}) {
162
+ const analyzed = analyzeFormulaExpression(definition.formula, options);
163
+ return {
164
+ formula: analyzed.formula,
165
+ expressionHash: analyzed.expressionHash,
166
+ identifiers: analyzed.identifiers,
167
+ deps: analyzed.deps,
168
+ contextKeys: analyzed.contextKeys,
169
+ };
170
+ }
171
+ export function bindCompiledFormulaArtifactToFieldDefinition(artifact, definition, options = {}) {
172
+ return artifact.bind(definition, options);
173
+ }
174
+ export function compileDataGridFormulaFieldArtifact(definition, options = {}) {
175
+ const analyzed = analyzeFormulaExpression(definition.formula, options);
176
+ const dependencyTokenIndexByToken = new Map();
177
+ for (let tokenIndex = 0; tokenIndex < analyzed.deps.length; tokenIndex += 1) {
178
+ const token = analyzed.deps[tokenIndex];
179
+ if (typeof token !== "string") {
180
+ continue;
181
+ }
182
+ dependencyTokenIndexByToken.set(token, tokenIndex);
183
+ }
184
+ const resolveIdentifierToken = (identifier) => analyzed.dependencyTokenByIdentifier.get(identifier);
185
+ const resolveIdentifierTokenIndex = (identifier) => {
186
+ const token = resolveIdentifierToken(identifier);
187
+ if (!token) {
188
+ return undefined;
189
+ }
190
+ return dependencyTokenIndexByToken.get(token);
191
+ };
192
+ const compileStrategy = (options.compileStrategy === "ast"
193
+ || options.compileStrategy === "jit"
194
+ || options.compileStrategy === "auto")
195
+ ? options.compileStrategy
196
+ : "auto";
197
+ const allowDynamicCodegen = options.allowDynamicCodegen !== false;
198
+ let evaluator;
199
+ let activeFunctionContext;
200
+ let batchEvaluator = null;
201
+ let columnarBatchEvaluator = null;
202
+ const supportsBatchExecution = !analyzed.hasRowAwareIdentifiers && !analyzed.hasRuntimeContextFunctions;
203
+ const fusedColumnarBatchEvaluator = supportsBatchExecution
204
+ ? compileFormulaAstColumnarBatchEvaluatorFused(analyzed.optimizedAst, resolveIdentifierTokenIndex)
205
+ : null;
206
+ const vectorColumnarBatchEvaluator = supportsBatchExecution
207
+ ? compileFormulaAstColumnarBatchEvaluatorVector(analyzed.optimizedAst, resolveIdentifierTokenIndex)
208
+ : null;
209
+ const tokenIndexEvaluator = compileFormulaAstTokenIndexEvaluator(analyzed.optimizedAst, analyzed.functionRegistry, resolveIdentifierTokenIndex);
210
+ if (compileStrategy === "jit" && !allowDynamicCodegen) {
211
+ throwFormulaError(`Failed to compile JIT evaluator: dynamic code generation is disabled. Use compileStrategy 'ast' or allowDynamicCodegen: true.`);
212
+ }
213
+ if (analyzed.hasRowAwareIdentifiers || analyzed.hasRuntimeContextFunctions || compileStrategy === "ast" || !allowDynamicCodegen) {
214
+ evaluator = compileFormulaAstEvaluator(analyzed.optimizedAst, analyzed.functionRegistry, resolveIdentifierToken, () => activeFunctionContext);
215
+ }
216
+ else {
217
+ try {
218
+ evaluator = compileFormulaAstEvaluatorJit(analyzed.optimizedAst, analyzed.functionRegistry, resolveIdentifierTokenIndex, analyzed.deps);
219
+ batchEvaluator = compileFormulaAstBatchEvaluatorJit(analyzed.optimizedAst, analyzed.functionRegistry, resolveIdentifierTokenIndex);
220
+ columnarBatchEvaluator = compileFormulaAstColumnarBatchEvaluatorJit(analyzed.optimizedAst, analyzed.functionRegistry, resolveIdentifierTokenIndex);
221
+ }
222
+ catch (error) {
223
+ if (compileStrategy === "jit") {
224
+ const message = error instanceof Error
225
+ ? error.message
226
+ : String(error !== null && error !== void 0 ? error : "Unknown JIT compile error.");
227
+ throwFormulaError(`Failed to compile JIT evaluator: ${message}`);
228
+ }
229
+ evaluator = compileFormulaAstEvaluator(analyzed.optimizedAst, analyzed.functionRegistry, resolveIdentifierToken);
230
+ }
231
+ }
232
+ const rowFallbackChunkSize = 128;
233
+ const bind = (fieldDefinition, bindOptions = {}) => {
234
+ var _a, _b;
235
+ const name = normalizeFormulaFieldName(fieldDefinition.name, "Formula name");
236
+ const field = normalizeFormulaFieldName((_a = fieldDefinition.field) !== null && _a !== void 0 ? _a : name, "Formula target field");
237
+ const runtimeErrorPolicy = (_b = bindOptions.runtimeErrorPolicy) !== null && _b !== void 0 ? _b : "coerce-zero";
238
+ const batchExecutionMode = analyzed.hasRowAwareIdentifiers || analyzed.hasRuntimeContextFunctions
239
+ ? "row"
240
+ : fusedColumnarBatchEvaluator
241
+ ? "columnar-fused"
242
+ : columnarBatchEvaluator
243
+ ? "columnar-jit"
244
+ : vectorColumnarBatchEvaluator
245
+ ? "columnar-vector"
246
+ : "columnar-ast";
247
+ const evaluateWithRuntimePolicy = (evaluate, contextMeta) => {
248
+ var _a;
249
+ try {
250
+ return evaluate();
251
+ }
252
+ catch (error) {
253
+ const runtimeError = normalizeFormulaRuntimeError(error, {
254
+ formulaName: name,
255
+ field,
256
+ formula: analyzed.formula,
257
+ rowId: contextMeta.rowId,
258
+ sourceIndex: contextMeta.sourceIndex,
259
+ });
260
+ (_a = bindOptions.onRuntimeError) === null || _a === void 0 ? void 0 : _a.call(bindOptions, runtimeError);
261
+ if (runtimeErrorPolicy === "throw") {
262
+ throw new Error(`[DataGridFormula] ${runtimeError.message}`);
263
+ }
264
+ if (runtimeErrorPolicy === "error-value") {
265
+ return createFormulaErrorValue(runtimeError);
266
+ }
267
+ return 0;
268
+ }
269
+ };
270
+ const evaluateRowWithTokenIndexReader = (contexts, contextIndex, readTokenAt) => {
271
+ const context = contexts[contextIndex];
272
+ if (!context) {
273
+ return 0;
274
+ }
275
+ return evaluateWithRuntimePolicy(() => tokenIndexEvaluator((tokenIndex) => readTokenAt(contextIndex, tokenIndex)), {
276
+ rowId: context.rowId,
277
+ sourceIndex: context.sourceIndex,
278
+ });
279
+ };
280
+ const buildRowWiseResults = (contexts, readTokenAt, startIndex = 0, endIndex = contexts.length, output) => {
281
+ const target = output !== null && output !== void 0 ? output : new Array(contexts.length);
282
+ for (let contextIndex = startIndex; contextIndex < endIndex; contextIndex += 1) {
283
+ target[contextIndex] = evaluateRowWithTokenIndexReader(contexts, contextIndex, readTokenAt);
284
+ }
285
+ return target;
286
+ };
287
+ const computeBatch = analyzed.hasRowAwareIdentifiers
288
+ ? undefined
289
+ : ((contexts, readTokenByIndex) => {
290
+ var _a;
291
+ if (contexts.length === 0) {
292
+ return [];
293
+ }
294
+ if (batchEvaluator) {
295
+ try {
296
+ return batchEvaluator(contexts.length, readTokenByIndex);
297
+ }
298
+ catch {
299
+ if (contexts.length > rowFallbackChunkSize) {
300
+ const results = new Array(contexts.length);
301
+ for (let start = 0; start < contexts.length; start += rowFallbackChunkSize) {
302
+ const end = Math.min(start + rowFallbackChunkSize, contexts.length);
303
+ const chunkLength = end - start;
304
+ try {
305
+ const chunkResult = batchEvaluator(chunkLength, (contextIndex, tokenIndex) => readTokenByIndex(start + contextIndex, tokenIndex));
306
+ for (let offset = 0; offset < chunkLength; offset += 1) {
307
+ results[start + offset] = (_a = chunkResult[offset]) !== null && _a !== void 0 ? _a : 0;
308
+ }
309
+ }
310
+ catch {
311
+ buildRowWiseResults(contexts, readTokenByIndex, start, end, results);
312
+ }
313
+ }
314
+ return results;
315
+ }
316
+ }
317
+ }
318
+ return buildRowWiseResults(contexts, readTokenByIndex);
319
+ });
320
+ const computeBatchColumnar = analyzed.hasRowAwareIdentifiers
321
+ ? undefined
322
+ : ((contexts, tokenColumns) => {
323
+ var _a, _b, _c;
324
+ if (contexts.length === 0) {
325
+ return [];
326
+ }
327
+ if (fusedColumnarBatchEvaluator) {
328
+ try {
329
+ return fusedColumnarBatchEvaluator(contexts.length, tokenColumns);
330
+ }
331
+ catch {
332
+ if (contexts.length > rowFallbackChunkSize) {
333
+ const results = new Array(contexts.length);
334
+ for (let start = 0; start < contexts.length; start += rowFallbackChunkSize) {
335
+ const end = Math.min(start + rowFallbackChunkSize, contexts.length);
336
+ const chunkLength = end - start;
337
+ const chunkColumns = tokenColumns.map(column => (column ? column.slice(start, end) : []));
338
+ try {
339
+ const chunkResult = fusedColumnarBatchEvaluator(chunkLength, chunkColumns);
340
+ for (let offset = 0; offset < chunkLength; offset += 1) {
341
+ results[start + offset] = (_a = chunkResult[offset]) !== null && _a !== void 0 ? _a : 0;
342
+ }
343
+ }
344
+ catch {
345
+ buildRowWiseResults(contexts, (contextIndex, tokenIndex) => {
346
+ const column = tokenColumns[tokenIndex];
347
+ return column ? column[contextIndex] : undefined;
348
+ }, start, end, results);
349
+ }
350
+ }
351
+ return results;
352
+ }
353
+ }
354
+ }
355
+ if (columnarBatchEvaluator) {
356
+ try {
357
+ return columnarBatchEvaluator(contexts.length, tokenColumns);
358
+ }
359
+ catch {
360
+ if (contexts.length > rowFallbackChunkSize) {
361
+ const results = new Array(contexts.length);
362
+ for (let start = 0; start < contexts.length; start += rowFallbackChunkSize) {
363
+ const end = Math.min(start + rowFallbackChunkSize, contexts.length);
364
+ const chunkLength = end - start;
365
+ const chunkColumns = tokenColumns.map(column => (column ? column.slice(start, end) : []));
366
+ try {
367
+ const chunkResult = columnarBatchEvaluator(chunkLength, chunkColumns);
368
+ for (let offset = 0; offset < chunkLength; offset += 1) {
369
+ results[start + offset] = (_b = chunkResult[offset]) !== null && _b !== void 0 ? _b : 0;
370
+ }
371
+ }
372
+ catch {
373
+ buildRowWiseResults(contexts, (contextIndex, tokenIndex) => {
374
+ const column = tokenColumns[tokenIndex];
375
+ return column ? column[contextIndex] : undefined;
376
+ }, start, end, results);
377
+ }
378
+ }
379
+ return results;
380
+ }
381
+ }
382
+ }
383
+ if (vectorColumnarBatchEvaluator) {
384
+ try {
385
+ return vectorColumnarBatchEvaluator(contexts.length, tokenColumns);
386
+ }
387
+ catch {
388
+ if (contexts.length > rowFallbackChunkSize) {
389
+ const results = new Array(contexts.length);
390
+ for (let start = 0; start < contexts.length; start += rowFallbackChunkSize) {
391
+ const end = Math.min(start + rowFallbackChunkSize, contexts.length);
392
+ const chunkLength = end - start;
393
+ const chunkColumns = tokenColumns.map(column => (column ? column.slice(start, end) : []));
394
+ try {
395
+ const chunkResult = vectorColumnarBatchEvaluator(chunkLength, chunkColumns);
396
+ for (let offset = 0; offset < chunkLength; offset += 1) {
397
+ results[start + offset] = (_c = chunkResult[offset]) !== null && _c !== void 0 ? _c : 0;
398
+ }
399
+ }
400
+ catch {
401
+ buildRowWiseResults(contexts, (contextIndex, tokenIndex) => {
402
+ const column = tokenColumns[tokenIndex];
403
+ return column ? column[contextIndex] : undefined;
404
+ }, start, end, results);
405
+ }
406
+ }
407
+ return results;
408
+ }
409
+ }
410
+ }
411
+ return buildRowWiseResults(contexts, (contextIndex, tokenIndex) => {
412
+ const column = tokenColumns[tokenIndex];
413
+ return column ? column[contextIndex] : undefined;
414
+ });
415
+ });
416
+ return {
417
+ name,
418
+ field,
419
+ formula: analyzed.formula,
420
+ expressionHash: analyzed.expressionHash,
421
+ identifiers: analyzed.identifiers,
422
+ deps: analyzed.deps,
423
+ contextKeys: analyzed.contextKeys,
424
+ batchExecutionMode,
425
+ computeBatch,
426
+ computeBatchColumnar,
427
+ compute: (context) => evaluateWithRuntimePolicy(() => {
428
+ activeFunctionContext = context;
429
+ try {
430
+ return evaluator(token => context.get(token));
431
+ }
432
+ finally {
433
+ activeFunctionContext = undefined;
434
+ }
435
+ }, {
436
+ rowId: context.rowId,
437
+ sourceIndex: context.sourceIndex,
438
+ }),
439
+ };
440
+ };
441
+ return {
442
+ formula: analyzed.formula,
443
+ expressionHash: analyzed.expressionHash,
444
+ identifiers: analyzed.identifiers,
445
+ deps: analyzed.deps,
446
+ contextKeys: analyzed.contextKeys,
447
+ bind,
448
+ };
449
+ }
450
+ export function compileDataGridFormulaFieldDefinition(definition, options = {}) {
451
+ const artifact = compileDataGridFormulaFieldArtifact(definition, options);
452
+ return bindCompiledFormulaArtifactToFieldDefinition(artifact, definition, options);
453
+ }
@@ -0,0 +1,5 @@
1
+ export { compileFormulaAstEvaluator, compileFormulaAstTokenIndexEvaluator, } from "../evaluators/interpreter.js";
2
+ export { compileFormulaAstEvaluatorJit, compileFormulaAstBatchEvaluatorJit, compileFormulaAstColumnarBatchEvaluatorJit, } from "../evaluators/jit.js";
3
+ export { compileFormulaAstColumnarBatchEvaluatorFused, } from "../evaluators/columnar.js";
4
+ export { compileFormulaAstColumnarBatchEvaluatorVector, } from "../evaluators/vector.js";
5
+ //# sourceMappingURL=evaluators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluators.d.ts","sourceRoot":"","sources":["../../src/runtime/evaluators.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,0BAA0B,EAC1B,oCAAoC,GACrC,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,EAClC,0CAA0C,GAC3C,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACL,4CAA4C,GAC7C,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,6CAA6C,GAC9C,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,6 @@
1
+ // Runtime evaluator entrypoints. Backend-specific implementation lives in
2
+ // ../evaluators/* while this file stays a stable runtime-facing barrel.
3
+ export { compileFormulaAstEvaluator, compileFormulaAstTokenIndexEvaluator, } from "../evaluators/interpreter.js";
4
+ export { compileFormulaAstEvaluatorJit, compileFormulaAstBatchEvaluatorJit, compileFormulaAstColumnarBatchEvaluatorJit, } from "../evaluators/jit.js";
5
+ export { compileFormulaAstColumnarBatchEvaluatorFused, } from "../evaluators/columnar.js";
6
+ export { compileFormulaAstColumnarBatchEvaluatorVector, } from "../evaluators/vector.js";
@@ -0,0 +1,3 @@
1
+ export * from "./compile.js";
2
+ export * from "./evaluators.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./compile.js";
2
+ export * from "./evaluators.js";
@@ -0,0 +1,63 @@
1
+ import type { DataGridComputedDependencyToken, DataGridComputedFieldComputeContext, DataGridFormulaFieldDefinition, DataGridFormulaRuntimeError, DataGridFormulaValue } from "../coreTypes.js";
2
+ import type { DataGridFormulaAstNode, DataGridFormulaFunctionArity, DataGridFormulaFunctionRegistry, DataGridFormulaReferenceParserOptions, DataGridFormulaToken } from "../syntax/types.js";
3
+ export interface DataGridFormulaFunctionRuntime {
4
+ name: string;
5
+ arity?: DataGridFormulaFunctionArity;
6
+ contextKeys: readonly string[];
7
+ resolveContextKeys?: (args: readonly DataGridFormulaAstNode[]) => readonly string[];
8
+ requiresRuntimeContext: boolean;
9
+ compute: (args: readonly DataGridFormulaValue[], context?: DataGridComputedFieldComputeContext<unknown>) => unknown;
10
+ }
11
+ export type DataGridFormulaRuntimeErrorPolicy = "coerce-zero" | "throw" | "error-value";
12
+ export type DataGridFormulaCompileStrategy = "auto" | "ast" | "jit";
13
+ export interface DataGridFormulaCompileOptions {
14
+ resolveDependencyToken?: (identifier: string) => DataGridComputedDependencyToken;
15
+ functionRegistry?: DataGridFormulaFunctionRegistry;
16
+ referenceParserOptions?: DataGridFormulaReferenceParserOptions;
17
+ onFunctionOverride?: (functionName: string) => void;
18
+ runtimeErrorPolicy?: DataGridFormulaRuntimeErrorPolicy;
19
+ onRuntimeError?: (error: DataGridFormulaRuntimeError) => void;
20
+ compileStrategy?: DataGridFormulaCompileStrategy;
21
+ allowDynamicCodegen?: boolean;
22
+ }
23
+ export interface DataGridCompiledFormulaField<TRow = unknown> {
24
+ name: string;
25
+ field: string;
26
+ formula: string;
27
+ expressionHash: string;
28
+ identifiers: readonly string[];
29
+ deps: readonly DataGridComputedDependencyToken[];
30
+ contextKeys: readonly string[];
31
+ batchExecutionMode?: DataGridCompiledFormulaBatchExecutionMode;
32
+ compute: (context: DataGridComputedFieldComputeContext<TRow>) => DataGridFormulaValue;
33
+ computeBatch?: (contexts: readonly DataGridCompiledFormulaBatchContext<TRow>[], readTokenByIndex: (contextIndex: number, tokenIndex: number) => unknown) => readonly DataGridFormulaValue[];
34
+ computeBatchColumnar?: (contexts: readonly DataGridCompiledFormulaBatchContext<TRow>[], tokenColumns: readonly (readonly unknown[])[]) => readonly DataGridFormulaValue[];
35
+ }
36
+ export interface DataGridFormulaExpressionAnalysis {
37
+ formula: string;
38
+ expressionHash: string;
39
+ identifiers: readonly string[];
40
+ deps: readonly DataGridComputedDependencyToken[];
41
+ contextKeys: readonly string[];
42
+ }
43
+ export interface DataGridCompiledFormulaArtifact<TRow = unknown> extends DataGridFormulaExpressionAnalysis {
44
+ bind: (definition: DataGridFormulaFieldDefinition, options?: Pick<DataGridFormulaCompileOptions, "runtimeErrorPolicy" | "onRuntimeError">) => DataGridCompiledFormulaField<TRow>;
45
+ }
46
+ export interface DataGridCompiledFormulaBatchContext<TRow = unknown> {
47
+ row: TRow;
48
+ rowId: string | number;
49
+ sourceIndex: number;
50
+ }
51
+ export type DataGridCompiledFormulaBatchExecutionMode = "row" | "batch" | "columnar-ast" | "columnar-jit" | "columnar-fused" | "columnar-vector";
52
+ export type DataGridFormulaTokenValueReader<TKey> = (token: TKey) => unknown;
53
+ export type DataGridFormulaEvaluatorForToken<TKey> = (readTokenValue: DataGridFormulaTokenValueReader<TKey>) => DataGridFormulaValue;
54
+ export type DataGridFormulaEvaluator = DataGridFormulaEvaluatorForToken<DataGridComputedDependencyToken>;
55
+ export type DataGridFormulaTokenIndexEvaluator = DataGridFormulaEvaluatorForToken<number>;
56
+ export type DataGridFormulaBatchEvaluator = (contextsCount: number, readTokenByIndex: (contextIndex: number, tokenIndex: number) => unknown) => readonly DataGridFormulaValue[];
57
+ export type DataGridFormulaColumnarBatchEvaluator = (contextsCount: number, tokenColumns: readonly (readonly unknown[])[]) => readonly DataGridFormulaValue[];
58
+ export interface DataGridFormulaParseResult {
59
+ formula: string;
60
+ tokens: readonly DataGridFormulaToken[];
61
+ ast: DataGridFormulaAstNode;
62
+ }
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { DataGridFormulaDiagnosticsResult, DataGridFormulaExplainResult, DataGridFormulaFieldExplainResult } from "../analysis/types.js";
2
+ export type { DataGridFormulaDiagnosticsResult, DataGridFormulaExplainDependency, DataGridFormulaExplainDependencyDomain, DataGridFormulaExplainNode, DataGridFormulaExplainResult, DataGridFormulaFieldExplainResult, } from "../analysis/types.js";
3
+ import type { DataGridFormulaCompileOptions, DataGridFormulaParseResult } from "../runtime/types.js";
4
+ export type { DataGridCompiledFormulaArtifact, DataGridCompiledFormulaBatchContext, DataGridCompiledFormulaBatchExecutionMode, DataGridCompiledFormulaField, DataGridFormulaBatchEvaluator, DataGridFormulaColumnarBatchEvaluator, DataGridFormulaCompileOptions, DataGridFormulaCompileStrategy, DataGridFormulaEvaluator, DataGridFormulaEvaluatorForToken, DataGridFormulaExpressionAnalysis, DataGridFormulaFunctionRuntime, DataGridFormulaParseResult, DataGridFormulaRuntimeErrorPolicy, DataGridFormulaTokenIndexEvaluator, DataGridFormulaTokenValueReader, } from "../runtime/types.js";
5
+ export type { DataGridFormulaAstNode, DataGridFormulaDiagnostic, DataGridFormulaFunctionArity, DataGridFormulaFunctionDefinition, DataGridFormulaFunctionRegistry, DataGridFormulaOperator, DataGridFormulaReferenceSegment, DataGridFormulaSourceSpan, DataGridFormulaToken, } from "./types.js";
6
+ export declare function parseDataGridFormulaExpression(formula: string, options?: Pick<DataGridFormulaCompileOptions, "referenceParserOptions">): DataGridFormulaParseResult;
7
+ export declare function diagnoseDataGridFormulaExpression(formula: string, options?: Pick<DataGridFormulaCompileOptions, "functionRegistry" | "onFunctionOverride" | "referenceParserOptions">): DataGridFormulaDiagnosticsResult;
8
+ export declare function explainDataGridFormulaExpression(formula: string, options?: Pick<DataGridFormulaCompileOptions, "resolveDependencyToken" | "functionRegistry" | "onFunctionOverride" | "referenceParserOptions">): DataGridFormulaExplainResult;
9
+ export declare function explainDataGridFormulaFieldDefinition(definition: {
10
+ name: string;
11
+ field?: string;
12
+ formula: string;
13
+ }, options?: Pick<DataGridFormulaCompileOptions, "resolveDependencyToken" | "functionRegistry" | "onFunctionOverride">): DataGridFormulaFieldExplainResult;
14
+ //# sourceMappingURL=analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/syntax/analysis.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gCAAgC,EAGhC,4BAA4B,EAC5B,iCAAiC,EAClC,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EACV,gCAAgC,EAChC,gCAAgC,EAChC,sCAAsC,EACtC,0BAA0B,EAC1B,4BAA4B,EAC5B,iCAAiC,GAClC,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,6BAA6B,EAE7B,0BAA0B,EAC3B,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,+BAA+B,EAC/B,mCAAmC,EACnC,yCAAyC,EACzC,4BAA4B,EAC5B,6BAA6B,EAC7B,qCAAqC,EACrC,6BAA6B,EAC7B,8BAA8B,EAC9B,wBAAwB,EACxB,gCAAgC,EAChC,iCAAiC,EACjC,8BAA8B,EAC9B,0BAA0B,EAC1B,iCAAiC,EACjC,kCAAkC,EAClC,+BAA+B,GAChC,MAAM,qBAAqB,CAAA;AAU5B,YAAY,EACV,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,iCAAiC,EACjC,+BAA+B,EAC/B,uBAAuB,EACvB,+BAA+B,EAC/B,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AAwHnB,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,IAAI,CAAC,6BAA6B,EAAE,wBAAwB,CAAM,GAC1E,0BAA0B,CAK5B;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,IAAI,CAAC,6BAA6B,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,wBAAwB,CAAM,GACtH,gCAAgC,CAalC;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,IAAI,CAAC,6BAA6B,EAAE,wBAAwB,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,wBAAwB,CAAM,GACjJ,4BAA4B,CAyB9B;AAED,wBAAgB,qCAAqC,CACnD,UAAU,EAAE;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,EACD,OAAO,GAAE,IAAI,CAAC,6BAA6B,EAAE,wBAAwB,GAAG,kBAAkB,GAAG,oBAAoB,CAAM,GACtH,iCAAiC,CASnC"}