@ricsam/formula-engine 0.0.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 (569) hide show
  1. package/README.md +100 -0
  2. package/dist/cjs/core/ast-traverser.cjs +124 -0
  3. package/dist/cjs/core/ast-traverser.cjs.map +10 -0
  4. package/dist/cjs/core/autofill-utils.cjs +304 -0
  5. package/dist/cjs/core/autofill-utils.cjs.map +10 -0
  6. package/dist/cjs/core/engine.cjs +390 -0
  7. package/dist/cjs/core/engine.cjs.map +10 -0
  8. package/dist/cjs/core/managers/cache-manager.cjs +58 -0
  9. package/dist/cjs/core/managers/cache-manager.cjs.map +10 -0
  10. package/dist/cjs/core/managers/dependency-manager.cjs +620 -0
  11. package/dist/cjs/core/managers/dependency-manager.cjs.map +10 -0
  12. package/dist/cjs/core/managers/dependency-node.cjs +24 -0
  13. package/dist/cjs/core/managers/dependency-node.cjs.map +9 -0
  14. package/dist/cjs/core/managers/evaluation-manager.cjs +433 -0
  15. package/dist/cjs/core/managers/evaluation-manager.cjs.map +10 -0
  16. package/dist/cjs/core/managers/event-manager.cjs +49 -0
  17. package/dist/cjs/core/managers/event-manager.cjs.map +10 -0
  18. package/dist/cjs/core/managers/frontier-dependency-manager.cjs +181 -0
  19. package/dist/cjs/core/managers/frontier-dependency-manager.cjs.map +10 -0
  20. package/dist/cjs/core/managers/index.cjs +49 -0
  21. package/dist/cjs/core/managers/index.cjs.map +10 -0
  22. package/dist/cjs/core/managers/isDependencyNode.cjs +44 -0
  23. package/dist/cjs/core/managers/isDependencyNode.cjs.map +10 -0
  24. package/dist/cjs/core/managers/named-expression-manager.cjs +379 -0
  25. package/dist/cjs/core/managers/named-expression-manager.cjs.map +10 -0
  26. package/dist/cjs/core/managers/range-eval-order-builder.cjs +644 -0
  27. package/dist/cjs/core/managers/range-eval-order-builder.cjs.map +10 -0
  28. package/dist/cjs/core/managers/table-manager.cjs +254 -0
  29. package/dist/cjs/core/managers/table-manager.cjs.map +10 -0
  30. package/dist/cjs/core/managers/workbook-manager.cjs +474 -0
  31. package/dist/cjs/core/managers/workbook-manager.cjs.map +10 -0
  32. package/dist/cjs/core/map-serializer.cjs +69 -0
  33. package/dist/cjs/core/map-serializer.cjs.map +10 -0
  34. package/dist/cjs/core/named-expression-renamer.cjs +88 -0
  35. package/dist/cjs/core/named-expression-renamer.cjs.map +10 -0
  36. package/dist/cjs/core/sheet-renamer.cjs +89 -0
  37. package/dist/cjs/core/sheet-renamer.cjs.map +10 -0
  38. package/dist/cjs/core/sheet-utils.cjs +39 -0
  39. package/dist/cjs/core/sheet-utils.cjs.map +10 -0
  40. package/dist/cjs/core/table-renamer.cjs +88 -0
  41. package/dist/cjs/core/table-renamer.cjs.map +10 -0
  42. package/dist/cjs/core/types.cjs +48 -0
  43. package/dist/cjs/core/types.cjs.map +10 -0
  44. package/dist/cjs/core/utils/range-serializer.cjs +65 -0
  45. package/dist/cjs/core/utils/range-serializer.cjs.map +10 -0
  46. package/dist/cjs/core/utils/spreadsheet-visualizer.cjs +142 -0
  47. package/dist/cjs/core/utils/spreadsheet-visualizer.cjs.map +10 -0
  48. package/dist/cjs/core/utils.cjs +434 -0
  49. package/dist/cjs/core/utils.cjs.map +10 -0
  50. package/dist/cjs/core/workbook-renamer.cjs +106 -0
  51. package/dist/cjs/core/workbook-renamer.cjs.map +10 -0
  52. package/dist/cjs/debug/flags.cjs +47 -0
  53. package/dist/cjs/debug/flags.cjs.map +10 -0
  54. package/dist/cjs/evaluator/arithmetic/add/add.cjs +82 -0
  55. package/dist/cjs/evaluator/arithmetic/add/add.cjs.map +10 -0
  56. package/dist/cjs/evaluator/arithmetic/divide/divide.cjs +107 -0
  57. package/dist/cjs/evaluator/arithmetic/divide/divide.cjs.map +10 -0
  58. package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs +93 -0
  59. package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs.map +10 -0
  60. package/dist/cjs/evaluator/arithmetic/power/power.cjs +125 -0
  61. package/dist/cjs/evaluator/arithmetic/power/power.cjs.map +10 -0
  62. package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs +84 -0
  63. package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs.map +10 -0
  64. package/dist/cjs/evaluator/comparison/equals.cjs +64 -0
  65. package/dist/cjs/evaluator/comparison/equals.cjs.map +10 -0
  66. package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs +61 -0
  67. package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs.map +10 -0
  68. package/dist/cjs/evaluator/comparison/greater-than.cjs +61 -0
  69. package/dist/cjs/evaluator/comparison/greater-than.cjs.map +10 -0
  70. package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs +69 -0
  71. package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs.map +10 -0
  72. package/dist/cjs/evaluator/comparison/less-than.cjs +68 -0
  73. package/dist/cjs/evaluator/comparison/less-than.cjs.map +10 -0
  74. package/dist/cjs/evaluator/comparison/not-equals.cjs +53 -0
  75. package/dist/cjs/evaluator/comparison/not-equals.cjs.map +10 -0
  76. package/dist/cjs/evaluator/concatenation/concatenate.cjs +72 -0
  77. package/dist/cjs/evaluator/concatenation/concatenate.cjs.map +10 -0
  78. package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs +58 -0
  79. package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs.map +10 -0
  80. package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs +112 -0
  81. package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs.map +10 -0
  82. package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs +54 -0
  83. package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs.map +10 -0
  84. package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs +108 -0
  85. package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs.map +10 -0
  86. package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs +50 -0
  87. package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs.map +10 -0
  88. package/dist/cjs/evaluator/evaluate-scalar-operator.cjs +254 -0
  89. package/dist/cjs/evaluator/evaluate-scalar-operator.cjs.map +10 -0
  90. package/dist/cjs/evaluator/evaluation-context.cjs +154 -0
  91. package/dist/cjs/evaluator/evaluation-context.cjs.map +10 -0
  92. package/dist/cjs/evaluator/evaluation-error.cjs +75 -0
  93. package/dist/cjs/evaluator/evaluation-error.cjs.map +10 -0
  94. package/dist/cjs/evaluator/formula-evaluator.cjs +797 -0
  95. package/dist/cjs/evaluator/formula-evaluator.cjs.map +10 -0
  96. package/dist/cjs/evaluator/range-evaluation-node.cjs +88 -0
  97. package/dist/cjs/evaluator/range-evaluation-node.cjs.map +10 -0
  98. package/dist/cjs/functions/_template/template.cjs +42 -0
  99. package/dist/cjs/functions/_template/template.cjs.map +10 -0
  100. package/dist/cjs/functions/array/sequence/sequence.cjs +315 -0
  101. package/dist/cjs/functions/array/sequence/sequence.cjs.map +10 -0
  102. package/dist/cjs/functions/criteria-parser.cjs +217 -0
  103. package/dist/cjs/functions/criteria-parser.cjs.map +10 -0
  104. package/dist/cjs/functions/criteria-utils.cjs +291 -0
  105. package/dist/cjs/functions/criteria-utils.cjs.map +10 -0
  106. package/dist/cjs/functions/function-utils.cjs +63 -0
  107. package/dist/cjs/functions/function-utils.cjs.map +10 -0
  108. package/dist/cjs/functions/index.cjs +125 -0
  109. package/dist/cjs/functions/index.cjs.map +10 -0
  110. package/dist/cjs/functions/information/cell/cell.cjs +196 -0
  111. package/dist/cjs/functions/information/cell/cell.cjs.map +10 -0
  112. package/dist/cjs/functions/information/column/column.cjs +144 -0
  113. package/dist/cjs/functions/information/column/column.cjs.map +10 -0
  114. package/dist/cjs/functions/information/row/row.cjs +150 -0
  115. package/dist/cjs/functions/information/row/row.cjs.map +10 -0
  116. package/dist/cjs/functions/logical/and/and.cjs +112 -0
  117. package/dist/cjs/functions/logical/and/and.cjs.map +10 -0
  118. package/dist/cjs/functions/logical/if/if.cjs +195 -0
  119. package/dist/cjs/functions/logical/if/if.cjs.map +10 -0
  120. package/dist/cjs/functions/logical/iferror/iferror.cjs +126 -0
  121. package/dist/cjs/functions/logical/iferror/iferror.cjs.map +10 -0
  122. package/dist/cjs/functions/logical/or/or.cjs +112 -0
  123. package/dist/cjs/functions/logical/or/or.cjs.map +10 -0
  124. package/dist/cjs/functions/lookup/count/count-utils.cjs +65 -0
  125. package/dist/cjs/functions/lookup/count/count-utils.cjs.map +10 -0
  126. package/dist/cjs/functions/lookup/count/count.cjs +48 -0
  127. package/dist/cjs/functions/lookup/count/count.cjs.map +10 -0
  128. package/dist/cjs/functions/lookup/count/countif.cjs +94 -0
  129. package/dist/cjs/functions/lookup/count/countif.cjs.map +10 -0
  130. package/dist/cjs/functions/lookup/count/countifs.cjs +63 -0
  131. package/dist/cjs/functions/lookup/count/countifs.cjs.map +10 -0
  132. package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs +187 -0
  133. package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs.map +10 -0
  134. package/dist/cjs/functions/lookup/match/match.cjs +168 -0
  135. package/dist/cjs/functions/lookup/match/match.cjs.map +10 -0
  136. package/dist/cjs/functions/lookup/xlookup/xlookup.cjs +410 -0
  137. package/dist/cjs/functions/lookup/xlookup/xlookup.cjs.map +10 -0
  138. package/dist/cjs/functions/math/average/average-utils.cjs +72 -0
  139. package/dist/cjs/functions/math/average/average-utils.cjs.map +10 -0
  140. package/dist/cjs/functions/math/average/average.cjs +48 -0
  141. package/dist/cjs/functions/math/average/average.cjs.map +10 -0
  142. package/dist/cjs/functions/math/average/averageif.cjs +83 -0
  143. package/dist/cjs/functions/math/average/averageif.cjs.map +10 -0
  144. package/dist/cjs/functions/math/average/averageifs.cjs +61 -0
  145. package/dist/cjs/functions/math/average/averageifs.cjs.map +10 -0
  146. package/dist/cjs/functions/math/ceiling/ceiling.cjs +219 -0
  147. package/dist/cjs/functions/math/ceiling/ceiling.cjs.map +10 -0
  148. package/dist/cjs/functions/math/max/max-utils.cjs +71 -0
  149. package/dist/cjs/functions/math/max/max-utils.cjs.map +10 -0
  150. package/dist/cjs/functions/math/max/max.cjs +48 -0
  151. package/dist/cjs/functions/math/max/max.cjs.map +10 -0
  152. package/dist/cjs/functions/math/max/maxif.cjs +83 -0
  153. package/dist/cjs/functions/math/max/maxif.cjs.map +10 -0
  154. package/dist/cjs/functions/math/max/maxifs.cjs +61 -0
  155. package/dist/cjs/functions/math/max/maxifs.cjs.map +10 -0
  156. package/dist/cjs/functions/math/min/min-utils.cjs +71 -0
  157. package/dist/cjs/functions/math/min/min-utils.cjs.map +10 -0
  158. package/dist/cjs/functions/math/min/min.cjs +48 -0
  159. package/dist/cjs/functions/math/min/min.cjs.map +10 -0
  160. package/dist/cjs/functions/math/min/minif.cjs +83 -0
  161. package/dist/cjs/functions/math/min/minif.cjs.map +10 -0
  162. package/dist/cjs/functions/math/min/minifs.cjs +61 -0
  163. package/dist/cjs/functions/math/min/minifs.cjs.map +10 -0
  164. package/dist/cjs/functions/math/sum/sum.cjs +48 -0
  165. package/dist/cjs/functions/math/sum/sum.cjs.map +10 -0
  166. package/dist/cjs/functions/math/sum/sumif.cjs +83 -0
  167. package/dist/cjs/functions/math/sum/sumif.cjs.map +10 -0
  168. package/dist/cjs/functions/math/sum/sumifs.cjs +60 -0
  169. package/dist/cjs/functions/math/sum/sumifs.cjs.map +10 -0
  170. package/dist/cjs/functions/math/sum/summation-utils.cjs +57 -0
  171. package/dist/cjs/functions/math/sum/summation-utils.cjs.map +10 -0
  172. package/dist/cjs/functions/reference/address/address.cjs +163 -0
  173. package/dist/cjs/functions/reference/address/address.cjs.map +10 -0
  174. package/dist/cjs/functions/reference/indirect/indirect.cjs +102 -0
  175. package/dist/cjs/functions/reference/indirect/indirect.cjs.map +10 -0
  176. package/dist/cjs/functions/reference/offset/offset.cjs +233 -0
  177. package/dist/cjs/functions/reference/offset/offset.cjs.map +10 -0
  178. package/dist/cjs/functions/text/concatenate/concatenate.cjs +167 -0
  179. package/dist/cjs/functions/text/concatenate/concatenate.cjs.map +10 -0
  180. package/dist/cjs/functions/text/exact/exact.cjs +171 -0
  181. package/dist/cjs/functions/text/exact/exact.cjs.map +10 -0
  182. package/dist/cjs/functions/text/find/find.cjs +397 -0
  183. package/dist/cjs/functions/text/find/find.cjs.map +10 -0
  184. package/dist/cjs/functions/text/left/left.cjs +109 -0
  185. package/dist/cjs/functions/text/left/left.cjs.map +10 -0
  186. package/dist/cjs/functions/text/len/len.cjs +119 -0
  187. package/dist/cjs/functions/text/len/len.cjs.map +10 -0
  188. package/dist/cjs/functions/text/mid/mid.cjs +103 -0
  189. package/dist/cjs/functions/text/mid/mid.cjs.map +10 -0
  190. package/dist/cjs/functions/text/right/right.cjs +167 -0
  191. package/dist/cjs/functions/text/right/right.cjs.map +10 -0
  192. package/dist/cjs/functions/text/text-helpers.cjs +179 -0
  193. package/dist/cjs/functions/text/text-helpers.cjs.map +10 -0
  194. package/dist/cjs/functions/text/textjoin/textjoin.cjs +173 -0
  195. package/dist/cjs/functions/text/textjoin/textjoin.cjs.map +10 -0
  196. package/dist/cjs/package.json +5 -0
  197. package/dist/cjs/parser/ast.cjs +175 -0
  198. package/dist/cjs/parser/ast.cjs.map +10 -0
  199. package/dist/cjs/parser/formatter.cjs +319 -0
  200. package/dist/cjs/parser/formatter.cjs.map +10 -0
  201. package/dist/cjs/parser/grammar.cjs +375 -0
  202. package/dist/cjs/parser/grammar.cjs.map +10 -0
  203. package/dist/cjs/parser/lexer.cjs +443 -0
  204. package/dist/cjs/parser/lexer.cjs.map +10 -0
  205. package/dist/cjs/parser/parser.cjs +1700 -0
  206. package/dist/cjs/parser/parser.cjs.map +10 -0
  207. package/dist/cjs/react/hooks.cjs +59 -0
  208. package/dist/cjs/react/hooks.cjs.map +10 -0
  209. package/dist/mjs/core/ast-traverser.mjs +94 -0
  210. package/dist/mjs/core/ast-traverser.mjs.map +10 -0
  211. package/dist/mjs/core/autofill-utils.mjs +274 -0
  212. package/dist/mjs/core/autofill-utils.mjs.map +10 -0
  213. package/dist/mjs/core/engine.mjs +366 -0
  214. package/dist/mjs/core/engine.mjs.map +10 -0
  215. package/dist/mjs/core/managers/cache-manager.mjs +27 -0
  216. package/dist/mjs/core/managers/cache-manager.mjs.map +10 -0
  217. package/dist/mjs/core/managers/dependency-manager.mjs +593 -0
  218. package/dist/mjs/core/managers/dependency-manager.mjs.map +10 -0
  219. package/dist/mjs/core/managers/dependency-node.mjs +2 -0
  220. package/dist/mjs/core/managers/dependency-node.mjs.map +9 -0
  221. package/dist/mjs/core/managers/evaluation-manager.mjs +415 -0
  222. package/dist/mjs/core/managers/evaluation-manager.mjs.map +10 -0
  223. package/dist/mjs/core/managers/event-manager.mjs +18 -0
  224. package/dist/mjs/core/managers/event-manager.mjs.map +10 -0
  225. package/dist/mjs/core/managers/frontier-dependency-manager.mjs +151 -0
  226. package/dist/mjs/core/managers/frontier-dependency-manager.mjs.map +10 -0
  227. package/dist/mjs/core/managers/index.mjs +21 -0
  228. package/dist/mjs/core/managers/index.mjs.map +10 -0
  229. package/dist/mjs/core/managers/isDependencyNode.mjs +14 -0
  230. package/dist/mjs/core/managers/isDependencyNode.mjs.map +10 -0
  231. package/dist/mjs/core/managers/named-expression-manager.mjs +348 -0
  232. package/dist/mjs/core/managers/named-expression-manager.mjs.map +10 -0
  233. package/dist/mjs/core/managers/range-eval-order-builder.mjs +618 -0
  234. package/dist/mjs/core/managers/range-eval-order-builder.mjs.map +10 -0
  235. package/dist/mjs/core/managers/table-manager.mjs +224 -0
  236. package/dist/mjs/core/managers/table-manager.mjs.map +10 -0
  237. package/dist/mjs/core/managers/workbook-manager.mjs +447 -0
  238. package/dist/mjs/core/managers/workbook-manager.mjs.map +10 -0
  239. package/dist/mjs/core/map-serializer.mjs +39 -0
  240. package/dist/mjs/core/map-serializer.mjs.map +10 -0
  241. package/dist/mjs/core/named-expression-renamer.mjs +58 -0
  242. package/dist/mjs/core/named-expression-renamer.mjs.map +10 -0
  243. package/dist/mjs/core/sheet-renamer.mjs +59 -0
  244. package/dist/mjs/core/sheet-renamer.mjs.map +10 -0
  245. package/dist/mjs/core/sheet-utils.mjs +8 -0
  246. package/dist/mjs/core/sheet-utils.mjs.map +10 -0
  247. package/dist/mjs/core/table-renamer.mjs +58 -0
  248. package/dist/mjs/core/table-renamer.mjs.map +10 -0
  249. package/dist/mjs/core/types.mjs +18 -0
  250. package/dist/mjs/core/types.mjs.map +10 -0
  251. package/dist/mjs/core/utils/range-serializer.mjs +35 -0
  252. package/dist/mjs/core/utils/range-serializer.mjs.map +10 -0
  253. package/dist/mjs/core/utils/spreadsheet-visualizer.mjs +112 -0
  254. package/dist/mjs/core/utils/spreadsheet-visualizer.mjs.map +10 -0
  255. package/dist/mjs/core/utils.mjs +409 -0
  256. package/dist/mjs/core/utils.mjs.map +10 -0
  257. package/dist/mjs/core/workbook-renamer.mjs +76 -0
  258. package/dist/mjs/core/workbook-renamer.mjs.map +10 -0
  259. package/dist/mjs/debug/flags.mjs +17 -0
  260. package/dist/mjs/debug/flags.mjs.map +10 -0
  261. package/dist/mjs/evaluator/arithmetic/add/add.mjs +52 -0
  262. package/dist/mjs/evaluator/arithmetic/add/add.mjs.map +10 -0
  263. package/dist/mjs/evaluator/arithmetic/divide/divide.mjs +77 -0
  264. package/dist/mjs/evaluator/arithmetic/divide/divide.mjs.map +10 -0
  265. package/dist/mjs/evaluator/arithmetic/multiply/multiply.mjs +63 -0
  266. package/dist/mjs/evaluator/arithmetic/multiply/multiply.mjs.map +10 -0
  267. package/dist/mjs/evaluator/arithmetic/power/power.mjs +95 -0
  268. package/dist/mjs/evaluator/arithmetic/power/power.mjs.map +10 -0
  269. package/dist/mjs/evaluator/arithmetic/subtract/subtract.mjs +54 -0
  270. package/dist/mjs/evaluator/arithmetic/subtract/subtract.mjs.map +10 -0
  271. package/dist/mjs/evaluator/comparison/equals.mjs +34 -0
  272. package/dist/mjs/evaluator/comparison/equals.mjs.map +10 -0
  273. package/dist/mjs/evaluator/comparison/greater-than-or-equal.mjs +31 -0
  274. package/dist/mjs/evaluator/comparison/greater-than-or-equal.mjs.map +10 -0
  275. package/dist/mjs/evaluator/comparison/greater-than.mjs +31 -0
  276. package/dist/mjs/evaluator/comparison/greater-than.mjs.map +10 -0
  277. package/dist/mjs/evaluator/comparison/less-than-or-equal.mjs +39 -0
  278. package/dist/mjs/evaluator/comparison/less-than-or-equal.mjs.map +10 -0
  279. package/dist/mjs/evaluator/comparison/less-than.mjs +38 -0
  280. package/dist/mjs/evaluator/comparison/less-than.mjs.map +10 -0
  281. package/dist/mjs/evaluator/comparison/not-equals.mjs +23 -0
  282. package/dist/mjs/evaluator/comparison/not-equals.mjs.map +10 -0
  283. package/dist/mjs/evaluator/concatenation/concatenate.mjs +42 -0
  284. package/dist/mjs/evaluator/concatenation/concatenate.mjs.map +10 -0
  285. package/dist/mjs/evaluator/dependency-nodes/ast-evaluation-node.mjs +28 -0
  286. package/dist/mjs/evaluator/dependency-nodes/ast-evaluation-node.mjs.map +10 -0
  287. package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs +81 -0
  288. package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs.map +10 -0
  289. package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs +24 -0
  290. package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs.map +10 -0
  291. package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs +78 -0
  292. package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs.map +10 -0
  293. package/dist/mjs/evaluator/dependency-nodes/spill-meta-node.mjs +20 -0
  294. package/dist/mjs/evaluator/dependency-nodes/spill-meta-node.mjs.map +10 -0
  295. package/dist/mjs/evaluator/evaluate-scalar-operator.mjs +226 -0
  296. package/dist/mjs/evaluator/evaluate-scalar-operator.mjs.map +10 -0
  297. package/dist/mjs/evaluator/evaluation-context.mjs +123 -0
  298. package/dist/mjs/evaluator/evaluation-context.mjs.map +10 -0
  299. package/dist/mjs/evaluator/evaluation-error.mjs +44 -0
  300. package/dist/mjs/evaluator/evaluation-error.mjs.map +10 -0
  301. package/dist/mjs/evaluator/formula-evaluator.mjs +780 -0
  302. package/dist/mjs/evaluator/formula-evaluator.mjs.map +10 -0
  303. package/dist/mjs/evaluator/range-evaluation-node.mjs +58 -0
  304. package/dist/mjs/evaluator/range-evaluation-node.mjs.map +10 -0
  305. package/dist/mjs/functions/_template/template.mjs +12 -0
  306. package/dist/mjs/functions/_template/template.mjs.map +10 -0
  307. package/dist/mjs/functions/array/sequence/sequence.mjs +287 -0
  308. package/dist/mjs/functions/array/sequence/sequence.mjs.map +10 -0
  309. package/dist/mjs/functions/criteria-parser.mjs +187 -0
  310. package/dist/mjs/functions/criteria-parser.mjs.map +10 -0
  311. package/dist/mjs/functions/criteria-utils.mjs +268 -0
  312. package/dist/mjs/functions/criteria-utils.mjs.map +10 -0
  313. package/dist/mjs/functions/function-utils.mjs +33 -0
  314. package/dist/mjs/functions/function-utils.mjs.map +10 -0
  315. package/dist/mjs/functions/index.mjs +95 -0
  316. package/dist/mjs/functions/index.mjs.map +10 -0
  317. package/dist/mjs/functions/information/cell/cell.mjs +168 -0
  318. package/dist/mjs/functions/information/cell/cell.mjs.map +10 -0
  319. package/dist/mjs/functions/information/column/column.mjs +120 -0
  320. package/dist/mjs/functions/information/column/column.mjs.map +10 -0
  321. package/dist/mjs/functions/information/row/row.mjs +126 -0
  322. package/dist/mjs/functions/information/row/row.mjs.map +10 -0
  323. package/dist/mjs/functions/logical/and/and.mjs +84 -0
  324. package/dist/mjs/functions/logical/and/and.mjs.map +10 -0
  325. package/dist/mjs/functions/logical/if/if.mjs +167 -0
  326. package/dist/mjs/functions/logical/if/if.mjs.map +10 -0
  327. package/dist/mjs/functions/logical/iferror/iferror.mjs +98 -0
  328. package/dist/mjs/functions/logical/iferror/iferror.mjs.map +10 -0
  329. package/dist/mjs/functions/logical/or/or.mjs +84 -0
  330. package/dist/mjs/functions/logical/or/or.mjs.map +10 -0
  331. package/dist/mjs/functions/lookup/count/count-utils.mjs +35 -0
  332. package/dist/mjs/functions/lookup/count/count-utils.mjs.map +10 -0
  333. package/dist/mjs/functions/lookup/count/count.mjs +18 -0
  334. package/dist/mjs/functions/lookup/count/count.mjs.map +10 -0
  335. package/dist/mjs/functions/lookup/count/countif.mjs +68 -0
  336. package/dist/mjs/functions/lookup/count/countif.mjs.map +10 -0
  337. package/dist/mjs/functions/lookup/count/countifs.mjs +37 -0
  338. package/dist/mjs/functions/lookup/count/countifs.mjs.map +10 -0
  339. package/dist/mjs/functions/lookup/index-lookup/index-lookup.mjs +159 -0
  340. package/dist/mjs/functions/lookup/index-lookup/index-lookup.mjs.map +10 -0
  341. package/dist/mjs/functions/lookup/match/match.mjs +140 -0
  342. package/dist/mjs/functions/lookup/match/match.mjs.map +10 -0
  343. package/dist/mjs/functions/lookup/xlookup/xlookup.mjs +382 -0
  344. package/dist/mjs/functions/lookup/xlookup/xlookup.mjs.map +10 -0
  345. package/dist/mjs/functions/math/average/average-utils.mjs +44 -0
  346. package/dist/mjs/functions/math/average/average-utils.mjs.map +10 -0
  347. package/dist/mjs/functions/math/average/average.mjs +18 -0
  348. package/dist/mjs/functions/math/average/average.mjs.map +10 -0
  349. package/dist/mjs/functions/math/average/averageif.mjs +58 -0
  350. package/dist/mjs/functions/math/average/averageif.mjs.map +10 -0
  351. package/dist/mjs/functions/math/average/averageifs.mjs +35 -0
  352. package/dist/mjs/functions/math/average/averageifs.mjs.map +10 -0
  353. package/dist/mjs/functions/math/ceiling/ceiling.mjs +191 -0
  354. package/dist/mjs/functions/math/ceiling/ceiling.mjs.map +10 -0
  355. package/dist/mjs/functions/math/max/max-utils.mjs +43 -0
  356. package/dist/mjs/functions/math/max/max-utils.mjs.map +10 -0
  357. package/dist/mjs/functions/math/max/max.mjs +18 -0
  358. package/dist/mjs/functions/math/max/max.mjs.map +10 -0
  359. package/dist/mjs/functions/math/max/maxif.mjs +58 -0
  360. package/dist/mjs/functions/math/max/maxif.mjs.map +10 -0
  361. package/dist/mjs/functions/math/max/maxifs.mjs +35 -0
  362. package/dist/mjs/functions/math/max/maxifs.mjs.map +10 -0
  363. package/dist/mjs/functions/math/min/min-utils.mjs +43 -0
  364. package/dist/mjs/functions/math/min/min-utils.mjs.map +10 -0
  365. package/dist/mjs/functions/math/min/min.mjs +18 -0
  366. package/dist/mjs/functions/math/min/min.mjs.map +10 -0
  367. package/dist/mjs/functions/math/min/minif.mjs +58 -0
  368. package/dist/mjs/functions/math/min/minif.mjs.map +10 -0
  369. package/dist/mjs/functions/math/min/minifs.mjs +35 -0
  370. package/dist/mjs/functions/math/min/minifs.mjs.map +10 -0
  371. package/dist/mjs/functions/math/sum/sum.mjs +18 -0
  372. package/dist/mjs/functions/math/sum/sum.mjs.map +10 -0
  373. package/dist/mjs/functions/math/sum/sumif.mjs +58 -0
  374. package/dist/mjs/functions/math/sum/sumif.mjs.map +10 -0
  375. package/dist/mjs/functions/math/sum/sumifs.mjs +34 -0
  376. package/dist/mjs/functions/math/sum/sumifs.mjs.map +10 -0
  377. package/dist/mjs/functions/math/sum/summation-utils.mjs +27 -0
  378. package/dist/mjs/functions/math/sum/summation-utils.mjs.map +10 -0
  379. package/dist/mjs/functions/reference/address/address.mjs +135 -0
  380. package/dist/mjs/functions/reference/address/address.mjs.map +10 -0
  381. package/dist/mjs/functions/reference/indirect/indirect.mjs +74 -0
  382. package/dist/mjs/functions/reference/indirect/indirect.mjs.map +10 -0
  383. package/dist/mjs/functions/reference/offset/offset.mjs +205 -0
  384. package/dist/mjs/functions/reference/offset/offset.mjs.map +10 -0
  385. package/dist/mjs/functions/text/concatenate/concatenate.mjs +139 -0
  386. package/dist/mjs/functions/text/concatenate/concatenate.mjs.map +10 -0
  387. package/dist/mjs/functions/text/exact/exact.mjs +143 -0
  388. package/dist/mjs/functions/text/exact/exact.mjs.map +10 -0
  389. package/dist/mjs/functions/text/find/find.mjs +369 -0
  390. package/dist/mjs/functions/text/find/find.mjs.map +10 -0
  391. package/dist/mjs/functions/text/left/left.mjs +81 -0
  392. package/dist/mjs/functions/text/left/left.mjs.map +10 -0
  393. package/dist/mjs/functions/text/len/len.mjs +91 -0
  394. package/dist/mjs/functions/text/len/len.mjs.map +10 -0
  395. package/dist/mjs/functions/text/mid/mid.mjs +75 -0
  396. package/dist/mjs/functions/text/mid/mid.mjs.map +10 -0
  397. package/dist/mjs/functions/text/right/right.mjs +143 -0
  398. package/dist/mjs/functions/text/right/right.mjs.map +10 -0
  399. package/dist/mjs/functions/text/text-helpers.mjs +151 -0
  400. package/dist/mjs/functions/text/text-helpers.mjs.map +10 -0
  401. package/dist/mjs/functions/text/textjoin/textjoin.mjs +145 -0
  402. package/dist/mjs/functions/text/textjoin/textjoin.mjs.map +10 -0
  403. package/dist/mjs/package.json +5 -0
  404. package/dist/mjs/parser/ast.mjs +145 -0
  405. package/dist/mjs/parser/ast.mjs.map +10 -0
  406. package/dist/mjs/parser/formatter.mjs +289 -0
  407. package/dist/mjs/parser/formatter.mjs.map +10 -0
  408. package/dist/mjs/parser/grammar.mjs +345 -0
  409. package/dist/mjs/parser/grammar.mjs.map +10 -0
  410. package/dist/mjs/parser/lexer.mjs +412 -0
  411. package/dist/mjs/parser/lexer.mjs.map +10 -0
  412. package/dist/mjs/parser/parser.mjs +1692 -0
  413. package/dist/mjs/parser/parser.mjs.map +10 -0
  414. package/dist/mjs/react/hooks.mjs +16 -0
  415. package/dist/mjs/react/hooks.mjs.map +10 -0
  416. package/dist/types/core/ast-traverser.d.ts +28 -0
  417. package/dist/types/core/autofill-utils.d.ts +32 -0
  418. package/dist/types/core/engine.d.ts +184 -0
  419. package/dist/types/core/managers/cache-manager.d.ts +14 -0
  420. package/dist/types/core/managers/dependency-manager.d.ts +147 -0
  421. package/dist/types/core/managers/dependency-node.d.ts +13 -0
  422. package/dist/types/core/managers/evaluation-manager.d.ts +30 -0
  423. package/dist/types/core/managers/event-manager.d.ts +8 -0
  424. package/dist/types/core/managers/frontier-dependency-manager.d.ts +69 -0
  425. package/dist/types/core/managers/index.d.ts +7 -0
  426. package/dist/types/core/managers/isDependencyNode.d.ts +2 -0
  427. package/dist/types/core/managers/named-expression-manager.d.ts +101 -0
  428. package/dist/types/core/managers/range-eval-order-builder.d.ts +33 -0
  429. package/dist/types/core/managers/table-manager.d.ts +84 -0
  430. package/dist/types/core/managers/workbook-manager.d.ts +136 -0
  431. package/dist/types/core/map-serializer.d.ts +4 -0
  432. package/dist/types/core/named-expression-renamer.d.ts +21 -0
  433. package/dist/types/core/sheet-renamer.d.ts +28 -0
  434. package/dist/types/core/sheet-utils.d.ts +2 -0
  435. package/dist/types/core/table-renamer.d.ts +21 -0
  436. package/dist/types/core/types.d.ts +272 -0
  437. package/dist/types/core/utils/cell-address-parsing.test.d.ts +1 -0
  438. package/dist/types/core/utils/range-serializer.d.ts +22 -0
  439. package/dist/types/core/utils/range-serializer.test.d.ts +1 -0
  440. package/dist/types/core/utils/spreadsheet-visualizer.d.ts +30 -0
  441. package/dist/types/core/utils.d.ts +48 -0
  442. package/dist/types/core/workbook-renamer.d.ts +28 -0
  443. package/dist/types/debug/flags.d.ts +11 -0
  444. package/dist/types/evaluator/arithmetic/add/add.d.ts +2 -0
  445. package/dist/types/evaluator/arithmetic/add/add.test.d.ts +1 -0
  446. package/dist/types/evaluator/arithmetic/divide/divide.d.ts +2 -0
  447. package/dist/types/evaluator/arithmetic/divide/divide.test.d.ts +1 -0
  448. package/dist/types/evaluator/arithmetic/multiply/multiply.d.ts +2 -0
  449. package/dist/types/evaluator/arithmetic/multiply/multiply.test.d.ts +1 -0
  450. package/dist/types/evaluator/arithmetic/power/power.d.ts +2 -0
  451. package/dist/types/evaluator/arithmetic/power/power.test.d.ts +1 -0
  452. package/dist/types/evaluator/arithmetic/subtract/subtract.d.ts +2 -0
  453. package/dist/types/evaluator/arithmetic/subtract/subtract.test.d.ts +1 -0
  454. package/dist/types/evaluator/comparison/comparison-operators.test.d.ts +1 -0
  455. package/dist/types/evaluator/comparison/equals.d.ts +6 -0
  456. package/dist/types/evaluator/comparison/greater-than-or-equal.d.ts +6 -0
  457. package/dist/types/evaluator/comparison/greater-than.d.ts +6 -0
  458. package/dist/types/evaluator/comparison/less-than-or-equal.d.ts +6 -0
  459. package/dist/types/evaluator/comparison/less-than.d.ts +6 -0
  460. package/dist/types/evaluator/comparison/not-equals.d.ts +6 -0
  461. package/dist/types/evaluator/concatenation/concatenate.d.ts +6 -0
  462. package/dist/types/evaluator/concatenation/concatenate.test.d.ts +1 -0
  463. package/dist/types/evaluator/dependency-nodes/ast-evaluation-node.d.ts +12 -0
  464. package/dist/types/evaluator/dependency-nodes/base-eval-node.d.ts +31 -0
  465. package/dist/types/evaluator/dependency-nodes/cell-value-node.d.ts +10 -0
  466. package/dist/types/evaluator/dependency-nodes/empty-cell-evaluation-node.d.ts +17 -0
  467. package/dist/types/evaluator/dependency-nodes/spill-meta-node.d.ts +7 -0
  468. package/dist/types/evaluator/evaluate-scalar-operator.d.ts +12 -0
  469. package/dist/types/evaluator/evaluation-context.d.ts +66 -0
  470. package/dist/types/evaluator/evaluation-error.d.ts +20 -0
  471. package/dist/types/evaluator/formula-evaluator.d.ts +67 -0
  472. package/dist/types/evaluator/open-range-evaluator.test.d.ts +1 -0
  473. package/dist/types/evaluator/range-evaluation-node.d.ts +16 -0
  474. package/dist/types/functions/_template/template.d.ts +5 -0
  475. package/dist/types/functions/_template/template.test.d.ts +1 -0
  476. package/dist/types/functions/array/sequence/performance-test.d.ts +1 -0
  477. package/dist/types/functions/array/sequence/sequence.d.ts +14 -0
  478. package/dist/types/functions/array/sequence/sequence.test.d.ts +1 -0
  479. package/dist/types/functions/criteria-parser.d.ts +27 -0
  480. package/dist/types/functions/criteria-utils.d.ts +61 -0
  481. package/dist/types/functions/function-utils.d.ts +21 -0
  482. package/dist/types/functions/index.d.ts +2 -0
  483. package/dist/types/functions/information/cell/cell.d.ts +24 -0
  484. package/dist/types/functions/information/cell/cell.test.d.ts +1 -0
  485. package/dist/types/functions/information/column/column.d.ts +14 -0
  486. package/dist/types/functions/information/column/column.test.d.ts +1 -0
  487. package/dist/types/functions/information/row/row.d.ts +14 -0
  488. package/dist/types/functions/information/row/row.test.d.ts +1 -0
  489. package/dist/types/functions/logical/and/and.d.ts +5 -0
  490. package/dist/types/functions/logical/and/and.test.d.ts +1 -0
  491. package/dist/types/functions/logical/if/if.d.ts +5 -0
  492. package/dist/types/functions/logical/if/if.test.d.ts +1 -0
  493. package/dist/types/functions/logical/iferror/iferror.d.ts +5 -0
  494. package/dist/types/functions/logical/iferror/iferror.test.d.ts +1 -0
  495. package/dist/types/functions/logical/or/or.d.ts +5 -0
  496. package/dist/types/functions/logical/or/or.test.d.ts +1 -0
  497. package/dist/types/functions/lookup/count/count-utils.d.ts +14 -0
  498. package/dist/types/functions/lookup/count/count.d.ts +21 -0
  499. package/dist/types/functions/lookup/count/count.test.d.ts +1 -0
  500. package/dist/types/functions/lookup/count/countif.d.ts +26 -0
  501. package/dist/types/functions/lookup/count/countif.test.d.ts +1 -0
  502. package/dist/types/functions/lookup/count/countifs.d.ts +21 -0
  503. package/dist/types/functions/lookup/count/countifs.test.d.ts +1 -0
  504. package/dist/types/functions/lookup/index-lookup/index-lookup.d.ts +2 -0
  505. package/dist/types/functions/lookup/index-lookup/index-lookup.test.d.ts +1 -0
  506. package/dist/types/functions/lookup/match/match.d.ts +2 -0
  507. package/dist/types/functions/lookup/match/match.test.d.ts +1 -0
  508. package/dist/types/functions/lookup/xlookup/xlookup.d.ts +2 -0
  509. package/dist/types/functions/lookup/xlookup/xlookup.test.d.ts +1 -0
  510. package/dist/types/functions/math/average/average-utils.d.ts +10 -0
  511. package/dist/types/functions/math/average/average.d.ts +18 -0
  512. package/dist/types/functions/math/average/average.test.d.ts +1 -0
  513. package/dist/types/functions/math/average/averageif.d.ts +23 -0
  514. package/dist/types/functions/math/average/averageif.test.d.ts +1 -0
  515. package/dist/types/functions/math/average/averageifs.d.ts +21 -0
  516. package/dist/types/functions/math/average/averageifs.test.d.ts +1 -0
  517. package/dist/types/functions/math/ceiling/ceiling.d.ts +5 -0
  518. package/dist/types/functions/math/ceiling/ceiling.test.d.ts +1 -0
  519. package/dist/types/functions/math/max/max-utils.d.ts +20 -0
  520. package/dist/types/functions/math/max/max.d.ts +18 -0
  521. package/dist/types/functions/math/max/max.test.d.ts +1 -0
  522. package/dist/types/functions/math/max/maxif.d.ts +23 -0
  523. package/dist/types/functions/math/max/maxif.test.d.ts +1 -0
  524. package/dist/types/functions/math/max/maxifs.d.ts +21 -0
  525. package/dist/types/functions/math/max/maxifs.test.d.ts +1 -0
  526. package/dist/types/functions/math/min/min-utils.d.ts +20 -0
  527. package/dist/types/functions/math/min/min.d.ts +5 -0
  528. package/dist/types/functions/math/min/min.test.d.ts +1 -0
  529. package/dist/types/functions/math/min/minif.d.ts +23 -0
  530. package/dist/types/functions/math/min/minif.test.d.ts +1 -0
  531. package/dist/types/functions/math/min/minifs.d.ts +21 -0
  532. package/dist/types/functions/math/min/minifs.test.d.ts +1 -0
  533. package/dist/types/functions/math/sum/sum.d.ts +5 -0
  534. package/dist/types/functions/math/sum/sum.test.d.ts +1 -0
  535. package/dist/types/functions/math/sum/sumif.d.ts +23 -0
  536. package/dist/types/functions/math/sum/sumif.test.d.ts +1 -0
  537. package/dist/types/functions/math/sum/sumifs.d.ts +21 -0
  538. package/dist/types/functions/math/sum/sumifs.test.d.ts +1 -0
  539. package/dist/types/functions/math/sum/summation-utils.d.ts +19 -0
  540. package/dist/types/functions/reference/address/address.d.ts +18 -0
  541. package/dist/types/functions/reference/address/address.test.d.ts +1 -0
  542. package/dist/types/functions/reference/indirect/indirect.d.ts +20 -0
  543. package/dist/types/functions/reference/indirect/indirect.test.d.ts +1 -0
  544. package/dist/types/functions/reference/offset/offset.d.ts +23 -0
  545. package/dist/types/functions/reference/offset/offset.test.d.ts +1 -0
  546. package/dist/types/functions/text/concatenate/concatenate.d.ts +5 -0
  547. package/dist/types/functions/text/concatenate/concatenate.test.d.ts +1 -0
  548. package/dist/types/functions/text/exact/exact.d.ts +5 -0
  549. package/dist/types/functions/text/exact/exact.test.d.ts +1 -0
  550. package/dist/types/functions/text/find/find.d.ts +20 -0
  551. package/dist/types/functions/text/find/find.test.d.ts +1 -0
  552. package/dist/types/functions/text/left/left.d.ts +19 -0
  553. package/dist/types/functions/text/left/left.test.d.ts +1 -0
  554. package/dist/types/functions/text/len/len.d.ts +16 -0
  555. package/dist/types/functions/text/len/len.test.d.ts +1 -0
  556. package/dist/types/functions/text/mid/mid.d.ts +20 -0
  557. package/dist/types/functions/text/mid/mid.test.d.ts +1 -0
  558. package/dist/types/functions/text/right/right.d.ts +2 -0
  559. package/dist/types/functions/text/right/right.test.d.ts +1 -0
  560. package/dist/types/functions/text/text-helpers.d.ts +27 -0
  561. package/dist/types/functions/text/textjoin/textjoin.d.ts +5 -0
  562. package/dist/types/functions/text/textjoin/textjoin.test.d.ts +1 -0
  563. package/dist/types/parser/ast.d.ts +275 -0
  564. package/dist/types/parser/formatter.d.ts +6 -0
  565. package/dist/types/parser/grammar.d.ts +203 -0
  566. package/dist/types/parser/lexer.d.ts +144 -0
  567. package/dist/types/parser/parser.d.ts +159 -0
  568. package/dist/types/react/hooks.d.ts +5 -0
  569. package/package.json +41 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Sheet renamer utility for updating cross-sheet references in formulas
