@bilig/formula 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/dist/addressing.d.ts +66 -0
  4. package/dist/addressing.js +179 -0
  5. package/dist/addressing.js.map +1 -0
  6. package/dist/ast.d.ts +74 -0
  7. package/dist/ast.js +2 -0
  8. package/dist/ast.js.map +1 -0
  9. package/dist/binder.d.ts +13 -0
  10. package/dist/binder.js +1700 -0
  11. package/dist/binder.js.map +1 -0
  12. package/dist/builtin-capabilities.d.ts +19 -0
  13. package/dist/builtin-capabilities.js +861 -0
  14. package/dist/builtin-capabilities.js.map +1 -0
  15. package/dist/builtins/complex.d.ts +10 -0
  16. package/dist/builtins/complex.js +407 -0
  17. package/dist/builtins/complex.js.map +1 -0
  18. package/dist/builtins/convert.d.ts +3 -0
  19. package/dist/builtins/convert.js +362 -0
  20. package/dist/builtins/convert.js.map +1 -0
  21. package/dist/builtins/datetime.d.ts +23 -0
  22. package/dist/builtins/datetime.js +1096 -0
  23. package/dist/builtins/datetime.js.map +1 -0
  24. package/dist/builtins/distribution-builtins.d.ts +16 -0
  25. package/dist/builtins/distribution-builtins.js +517 -0
  26. package/dist/builtins/distribution-builtins.js.map +1 -0
  27. package/dist/builtins/distributions.d.ts +34 -0
  28. package/dist/builtins/distributions.js +722 -0
  29. package/dist/builtins/distributions.js.map +1 -0
  30. package/dist/builtins/financial-builtins.d.ts +16 -0
  31. package/dist/builtins/financial-builtins.js +324 -0
  32. package/dist/builtins/financial-builtins.js.map +1 -0
  33. package/dist/builtins/financial.d.ts +11 -0
  34. package/dist/builtins/financial.js +241 -0
  35. package/dist/builtins/financial.js.map +1 -0
  36. package/dist/builtins/fixed-income-builtins.d.ts +14 -0
  37. package/dist/builtins/fixed-income-builtins.js +598 -0
  38. package/dist/builtins/fixed-income-builtins.js.map +1 -0
  39. package/dist/builtins/fixed-income.d.ts +42 -0
  40. package/dist/builtins/fixed-income.js +668 -0
  41. package/dist/builtins/fixed-income.js.map +1 -0
  42. package/dist/builtins/formatting.d.ts +8 -0
  43. package/dist/builtins/formatting.js +53 -0
  44. package/dist/builtins/formatting.js.map +1 -0
  45. package/dist/builtins/logical.d.ts +4 -0
  46. package/dist/builtins/logical.js +258 -0
  47. package/dist/builtins/logical.js.map +1 -0
  48. package/dist/builtins/lookup-array-shape-builtins.d.ts +21 -0
  49. package/dist/builtins/lookup-array-shape-builtins.js +517 -0
  50. package/dist/builtins/lookup-array-shape-builtins.js.map +1 -0
  51. package/dist/builtins/lookup-criteria-builtins.d.ts +16 -0
  52. package/dist/builtins/lookup-criteria-builtins.js +216 -0
  53. package/dist/builtins/lookup-criteria-builtins.js.map +1 -0
  54. package/dist/builtins/lookup-database-builtins.d.ts +17 -0
  55. package/dist/builtins/lookup-database-builtins.js +294 -0
  56. package/dist/builtins/lookup-database-builtins.js.map +1 -0
  57. package/dist/builtins/lookup-financial-builtins.d.ts +11 -0
  58. package/dist/builtins/lookup-financial-builtins.js +291 -0
  59. package/dist/builtins/lookup-financial-builtins.js.map +1 -0
  60. package/dist/builtins/lookup-hypothesis-builtins.d.ts +11 -0
  61. package/dist/builtins/lookup-hypothesis-builtins.js +57 -0
  62. package/dist/builtins/lookup-hypothesis-builtins.js.map +1 -0
  63. package/dist/builtins/lookup-matrix-builtins.d.ts +17 -0
  64. package/dist/builtins/lookup-matrix-builtins.js +218 -0
  65. package/dist/builtins/lookup-matrix-builtins.js.map +1 -0
  66. package/dist/builtins/lookup-order-statistics-builtins.d.ts +18 -0
  67. package/dist/builtins/lookup-order-statistics-builtins.js +575 -0
  68. package/dist/builtins/lookup-order-statistics-builtins.js.map +1 -0
  69. package/dist/builtins/lookup-reference-builtins.d.ts +18 -0
  70. package/dist/builtins/lookup-reference-builtins.js +300 -0
  71. package/dist/builtins/lookup-reference-builtins.js.map +1 -0
  72. package/dist/builtins/lookup-regression-builtins.d.ts +12 -0
  73. package/dist/builtins/lookup-regression-builtins.js +511 -0
  74. package/dist/builtins/lookup-regression-builtins.js.map +1 -0
  75. package/dist/builtins/lookup-sort-filter-builtins.d.ts +20 -0
  76. package/dist/builtins/lookup-sort-filter-builtins.js +382 -0
  77. package/dist/builtins/lookup-sort-filter-builtins.js.map +1 -0
  78. package/dist/builtins/lookup.d.ts +13 -0
  79. package/dist/builtins/lookup.js +867 -0
  80. package/dist/builtins/lookup.js.map +1 -0
  81. package/dist/builtins/math-builtins.d.ts +31 -0
  82. package/dist/builtins/math-builtins.js +420 -0
  83. package/dist/builtins/math-builtins.js.map +1 -0
  84. package/dist/builtins/numeric.d.ts +30 -0
  85. package/dist/builtins/numeric.js +150 -0
  86. package/dist/builtins/numeric.js.map +1 -0
  87. package/dist/builtins/placeholder.d.ts +9 -0
  88. package/dist/builtins/placeholder.js +540 -0
  89. package/dist/builtins/placeholder.js.map +1 -0
  90. package/dist/builtins/radix.d.ts +12 -0
  91. package/dist/builtins/radix.js +220 -0
  92. package/dist/builtins/radix.js.map +1 -0
  93. package/dist/builtins/statistical-builtins.d.ts +13 -0
  94. package/dist/builtins/statistical-builtins.js +240 -0
  95. package/dist/builtins/statistical-builtins.js.map +1 -0
  96. package/dist/builtins/statistics.d.ts +8 -0
  97. package/dist/builtins/statistics.js +74 -0
  98. package/dist/builtins/statistics.js.map +1 -0
  99. package/dist/builtins/text.d.ts +5 -0
  100. package/dist/builtins/text.js +1879 -0
  101. package/dist/builtins/text.js.map +1 -0
  102. package/dist/builtins.d.ts +8 -0
  103. package/dist/builtins.js +695 -0
  104. package/dist/builtins.js.map +1 -0
  105. package/dist/compatibility.d.ts +25 -0
  106. package/dist/compatibility.js +498 -0
  107. package/dist/compatibility.js.map +1 -0
  108. package/dist/compiler.d.ts +29 -0
  109. package/dist/compiler.js +474 -0
  110. package/dist/compiler.js.map +1 -0
  111. package/dist/external-function-adapter.d.ts +32 -0
  112. package/dist/external-function-adapter.js +42 -0
  113. package/dist/external-function-adapter.js.map +1 -0
  114. package/dist/generated/formula-inventory.d.ts +6839 -0
  115. package/dist/generated/formula-inventory.js +7368 -0
  116. package/dist/generated/formula-inventory.js.map +1 -0
  117. package/dist/group-pivot-evaluator.d.ts +28 -0
  118. package/dist/group-pivot-evaluator.js +435 -0
  119. package/dist/group-pivot-evaluator.js.map +1 -0
  120. package/dist/index.d.ts +16 -0
  121. package/dist/index.js +17 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/js-evaluator.d.ts +107 -0
  124. package/dist/js-evaluator.js +1651 -0
  125. package/dist/js-evaluator.js.map +1 -0
  126. package/dist/lexer.d.ts +6 -0
  127. package/dist/lexer.js +115 -0
  128. package/dist/lexer.js.map +1 -0
  129. package/dist/optimizer.d.ts +2 -0
  130. package/dist/optimizer.js +353 -0
  131. package/dist/optimizer.js.map +1 -0
  132. package/dist/parser.d.ts +2 -0
  133. package/dist/parser.js +352 -0
  134. package/dist/parser.js.map +1 -0
  135. package/dist/program-arena.d.ts +22 -0
  136. package/dist/program-arena.js +67 -0
  137. package/dist/program-arena.js.map +1 -0
  138. package/dist/runtime-values.d.ts +17 -0
  139. package/dist/runtime-values.js +11 -0
  140. package/dist/runtime-values.js.map +1 -0
  141. package/dist/special-call-rewrites.d.ts +2 -0
  142. package/dist/special-call-rewrites.js +74 -0
  143. package/dist/special-call-rewrites.js.map +1 -0
  144. package/dist/translation.d.ts +28 -0
  145. package/dist/translation.js +569 -0
  146. package/dist/translation.js.map +1 -0
  147. package/package.json +53 -0
