@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,147 @@
1
+ import { type ContextDependency } from "src/evaluator/evaluation-context";
2
+ import { type CellAddress, type EvaluationOrder, type SpilledValue } from "../types";
3
+ import { AstEvaluationNode } from "src/evaluator/dependency-nodes/ast-evaluation-node";
4
+ import { CellValueNode } from "src/evaluator/dependency-nodes/cell-value-node";
5
+ import { EmptyCellEvaluationNode } from "src/evaluator/dependency-nodes/empty-cell-evaluation-node";
6
+ import { RangeEvaluationNode } from "src/evaluator/range-evaluation-node";
7
+ import type { ASTNode } from "src/parser/ast";
8
+ import { CacheManager } from "./cache-manager";
9
+ import type { CellNodeKeyDictionary, CellNodeType, DependencyNode } from "./dependency-node";
10
+ import { WorkbookManager } from "./workbook-manager";
11
+ import { SpillMetaNode } from "src/evaluator/dependency-nodes/spill-meta-node";
12
+ export interface DependencyTreeNode {
13
+ type: "cell" | "range" | "empty";
14
+ circular?: boolean;
15
+ key: string;
16
+ directDepsUpdated?: boolean;
17
+ resolved?: boolean;
18
+ canResolve: boolean;
19
+ resultType: "awaiting-evaluation" | "spilled-values" | "value" | "range" | "error" | "does-not-spill";
20
+ deps?: DependencyTreeNode[];
21
+ frontierDependencies?: DependencyTreeNode[];
22
+ self?: boolean;
23
+ _debug?: {
24
+ rawFrontierDependencies?: string[];
25
+ discardedFrontierDependencies?: string[];
26
+ activeFrontierDependencies?: string[];
27
+ };
28
+ }
29
+ /**
30
+ * The DependencyManager is responsible for storing the evaluated values and their dependencies.
31
+ */
32
+ export declare class DependencyManager {
33
+ private cacheManager;
34
+ private workbookManager;
35
+ /**
36
+ * The dependency graph
37
+ */
38
+ private evaluatedNodes;
39
+ private spillMetaNodes;
40
+ private emptyCells;
41
+ /**
42
+ * registry of spilled values
43
+ */
44
+ private _spilledValues;
45
+ /**
46
+ * Key is workbook:sheetName:rangeKey, e.g. Workbook1:Sheet1:A1:D10, from rangeAddressToKey
47
+ */
48
+ private ranges;
49
+ constructor(cacheManager: CacheManager, workbookManager: WorkbookManager);
50
+ get spilledValues(): IterableIterator<SpilledValue>;
51
+ isSpillOrigin(cellAddress: CellAddress): boolean;
52
+ getSpillValue(cellAddress: CellAddress): SpilledValue | undefined;
53
+ getSpilledAddress(cellAddress: CellAddress,
54
+ /**
55
+ * if the spilled value is already available, we can use it to get the source address
56
+ */
57
+ passedSpilledValue?: SpilledValue): {
58
+ address: CellAddress;
59
+ spillOffset: {
60
+ x: number;
61
+ y: number;
62
+ };
63
+ };
64
+ clearEvaluationCache(): void;
65
+ setSpilledValue(nodeKey: string, spilledValue: SpilledValue): void;
66
+ getSpilledValue(nodeKey: string): SpilledValue | undefined;
67
+ getEmptyCellNode(nodeKey: string): EmptyCellEvaluationNode;
68
+ getSpillMetaNode(nodeKey: string): SpillMetaNode;
69
+ getCellValueNode(nodeKey: string): CellValueNode;
70
+ getCellValueOrEmptyCellNode(nodeKey: string): CellValueNode | EmptyCellEvaluationNode;
71
+ getSpillMetaOrEmptySpillMetaNode(nodeKey: string): SpillMetaNode | EmptyCellEvaluationNode;
72
+ lookupCellNode<T extends CellNodeType>(nodeKey: string, types: T[]): CellNodeKeyDictionary[T][];
73
+ getRangeNode(rangeKey: string): RangeEvaluationNode;
74
+ asts: Map<
75
+ /**
76
+ * ast key
77
+ */
78
+ string, {
79
+ entries: Map<
80
+ /**
81
+ * context dependency key
82
+ */
83
+ string, {
84
+ evalNode: AstEvaluationNode;
85
+ contextDependency: ContextDependency;
86
+ }>;
87
+ }>;
88
+ getAstNode(ast: ASTNode, currentContext: Omit<Required<ContextDependency>, "tableName"> & {
89
+ tableName?: string;
90
+ }): AstEvaluationNode;
91
+ /**
92
+ * Once an AST node is evaluated, we know if it is context dependent
93
+ * and will thus save it under the correct cache key according to its
94
+ * contextDependency
95
+ *
96
+ * only resolved ast nodes can be saved
97
+ */
98
+ private saveAstNode;
99
+ getEvaluatedNodes(): Map<string, CellValueNode>;
100
+ /**
101
+ * Get transitive dependencies and transitive frontier dependencies
102
+ * This is only used by buildEvaluationOrder, so we'll optimize it there
103
+ */
104
+ getTransitiveDepsForEvalOrder(node: DependencyNode, visited?: Set<DependencyNode>): Set<DependencyNode>;
105
+ /**
106
+ * Build evaluation order for a cell using SCC-based condensation DAG approach
107
+ *
108
+ * Algorithm:
109
+ * 1. Discover all transitive dependencies (skipping resolved nodes)
110
+ * 2. Find SCCs using Tarjan's algorithm
111
+ * 3. Create condensation DAG from SCCs
112
+ * 4. Topologically sort the condensation DAG using Kahn's algorithm
113
+ * 5. For each SCC, create internal evaluation order with cycle breaking
114
+ * 6. Join the sorted SCC evaluation orders to create final evaluation order
115
+ */
116
+ buildEvaluationOrder(node: CellValueNode | EmptyCellEvaluationNode): EvaluationOrder;
117
+ /**
118
+ * Find strongly connected components using Tarjan's algorithm
119
+ * @param nodes - Map of nodes to analyze
120
+ * @param includeFrontier - If true, use getAllDependencies(); if false, use getDependencies()
121
+ * @returns Array of SCCs (each SCC is a Set of nodes)
122
+ */
123
+ private findSCCs;
124
+ /**
125
+ * Build evaluation order within a single SCC using DFS with cycle breaking
126
+ * Uses all dependencies (including frontier) for proper evaluation ordering
127
+ */
128
+ private buildSCCEvaluationOrder;
129
+ /**
130
+ * Compute hash representing the graph structure including SCC information
131
+ */
132
+ private computeGraphHash;
133
+ /**
134
+ * Compute a hash representing the current state of evaluated nodes
135
+ * This hash changes when dependencies, frontier dependencies, or discarded frontier dependencies change
136
+ */
137
+ private computeHash;
138
+ /**
139
+ * Get a hierarchical dependency tree for a node
140
+ */
141
+ getDependencyTree(node: DependencyNode): DependencyTreeNode;
142
+ markResolvedNodes(node: DependencyNode): void;
143
+ /**
144
+ * Update SCCs in cache to mark them as resolved if all their nodes are resolved
145
+ */
146
+ updateResolvedSCCs(evalOrder: EvaluationOrder): void;
147
+ }
@@ -0,0 +1,13 @@
1
+ import { AstEvaluationNode } from "src/evaluator/dependency-nodes/ast-evaluation-node";
2
+ import { CellValueNode } from "src/evaluator/dependency-nodes/cell-value-node";
3
+ import { EmptyCellEvaluationNode } from "src/evaluator/dependency-nodes/empty-cell-evaluation-node";
4
+ import { SpillMetaNode } from "src/evaluator/dependency-nodes/spill-meta-node";
5
+ import { RangeEvaluationNode } from "src/evaluator/range-evaluation-node";
6
+ export type DependencyNode = CellValueNode | RangeEvaluationNode | EmptyCellEvaluationNode | AstEvaluationNode | SpillMetaNode;
7
+ export type CellNodeType = "cell-value" | "empty" | "spill-meta";
8
+ export type CellNodeKey = `${CellNodeType}:${string}`;
9
+ export type CellNodeKeyDictionary = {
10
+ "cell-value": CellValueNode;
11
+ empty: EmptyCellEvaluationNode;
12
+ "spill-meta": SpillMetaNode;
13
+ };
@@ -0,0 +1,30 @@
1
+ import { CellValueNode } from "src/evaluator/dependency-nodes/cell-value-node";
2
+ import { RangeEvaluationNode } from "src/evaluator/range-evaluation-node";
3
+ import { FormulaEvaluator } from "../../evaluator/formula-evaluator";
4
+ import { type CellAddress, type CellValue, type SerializedCellValue, type SingleEvaluationResult, type SpreadsheetRange } from "../types";
5
+ import type { DependencyManager } from "./dependency-manager";
6
+ import type { WorkbookManager } from "./workbook-manager";
7
+ import { SpillMetaNode } from "src/evaluator/dependency-nodes/spill-meta-node";
8
+ import { EmptyCellEvaluationNode } from "src/evaluator/dependency-nodes/empty-cell-evaluation-node";
9
+ import type { TableManager } from "./table-manager";
10
+ export declare class EvaluationManager {
11
+ private workbookManager;
12
+ private tableManager;
13
+ private formulaEvaluator;
14
+ private dependencyManager;
15
+ private isEvaluating;
16
+ constructor(workbookManager: WorkbookManager, tableManager: TableManager, formulaEvaluator: FormulaEvaluator, dependencyManager: DependencyManager);
17
+ clearEvaluationCache(): void;
18
+ evaluationResultToSerializedValue(evaluation: SingleEvaluationResult, cellAddress: CellAddress, debug?: boolean): SerializedCellValue;
19
+ evaluateEmptyCell(node: EmptyCellEvaluationNode): void;
20
+ evaluateRangeNode(node: RangeEvaluationNode): void;
21
+ evaluateCellNode(node: CellValueNode | SpillMetaNode): void;
22
+ evaluateDependencyNode(dependencyKey: string): void;
23
+ /**
24
+ * Evaluates a cell by building the evaluation order and evaluating the dependencies in order
25
+ */
26
+ evaluateCell(node: CellValueNode | EmptyCellEvaluationNode): void;
27
+ convertScalarValueToCellValue(val: SerializedCellValue): CellValue;
28
+ canSpill(spillCandidate: CellAddress, spillArea: SpreadsheetRange): boolean;
29
+ getCellEvaluationResult(cellAddress: CellAddress): SingleEvaluationResult | undefined;
30
+ }
@@ -0,0 +1,8 @@
1
+ export declare class EventManager {
2
+ private updateListeners;
3
+ /**
4
+ * Register listener for batched sheet updates. Returns an unsubscribe function.
5
+ */
6
+ onUpdate(listener: () => void): () => void;
7
+ emitUpdate(): void;
8
+ }
@@ -0,0 +1,69 @@
1
+ import { CellValueNode } from "src/evaluator/dependency-nodes/cell-value-node";
2
+ import type { CellAddress, CellInRangeResult, RangeAddress } from "../types";
3
+ import type { DependencyManager } from "./dependency-manager";
4
+ import type { DependencyNode } from "./dependency-node";
5
+ import type { WorkbookManager } from "./workbook-manager";
6
+ import type { SpillMetaNode } from "src/evaluator/dependency-nodes/spill-meta-node";
7
+ type EvalOrderEntry = {
8
+ type: "value";
9
+ address: CellAddress;
10
+ node: CellValueNode;
11
+ } | {
12
+ type: "empty_cell";
13
+ address: CellAddress;
14
+ candidates: SpillMetaNode[];
15
+ } | {
16
+ type: "empty_range";
17
+ address: RangeAddress;
18
+ candidates: SpillMetaNode[];
19
+ };
20
+ export declare class FrontierDependencyManager {
21
+ private frontierRange;
22
+ protected workbookManager: WorkbookManager;
23
+ protected evaluationManager: DependencyManager;
24
+ private evalOrder;
25
+ private _resolved;
26
+ private _directDepsUpdated;
27
+ constructor(frontierRange: RangeAddress, workbookManager: WorkbookManager, evaluationManager: DependencyManager);
28
+ /**
29
+ * frontierDependencies is the set of dependency node keys that could spill values onto the target range (if evaluationResult is spilled-values)
30
+ * Key is from cellAddressToKey
31
+ *
32
+ * soft edge dependencies, which can not cause cycles in the dependency graph
33
+ */
34
+ private _frontierDependencies;
35
+ /**
36
+ * discardedFrontierDependencies is the set of dependency node keys that were discarded as frontier dependencies because
37
+ * they they do not produce spilled values that spill onto the target range
38
+ * Key is from cellAddressToKey
39
+ */
40
+ private _discardedFrontierDependencies;
41
+ /**
42
+ * hard edge dependencies, which can cause cycles in the dependency graph
43
+ */
44
+ private _dependencies;
45
+ /**
46
+ * cache, should maybe be stored in the cache manager
47
+ */
48
+ get iterateAllCells(): undefined | Iterable<CellInRangeResult>;
49
+ getRangeEvalOrder(): EvalOrderEntry[];
50
+ get frontierDependencies(): Set<SpillMetaNode>;
51
+ get discardedFrontierDependencies(): Set<SpillMetaNode>;
52
+ maybeDiscardFrontierDependency(dependency: SpillMetaNode): void;
53
+ maybeUpgradeFrontierDependency(dependency: SpillMetaNode): void;
54
+ /**
55
+ * a range is considered resolved when the dependencies has been established
56
+ */
57
+ resolve(): void;
58
+ canResolve(): boolean;
59
+ get resolved(): boolean;
60
+ get directDepsUpdated(): boolean;
61
+ resetDirectDepsUpdated(): void;
62
+ getDependencies(): Set<DependencyNode>;
63
+ getFrontierDependencies(): Set<SpillMetaNode>;
64
+ getAllDependencies(): Set<DependencyNode>;
65
+ getDiscardedFrontierDependencies(): Set<SpillMetaNode>;
66
+ addDependency(dependency: DependencyNode): void;
67
+ upgradeFrontierDependencies(): void;
68
+ }
69
+ export {};
@@ -0,0 +1,7 @@
1
+ export { WorkbookManager } from "./workbook-manager";
2
+ export { NamedExpressionManager } from "./named-expression-manager";
3
+ export { TableManager } from "./table-manager";
4
+ export { EventManager } from "./event-manager";
5
+ export { EvaluationManager } from "./evaluation-manager";
6
+ export { DependencyManager } from "./dependency-manager";
7
+ export { buildRangeEvalOrder, type LookupOrder, type RangeEvalOrderEntry, } from "./range-eval-order-builder";
@@ -0,0 +1,2 @@
1
+ import type { DependencyNode } from "./dependency-node";
2
+ export declare function isDependencyNode(node: any): node is DependencyNode;
@@ -0,0 +1,101 @@
1
+ import type { NamedExpression } from "../types";
2
+ import type { NamedExpressionNode } from "src/parser/ast";
3
+ import type { EvaluationContext } from "src/evaluator/evaluation-context";
4
+ export declare class NamedExpressionManager {
5
+ sheetExpressions: Map<string, Map<string, Map<string, NamedExpression>>>;
6
+ workbookExpressions: Map<string, Map<string, NamedExpression>>;
7
+ globalExpressions: Map<string, NamedExpression>;
8
+ addNamedExpression({ expression, expressionName, sheetName, workbookName, }: {
9
+ expression: string;
10
+ expressionName: string;
11
+ sheetName?: string;
12
+ workbookName?: string;
13
+ }): void;
14
+ removeNamedExpression({ expressionName, sheetName, workbookName, }: {
15
+ expressionName: string;
16
+ sheetName?: string;
17
+ workbookName?: string;
18
+ }): boolean;
19
+ updateNamedExpression({ expression, expressionName, sheetName, workbookName, }: {
20
+ expression: string;
21
+ expressionName: string;
22
+ sheetName?: string;
23
+ workbookName?: string;
24
+ }): void;
25
+ renameNamedExpression({ expressionName, sheetName, workbookName, newName, }: {
26
+ expressionName: string;
27
+ sheetName?: string;
28
+ workbookName?: string;
29
+ newName: string;
30
+ }): boolean;
31
+ updateAllNamedExpressions(updateCallback: (formula: string) => string): void;
32
+ /**
33
+ * Replace all named expressions
34
+ */
35
+ setNamedExpressions(opts: ({
36
+ type: "global";
37
+ } | {
38
+ type: "sheet";
39
+ sheetName: string;
40
+ workbookName: string;
41
+ } | {
42
+ type: "workbook";
43
+ workbookName: string;
44
+ }) & {
45
+ expressions: Map<string, NamedExpression>;
46
+ }): void;
47
+ getNamedExpression(depNode: {
48
+ name: string;
49
+ scope: {
50
+ type: "global";
51
+ } | {
52
+ type: "workbook";
53
+ workbookName: string;
54
+ } | {
55
+ type: "sheet";
56
+ workbookName: string;
57
+ sheetName: string;
58
+ };
59
+ }): NamedExpression | undefined;
60
+ resolveNamedExpression(namedExpression: Pick<NamedExpressionNode, "name" | "sheetName" | "workbookName">, context: EvaluationContext): string | undefined;
61
+ getNamedExpressions(): {
62
+ sheetExpressions: Map<string, Map<string, Map<string, NamedExpression>>>;
63
+ workbookExpressions: Map<string, Map<string, NamedExpression>>;
64
+ globalExpressions: Map<string, NamedExpression>;
65
+ };
66
+ resetNamedExpressions(namedExpressions: ReturnType<typeof this.getNamedExpressions>): void;
67
+ /**
68
+ * When adding a sheet, we need to initialize the new maps
69
+ */
70
+ addSheet(opts: {
71
+ workbookName: string;
72
+ sheetName: string;
73
+ }): void;
74
+ /**
75
+ * When adding a workbook, we need to initialize the new maps
76
+ */
77
+ addWorkbook(workbookName: string): void;
78
+ /**
79
+ * When removing a workbook, we need to remove the workbook from the sheet level
80
+ */
81
+ removeWorkbook(workbookName: string): void;
82
+ /**
83
+ * When removing a sheet, we need to remove the sheet from the workbook level
84
+ */
85
+ removeSheet(opts: {
86
+ workbookName: string;
87
+ sheetName: string;
88
+ }): void;
89
+ /**
90
+ * Rename a sheet's named expressions, mainly used when renaming a sheet
91
+ */
92
+ renameSheet(options: {
93
+ sheetName: string;
94
+ newSheetName: string;
95
+ workbookName: string;
96
+ }): void;
97
+ renameWorkbook(opts: {
98
+ workbookName: string;
99
+ newWorkbookName: string;
100
+ }): void;
101
+ }
@@ -0,0 +1,33 @@
1
+ import { type CellAddress, type RangeAddress } from "../types";
2
+ import { type WorkbookManager } from "./workbook-manager";
3
+ export type LookupOrder = "row-major" | "col-major";
4
+ export type RangeEvalOrderEntryDict = {
5
+ value: {
6
+ type: "value";
7
+ address: CellAddress;
8
+ };
9
+ empty_cell: {
10
+ type: "empty_cell";
11
+ address: CellAddress;
12
+ candidates: CellAddress[];
13
+ };
14
+ empty_range: {
15
+ type: "empty_range";
16
+ address: RangeAddress;
17
+ candidates: CellAddress[];
18
+ };
19
+ };
20
+ export type RangeEvalOrderEntry = RangeEvalOrderEntryDict["value"] | RangeEvalOrderEntryDict["empty_cell"] | RangeEvalOrderEntryDict["empty_range"];
21
+ /**
22
+ * Build a deterministic, ordered list describing every cell inside a lookup range.
23
+ * This function analyzes the range and classifies each cell/range as either:
24
+ * - A value-like cell (occupied)
25
+ * - An empty cell with 0-2 frontier candidates
26
+ * - An empty range with 0-2 frontier candidates
27
+ *
28
+ * @param this - WorkbookManager instance
29
+ * @param lookupOrder - "row-major" or "col-major" iteration order
30
+ * @param lookupRange - The range to analyze
31
+ * @returns Ordered array of entries describing the range
32
+ */
33
+ export declare function buildRangeEvalOrder(this: WorkbookManager, lookupOrder: LookupOrder, lookupRange: RangeAddress): RangeEvalOrderEntry[];
@@ -0,0 +1,84 @@
1
+ import type { CellAddress, SerializedCellValue, SpreadsheetRangeEnd, TableDefinition } from "../types";
2
+ import type { WorkbookManager } from "./workbook-manager";
3
+ export declare class TableManager {
4
+ tables: Map<
5
+ /**
6
+ * workbook name -> table name -> table definition
7
+ */
8
+ string, Map<string, TableDefinition>>;
9
+ private workbookManager;
10
+ constructor(workbookManager: WorkbookManager);
11
+ getTables(workbookName: string): Map<string, TableDefinition>;
12
+ getTable(opts: {
13
+ workbookName: string;
14
+ name: string;
15
+ }): TableDefinition | undefined;
16
+ makeTable({ tableName, sheetName, workbookName, start, numRows, numCols, getCellValue, }: {
17
+ tableName: string;
18
+ sheetName: string;
19
+ start: string;
20
+ numRows: SpreadsheetRangeEnd;
21
+ numCols: number;
22
+ workbookName: string;
23
+ getCellValue: (cellAddress: CellAddress) => SerializedCellValue;
24
+ }): TableDefinition;
25
+ copyTable(from: {
26
+ workbookName: string;
27
+ tableName: string;
28
+ }, to: {
29
+ workbookName: string;
30
+ tableName: string;
31
+ }): void;
32
+ addTable(props: {
33
+ tableName: string;
34
+ sheetName: string;
35
+ start: string;
36
+ numRows: SpreadsheetRangeEnd;
37
+ numCols: number;
38
+ workbookName: string;
39
+ getCellValue: (cellAddress: CellAddress) => SerializedCellValue;
40
+ }): TableDefinition;
41
+ renameTable(workbookName: string, names: {
42
+ oldName: string;
43
+ newName: string;
44
+ }): void;
45
+ updateTable({ tableName, sheetName, start, numRows, numCols, workbookName, getCellValue, }: {
46
+ tableName: string;
47
+ sheetName?: string;
48
+ start?: string;
49
+ numRows?: SpreadsheetRangeEnd;
50
+ workbookName: string;
51
+ numCols?: number;
52
+ getCellValue: (cellAddress: CellAddress) => SerializedCellValue;
53
+ }): void;
54
+ removeTable({ tableName, workbookName, }: {
55
+ tableName: string;
56
+ workbookName: string;
57
+ }): boolean;
58
+ updateTablesForSheetRename(options: {
59
+ sheetName: string;
60
+ newSheetName: string;
61
+ workbookName: string;
62
+ }): void;
63
+ updateTablesForWorkbookRename(options: {
64
+ workbookName: string;
65
+ newWorkbookName: string;
66
+ }): void;
67
+ resetTables(newTables: Map<string, Map<string, TableDefinition>>): void;
68
+ /**
69
+ * When adding a workbook, we need to initialize the new maps
70
+ */
71
+ addWorkbook(workbookName: string): void;
72
+ /**
73
+ * When removing a workbook, we need to remove the maps
74
+ */
75
+ removeWorkbook(workbookName: string): void;
76
+ /**
77
+ * When removing a sheet, we need to remove the tables that belong to the sheet
78
+ */
79
+ removeSheet(opts: {
80
+ sheetName: string;
81
+ workbookName: string;
82
+ }): void;
83
+ isCellInTable(cellAddress: CellAddress): TableDefinition | undefined;
84
+ }
@@ -0,0 +1,136 @@
1
+ import { type CellAddress, type SerializedCellValue, type Sheet, type Workbook } from "../types";
2
+ import type { RangeAddress } from "src/core/types";
3
+ interface IndexEntry {
4
+ number: number;
5
+ key: string;
6
+ }
7
+ export interface SheetIndexes {
8
+ rowGroups: Map<number, IndexEntry[]>;
9
+ colGroups: Map<number, IndexEntry[]>;
10
+ cellsSortedByRow: IndexEntry[];
11
+ cellsSortedByCol: IndexEntry[];
12
+ }
13
+ /**
14
+ * Utility class for binary search operations on IndexEntry arrays
15
+ */
16
+ export declare class IndexEntryBinarySearch {
17
+ /**
18
+ * Find the insertion point for a number in a sorted IndexEntry array
19
+ * Returns the index where the number should be inserted to maintain sort order
20
+ */
21
+ static findInsertionPoint(entries: IndexEntry[], target: number): number;
22
+ /**
23
+ * Find the first element >= target
24
+ * Returns the index of the first element, or -1 if not found
25
+ */
26
+ static findFirstGreaterOrEqual(entries: IndexEntry[], target: number): number;
27
+ /**
28
+ * Find the rightmost position where we could insert a target value
29
+ * Useful for finding elements that come before a target
30
+ */
31
+ static findRightmostInsertionPoint(entries: IndexEntry[], target: number): number;
32
+ }
33
+ export declare class WorkbookManager {
34
+ private workbooks;
35
+ private sheetIndexes;
36
+ /**
37
+ * Generate a key for the sheet indexes map
38
+ */
39
+ private getSheetIndexKey;
40
+ /**
41
+ * Get or create indexes for a sheet
42
+ */
43
+ getSheetIndexes(opts: {
44
+ workbookName: string;
45
+ sheetName: string;
46
+ }): SheetIndexes;
47
+ getSheets(workbookName: string): Map<string, Sheet>;
48
+ getWorkbooks(): Map<string, Workbook>;
49
+ addWorkbook(workbookName: string): void;
50
+ removeWorkbook(workbookName: string): void;
51
+ isContentEmpty(content: SerializedCellValue): boolean;
52
+ renameWorkbook(opts: {
53
+ workbookName: string;
54
+ newWorkbookName: string;
55
+ }): void;
56
+ resetWorkbooks(workbooks: Map<string, Workbook>): void;
57
+ getSheet({ workbookName, sheetName, }: {
58
+ workbookName: string;
59
+ sheetName: string;
60
+ }): Sheet | undefined;
61
+ addSheet({ workbookName, sheetName, }: {
62
+ workbookName: string;
63
+ sheetName: string;
64
+ }): Sheet;
65
+ removeSheet({ workbookName, sheetName, }: {
66
+ workbookName: string;
67
+ sheetName: string;
68
+ }): Sheet;
69
+ renameSheet({ workbookName, sheetName, newSheetName, }: {
70
+ workbookName: string;
71
+ sheetName: string;
72
+ newSheetName: string;
73
+ }): Sheet;
74
+ updateAllFormulas(updateCallback: (formula: string) => string): void;
75
+ getSheetSerialized({ workbookName, sheetName, }: {
76
+ workbookName: string;
77
+ sheetName: string;
78
+ }): Map<string, SerializedCellValue>;
79
+ /**
80
+ * Add a cell to the grouped indexes
81
+ */
82
+ private addCellToGroups;
83
+ /**
84
+ * Remove a cell from the grouped indexes
85
+ */
86
+ private removeCellFromGroups;
87
+ /**
88
+ * Find insertion index in sorted array
89
+ */
90
+ private findInsertIndex;
91
+ /**
92
+ * Inserts an item into a sorted array by number, maintaining sort order.
93
+ * If an item with the same number and key already exists, it won't be added again.
94
+ */
95
+ private insertSorted;
96
+ setCellContent(address: CellAddress, content: SerializedCellValue, options?: {
97
+ /**
98
+ * for extra performance, if the sheet is already known, it can be passed in
99
+ */
100
+ sheet?: Sheet;
101
+ /**
102
+ * if the sheet is being built from scratch, we can skip some checks
103
+ */
104
+ buildingFromScratch?: boolean;
105
+ }): void;
106
+ /**
107
+ * Replace all content for a sheet (safely, without breaking references)
108
+ * This method clears the existing Map and repopulates it rather than replacing the Map reference
109
+ */
110
+ setSheetContent(opts: {
111
+ sheetName: string;
112
+ workbookName: string;
113
+ }, newContent: Map<string, SerializedCellValue>): void;
114
+ /**
115
+ * Removes the content in the spreadsheet that is inside the range.
116
+ * OPTIMIZED: Uses indexes to only process cells that actually exist.
117
+ * ENHANCED: Now supports infinite ranges.
118
+ */
119
+ clearSpreadsheetRange(address: RangeAddress): void;
120
+ /**
121
+ * Optimized generator to iterate over cells defined in the content within a range
122
+ * Uses indexes to efficiently find and yield only cells that exist within the range
123
+ */
124
+ iterateCellsInRange(address: RangeAddress): Generator<CellAddress>;
125
+ getCellsInRange(address: RangeAddress): CellAddress[];
126
+ private getCellContent;
127
+ getSerializedCellValue(cellAddress: CellAddress): SerializedCellValue;
128
+ isCellEmpty(cellAddress: CellAddress): boolean;
129
+ isFormulaCell(cellAddress: CellAddress): boolean;
130
+ /**
131
+ * Build evaluation order for a range
132
+ * Delegates to the buildRangeEvalOrder function
133
+ */
134
+ buildRangeEvalOrder(lookupOrder: "row-major" | "col-major", lookupRange: RangeAddress): import("./range-eval-order-builder").RangeEvalOrderEntry[];
135
+ }
136
+ export {};
@@ -0,0 +1,4 @@
1
+ export declare function replacer(key: string, value: any): any;
2
+ export declare function reviver(key: string, value: any): any;
3
+ export declare const serialize: (data: unknown) => string;
4
+ export declare const deserialize: (data: string) => unknown;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Renames named expression references in a formula string
3
+ * @param formula - The formula string (without the leading =)
4
+ * @param oldName - The current named expression name to replace
5
+ * @param newName - The new named expression name
6
+ * @returns The updated formula string, or the original if no changes were made
7
+ */
8
+ export declare function renameNamedExpressionInFormula(formula: string, oldName: string, newName: string): string;
9
+ /**
10
+ * Checks if a formula contains references to a specific named expression
11
+ * @param formula - The formula string (without the leading =)
12
+ * @param namedExpressionName - The named expression name to search for
13
+ * @returns True if the formula contains references to the named expression
14
+ */
15
+ export declare function formulaReferencesNamedExpression(formula: string, namedExpressionName: string): boolean;
16
+ /**
17
+ * Gets all named expression names referenced in a formula
18
+ * @param formula - The formula string (without the leading =)
19
+ * @returns Array of unique named expression names referenced in the formula
20
+ */
21
+ export declare function getReferencedNamedExpressionNames(formula: string): string[];