3
+ */
4
+ /**
5
+ * Renames sheet references in a formula string
6
+ * @param formula The formula string (without the leading =)
7
+ * @param oldSheetName The old sheet name to replace
8
+ * @param newSheetName The new sheet name to use
9
+ * @returns The updated formula string
10
+ */
11
+ export declare function renameSheetInFormula(options: {
12
+ formula: string;
13
+ oldSheetName: string;
14
+ newSheetName: string;
15
+ }): string;
16
+ /**
17
+ * Checks if a formula references a specific sheet
18
+ * @param formula The formula string (without the leading =)
19
+ * @param sheetName The sheet name to check for
20
+ * @returns True if the formula references the sheet
21
+ */
22
+ export declare function formulaReferencesSheet(formula: string, sheetName: string): boolean;
23
+ /**
24
+ * Gets all sheet names referenced in a formula
25
+ * @param formula The formula string (without the leading =)
26
+ * @returns Array of unique sheet names referenced in the formula
27
+ */
28
+ export declare function getReferencedSheetNames(formula: string): string[];
@@ -0,0 +1,2 @@
1
+ export declare class SheetUtils {
2
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Renames table references in a formula string
3
+ * @param formula - The formula string (without the leading =)
4
+ * @param oldTableName - The current table name to replace
5
+ * @param newTableName - The new table name
6
+ * @returns The updated formula string, or the original if no changes were made
7
+ */
8
+ export declare function renameTableInFormula(formula: string, oldTableName: string, newTableName: string): string;
9
+ /**
10
+ * Checks if a formula contains references to a specific table
11
+ * @param formula - The formula string (without the leading =)
12
+ * @param tableName - The table name to search for
13
+ * @returns True if the formula contains references to the table
14
+ */
15
+ export declare function formulaReferencesTable(formula: string, tableName: string): boolean;
16
+ /**
17
+ * Gets all table names referenced in a formula
18
+ * @param formula - The formula string (without the leading =)
19
+ * @returns Array of unique table names referenced in the formula
20
+ */
21
+ export declare function getReferencedTableNames(formula: string): string[];
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Core type definitions for FormulaEngine
3
+ * This file contains all fundamental types used throughout the engine
4
+ */
5
+ import type { FunctionNode } from "src/parser/ast";
6
+ import type { FormulaEvaluator } from "src/evaluator/formula-evaluator";
7
+ import type { EvaluationContext } from "src/evaluator/evaluation-context";
8
+ import type { DependencyNode } from "./managers/dependency-node";
9
+ import type { LookupOrder } from "./managers/range-eval-order-builder";
10
+ export interface CellAddress {
11
+ sheetName: string;
12
+ workbookName: string;
13
+ colIndex: number;
14
+ rowIndex: number;
15
+ }
16
+ export interface RangeAddress {
17
+ sheetName: string;
18
+ workbookName: string;
19
+ range: SpreadsheetRange;
20
+ }
21
+ export interface LocalCellAddress {
22
+ colIndex: number;
23
+ rowIndex: number;
24
+ }
25
+ export type ArethmeticEvaluator = (left: CellValue, right: CellValue, context: EvaluationContext) => CellValue | ErrorEvaluationResult;
26
+ export type PositiveInfinity = {
27
+ type: "infinity";
28
+ sign: "positive";
29
+ };
30
+ export type CellInfinity = {
31
+ type: "infinity";
32
+ sign: "positive" | "negative";
33
+ };
34
+ export type CellNumber = {
35
+ type: "number";
36
+ value: number;
37
+ };
38
+ export type SpreadsheetRangeEnd = CellNumber | PositiveInfinity;
39
+ export type SpreadsheetRange = {
40
+ start: {
41
+ col: number;
42
+ row: number;
43
+ };
44
+ end: {
45
+ col: SpreadsheetRangeEnd;
46
+ row: SpreadsheetRangeEnd;
47
+ };
48
+ };
49
+ export type RelativeRange = {
50
+ start: {
51
+ col: number;
52
+ row: number;
53
+ };
54
+ width: SpreadsheetRangeEnd;
55
+ height: SpreadsheetRangeEnd;
56
+ };
57
+ export type FiniteSpreadsheetRange = {
58
+ start: {
59
+ col: number;
60
+ row: number;
61
+ };
62
+ end: {
63
+ col: number;
64
+ row: number;
65
+ };
66
+ };
67
+ export type CellString = {
68
+ type: "string";
69
+ value: string;
70
+ };
71
+ export type CellBoolean = {
72
+ type: "boolean";
73
+ value: boolean;
74
+ };
75
+ export type CellValue = CellNumber | CellString | CellBoolean | CellInfinity;
76
+ /**
77
+ * undefined and "" are considered empty values
78
+ * undefineds are converted to "" in the engine
79
+ *
80
+ * any empty values are deleted from the sheet content
81
+ */
82
+ export type SerializedCellValue = string | number | boolean | undefined;
83
+ export interface NamedExpression {
84
+ name: string;
85
+ expression: string;
86
+ }
87
+ export interface TableDefinition {
88
+ name: string;
89
+ start: {
90
+ rowIndex: number;
91
+ colIndex: number;
92
+ };
93
+ headers: Map<string, {
94
+ name: string;
95
+ index: number;
96
+ }>;
97
+ endRow: SpreadsheetRangeEnd;
98
+ sheetName: string;
99
+ workbookName: string;
100
+ }
101
+ export declare enum FormulaError {
102
+ DIV0 = "#DIV/0!",
103
+ NA = "#N/A",
104
+ NAME = "#NAME?",
105
+ NUM = "#NUM!",
106
+ REF = "#REF!",
107
+ VALUE = "#VALUE!",
108
+ CYCLE = "#CYCLE!",
109
+ ERROR = "#ERROR!",
110
+ SPILL = "#SPILL!"
111
+ }
112
+ export interface Sheet {
113
+ name: string;
114
+ index: number;
115
+ content: Map<string, SerializedCellValue>;
116
+ }
117
+ export interface Workbook {
118
+ name: string;
119
+ sheets: Map<string, Sheet>;
120
+ }
121
+ export type ValueEvaluationResult = {
122
+ type: "value";
123
+ result: CellValue;
124
+ /**
125
+ * If the terminating evaluation result is a reference (see evaluateReference)
126
+ * then we store information about the source cell for context dependent functions like CELL
127
+ */
128
+ sourceCell?: CellAddress;
129
+ };
130
+ export type AwaitingEvaluationResult = {
131
+ type: "awaiting-evaluation";
132
+ waitingFor: DependencyNode;
133
+ errAddress: DependencyNode;
134
+ /**
135
+ * If the terminating evaluation result is a reference (see evaluateReference)
136
+ * then we store information about the source cell for context dependent functions like CELL
137
+ */
138
+ sourceCell?: CellAddress;
139
+ };
140
+ export type DoesNotSpillResult = {
141
+ type: "does-not-spill";
142
+ };
143
+ export type ErrorEvaluationResult = {
144
+ type: "error";
145
+ err: FormulaError;
146
+ errAddress: DependencyNode;
147
+ message: string;
148
+ /**
149
+ * If the terminating evaluation result is a reference (see evaluateReference)
150
+ * then we store information about the source cell for context dependent functions like CELL
151
+ */
152
+ sourceCell?: CellAddress;
153
+ } | AwaitingEvaluationResult;
154
+ export type SingleEvaluationResult = ValueEvaluationResult | ErrorEvaluationResult;
155
+ export type SpilledValuesEvaluator = (spillOffset: {
156
+ x: number;
157
+ y: number;
158
+ }, context: EvaluationContext) => SingleEvaluationResult;
159
+ export type SpilledValuesEvaluationResult = {
160
+ type: "spilled-values";
161
+ /**
162
+ * When a raw range is evaluated, we will add it to the sourceRange so it can be used e.g. for context dependent functions
163
+ */
164
+ sourceRange?: RangeAddress;
165
+ /**
166
+ * If the terminating evaluation result is a reference (see evaluateReference)
167
+ * then we store information about the source cell for context dependent functions like CELL
168
+ * sourceCell will only be defined on a spilledValue when a single value is looked up,
169
+ */
170
+ sourceCell?: CellAddress;
171
+ spillArea: (origin: CellAddress) => SpreadsheetRange;
172
+ /**
173
+ * for debugging we add a source string to denote where the spilled values were created
174
+ */
175
+ source: string;
176
+ evaluate: SpilledValuesEvaluator;
177
+ /**
178
+ * evaluateAllCells evaluates all non-empty cells in the spilled range.
179
+ * Because a spilled range can be open-ended, we need to have logic for which cells we should evaluate.
180
+ * e.g. when evaluating a range such as D:D only the cells in the current sheet residing in
181
+ * column D should be evaluated and cells producing spilled values that spill onto D:D.
182
+ *
183
+ * In order to evaluate spilled cells in D:D the range evaluateAllCells need to get all cells in the
184
+ * the intersection of the spilled range and D:D, for that reason evaluateAllCells gets an intersection parameter,
185
+ * where the intersection is relative to the origin.
186
+ *
187
+ * #### Producers:
188
+ * In e.g. SEQUENCE and evaluateRange we have logic for which cells in a spilled range we should evaluate,
189
+ *
190
+ * #### Nesting:
191
+ * e.g. evaluation of scalar operators where we want to nest e.g. `5 * right.evaluate()`
192
+ * can be implemented by calling
193
+ * ```ts
194
+ * const vals = child.evaluateAllCells.call(this, options);
195
+ * return vals.map(val => ({ ...val, result: 5 * val.result }));
196
+ * ```
197
+ *
198
+ * #### Consumers:
199
+ * Only functions that need access to all spilled values in a range end up calling evaluateAllCells, e.g.
200
+ * SUM, MIN, MAX, MATCH. Other types of functions like INDEX doesn't need to evaluate all cells in a range,
201
+ * but does a lookup into a spilled range using the evaluate method.
202
+ *
203
+ */
204
+ evaluateAllCells: (this: FormulaEvaluator, options: {
205
+ /**
206
+ * an intersection relative to the origin
207
+ */
208
+ intersection?: SpreadsheetRange;
209
+ evaluate: SpilledValuesEvaluator;
210
+ context: EvaluationContext;
211
+ /**
212
+ * origin is the cell address that the spilled range is spilled from
213
+ * e.g. in A3=B2:B4 the origin is A3
214
+ */
215
+ origin: CellAddress;
216
+ lookupOrder: LookupOrder;
217
+ }) => EvaluateAllCellsResult;
218
+ };
219
+ export type EvaluateAllCellsResult = ErrorEvaluationResult | {
220
+ type: "values";
221
+ values: CellInRangeResult[];
222
+ };
223
+ export type CellInRangeResult = {
224
+ result: SingleEvaluationResult;
225
+ relativePos: {
226
+ x: number;
227
+ y: number;
228
+ };
229
+ };
230
+ export type FunctionEvaluationResult = SingleEvaluationResult | SpilledValuesEvaluationResult;
231
+ export type SpilledValue = {
232
+ /**
233
+ * spillOnto is the range that the spilled value is spilled onto
234
+ */
235
+ spillOnto: SpreadsheetRange;
236
+ /**
237
+ * origin is the cell address that the spilled value is spilled from
238
+ */
239
+ origin: CellAddress;
240
+ };
241
+ /**
242
+ * Function definition
243
+ */
244
+ export interface FunctionDefinition {
245
+ name: string;
246
+ evaluate: (this: FormulaEvaluator, node: FunctionNode, context: EvaluationContext) => FunctionEvaluationResult;
247
+ aliases?: string[];
248
+ }
249
+ /**
250
+ * Evaluation result
251
+ */
252
+ export type EvaluationResult = {
253
+ dependencies: Set<string>;
254
+ } & FunctionEvaluationResult;
255
+ export type SCC = {
256
+ id: number;
257
+ nodes: Set<DependencyNode>;
258
+ evaluationOrder: DependencyNode[];
259
+ resolved: boolean;
260
+ hardEdgeSCCs: Set<DependencyNode>[];
261
+ };
262
+ export type SCCDAG = {
263
+ sccList: SCC[];
264
+ sccGraph: Map<number, Set<number>>;
265
+ };
266
+ export type EvaluationOrder = {
267
+ evaluationOrder: Set<DependencyNode>;
268
+ hasCycle: boolean;
269
+ cycleNodes?: Set<DependencyNode>;
270
+ hash: string;
271
+ sccDAG?: SCCDAG;
272
+ };
@@ -0,0 +1,22 @@
1
+ import type { SpreadsheetRange } from "../types";
2
+ /**
3
+ * Serializes a SpreadsheetRange into a human-readable range string following canonical format.
4
+ *
5
+ * Examples:
6
+ * - Finite range: A2:B10
7
+ * - Column-infinite range: A2:B (row infinite, column bounded)
8
+ * - Row-infinite range: A2:10 (column infinite, row bounded)
9
+ * - Fully infinite range: A2:INFINITY (both infinite)
10
+ *
11
+ * @param range The SpreadsheetRange to serialize
12
+ * @returns A human-readable range string in canonical format
13
+ */
14
+ export declare function serializeRange(range: SpreadsheetRange): string;
15
+ /**
16
+ * Serializes a SpreadsheetRange with an optional sheet name prefix.
17
+ *
18
+ * @param range The SpreadsheetRange to serialize
19
+ * @param sheetName Optional sheet name to prefix the range
20
+ * @returns A human-readable range string, optionally prefixed with sheet name
21
+ */
22
+ export declare function serializeRangeWithSheet(range: SpreadsheetRange, sheetName?: string): string;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import { FormulaEngine } from "../engine";
2
+ export interface SpreadsheetVisualizerOptions {
3
+ workbookName: string;
4
+ /** Number of rows to display (1-based) */
5
+ numRows: number;
6
+ /** Number of columns to display (0-based, so 11 = A-K) */
7
+ numCols: number;
8
+ /** Starting row (1-based, default: 1) */
9
+ startRow?: number;
10
+ /** Starting column (0-based, default: 0 = A) */
11
+ startCol?: number;
12
+ /** Sheet name to visualize (default: uses engine's current sheet) */
13
+ sheetName?: string;
14
+ /** Character to use for empty cells (default: ".") */
15
+ emptyCellChar?: string;
16
+ /** Minimum column width (default: 3) */
17
+ minColWidth?: number;
18
+ /** Maximum column width (default: 20) */
19
+ maxColWidth?: number;
20
+ /** Whether to show column headers (A, B, C...) */
21
+ showColumnHeaders?: boolean;
22
+ /** Whether to show row numbers */
23
+ showRowNumbers?: boolean;
24
+ /** If output is used for snapshotting */
25
+ snapshot?: boolean;
26
+ }
27
+ /**
28
+ * Generates a visual ASCII representation of a spreadsheet region
29
+ */
30
+ export declare function visualizeSpreadsheet(engine: FormulaEngine, options: SpreadsheetVisualizerOptions): string;
@@ -0,0 +1,48 @@
1
+ import { type CellAddress, type ErrorEvaluationResult, type LocalCellAddress, type RangeAddress, type RelativeRange, type SpreadsheetRange } from "./types";
2
+ import type { DependencyNode } from "./managers/dependency-node";
3
+ export declare function isCellAddress(obj: RangeAddress | CellAddress): obj is CellAddress;
4
+ export declare function isRangeAddress(obj: RangeAddress | CellAddress): obj is RangeAddress;
5
+ export declare const columnToIndex: (col: string) => number;
6
+ export declare const indexToColumn: (index: number) => string;
7
+ export declare function getRowNumber(index: number): number;
8
+ export declare function getCellReference({ rowIndex, colIndex, }: {
9
+ rowIndex: number;
10
+ colIndex: number;
11
+ }): string;
12
+ export declare function rowToLetter(row: number): string;
13
+ export declare function letterToRow(letter: string): number;
14
+ export declare const parseCellReference: (cellReference: string) => {
15
+ colIndex: number;
16
+ rowIndex: number;
17
+ };
18
+ /**
19
+ * Returns true if the range is a single cell, false otherwise
20
+ */
21
+ export declare function isRangeOneCell(range: SpreadsheetRange): boolean;
22
+ export declare function isCellInRange(cellAddress: LocalCellAddress, range: SpreadsheetRange): boolean;
23
+ export declare function getRangeKey(range: SpreadsheetRange): string;
24
+ export declare function getRelativeRangeKey(range: RelativeRange): string;
25
+ export declare function getRelativeRange(range: SpreadsheetRange, relativeTo: LocalCellAddress): RelativeRange;
26
+ export declare function getAbsoluteRange(range: RelativeRange, relativeTo: LocalCellAddress): SpreadsheetRange;
27
+ export declare function keyToCellAddress(key: string): CellAddress;
28
+ /**
29
+ * For cache lookups, use dependencyManager.getCellNode(cellAddressToKey(cellAddress)).key
30
+ * because it may be an empty cell node key
31
+ */
32
+ export declare function cellAddressToKey(cellAddress: CellAddress): string;
33
+ export declare function rangeAddressToKey(rangeAddress: RangeAddress): string;
34
+ /**
35
+ *
36
+ * @param key - the range key to parse e.g. range:workbook:sheet:A3:A5
37
+ * @returns
38
+ */
39
+ export declare function keyToRangeAddress(key: string): RangeAddress;
40
+ /**
41
+ * Check if two ranges intersect
42
+ */
43
+ export declare function checkRangeIntersection(range1: SpreadsheetRange, range2: SpreadsheetRange): boolean;
44
+ /**
45
+ * Get the intersection of two ranges
46
+ */
47
+ export declare function getRangeIntersection(range1: SpreadsheetRange, range2: SpreadsheetRange): SpreadsheetRange | null;
48
+ export declare function captureEvaluationErrors<T>(errAddress: DependencyNode, fn: () => T): T | ErrorEvaluationResult;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Workbook renamer utility for updating cross-workbook references in formulas
3
+ */
4
+ /**
5
+ * Renames workbook references in a formula string
6
+ * @param formula The formula string (without the leading =)
7
+ * @param oldWorkbookName The old workbook name to replace
8
+ * @param newWorkbookName The new workbook name to use
9
+ * @returns The updated formula string
10
+ */
11
+ export declare function renameWorkbookInFormula(options: {
12
+ formula: string;
13
+ oldWorkbookName: string;
14
+ newWorkbookName: string;
15
+ }): string;
16
+ /**
17
+ * Checks if a formula references a specific workbook
18
+ * @param formula The formula string (without the leading =)
19
+ * @param workbookName The workbook name to check for
20
+ * @returns True if the formula references the workbook
21
+ */
22
+ export declare function formulaReferencesWorkbook(formula: string, workbookName: string): boolean;
23
+ /**
24
+ * Gets all workbook names referenced in a formula
25
+ * @param formula The formula string (without the leading =)
26
+ * @returns Array of unique workbook names referenced in the formula
27
+ */
28
+ export declare function getReferencedWorkbookNames(formula: string): string[];
@@ -0,0 +1,11 @@
1
+ type DebugFlags = {
2
+ isProfiling: boolean;
3
+ stopEvaluation: boolean;
4
+ profilingNamespaces: Record<string, boolean>;
5
+ numEvaluationCalls: number;
6
+ profiledCall: number;
7
+ maxEvaluationCalls: number;
8
+ prevSize: number;
9
+ };
10
+ export declare const flags: DebugFlags;
11
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ export declare const add: ArethmeticEvaluator;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ export declare const divide: ArethmeticEvaluator;
@@ -0,0 +1,2 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ export declare const multiply: ArethmeticEvaluator;
@@ -0,0 +1,2 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ export declare const power: ArethmeticEvaluator;
@@ -0,0 +1,2 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ export declare const subtract: ArethmeticEvaluator;
@@ -0,0 +1,6 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ /**
3
+ * Equals operator (=) - Returns TRUE if both values are exactly equal
4
+ * Strict type checking: both type and value must match
5
+ */
6
+ export declare const equals: ArethmeticEvaluator;
@@ -0,0 +1,6 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ /**
3
+ * Greater than or equal operator (>=) - Returns TRUE if left >= right
4
+ * Implemented as NOT (left < right)
5
+ */
6
+ export declare const greaterThanOrEqual: ArethmeticEvaluator;
@@ -0,0 +1,6 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ /**
3
+ * Greater than operator (>) - Returns TRUE if left > right
4
+ * Implemented as NOT (left <= right)
5
+ */
6
+ export declare const greaterThan: ArethmeticEvaluator;
@@ -0,0 +1,6 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ /**
3
+ * Less than or equal operator (<=) - Returns TRUE if left <= right
4
+ * Uses lessThan OR equals logic
5
+ */
6
+ export declare const lessThanOrEqual: ArethmeticEvaluator;
@@ -0,0 +1,6 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ /**
3
+ * Less than operator (<) - Returns TRUE if left < right
4
+ * Only works with numbers and infinity
5
+ */
6
+ export declare const lessThan: ArethmeticEvaluator;
@@ -0,0 +1,6 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ /**
3
+ * Not equals operator (<>) - Returns TRUE if values are not equal
4
+ * Uses the equals operator and negates the result
5
+ */
6
+ export declare const notEquals: ArethmeticEvaluator;
@@ -0,0 +1,6 @@
1
+ import type { ArethmeticEvaluator } from "src/core/types";
2
+ /**
3
+ * Concatenation operator (&) - Concatenates two values as strings
4
+ * Works with numbers and strings only
5
+ */
6
+ export declare const concatenate: ArethmeticEvaluator;
@@ -0,0 +1,12 @@
1
+ import type { FunctionEvaluationResult } from "src/core/types";
2
+ import type { ASTNode } from "src/parser/ast";
3
+ import type { ContextDependency } from "../evaluation-context";
4
+ import { BaseEvalNode } from "./base-eval-node";
5
+ export declare class AstEvaluationNode extends BaseEvalNode<FunctionEvaluationResult> {
6
+ ast: ASTNode;
7
+ private _contextDependency;
8
+ constructor(ast: ASTNode, contextDependency: ContextDependency);
9
+ toString(): string;
10
+ getContextDependency(): ContextDependency;
11
+ setContextDependency(contextDependency: ContextDependency): void;
12
+ }
@@ -0,0 +1,31 @@
1
+ import { type DependencyNode } from "src/core/managers/dependency-node";
2
+ import type { SpillMetaNode } from "./spill-meta-node";
3
+ export declare class BaseEvalNode<T> {
4
+ key: string;
5
+ private _dependencies;
6
+ private _lastDependencies;
7
+ _evaluationResult: T;
8
+ private _resolved;
9
+ constructor(key: string);
10
+ addDependency(dep: DependencyNode): void;
11
+ get directDepsUpdated(): boolean;
12
+ resolve(): void;
13
+ canResolve(): boolean;
14
+ get resolved(): boolean;
15
+ get evaluationResult(): T;
16
+ setEvaluationResult(result: T): void;
17
+ resetDirectDepsUpdated(): void;
18
+ /**
19
+ * Get the direct dependencies of the node, either RangeEvaluationNode or DependencyNode
20
+ */
21
+ getDependencies(): Set<DependencyNode>;
22
+ /**
23
+ * Just to mirror the method in RangeEvaluationNode
24
+ */
25
+ getAllDependencies(): Set<DependencyNode>;
26
+ /**
27
+ * Just to mirror the method in RangeEvaluationNode
28
+ */
29
+ getFrontierDependencies(): Set<SpillMetaNode>;
30
+ toJSON(visitor?: Set<string>): any;
31
+ }
@@ -0,0 +1,10 @@
1
+ import type { CellAddress, SingleEvaluationResult } from "src/core/types";
2
+ import { BaseEvalNode } from "./base-eval-node";
3
+ import type { SpillMetaNode } from "./spill-meta-node";
4
+ export declare class CellValueNode extends BaseEvalNode<SingleEvaluationResult> {
5
+ readonly cellAddress: CellAddress;
6
+ constructor(key: string);
7
+ toString(): string;
8
+ spillMeta: SpillMetaNode | undefined;
9
+ setSpillMetaNode(node: SpillMetaNode): void;
10
+ }
@@ -0,0 +1,17 @@
1
+ import type { DependencyManager } from "src/core/managers/dependency-manager";
2
+ import { FrontierDependencyManager } from "src/core/managers/frontier-dependency-manager";
3
+ import type { WorkbookManager } from "src/core/managers/workbook-manager";
4
+ import type { CellAddress, SingleEvaluationResult } from "src/core/types";
5
+ export declare class EmptyCellEvaluationNode extends FrontierDependencyManager {
6
+ emptyCellKey: string;
7
+ key: string;
8
+ cellAddress: CellAddress;
9
+ private _evaluationResult;
10
+ constructor(emptyCellKey: string, evaluationManager: DependencyManager, workbookManager: WorkbookManager);
11
+ setEvaluationResult(result: SingleEvaluationResult): void;
12
+ get evaluationResult(): SingleEvaluationResult;
13
+ resolve(): void;
14
+ canResolve(): boolean;
15
+ toJSON(visitor?: Set<string>): any;
16
+ toString(): string;
17
+ }
@@ -0,0 +1,7 @@
1
+ import type { CellAddress, DoesNotSpillResult, ErrorEvaluationResult, SpilledValuesEvaluationResult } from "src/core/types";
2
+ import { BaseEvalNode } from "./base-eval-node";
3
+ export declare class SpillMetaNode extends BaseEvalNode<SpilledValuesEvaluationResult | ErrorEvaluationResult | DoesNotSpillResult> {
4
+ readonly cellAddress: CellAddress;
5
+ constructor(key: string);
6
+ toString(): string;
7
+ }