@@ -0,0 +1,474 @@
1
+ import { BuiltinId, FormulaMode, Opcode } from "@bilig/protocol";
2
+ import { formatRangeAddress, parseRangeAddress } from "./addressing.js";
3
+ import { bindFormula, encodeBuiltin } from "./binder.js";
4
+ import { lowerToPlan } from "./js-evaluator.js";
5
+ import { optimizeFormula } from "./optimizer.js";
6
+ import { parseFormula } from "./parser.js";
7
+ import { rewriteSpecialCall } from "./special-call-rewrites.js";
8
+ function encodeInstruction(opcode, operand = 0) {
9
+ return (opcode << 24) | (operand & 0x00ff_ffff);
10
+ }
11
+ const VOLATILE_BUILTINS = new Set(["TODAY", "NOW", "RAND", "RANDBETWEEN", "RANDARRAY"]);
12
+ function producesSpillResult(node) {
13
+ switch (node.kind) {
14
+ case "NumberLiteral":
15
+ case "BooleanLiteral":
16
+ case "StringLiteral":
17
+ case "ErrorLiteral":
18
+ case "NameRef":
19
+ case "StructuredRef":
20
+ case "CellRef":
21
+ case "SpillRef":
22
+ case "RowRef":
23
+ case "ColumnRef":
24
+ case "InvokeExpr":
25
+ return false;
26
+ case "RangeRef":
27
+ return true;
28
+ case "UnaryExpr":
29
+ return producesSpillResult(node.argument);
30
+ case "BinaryExpr":
31
+ return producesSpillResult(node.left) || producesSpillResult(node.right);
32
+ case "CallExpr":
33
+ if (node.callee.toUpperCase() === "CHOOSE") {
34
+ return node.args.slice(1).some((arg) => producesSpillResult(arg));
35
+ }
36
+ if (node.callee.toUpperCase() === "TREND" || node.callee.toUpperCase() === "GROWTH") {
37
+ const shapeArg = node.args[2] ?? node.args[1] ?? node.args[0];
38
+ if (shapeArg === undefined) {
39
+ return false;
40
+ }
41
+ return producesSpillResult(shapeArg);
42
+ }
43
+ return [
44
+ "SEQUENCE",
45
+ "EXPAND",
46
+ "LINEST",
47
+ "LOGEST",
48
+ "OFFSET",
49
+ "TAKE",
50
+ "DROP",
51
+ "CHOOSECOLS",
52
+ "CHOOSEROWS",
53
+ "SORT",
54
+ "SORTBY",
55
+ "TOCOL",
56
+ "TOROW",
57
+ "WRAPROWS",
58
+ "WRAPCOLS",
59
+ "FILTER",
60
+ "UNIQUE",
61
+ "FREQUENCY",
62
+ "MODE.MULT",
63
+ "TEXTSPLIT",
64
+ "TRIMRANGE",
65
+ "GROUPBY",
66
+ "PIVOTBY",
67
+ "MAKEARRAY",
68
+ "MAP",
69
+ "SCAN",
70
+ "BYROW",
71
+ "BYCOL",
72
+ "RANDARRAY",
73
+ "MUNIT",
74
+ "MINVERSE",
75
+ "MMULT",
76
+ ].includes(node.callee.toUpperCase());
77
+ }
78
+ }
79
+ function analyzeVolatileMetadata(node) {
80
+ switch (node.kind) {
81
+ case "NumberLiteral":
82
+ case "BooleanLiteral":
83
+ case "StringLiteral":
84
+ case "ErrorLiteral":
85
+ case "NameRef":
86
+ case "StructuredRef":
87
+ case "CellRef":
88
+ case "SpillRef":
89
+ case "RowRef":
90
+ case "ColumnRef":
91
+ case "RangeRef":
92
+ return { volatile: false, randCallCount: 0 };
93
+ case "UnaryExpr":
94
+ return analyzeVolatileMetadata(node.argument);
95
+ case "BinaryExpr": {
96
+ const left = analyzeVolatileMetadata(node.left);
97
+ const right = analyzeVolatileMetadata(node.right);
98
+ return {
99
+ volatile: left.volatile || right.volatile,
100
+ randCallCount: left.randCallCount + right.randCallCount,
101
+ };
102
+ }
103
+ case "CallExpr": {
104
+ const rewritten = rewriteSpecialCall(node);
105
+ if (rewritten) {
106
+ return analyzeVolatileMetadata(rewritten);
107
+ }
108
+ const callee = node.callee.toUpperCase();
109
+ let volatile = VOLATILE_BUILTINS.has(callee);
110
+ let randCallCount = callee === "RAND" ? 1 : 0;
111
+ node.args.forEach((arg) => {
112
+ const child = analyzeVolatileMetadata(arg);
113
+ volatile = volatile || child.volatile;
114
+ randCallCount += child.randCallCount;
115
+ });
116
+ return { volatile, randCallCount };
117
+ }
118
+ case "InvokeExpr": {
119
+ const callee = analyzeVolatileMetadata(node.callee);
120
+ const args = node.args.map(analyzeVolatileMetadata);
121
+ return {
122
+ volatile: callee.volatile || args.some((child) => child.volatile),
123
+ randCallCount: callee.randCallCount + args.reduce((sum, child) => sum + child.randCallCount, 0),
124
+ };
125
+ }
126
+ }
127
+ }
128
+ function emitCellRef(ref, sheetName, state) {
129
+ const qualifiedRef = sheetName ? `${sheetName}!${ref}` : ref;
130
+ let index = state.refs.indexOf(qualifiedRef);
131
+ if (index === -1)
132
+ index = state.refs.push(qualifiedRef) - 1;
133
+ state.program.push(encodeInstruction(Opcode.PushCell, index));
134
+ }
135
+ function emitRangeRef(node, state) {
136
+ const qualifiedRange = formatRangeAddress(parseRangeAddress(node.sheetName ? `${node.sheetName}!${node.start}:${node.end}` : `${node.start}:${node.end}`));
137
+ let index = state.ranges.indexOf(qualifiedRange);
138
+ if (index === -1) {
139
+ index = state.ranges.push(qualifiedRange) - 1;
140
+ }
141
+ state.program.push(encodeInstruction(Opcode.PushRange, index));
142
+ }
143
+ function isCellRangeNode(node) {
144
+ if (node.kind !== "RangeRef") {
145
+ return false;
146
+ }
147
+ try {
148
+ const sheetPrefix = node.sheetName ? `${node.sheetName}!` : "";
149
+ return parseRangeAddress(`${sheetPrefix}${node.start}:${node.end}`).kind === "cells";
150
+ }
151
+ catch {
152
+ return false;
153
+ }
154
+ }
155
+ function emitArgument(node, state) {
156
+ if (node.kind === "RangeRef") {
157
+ emitRangeRef(node, state);
158
+ return 1;
159
+ }
160
+ emitNode(node, state);
161
+ return 1;
162
+ }
163
+ const AXIS_AGGREGATE_CODES = new Map([
164
+ ["SUM", 1],
165
+ ["AVERAGE", 2],
166
+ ["AVG", 2],
167
+ ["MIN", 3],
168
+ ["MAX", 4],
169
+ ["COUNT", 5],
170
+ ["COUNTA", 6],
171
+ ]);
172
+ function getNativeAxisAggregateCode(node) {
173
+ if (node.kind !== "CallExpr" ||
174
+ node.callee.toUpperCase() !== "LAMBDA" ||
175
+ node.args.length !== 2) {
176
+ return null;
177
+ }
178
+ const [param, body] = node.args;
179
+ if (param?.kind !== "NameRef" || body?.kind !== "CallExpr" || body.args.length !== 1) {
180
+ return null;
181
+ }
182
+ const aggregateCode = AXIS_AGGREGATE_CODES.get(body.callee.toUpperCase());
183
+ if (aggregateCode === undefined) {
184
+ return null;
185
+ }
186
+ return body.args[0]?.kind === "NameRef" &&
187
+ body.args[0].name.trim().toUpperCase() === param.name.trim().toUpperCase()
188
+ ? aggregateCode
189
+ : null;
190
+ }
191
+ function getNativeRunningFoldCode(node) {
192
+ if (node.kind !== "CallExpr" ||
193
+ node.callee.toUpperCase() !== "LAMBDA" ||
194
+ node.args.length !== 3) {
195
+ return null;
196
+ }
197
+ const [acc, value, body] = node.args;
198
+ if (acc?.kind !== "NameRef" || value?.kind !== "NameRef" || body?.kind !== "BinaryExpr") {
199
+ return null;
200
+ }
201
+ const foldCode = body.operator === "+" ? 1 : body.operator === "*" ? 2 : null;
202
+ if (foldCode === null) {
203
+ return null;
204
+ }
205
+ const left = body.left;
206
+ const right = body.right;
207
+ const accName = acc.name.trim().toUpperCase();
208
+ const valueName = value.name.trim().toUpperCase();
209
+ return left.kind === "NameRef" &&
210
+ right.kind === "NameRef" &&
211
+ ((left.name.trim().toUpperCase() === accName &&
212
+ right.name.trim().toUpperCase() === valueName) ||
213
+ (left.name.trim().toUpperCase() === valueName && right.name.trim().toUpperCase() === accName))
214
+ ? foldCode
215
+ : null;
216
+ }
217
+ function isNativeMakearraySumLambda(node) {
218
+ if (node.kind !== "CallExpr" ||
219
+ node.callee.toUpperCase() !== "LAMBDA" ||
220
+ node.args.length !== 3) {
221
+ return false;
222
+ }
223
+ const [rowParam, colParam, body] = node.args;
224
+ if (rowParam?.kind !== "NameRef" || colParam?.kind !== "NameRef" || body?.kind !== "BinaryExpr") {
225
+ return false;
226
+ }
227
+ if (body.operator !== "+") {
228
+ return false;
229
+ }
230
+ const left = body.left;
231
+ const right = body.right;
232
+ const rowName = rowParam.name.trim().toUpperCase();
233
+ const colName = colParam.name.trim().toUpperCase();
234
+ return (left.kind === "NameRef" &&
235
+ right.kind === "NameRef" &&
236
+ ((left.name.trim().toUpperCase() === rowName && right.name.trim().toUpperCase() === colName) ||
237
+ (left.name.trim().toUpperCase() === colName && right.name.trim().toUpperCase() === rowName)));
238
+ }
239
+ function emitNode(node, state) {
240
+ switch (node.kind) {
241
+ case "NumberLiteral": {
242
+ const index = state.constants.push(node.value) - 1;
243
+ state.program.push(encodeInstruction(Opcode.PushNumber, index));
244
+ return;
245
+ }
246
+ case "BooleanLiteral":
247
+ state.program.push(encodeInstruction(Opcode.PushBoolean, node.value ? 1 : 0));
248
+ return;
249
+ case "StringLiteral":
250
+ {
251
+ let index = state.strings.indexOf(node.value);
252
+ if (index === -1)
253
+ index = state.strings.push(node.value) - 1;
254
+ state.program.push(encodeInstruction(Opcode.PushString, index));
255
+ }
256
+ return;
257
+ case "ErrorLiteral":
258
+ state.program.push(encodeInstruction(Opcode.PushError, node.code));
259
+ return;
260
+ case "NameRef":
261
+ case "StructuredRef":
262
+ case "SpillRef":
263
+ throw new Error("Defined names are not supported on the wasm fast path");
264
+ case "CellRef": {
265
+ emitCellRef(node.ref, node.sheetName, state);
266
+ return;
267
+ }
268
+ case "RangeRef":
269
+ emitRangeRef(node, state);
270
+ return;
271
+ case "RowRef":
272
+ case "ColumnRef":
273
+ throw new Error("Row and column references must appear inside a range");
274
+ case "UnaryExpr":
275
+ emitNode(node.argument, state);
276
+ if (node.operator === "-") {
277
+ state.program.push(encodeInstruction(Opcode.Neg));
278
+ }
279
+ return;
280
+ case "BinaryExpr":
281
+ emitNode(node.left, state);
282
+ emitNode(node.right, state);
283
+ state.program.push(encodeInstruction({
284
+ "+": Opcode.Add,
285
+ "-": Opcode.Sub,
286
+ "*": Opcode.Mul,
287
+ "/": Opcode.Div,
288
+ "^": Opcode.Pow,
289
+ "&": Opcode.Concat,
290
+ "=": Opcode.Eq,
291
+ "<>": Opcode.Neq,
292
+ ">": Opcode.Gt,
293
+ ">=": Opcode.Gte,
294
+ "<": Opcode.Lt,
295
+ "<=": Opcode.Lte,
296
+ }[node.operator]));
297
+ return;
298
+ case "CallExpr":
299
+ {
300
+ const rewritten = rewriteSpecialCall(node);
301
+ if (rewritten) {
302
+ emitNode(rewritten, state);
303
+ return;
304
+ }
305
+ const callee = node.callee.toUpperCase();
306
+ if (callee === "IF") {
307
+ if (node.args.length !== 3) {
308
+ throw new Error("IF requires exactly three arguments on the wasm fast path");
309
+ }
310
+ emitNode(node.args[0], state);
311
+ const jumpIfFalseIndex = state.program.push(encodeInstruction(Opcode.JumpIfFalse, 0)) - 1;
312
+ emitNode(node.args[1], state);
313
+ const jumpIndex = state.program.push(encodeInstruction(Opcode.Jump, 0)) - 1;
314
+ const falseBranchStart = state.program.length;
315
+ emitNode(node.args[2], state);
316
+ const end = state.program.length;
317
+ state.program[jumpIfFalseIndex] = encodeInstruction(Opcode.JumpIfFalse, falseBranchStart);
318
+ state.program[jumpIndex] = encodeInstruction(Opcode.Jump, end);
319
+ return;
320
+ }
321
+ if ((callee === "BYROW" || callee === "BYCOL") && node.args.length === 2) {
322
+ const lambda = node.args[1];
323
+ const aggregateCode = getNativeAxisAggregateCode(lambda);
324
+ if (aggregateCode !== null) {
325
+ const aggregateIndex = state.constants.push(aggregateCode) - 1;
326
+ state.program.push(encodeInstruction(Opcode.PushNumber, aggregateIndex));
327
+ emitArgument(node.args[0], state);
328
+ state.program.push(encodeInstruction(Opcode.CallBuiltin, ((callee === "BYROW" ? BuiltinId.ByrowAggregate : BuiltinId.BycolAggregate) << 8) |
329
+ 2));
330
+ return;
331
+ }
332
+ }
333
+ if (callee === "MAKEARRAY" &&
334
+ node.args.length === 3 &&
335
+ isNativeMakearraySumLambda(node.args[2])) {
336
+ emitArgument(node.args[0], state);
337
+ emitArgument(node.args[1], state);
338
+ state.program.push(encodeInstruction(Opcode.CallBuiltin, (BuiltinId.MakearraySum << 8) | 2));
339
+ return;
340
+ }
341
+ if (callee === "REDUCE" || callee === "SCAN") {
342
+ const sourceArg = node.args.length === 3 ? node.args[1] : node.args[0];
343
+ const lambdaArg = node.args.length === 3 ? node.args[2] : node.args[1];
344
+ const initialArg = node.args.length === 3 ? node.args[0] : undefined;
345
+ const foldCode = lambdaArg ? getNativeRunningFoldCode(lambdaArg) : null;
346
+ if ((node.args.length === 2 || node.args.length === 3) &&
347
+ sourceArg !== undefined &&
348
+ lambdaArg !== undefined &&
349
+ foldCode !== null) {
350
+ let argc = 0;
351
+ if (initialArg !== undefined) {
352
+ argc += emitArgument(initialArg, state);
353
+ }
354
+ argc += emitArgument(sourceArg, state);
355
+ state.program.push(encodeInstruction(Opcode.CallBuiltin, ((callee === "REDUCE"
356
+ ? foldCode === 1
357
+ ? BuiltinId.ReduceSum
358
+ : BuiltinId.ReduceProduct
359
+ : foldCode === 1
360
+ ? BuiltinId.ScanSum
361
+ : BuiltinId.ScanProduct) <<
362
+ 8) |
363
+ argc));
364
+ return;
365
+ }
366
+ }
367
+ const rangeArg = node.args[0];
368
+ if (callee === "PHONETIC" &&
369
+ node.args.length === 1 &&
370
+ rangeArg &&
371
+ isCellRangeNode(rangeArg)) {
372
+ emitCellRef(rangeArg.start, rangeArg.sheetName, state);
373
+ state.program.push(encodeInstruction(Opcode.CallBuiltin, (BuiltinId.Phonetic << 8) | 1));
374
+ return;
375
+ }
376
+ let argc = 0;
377
+ node.args.forEach((arg) => {
378
+ argc += emitArgument(arg, state);
379
+ });
380
+ state.program.push(encodeInstruction(Opcode.CallBuiltin, (encodeBuiltin(callee) << 8) | argc));
381
+ }
382
+ return;
383
+ case "InvokeExpr":
384
+ throw new Error("Lambda invocation is not supported on the wasm fast path");
385
+ }
386
+ }
387
+ function computeMaxStackDepth(plan) {
388
+ let current = 0;
389
+ let max = 0;
390
+ for (const instruction of plan) {
391
+ switch (instruction.opcode) {
392
+ case "push-number":
393
+ case "push-boolean":
394
+ case "push-string":
395
+ case "push-error":
396
+ case "push-name":
397
+ case "push-cell":
398
+ case "push-range":
399
+ case "push-lambda":
400
+ current += 1;
401
+ break;
402
+ case "binary":
403
+ current -= 1;
404
+ break;
405
+ case "call":
406
+ current -= instruction.argc;
407
+ current += 1;
408
+ break;
409
+ case "invoke":
410
+ current -= instruction.argc;
411
+ current += 1;
412
+ break;
413
+ case "jump-if-false":
414
+ current -= 1;
415
+ break;
416
+ case "bind-name":
417
+ current -= 1;
418
+ break;
419
+ case "unary":
420
+ case "begin-scope":
421
+ case "end-scope":
422
+ case "jump":
423
+ case "return":
424
+ break;
425
+ }
426
+ max = Math.max(max, current);
427
+ }
428
+ return max;
429
+ }
430
+ export function compileFormulaAst(source, ast, options = {}) {
431
+ const optimizedAst = optimizeFormula(ast);
432
+ const bound = bindFormula(optimizedAst);
433
+ const state = { program: [], constants: [], refs: [], ranges: [], strings: [] };
434
+ const jsPlan = lowerToPlan(optimizedAst);
435
+ const volatileMetadata = analyzeVolatileMetadata(options.originalAst ?? ast);
436
+ const spillResult = producesSpillResult(optimizedAst);
437
+ if (bound.mode === FormulaMode.WasmFastPath) {
438
+ emitNode(optimizedAst, state);
439
+ }
440
+ state.program.push(encodeInstruction(Opcode.Ret));
441
+ return {
442
+ id: 0,
443
+ source,
444
+ mode: bound.mode,
445
+ depsPtr: 0,
446
+ depsLen: 0,
447
+ programOffset: 0,
448
+ programLength: state.program.length,
449
+ constNumberOffset: 0,
450
+ constNumberLength: state.constants.length,
451
+ rangeListOffset: 0,
452
+ rangeListLength: state.ranges.length,
453
+ program: Uint32Array.from(state.program),
454
+ constants: Float64Array.from(state.constants),
455
+ symbolicRefs: state.refs,
456
+ symbolicRanges: state.ranges,
457
+ symbolicStrings: state.strings,
458
+ ast: options.originalAst ?? ast,
459
+ optimizedAst,
460
+ deps: bound.deps,
461
+ symbolicNames: options.symbolicNames ?? bound.symbolicNames,
462
+ symbolicTables: options.symbolicTables ?? bound.symbolicTables,
463
+ symbolicSpills: options.symbolicSpills ?? bound.symbolicSpills,
464
+ volatile: volatileMetadata.volatile,
465
+ randCallCount: volatileMetadata.randCallCount,
466
+ producesSpill: spillResult,
467
+ jsPlan,
468
+ maxStackDepth: computeMaxStackDepth(jsPlan),
469
+ };
470
+ }
471
+ export function compileFormula(source) {
472
+ return compileFormulaAst(source, parseFormula(source));
473
+ }
474
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { CellValue } from "@bilig/protocol";
2
+ import type { EvaluationResult } from "./runtime-values.js";
3
+ export declare const externalFunctionSurfaces: readonly ["cube", "web", "host", "external-data", "add-in"];
4
+ export type ExternalFunctionSurface = (typeof externalFunctionSurfaces)[number];
5
+ export type ExternalScalarFunction = (...args: CellValue[]) => CellValue;
6
+ export interface ExternalRangeFunctionArgument {
7
+ kind: "range";
8
+ values: CellValue[];
9
+ refKind: "cells" | "rows" | "cols";
10
+ rows: number;
11
+ cols: number;
12
+ }
13
+ export type ExternalLookupFunctionArgument = CellValue | ExternalRangeFunctionArgument;
14
+ export type ExternalLookupFunction = (...args: ExternalLookupFunctionArgument[]) => EvaluationResult;
15
+ export type ExternalFunctionBinding = {
16
+ kind: "scalar";
17
+ implementation: ExternalScalarFunction;
18
+ } | {
19
+ kind: "lookup";
20
+ implementation: ExternalLookupFunction;
21
+ };
22
+ export interface ExternalFunctionAdapter {
23
+ readonly surface: ExternalFunctionSurface;
24
+ resolveFunction(name: string): ExternalFunctionBinding | undefined;
25
+ }
26
+ export declare function installExternalFunctionAdapter(adapter: ExternalFunctionAdapter): void;
27
+ export declare function removeExternalFunctionAdapter(surface: ExternalFunctionSurface): void;
28
+ export declare function clearExternalFunctionAdapters(): void;
29
+ export declare function listExternalFunctionAdapterSurfaces(): ExternalFunctionSurface[];
30
+ export declare function hasExternalFunction(name: string): boolean;
31
+ export declare function getExternalScalarFunction(name: string): ExternalScalarFunction | undefined;
32
+ export declare function getExternalLookupFunction(name: string): ExternalLookupFunction | undefined;
@@ -0,0 +1,42 @@
1
+ export const externalFunctionSurfaces = ["cube", "web", "host", "external-data", "add-in"];
2
+ const adapters = new Map();
3
+ function normalizeFunctionName(name) {
4
+ return name.trim().toUpperCase();
5
+ }
6
+ function resolveExternalFunction(name) {
7
+ const normalized = normalizeFunctionName(name);
8
+ if (!normalized) {
9
+ return undefined;
10
+ }
11
+ for (const adapter of adapters.values()) {
12
+ const binding = adapter.resolveFunction(normalized);
13
+ if (binding) {
14
+ return binding;
15
+ }
16
+ }
17
+ return undefined;
18
+ }
19
+ export function installExternalFunctionAdapter(adapter) {
20
+ adapters.set(adapter.surface, adapter);
21
+ }
22
+ export function removeExternalFunctionAdapter(surface) {
23
+ adapters.delete(surface);
24
+ }
25
+ export function clearExternalFunctionAdapters() {
26
+ adapters.clear();
27
+ }
28
+ export function listExternalFunctionAdapterSurfaces() {
29
+ return [...adapters.keys()];
30
+ }
31
+ export function hasExternalFunction(name) {
32
+ return resolveExternalFunction(name) !== undefined;
33
+ }
34
+ export function getExternalScalarFunction(name) {
35
+ const binding = resolveExternalFunction(name);
36
+ return binding?.kind === "scalar" ? binding.implementation : undefined;
37
+ }
38
+ export function getExternalLookupFunction(name) {
39
+ const binding = resolveExternalFunction(name);
40
+ return binding?.kind === "lookup" ? binding.implementation : undefined;
41
+ }
42
+ //# sourceMappingURL=external-function-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-function-adapter.js","sourceRoot":"","sources":["../src/external-function-adapter.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,CAAU,CAAC;AA4BpG,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoD,CAAC;AAE7E,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,OAAgC;IAC7E,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAgC;IAC5E,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mCAAmC;IACjD,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,uBAAuB,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC"}