@ricsam/formula-engine 0.2.1 → 0.2.3

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 (337) hide show
  1. package/dist/cjs/core/ast-traverser.cjs +19 -9
  2. package/dist/cjs/core/ast-traverser.cjs.map +2 -2
  3. package/dist/cjs/core/autofill-utils.cjs +19 -9
  4. package/dist/cjs/core/autofill-utils.cjs.map +2 -2
  5. package/dist/cjs/core/cell-mover.cjs +19 -9
  6. package/dist/cjs/core/cell-mover.cjs.map +2 -2
  7. package/dist/cjs/core/commands/command-executor.cjs +24 -13
  8. package/dist/cjs/core/commands/command-executor.cjs.map +3 -3
  9. package/dist/cjs/core/commands/content-commands.cjs +292 -9
  10. package/dist/cjs/core/commands/content-commands.cjs.map +3 -3
  11. package/dist/cjs/core/commands/metadata-commands.cjs +19 -9
  12. package/dist/cjs/core/commands/metadata-commands.cjs.map +2 -2
  13. package/dist/cjs/core/commands/named-expression-commands.cjs +138 -13
  14. package/dist/cjs/core/commands/named-expression-commands.cjs.map +3 -3
  15. package/dist/cjs/core/commands/structure-commands.cjs +216 -15
  16. package/dist/cjs/core/commands/structure-commands.cjs.map +3 -3
  17. package/dist/cjs/core/commands/style-commands.cjs +19 -9
  18. package/dist/cjs/core/commands/style-commands.cjs.map +2 -2
  19. package/dist/cjs/core/commands/table-commands.cjs +134 -13
  20. package/dist/cjs/core/commands/table-commands.cjs.map +3 -3
  21. package/dist/cjs/core/commands/types.cjs +36 -9
  22. package/dist/cjs/core/commands/types.cjs.map +3 -3
  23. package/dist/cjs/core/engine-snapshot.cjs +51 -0
  24. package/dist/cjs/core/engine-snapshot.cjs.map +10 -0
  25. package/dist/cjs/core/engine.cjs +58 -34
  26. package/dist/cjs/core/engine.cjs.map +3 -3
  27. package/dist/cjs/core/managers/cache-manager.cjs +123 -9
  28. package/dist/cjs/core/managers/cache-manager.cjs.map +3 -3
  29. package/dist/cjs/core/managers/copy-manager.cjs +19 -9
  30. package/dist/cjs/core/managers/copy-manager.cjs.map +2 -2
  31. package/dist/cjs/core/managers/dependency-manager.cjs +697 -9
  32. package/dist/cjs/core/managers/dependency-manager.cjs.map +3 -3
  33. package/dist/cjs/core/managers/dependency-node.cjs +14 -8
  34. package/dist/cjs/core/managers/dependency-node.cjs.map +1 -1
  35. package/dist/cjs/core/managers/evaluation-manager.cjs +296 -11
  36. package/dist/cjs/core/managers/evaluation-manager.cjs.map +3 -3
  37. package/dist/cjs/core/managers/event-manager.cjs +19 -9
  38. package/dist/cjs/core/managers/event-manager.cjs.map +2 -2
  39. package/dist/cjs/core/managers/frontier-dependency-manager.cjs +65 -12
  40. package/dist/cjs/core/managers/frontier-dependency-manager.cjs.map +3 -3
  41. package/dist/cjs/core/managers/isDependencyNode.cjs +19 -9
  42. package/dist/cjs/core/managers/isDependencyNode.cjs.map +2 -2
  43. package/dist/cjs/core/managers/named-expression-manager.cjs +121 -29
  44. package/dist/cjs/core/managers/named-expression-manager.cjs.map +3 -3
  45. package/dist/cjs/core/managers/range-eval-order-builder.cjs +19 -9
  46. package/dist/cjs/core/managers/range-eval-order-builder.cjs.map +2 -2
  47. package/dist/cjs/core/managers/reference-manager.cjs +25 -9
  48. package/dist/cjs/core/managers/reference-manager.cjs.map +3 -3
  49. package/dist/cjs/core/managers/schema-manager.cjs +19 -9
  50. package/dist/cjs/core/managers/schema-manager.cjs.map +2 -2
  51. package/dist/cjs/core/managers/style-manager.cjs +28 -9
  52. package/dist/cjs/core/managers/style-manager.cjs.map +3 -3
  53. package/dist/cjs/core/managers/table-manager.cjs +25 -9
  54. package/dist/cjs/core/managers/table-manager.cjs.map +3 -3
  55. package/dist/cjs/core/managers/workbook-manager.cjs +38 -13
  56. package/dist/cjs/core/managers/workbook-manager.cjs.map +3 -3
  57. package/dist/cjs/core/map-serializer.cjs +19 -9
  58. package/dist/cjs/core/map-serializer.cjs.map +2 -2
  59. package/dist/cjs/core/named-expression-renamer.cjs +19 -9
  60. package/dist/cjs/core/named-expression-renamer.cjs.map +2 -2
  61. package/dist/cjs/core/resource-keys.cjs +67 -0
  62. package/dist/cjs/core/resource-keys.cjs.map +10 -0
  63. package/dist/cjs/core/schema/cell-orm.cjs +19 -9
  64. package/dist/cjs/core/schema/cell-orm.cjs.map +2 -2
  65. package/dist/cjs/core/schema/grid-orm.cjs +19 -9
  66. package/dist/cjs/core/schema/grid-orm.cjs.map +2 -2
  67. package/dist/cjs/core/schema/schema-builder.cjs +19 -9
  68. package/dist/cjs/core/schema/schema-builder.cjs.map +2 -2
  69. package/dist/cjs/core/schema/schema-helpers.cjs +19 -9
  70. package/dist/cjs/core/schema/schema-helpers.cjs.map +2 -2
  71. package/dist/cjs/core/schema/schema.cjs +19 -9
  72. package/dist/cjs/core/schema/schema.cjs.map +2 -2
  73. package/dist/cjs/core/schema/table-orm.cjs +19 -9
  74. package/dist/cjs/core/schema/table-orm.cjs.map +2 -2
  75. package/dist/cjs/core/sheet-renamer.cjs +19 -9
  76. package/dist/cjs/core/sheet-renamer.cjs.map +2 -2
  77. package/dist/cjs/core/sheet-utils.cjs +19 -9
  78. package/dist/cjs/core/sheet-utils.cjs.map +2 -2
  79. package/dist/cjs/core/table-renamer.cjs +19 -9
  80. package/dist/cjs/core/table-renamer.cjs.map +2 -2
  81. package/dist/cjs/core/types.cjs +19 -9
  82. package/dist/cjs/core/types.cjs.map +2 -2
  83. package/dist/cjs/core/utils/color-utils.cjs +19 -9
  84. package/dist/cjs/core/utils/color-utils.cjs.map +2 -2
  85. package/dist/cjs/core/utils/range-serializer.cjs +19 -9
  86. package/dist/cjs/core/utils/range-serializer.cjs.map +2 -2
  87. package/dist/cjs/core/utils/range-utils.cjs +19 -9
  88. package/dist/cjs/core/utils/range-utils.cjs.map +2 -2
  89. package/dist/cjs/core/utils/spreadsheet-visualizer.cjs +19 -9
  90. package/dist/cjs/core/utils/spreadsheet-visualizer.cjs.map +2 -2
  91. package/dist/cjs/core/utils.cjs +19 -9
  92. package/dist/cjs/core/utils.cjs.map +2 -2
  93. package/dist/cjs/core/workbook-renamer.cjs +19 -9
  94. package/dist/cjs/core/workbook-renamer.cjs.map +2 -2
  95. package/dist/cjs/debug/flags.cjs +19 -9
  96. package/dist/cjs/debug/flags.cjs.map +2 -2
  97. package/dist/cjs/evaluator/arithmetic/add/add.cjs +19 -9
  98. package/dist/cjs/evaluator/arithmetic/add/add.cjs.map +2 -2
  99. package/dist/cjs/evaluator/arithmetic/divide/divide.cjs +19 -9
  100. package/dist/cjs/evaluator/arithmetic/divide/divide.cjs.map +2 -2
  101. package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs +19 -9
  102. package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs.map +2 -2
  103. package/dist/cjs/evaluator/arithmetic/power/power.cjs +19 -9
  104. package/dist/cjs/evaluator/arithmetic/power/power.cjs.map +2 -2
  105. package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs +19 -9
  106. package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs.map +2 -2
  107. package/dist/cjs/evaluator/comparison/equals.cjs +19 -9
  108. package/dist/cjs/evaluator/comparison/equals.cjs.map +2 -2
  109. package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs +19 -9
  110. package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs.map +2 -2
  111. package/dist/cjs/evaluator/comparison/greater-than.cjs +19 -9
  112. package/dist/cjs/evaluator/comparison/greater-than.cjs.map +2 -2
  113. package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs +19 -9
  114. package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs.map +2 -2
  115. package/dist/cjs/evaluator/comparison/less-than.cjs +19 -9
  116. package/dist/cjs/evaluator/comparison/less-than.cjs.map +2 -2
  117. package/dist/cjs/evaluator/comparison/not-equals.cjs +19 -9
  118. package/dist/cjs/evaluator/comparison/not-equals.cjs.map +2 -2
  119. package/dist/cjs/evaluator/concatenation/concatenate.cjs +19 -9
  120. package/dist/cjs/evaluator/concatenation/concatenate.cjs.map +2 -2
  121. package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs +19 -9
  122. package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs.map +2 -2
  123. package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs +35 -9
  124. package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs.map +3 -3
  125. package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs +22 -9
  126. package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs.map +3 -3
  127. package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs +35 -11
  128. package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs.map +3 -3
  129. package/dist/cjs/evaluator/dependency-nodes/resource-dependency-node.cjs +61 -0
  130. package/dist/cjs/evaluator/dependency-nodes/resource-dependency-node.cjs.map +10 -0
  131. package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs +19 -9
  132. package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs.map +2 -2
  133. package/dist/cjs/evaluator/dependency-nodes/virtual-cell-value-node.cjs +22 -9
  134. package/dist/cjs/evaluator/dependency-nodes/virtual-cell-value-node.cjs.map +3 -3
  135. package/dist/cjs/evaluator/evaluate-scalar-operator.cjs +19 -9
  136. package/dist/cjs/evaluator/evaluate-scalar-operator.cjs.map +2 -2
  137. package/dist/cjs/evaluator/evaluation-context.cjs +19 -9
  138. package/dist/cjs/evaluator/evaluation-context.cjs.map +2 -2
  139. package/dist/cjs/evaluator/evaluation-error.cjs +19 -9
  140. package/dist/cjs/evaluator/evaluation-error.cjs.map +2 -2
  141. package/dist/cjs/evaluator/formula-evaluator.cjs +55 -12
  142. package/dist/cjs/evaluator/formula-evaluator.cjs.map +3 -3
  143. package/dist/cjs/evaluator/range-evaluation-node.cjs +35 -11
  144. package/dist/cjs/evaluator/range-evaluation-node.cjs.map +3 -3
  145. package/dist/cjs/functions/_template/template.cjs +19 -9
  146. package/dist/cjs/functions/_template/template.cjs.map +2 -2
  147. package/dist/cjs/functions/array/sequence/sequence.cjs +19 -9
  148. package/dist/cjs/functions/array/sequence/sequence.cjs.map +2 -2
  149. package/dist/cjs/functions/criteria-parser.cjs +19 -9
  150. package/dist/cjs/functions/criteria-parser.cjs.map +2 -2
  151. package/dist/cjs/functions/criteria-utils.cjs +19 -9
  152. package/dist/cjs/functions/criteria-utils.cjs.map +2 -2
  153. package/dist/cjs/functions/function-registry.cjs +19 -9
  154. package/dist/cjs/functions/function-registry.cjs.map +2 -2
  155. package/dist/cjs/functions/function-utils.cjs +19 -9
  156. package/dist/cjs/functions/function-utils.cjs.map +2 -2
  157. package/dist/cjs/functions/information/cell/cell.cjs +19 -9
  158. package/dist/cjs/functions/information/cell/cell.cjs.map +2 -2
  159. package/dist/cjs/functions/information/column/column.cjs +19 -9
  160. package/dist/cjs/functions/information/column/column.cjs.map +2 -2
  161. package/dist/cjs/functions/information/row/row.cjs +19 -9
  162. package/dist/cjs/functions/information/row/row.cjs.map +2 -2
  163. package/dist/cjs/functions/logical/and/and.cjs +19 -9
  164. package/dist/cjs/functions/logical/and/and.cjs.map +2 -2
  165. package/dist/cjs/functions/logical/if/if.cjs +19 -9
  166. package/dist/cjs/functions/logical/if/if.cjs.map +2 -2
  167. package/dist/cjs/functions/logical/iferror/iferror.cjs +19 -9
  168. package/dist/cjs/functions/logical/iferror/iferror.cjs.map +2 -2
  169. package/dist/cjs/functions/logical/or/or.cjs +19 -9
  170. package/dist/cjs/functions/logical/or/or.cjs.map +2 -2
  171. package/dist/cjs/functions/lookup/count/count-utils.cjs +19 -9
  172. package/dist/cjs/functions/lookup/count/count-utils.cjs.map +2 -2
  173. package/dist/cjs/functions/lookup/count/count.cjs +19 -9
  174. package/dist/cjs/functions/lookup/count/count.cjs.map +2 -2
  175. package/dist/cjs/functions/lookup/count/countif.cjs +19 -9
  176. package/dist/cjs/functions/lookup/count/countif.cjs.map +2 -2
  177. package/dist/cjs/functions/lookup/count/countifs.cjs +19 -9
  178. package/dist/cjs/functions/lookup/count/countifs.cjs.map +2 -2
  179. package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs +19 -9
  180. package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs.map +2 -2
  181. package/dist/cjs/functions/lookup/match/match.cjs +21 -10
  182. package/dist/cjs/functions/lookup/match/match.cjs.map +3 -3
  183. package/dist/cjs/functions/lookup/xlookup/xlookup.cjs +19 -9
  184. package/dist/cjs/functions/lookup/xlookup/xlookup.cjs.map +2 -2
  185. package/dist/cjs/functions/math/average/average-utils.cjs +19 -9
  186. package/dist/cjs/functions/math/average/average-utils.cjs.map +2 -2
  187. package/dist/cjs/functions/math/average/average.cjs +19 -9
  188. package/dist/cjs/functions/math/average/average.cjs.map +2 -2
  189. package/dist/cjs/functions/math/average/averageif.cjs +19 -9
  190. package/dist/cjs/functions/math/average/averageif.cjs.map +2 -2
  191. package/dist/cjs/functions/math/average/averageifs.cjs +19 -9
  192. package/dist/cjs/functions/math/average/averageifs.cjs.map +2 -2
  193. package/dist/cjs/functions/math/ceiling/ceiling.cjs +19 -9
  194. package/dist/cjs/functions/math/ceiling/ceiling.cjs.map +2 -2
  195. package/dist/cjs/functions/math/max/max-utils.cjs +19 -9
  196. package/dist/cjs/functions/math/max/max-utils.cjs.map +2 -2
  197. package/dist/cjs/functions/math/max/max.cjs +19 -9
  198. package/dist/cjs/functions/math/max/max.cjs.map +2 -2
  199. package/dist/cjs/functions/math/max/maxif.cjs +19 -9
  200. package/dist/cjs/functions/math/max/maxif.cjs.map +2 -2
  201. package/dist/cjs/functions/math/max/maxifs.cjs +19 -9
  202. package/dist/cjs/functions/math/max/maxifs.cjs.map +2 -2
  203. package/dist/cjs/functions/math/min/min-utils.cjs +19 -9
  204. package/dist/cjs/functions/math/min/min-utils.cjs.map +2 -2
  205. package/dist/cjs/functions/math/min/min.cjs +19 -9
  206. package/dist/cjs/functions/math/min/min.cjs.map +2 -2
  207. package/dist/cjs/functions/math/min/minif.cjs +19 -9
  208. package/dist/cjs/functions/math/min/minif.cjs.map +2 -2
  209. package/dist/cjs/functions/math/min/minifs.cjs +19 -9
  210. package/dist/cjs/functions/math/min/minifs.cjs.map +2 -2
  211. package/dist/cjs/functions/math/sum/sum.cjs +19 -9
  212. package/dist/cjs/functions/math/sum/sum.cjs.map +2 -2
  213. package/dist/cjs/functions/math/sum/sumif.cjs +19 -9
  214. package/dist/cjs/functions/math/sum/sumif.cjs.map +2 -2
  215. package/dist/cjs/functions/math/sum/sumifs.cjs +19 -9
  216. package/dist/cjs/functions/math/sum/sumifs.cjs.map +2 -2
  217. package/dist/cjs/functions/math/sum/summation-utils.cjs +19 -9
  218. package/dist/cjs/functions/math/sum/summation-utils.cjs.map +2 -2
  219. package/dist/cjs/functions/reference/address/address.cjs +19 -9
  220. package/dist/cjs/functions/reference/address/address.cjs.map +2 -2
  221. package/dist/cjs/functions/reference/indirect/indirect.cjs +19 -9
  222. package/dist/cjs/functions/reference/indirect/indirect.cjs.map +2 -2
  223. package/dist/cjs/functions/reference/offset/offset.cjs +19 -9
  224. package/dist/cjs/functions/reference/offset/offset.cjs.map +2 -2
  225. package/dist/cjs/functions/text/concatenate/concatenate.cjs +21 -9
  226. package/dist/cjs/functions/text/concatenate/concatenate.cjs.map +3 -3
  227. package/dist/cjs/functions/text/exact/exact.cjs +19 -9
  228. package/dist/cjs/functions/text/exact/exact.cjs.map +2 -2
  229. package/dist/cjs/functions/text/find/find.cjs +19 -9
  230. package/dist/cjs/functions/text/find/find.cjs.map +2 -2
  231. package/dist/cjs/functions/text/left/left.cjs +19 -9
  232. package/dist/cjs/functions/text/left/left.cjs.map +2 -2
  233. package/dist/cjs/functions/text/len/len.cjs +19 -9
  234. package/dist/cjs/functions/text/len/len.cjs.map +2 -2
  235. package/dist/cjs/functions/text/mid/mid.cjs +19 -9
  236. package/dist/cjs/functions/text/mid/mid.cjs.map +2 -2
  237. package/dist/cjs/functions/text/right/right.cjs +19 -9
  238. package/dist/cjs/functions/text/right/right.cjs.map +2 -2
  239. package/dist/cjs/functions/text/text-helpers.cjs +19 -9
  240. package/dist/cjs/functions/text/text-helpers.cjs.map +2 -2
  241. package/dist/cjs/functions/text/textjoin/textjoin.cjs +19 -9
  242. package/dist/cjs/functions/text/textjoin/textjoin.cjs.map +2 -2
  243. package/dist/cjs/lib.cjs +24 -13
  244. package/dist/cjs/lib.cjs.map +2 -2
  245. package/dist/cjs/package.json +1 -1
  246. package/dist/cjs/parser/ast.cjs +19 -9
  247. package/dist/cjs/parser/ast.cjs.map +2 -2
  248. package/dist/cjs/parser/formatter.cjs +19 -9
  249. package/dist/cjs/parser/formatter.cjs.map +2 -2
  250. package/dist/cjs/parser/grammar.cjs +19 -9
  251. package/dist/cjs/parser/grammar.cjs.map +2 -2
  252. package/dist/cjs/parser/lexer.cjs +19 -9
  253. package/dist/cjs/parser/lexer.cjs.map +2 -2
  254. package/dist/cjs/parser/parser.cjs +19 -9
  255. package/dist/cjs/parser/parser.cjs.map +2 -2
  256. package/dist/cjs/react/hooks.cjs +31 -10
  257. package/dist/cjs/react/hooks.cjs.map +2 -2
  258. package/dist/mjs/core/commands/command-executor.mjs +7 -5
  259. package/dist/mjs/core/commands/command-executor.mjs.map +3 -3
  260. package/dist/mjs/core/commands/content-commands.mjs +279 -2
  261. package/dist/mjs/core/commands/content-commands.mjs.map +3 -3
  262. package/dist/mjs/core/commands/named-expression-commands.mjs +121 -6
  263. package/dist/mjs/core/commands/named-expression-commands.mjs.map +3 -3
  264. package/dist/mjs/core/commands/structure-commands.mjs +204 -8
  265. package/dist/mjs/core/commands/structure-commands.mjs.map +3 -3
  266. package/dist/mjs/core/commands/table-commands.mjs +117 -6
  267. package/dist/mjs/core/commands/table-commands.mjs.map +3 -3
  268. package/dist/mjs/core/commands/types.mjs +18 -1
  269. package/dist/mjs/core/commands/types.mjs.map +3 -3
  270. package/dist/mjs/core/engine-snapshot.mjs +11 -0
  271. package/dist/mjs/core/engine-snapshot.mjs.map +10 -0
  272. package/dist/mjs/core/engine.mjs +42 -26
  273. package/dist/mjs/core/engine.mjs.map +3 -3
  274. package/dist/mjs/core/managers/cache-manager.mjs +105 -1
  275. package/dist/mjs/core/managers/cache-manager.mjs.map +3 -3
  276. package/dist/mjs/core/managers/dependency-manager.mjs +687 -2
  277. package/dist/mjs/core/managers/dependency-manager.mjs.map +3 -3
  278. package/dist/mjs/core/managers/evaluation-manager.mjs +283 -4
  279. package/dist/mjs/core/managers/evaluation-manager.mjs.map +3 -3
  280. package/dist/mjs/core/managers/frontier-dependency-manager.mjs +47 -4
  281. package/dist/mjs/core/managers/frontier-dependency-manager.mjs.map +3 -3
  282. package/dist/mjs/core/managers/named-expression-manager.mjs +104 -21
  283. package/dist/mjs/core/managers/named-expression-manager.mjs.map +3 -3
  284. package/dist/mjs/core/managers/reference-manager.mjs +7 -1
  285. package/dist/mjs/core/managers/reference-manager.mjs.map +3 -3
  286. package/dist/mjs/core/managers/style-manager.mjs +10 -1
  287. package/dist/mjs/core/managers/style-manager.mjs.map +3 -3
  288. package/dist/mjs/core/managers/table-manager.mjs +7 -1
  289. package/dist/mjs/core/managers/table-manager.mjs.map +3 -3
  290. package/dist/mjs/core/managers/workbook-manager.mjs +20 -5
  291. package/dist/mjs/core/managers/workbook-manager.mjs.map +3 -3
  292. package/dist/mjs/core/resource-keys.mjs +27 -0
  293. package/dist/mjs/core/resource-keys.mjs.map +10 -0
  294. package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs +17 -1
  295. package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs.map +3 -3
  296. package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs +4 -1
  297. package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs.map +3 -3
  298. package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs +17 -3
  299. package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs.map +3 -3
  300. package/dist/mjs/evaluator/dependency-nodes/resource-dependency-node.mjs +21 -0
  301. package/dist/mjs/evaluator/dependency-nodes/resource-dependency-node.mjs.map +10 -0
  302. package/dist/mjs/evaluator/dependency-nodes/virtual-cell-value-node.mjs +4 -1
  303. package/dist/mjs/evaluator/dependency-nodes/virtual-cell-value-node.mjs.map +3 -3
  304. package/dist/mjs/evaluator/formula-evaluator.mjs +42 -4
  305. package/dist/mjs/evaluator/formula-evaluator.mjs.map +3 -3
  306. package/dist/mjs/evaluator/range-evaluation-node.mjs +17 -3
  307. package/dist/mjs/evaluator/range-evaluation-node.mjs.map +3 -3
  308. package/dist/mjs/functions/lookup/match/match.mjs +3 -2
  309. package/dist/mjs/functions/lookup/match/match.mjs.map +3 -3
  310. package/dist/mjs/functions/text/concatenate/concatenate.mjs +3 -1
  311. package/dist/mjs/functions/text/concatenate/concatenate.mjs.map +3 -3
  312. package/dist/mjs/package.json +1 -1
  313. package/dist/types/core/commands/content-commands.d.ts +31 -1
  314. package/dist/types/core/commands/named-expression-commands.d.ts +16 -1
  315. package/dist/types/core/commands/structure-commands.d.ts +24 -1
  316. package/dist/types/core/commands/table-commands.d.ts +16 -1
  317. package/dist/types/core/commands/types.d.ts +25 -1
  318. package/dist/types/core/engine-snapshot.d.ts +138 -0
  319. package/dist/types/core/engine.d.ts +19 -1
  320. package/dist/types/core/managers/cache-manager.d.ts +9 -0
  321. package/dist/types/core/managers/dependency-manager.d.ts +56 -1
  322. package/dist/types/core/managers/dependency-node.d.ts +2 -1
  323. package/dist/types/core/managers/evaluation-manager.d.ts +21 -1
  324. package/dist/types/core/managers/frontier-dependency-manager.d.ts +12 -2
  325. package/dist/types/core/managers/named-expression-manager.d.ts +17 -1
  326. package/dist/types/core/managers/reference-manager.d.ts +3 -0
  327. package/dist/types/core/managers/style-manager.d.ts +3 -0
  328. package/dist/types/core/managers/table-manager.d.ts +3 -0
  329. package/dist/types/core/managers/workbook-manager.d.ts +4 -1
  330. package/dist/types/core/resource-keys.d.ts +14 -0
  331. package/dist/types/evaluator/dependency-nodes/base-eval-node.d.ts +5 -0
  332. package/dist/types/evaluator/dependency-nodes/cell-value-node.d.ts +1 -0
  333. package/dist/types/evaluator/dependency-nodes/empty-cell-evaluation-node.d.ts +8 -1
  334. package/dist/types/evaluator/dependency-nodes/resource-dependency-node.d.ts +8 -0
  335. package/dist/types/evaluator/dependency-nodes/virtual-cell-value-node.d.ts +1 -0
  336. package/dist/types/evaluator/range-evaluation-node.d.ts +8 -1
  337. package/package.json +6 -2
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  entry = __defProp({}, "__esModule", { value: true });
11
- if (from && typeof from === "object" || typeof from === "function")
12
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
- get: () => from[key],
14
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -32,6 +42,7 @@ __export(exports_named_expression_manager, {
32
42
  NamedExpressionManager: () => NamedExpressionManager
33
43
  });
34
44
  module.exports = __toCommonJS(exports_named_expression_manager);
45
+ var import_resource_keys = require("../resource-keys.cjs");
35
46
 
36
47
  class NamedExpressionManager {
37
48
  sheetExpressions = new Map;
@@ -174,7 +185,8 @@ class NamedExpressionManager {
174
185
  return true;
175
186
  }
176
187
  updateAllNamedExpressions(updateCallback) {
177
- const update = (map) => {
188
+ const changed = new Set;
189
+ const update = (map, opts) => {
178
190
  map.forEach((namedExpr, name) => {
179
191
  const updatedExpression = updateCallback(namedExpr.expression);
180
192
  if (updatedExpression !== namedExpr.expression) {
@@ -182,18 +194,24 @@ class NamedExpressionManager {
182
194
  ...namedExpr,
183
195
  expression: updatedExpression
184
196
  });
197
+ changed.add(import_resource_keys.getNamedExpressionResourceKey({
198
+ expressionName: name,
199
+ workbookName: opts.workbookName,
200
+ sheetName: opts.sheetName
201
+ }));
185
202
  }
186
203
  });
187
204
  };
188
- update(this.globalExpressions);
189
- this.workbookExpressions.forEach((workbookLevel) => {
190
- update(workbookLevel);
205
+ update(this.globalExpressions, {});
206
+ this.workbookExpressions.forEach((workbookLevel, workbookName) => {
207
+ update(workbookLevel, { workbookName });
191
208
  });
192
- this.sheetExpressions.forEach((wbLevel) => {
193
- wbLevel.forEach((sheetLevel) => {
194
- update(sheetLevel);
209
+ this.sheetExpressions.forEach((wbLevel, workbookName) => {
210
+ wbLevel.forEach((sheetLevel, sheetName) => {
211
+ update(sheetLevel, { workbookName, sheetName });
195
212
  });
196
213
  });
214
+ return Array.from(changed);
197
215
  }
198
216
  setNamedExpressions(opts) {
199
217
  let map;
@@ -224,37 +242,66 @@ class NamedExpressionManager {
224
242
  }
225
243
  return;
226
244
  }
227
- resolveNamedExpression(namedExpression, context) {
245
+ resolveNamedExpressionWithScope(namedExpression, context) {
228
246
  if (!namedExpression.sheetName && !namedExpression.workbookName) {
229
247
  context.addContextDependency("sheet", "workbook");
230
248
  const expression = this.sheetExpressions.get(context.cellAddress.workbookName)?.get(context.cellAddress.sheetName)?.get(namedExpression.name);
231
249
  if (expression) {
232
- return expression.expression;
250
+ return {
251
+ expression: expression.expression,
252
+ scope: {
253
+ type: "sheet",
254
+ workbookName: context.cellAddress.workbookName,
255
+ sheetName: context.cellAddress.sheetName
256
+ }
257
+ };
233
258
  } else {
234
259
  const expression2 = this.workbookExpressions.get(context.cellAddress.workbookName)?.get(namedExpression.name);
235
260
  if (expression2) {
236
- return expression2.expression;
261
+ return {
262
+ expression: expression2.expression,
263
+ scope: {
264
+ type: "workbook",
265
+ workbookName: context.cellAddress.workbookName
266
+ }
267
+ };
237
268
  } else {
238
269
  const expression3 = this.globalExpressions.get(namedExpression.name);
239
270
  if (expression3) {
240
- return expression3.expression;
271
+ return {
272
+ expression: expression3.expression,
273
+ scope: {
274
+ type: "global"
275
+ }
276
+ };
241
277
  }
242
278
  }
243
279
  }
244
280
  }
245
281
  if (namedExpression.workbookName && !namedExpression.sheetName) {
246
282
  if (namedExpression.workbookName === context.cellAddress.workbookName) {
247
- return this.resolveNamedExpression({
283
+ return this.resolveNamedExpressionWithScope({
248
284
  name: namedExpression.name
249
285
  }, context);
250
286
  }
251
287
  const expression = this.workbookExpressions.get(namedExpression.workbookName)?.get(namedExpression.name);
252
288
  if (expression) {
253
- return expression.expression;
289
+ return {
290
+ expression: expression.expression,
291
+ scope: {
292
+ type: "workbook",
293
+ workbookName: namedExpression.workbookName
294
+ }
295
+ };
254
296
  } else {
255
297
  const expression2 = this.globalExpressions.get(namedExpression.name);
256
298
  if (expression2) {
257
- return expression2.expression;
299
+ return {
300
+ expression: expression2.expression,
301
+ scope: {
302
+ type: "global"
303
+ }
304
+ };
258
305
  }
259
306
  }
260
307
  }
@@ -262,15 +309,33 @@ class NamedExpressionManager {
262
309
  const expression = this.sheetExpressions.get(context.cellAddress.workbookName)?.get(namedExpression.sheetName)?.get(namedExpression.name);
263
310
  context.addContextDependency("workbook");
264
311
  if (expression) {
265
- return expression.expression;
312
+ return {
313
+ expression: expression.expression,
314
+ scope: {
315
+ type: "sheet",
316
+ workbookName: context.cellAddress.workbookName,
317
+ sheetName: namedExpression.sheetName
318
+ }
319
+ };
266
320
  } else {
267
321
  const expression2 = this.workbookExpressions.get(context.cellAddress.workbookName)?.get(namedExpression.name);
268
322
  if (expression2) {
269
- return expression2.expression;
323
+ return {
324
+ expression: expression2.expression,
325
+ scope: {
326
+ type: "workbook",
327
+ workbookName: context.cellAddress.workbookName
328
+ }
329
+ };
270
330
  } else {
271
331
  const expression3 = this.globalExpressions.get(namedExpression.name);
272
332
  if (expression3) {
273
- return expression3.expression;
333
+ return {
334
+ expression: expression3.expression,
335
+ scope: {
336
+ type: "global"
337
+ }
338
+ };
274
339
  }
275
340
  }
276
341
  }
@@ -278,20 +343,41 @@ class NamedExpressionManager {
278
343
  if (namedExpression.sheetName && namedExpression.workbookName) {
279
344
  const expression = this.sheetExpressions.get(namedExpression.workbookName)?.get(namedExpression.sheetName)?.get(namedExpression.name);
280
345
  if (expression) {
281
- return expression.expression;
346
+ return {
347
+ expression: expression.expression,
348
+ scope: {
349
+ type: "sheet",
350
+ workbookName: namedExpression.workbookName,
351
+ sheetName: namedExpression.sheetName
352
+ }
353
+ };
282
354
  } else {
283
355
  const expression2 = this.workbookExpressions.get(namedExpression.workbookName)?.get(namedExpression.name);
284
356
  if (expression2) {
285
- return expression2.expression;
357
+ return {
358
+ expression: expression2.expression,
359
+ scope: {
360
+ type: "workbook",
361
+ workbookName: namedExpression.workbookName
362
+ }
363
+ };
286
364
  } else {
287
365
  const expression3 = this.globalExpressions.get(namedExpression.name);
288
366
  if (expression3) {
289
- return expression3.expression;
367
+ return {
368
+ expression: expression3.expression,
369
+ scope: {
370
+ type: "global"
371
+ }
372
+ };
290
373
  }
291
374
  }
292
375
  }
293
376
  }
294
377
  }
378
+ resolveNamedExpression(namedExpression, context) {
379
+ return this.resolveNamedExpressionWithScope(namedExpression, context)?.expression;
380
+ }
295
381
  getNamedExpressions() {
296
382
  return {
297
383
  sheetExpressions: this.sheetExpressions,
@@ -322,6 +408,12 @@ class NamedExpressionManager {
322
408
  });
323
409
  });
324
410
  }
411
+ toSnapshot() {
412
+ return this.getNamedExpressions();
413
+ }
414
+ restoreFromSnapshot(snapshot) {
415
+ this.resetNamedExpressions(snapshot);
416
+ }
325
417
  addSheet(opts) {
326
418
  const wbLevel = this.sheetExpressions.get(opts.workbookName);
327
419
  if (!wbLevel) {
@@ -376,4 +468,4 @@ class NamedExpressionManager {
376
468
  }
377
469
  }
378
470
 
379
- //# debugId=0B80BB4B76771D4464756E2164756E21
471
+ //# debugId=852A4175DBABE62E64756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/core/managers/named-expression-manager.ts"],
4
4
  "sourcesContent": [
5
- "import type { NamedExpression } from \"../types.cjs\";\nimport { renameNamedExpressionInFormula } from \"../named-expression-renamer.cjs\";\nimport type { EventManager } from \"./event-manager.cjs\";\nimport type { NamedExpressionNode } from \"../../parser/ast.cjs\";\nimport type { EvaluationContext } from \"../../evaluator/evaluation-context.cjs\";\n\nexport class NamedExpressionManager {\n sheetExpressions: Map<string, Map<string, Map<string, NamedExpression>>> =\n new Map();\n workbookExpressions: Map<string, Map<string, NamedExpression>> = new Map();\n globalExpressions: Map<string, NamedExpression> = new Map();\n\n addNamedExpression({\n expression,\n expressionName,\n sheetName,\n workbookName,\n }: {\n expression: string;\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }): void {\n const namedExpression: NamedExpression = {\n name: expressionName,\n expression,\n };\n\n if (sheetName && !workbookName) {\n throw new Error(\"Missing workbookName\");\n }\n\n if (sheetName && workbookName) {\n let wbLevel = this.sheetExpressions.get(workbookName);\n if (!wbLevel) {\n wbLevel = new Map();\n this.sheetExpressions.set(workbookName, wbLevel);\n }\n\n let sheetLevel = wbLevel.get(sheetName);\n if (!sheetLevel) {\n sheetLevel = new Map();\n wbLevel.set(sheetName, sheetLevel);\n }\n\n sheetLevel.set(expressionName, namedExpression);\n } else if (workbookName) {\n let workbookNamedExpressions = this.workbookExpressions.get(workbookName);\n if (!workbookNamedExpressions) {\n workbookNamedExpressions = new Map();\n this.workbookExpressions.set(workbookName, workbookNamedExpressions);\n }\n\n workbookNamedExpressions.set(expressionName, namedExpression);\n } else {\n this.globalExpressions.set(expressionName, namedExpression);\n }\n }\n\n removeNamedExpression({\n expressionName,\n sheetName,\n workbookName,\n }: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }): boolean {\n let found = false;\n\n if (sheetName && !workbookName) {\n throw new Error(\"Missing workbookName\");\n }\n\n if (sheetName && workbookName) {\n const wbLevel = this.sheetExpressions.get(workbookName);\n if (wbLevel) {\n const sheetLevel = wbLevel.get(sheetName);\n if (sheetLevel) {\n found = sheetLevel.delete(expressionName);\n }\n }\n } else if (workbookName) {\n const workbookNamedExpressions =\n this.workbookExpressions.get(workbookName);\n if (workbookNamedExpressions) {\n found = workbookNamedExpressions.delete(expressionName);\n }\n } else {\n found = this.globalExpressions.delete(expressionName);\n }\n\n return found;\n }\n\n updateNamedExpression({\n expression,\n expressionName,\n sheetName,\n workbookName,\n }: {\n expression: string;\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }): void {\n // Check if the named expression exists\n let exists = false;\n\n if (sheetName && !workbookName) {\n throw new Error(\"Missing workbookName\");\n }\n\n if (sheetName && workbookName) {\n const wbLevel = this.sheetExpressions.get(workbookName);\n if (wbLevel) {\n const sheetLevel = wbLevel.get(sheetName);\n if (sheetLevel) {\n exists = sheetLevel.has(expressionName);\n }\n }\n } else if (workbookName) {\n const workbookNamedExpressions =\n this.workbookExpressions.get(workbookName);\n if (workbookNamedExpressions) {\n exists = workbookNamedExpressions.has(expressionName);\n }\n } else {\n exists = this.globalExpressions.has(expressionName);\n }\n\n if (!exists) {\n throw new Error(`Named expression '${expressionName}' does not exist`);\n }\n\n // Update is the same as add for existing expressions\n this.addNamedExpression({\n expression,\n expressionName,\n sheetName,\n workbookName,\n });\n }\n\n renameNamedExpression({\n expressionName,\n sheetName,\n workbookName,\n newName,\n }: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n newName: string;\n }): boolean {\n // Check if the named expression exists\n let targetMap: Map<string, NamedExpression> | undefined;\n if (sheetName && !workbookName) {\n throw new Error(\"Missing workbookName\");\n }\n\n let isGlobal = false;\n\n if (sheetName && workbookName) {\n const wbLevel = this.sheetExpressions.get(workbookName);\n if (wbLevel) {\n const sheetLevel = wbLevel.get(sheetName);\n if (sheetLevel) {\n targetMap = sheetLevel;\n }\n }\n } else if (workbookName) {\n targetMap = this.workbookExpressions.get(workbookName);\n } else {\n targetMap = this.globalExpressions;\n isGlobal = true;\n }\n\n if (!targetMap || !targetMap.has(expressionName)) {\n throw new Error(`Named expression '${expressionName}' does not exist`);\n }\n\n // Check if the new name already exists\n if (targetMap.has(newName)) {\n throw new Error(`Named expression '${newName}' already exists`);\n }\n\n // Get the expression to rename\n const namedExpression = targetMap.get(expressionName)!;\n\n // Update the name and re-add with new name\n const updatedExpression = { ...namedExpression, name: newName };\n targetMap.set(newName, updatedExpression);\n targetMap.delete(expressionName);\n\n return true;\n }\n\n updateAllNamedExpressions(updateCallback: (formula: string) => string): void {\n const update = (map: Map<string, NamedExpression>) => {\n map.forEach((namedExpr, name) => {\n // Don't update the expression we're renaming\n const updatedExpression = updateCallback(namedExpr.expression);\n\n if (updatedExpression !== namedExpr.expression) {\n map.set(name, {\n ...namedExpr,\n expression: updatedExpression,\n });\n }\n });\n };\n\n update(this.globalExpressions);\n\n this.workbookExpressions.forEach((workbookLevel) => {\n update(workbookLevel);\n });\n\n this.sheetExpressions.forEach((wbLevel) => {\n wbLevel.forEach((sheetLevel) => {\n update(sheetLevel);\n });\n });\n }\n\n /**\n * Replace all named expressions\n */\n setNamedExpressions(\n opts: (\n | {\n type: \"global\";\n }\n | {\n type: \"sheet\";\n sheetName: string;\n workbookName: string;\n }\n | {\n type: \"workbook\";\n workbookName: string;\n }\n ) & {\n expressions: Map<string, NamedExpression>;\n }\n ) {\n let map: Map<string, NamedExpression> | undefined;\n\n if (opts.type === \"sheet\") {\n map = this.sheetExpressions.get(opts.workbookName)?.get(opts.sheetName);\n } else if (opts.type === \"workbook\") {\n map = this.workbookExpressions.get(opts.workbookName);\n } else {\n map = this.globalExpressions;\n }\n\n if (!map) {\n throw new Error(\"Invalid options: \" + JSON.stringify(opts));\n }\n\n map.clear();\n\n opts.expressions.forEach((expression, name) => {\n map.set(name, expression);\n });\n }\n\n getNamedExpression(depNode: {\n name: string;\n scope:\n | {\n type: \"global\";\n }\n | {\n type: \"workbook\";\n workbookName: string;\n }\n | {\n type: \"sheet\";\n workbookName: string;\n sheetName: string;\n };\n }): NamedExpression | undefined {\n if (depNode.scope.type === \"global\") {\n return this.globalExpressions.get(depNode.name);\n }\n if (depNode.scope.type === \"workbook\") {\n return this.workbookExpressions\n .get(depNode.scope.workbookName)\n ?.get(depNode.name);\n }\n if (depNode.scope.type === \"sheet\") {\n return this.sheetExpressions\n .get(depNode.scope.workbookName)\n ?.get(depNode.scope.sheetName)\n ?.get(depNode.name);\n }\n return undefined;\n }\n\n resolveNamedExpression(\n namedExpression: Pick<\n NamedExpressionNode,\n \"name\" | \"sheetName\" | \"workbookName\"\n >,\n context: EvaluationContext\n ): string | undefined {\n // scenario 1: no sheetName nor workbookName\n if (!namedExpression.sheetName && !namedExpression.workbookName) {\n /**\n * the result of this formula will differ based on in which sheet and workbook we are\n * evaluating it in.\n */\n context.addContextDependency(\"sheet\", \"workbook\");\n\n // step 1, check if there is a named expression in the sheet scope\n const expression = this.sheetExpressions\n .get(context.cellAddress.workbookName)\n ?.get(context.cellAddress.sheetName)\n ?.get(namedExpression.name);\n if (expression) {\n return expression.expression;\n } else {\n // step 2, check if there is a named expression in the workbook scope\n const expression = this.workbookExpressions\n .get(context.cellAddress.workbookName)\n ?.get(namedExpression.name);\n if (expression) {\n return expression.expression;\n } else {\n // step 3, check if there is a named expression in the global scope\n const expression = this.globalExpressions.get(namedExpression.name);\n if (expression) {\n return expression.expression;\n }\n }\n }\n }\n\n // scenario 2: we only have a workbookName - a bit weird, but could happen\n if (namedExpression.workbookName && !namedExpression.sheetName) {\n // special case: if workbook is the current workbook, we should just resolve the named expression according to scenario 1\n if (\n namedExpression.workbookName ===\n context.cellAddress.workbookName\n ) {\n return this.resolveNamedExpression(\n {\n name: namedExpression.name,\n },\n context\n );\n }\n\n const expression = this.workbookExpressions\n .get(namedExpression.workbookName)\n ?.get(namedExpression.name);\n if (expression) {\n // step 1, check if there is a named expression in the workbook scope\n return expression.expression;\n } else {\n // step 2, check if there is a named expression in the global scope\n const expression = this.globalExpressions.get(namedExpression.name);\n if (expression) {\n return expression.expression;\n }\n }\n }\n\n // scenario 3: we only have a sheetName\n if (namedExpression.sheetName && !namedExpression.workbookName) {\n const expression = this.sheetExpressions\n .get(context.cellAddress.workbookName)\n ?.get(namedExpression.sheetName)\n ?.get(namedExpression.name);\n /**\n * the result of this formula will differ based on in which workbook we are\n * evaluating it in.\n */\n context.addContextDependency(\"workbook\");\n if (expression) {\n // step 1, check if there is a named expression in the current workbook against the sheet name\n return expression.expression;\n } else {\n // step 2, check if there is a named expression in the current workbook has a workbook scoped named expression\n const expression = this.workbookExpressions\n .get(context.cellAddress.workbookName)\n ?.get(namedExpression.name);\n if (expression) {\n return expression.expression;\n } else {\n // step 3, check if there is a named expression in the global scope\n const expression = this.globalExpressions.get(namedExpression.name);\n if (expression) {\n return expression.expression;\n }\n }\n }\n }\n\n // scenario 4: we have both sheetName and workbookName\n if (namedExpression.sheetName && namedExpression.workbookName) {\n const expression = this.sheetExpressions\n .get(namedExpression.workbookName)\n ?.get(namedExpression.sheetName)\n ?.get(namedExpression.name);\n if (expression) {\n // step 1, check if there is a named expression the the sheet scope\n return expression.expression;\n } else {\n // step 2, check if there is a named expression in the workbook scope\n const expression = this.workbookExpressions\n .get(namedExpression.workbookName)\n ?.get(namedExpression.name);\n if (expression) {\n return expression.expression;\n } else {\n // step 3, check if there is a named expression in the global scope\n const expression = this.globalExpressions.get(namedExpression.name);\n if (expression) {\n return expression.expression;\n }\n }\n }\n }\n }\n\n getNamedExpressions() {\n return {\n sheetExpressions: this.sheetExpressions,\n workbookExpressions: this.workbookExpressions,\n globalExpressions: this.globalExpressions,\n };\n }\n\n resetNamedExpressions(\n namedExpressions: ReturnType<typeof this.getNamedExpressions>\n ) {\n this.setNamedExpressions({\n type: \"global\",\n expressions: namedExpressions.globalExpressions,\n });\n\n namedExpressions.workbookExpressions.forEach(\n (workbookExpressions, workbookName) => {\n this.setNamedExpressions({\n type: \"workbook\",\n expressions: workbookExpressions,\n workbookName,\n });\n }\n );\n\n namedExpressions.sheetExpressions.forEach(\n (sheetExpressions, workbookName) => {\n sheetExpressions.forEach((sheetExpression, sheetName) => {\n this.setNamedExpressions({\n type: \"sheet\",\n expressions: sheetExpression,\n sheetName,\n workbookName,\n });\n });\n }\n );\n }\n\n /**\n * When adding a sheet, we need to initialize the new maps\n */\n addSheet(opts: { workbookName: string; sheetName: string }) {\n const wbLevel = this.sheetExpressions.get(opts.workbookName);\n if (!wbLevel) {\n throw new Error(\"Workbook not found\");\n }\n const sheetLevel = wbLevel.get(opts.sheetName);\n if (sheetLevel) {\n throw new Error(\"Sheet already exists\");\n }\n wbLevel.set(opts.sheetName, new Map());\n }\n\n /**\n * When adding a workbook, we need to initialize the new maps\n */\n addWorkbook(workbookName: string) {\n this.sheetExpressions.set(workbookName, new Map());\n this.workbookExpressions.set(workbookName, new Map());\n }\n\n /**\n * When removing a workbook, we need to remove the workbook from the sheet level\n */\n removeWorkbook(workbookName: string) {\n this.sheetExpressions.delete(workbookName);\n this.workbookExpressions.delete(workbookName);\n }\n\n /**\n * When removing a sheet, we need to remove the sheet from the workbook level\n */\n removeSheet(opts: { workbookName: string; sheetName: string }) {\n const wbLevel = this.sheetExpressions.get(opts.workbookName);\n if (!wbLevel) {\n throw new Error(\"Workbook not found\");\n }\n wbLevel.delete(opts.sheetName);\n }\n\n /**\n * Rename a sheet's named expressions, mainly used when renaming a sheet\n */\n renameSheet(options: {\n sheetName: string;\n newSheetName: string;\n workbookName: string;\n }): void {\n const wbLevel = this.sheetExpressions.get(options.workbookName);\n if (!wbLevel) {\n throw new Error(\"Workbook not found\");\n }\n const sheetLevel = wbLevel.get(options.sheetName);\n if (!sheetLevel) {\n throw new Error(\"Sheet not found\");\n }\n wbLevel.set(options.newSheetName, sheetLevel);\n wbLevel.delete(options.sheetName);\n }\n\n renameWorkbook(opts: { workbookName: string; newWorkbookName: string }) {\n const wbLevel = this.sheetExpressions.get(opts.workbookName);\n if (!wbLevel) {\n throw new Error(\"Workbook not found\");\n }\n this.sheetExpressions.set(opts.newWorkbookName, wbLevel);\n this.sheetExpressions.delete(opts.workbookName);\n\n const wbScopedExpressions = this.workbookExpressions.get(opts.workbookName);\n if (!wbScopedExpressions) {\n throw new Error(\"Workbook not found\");\n }\n this.workbookExpressions.set(opts.newWorkbookName, wbScopedExpressions);\n this.workbookExpressions.delete(opts.workbookName);\n }\n}\n"
5
+ "import type { NamedExpression } from \"../types.cjs\";\nimport type { NamedExpressionManagerSnapshot } from \"../engine-snapshot.cjs\";\nimport { renameNamedExpressionInFormula } from \"../named-expression-renamer.cjs\";\nimport type { EventManager } from \"./event-manager.cjs\";\nimport type { NamedExpressionNode } from \"../../parser/ast.cjs\";\nimport type { EvaluationContext } from \"../../evaluator/evaluation-context.cjs\";\nimport { getNamedExpressionResourceKey } from \"../resource-keys.cjs\";\n\nexport class NamedExpressionManager {\n sheetExpressions: Map<string, Map<string, Map<string, NamedExpression>>> =\n new Map();\n workbookExpressions: Map<string, Map<string, NamedExpression>> = new Map();\n globalExpressions: Map<string, NamedExpression> = new Map();\n\n addNamedExpression({\n expression,\n expressionName,\n sheetName,\n workbookName,\n }: {\n expression: string;\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }): void {\n const namedExpression: NamedExpression = {\n name: expressionName,\n expression,\n };\n\n if (sheetName && !workbookName) {\n throw new Error(\"Missing workbookName\");\n }\n\n if (sheetName && workbookName) {\n let wbLevel = this.sheetExpressions.get(workbookName);\n if (!wbLevel) {\n wbLevel = new Map();\n this.sheetExpressions.set(workbookName, wbLevel);\n }\n\n let sheetLevel = wbLevel.get(sheetName);\n if (!sheetLevel) {\n sheetLevel = new Map();\n wbLevel.set(sheetName, sheetLevel);\n }\n\n sheetLevel.set(expressionName, namedExpression);\n } else if (workbookName) {\n let workbookNamedExpressions = this.workbookExpressions.get(workbookName);\n if (!workbookNamedExpressions) {\n workbookNamedExpressions = new Map();\n this.workbookExpressions.set(workbookName, workbookNamedExpressions);\n }\n\n workbookNamedExpressions.set(expressionName, namedExpression);\n } else {\n this.globalExpressions.set(expressionName, namedExpression);\n }\n }\n\n removeNamedExpression({\n expressionName,\n sheetName,\n workbookName,\n }: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }): boolean {\n let found = false;\n\n if (sheetName && !workbookName) {\n throw new Error(\"Missing workbookName\");\n }\n\n if (sheetName && workbookName) {\n const wbLevel = this.sheetExpressions.get(workbookName);\n if (wbLevel) {\n const sheetLevel = wbLevel.get(sheetName);\n if (sheetLevel) {\n found = sheetLevel.delete(expressionName);\n }\n }\n } else if (workbookName) {\n const workbookNamedExpressions =\n this.workbookExpressions.get(workbookName);\n if (workbookNamedExpressions) {\n found = workbookNamedExpressions.delete(expressionName);\n }\n } else {\n found = this.globalExpressions.delete(expressionName);\n }\n\n return found;\n }\n\n updateNamedExpression({\n expression,\n expressionName,\n sheetName,\n workbookName,\n }: {\n expression: string;\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }): void {\n // Check if the named expression exists\n let exists = false;\n\n if (sheetName && !workbookName) {\n throw new Error(\"Missing workbookName\");\n }\n\n if (sheetName && workbookName) {\n const wbLevel = this.sheetExpressions.get(workbookName);\n if (wbLevel) {\n const sheetLevel = wbLevel.get(sheetName);\n if (sheetLevel) {\n exists = sheetLevel.has(expressionName);\n }\n }\n } else if (workbookName) {\n const workbookNamedExpressions =\n this.workbookExpressions.get(workbookName);\n if (workbookNamedExpressions) {\n exists = workbookNamedExpressions.has(expressionName);\n }\n } else {\n exists = this.globalExpressions.has(expressionName);\n }\n\n if (!exists) {\n throw new Error(`Named expression '${expressionName}' does not exist`);\n }\n\n // Update is the same as add for existing expressions\n this.addNamedExpression({\n expression,\n expressionName,\n sheetName,\n workbookName,\n });\n }\n\n renameNamedExpression({\n expressionName,\n sheetName,\n workbookName,\n newName,\n }: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n newName: string;\n }): boolean {\n // Check if the named expression exists\n let targetMap: Map<string, NamedExpression> | undefined;\n if (sheetName && !workbookName) {\n throw new Error(\"Missing workbookName\");\n }\n\n let isGlobal = false;\n\n if (sheetName && workbookName) {\n const wbLevel = this.sheetExpressions.get(workbookName);\n if (wbLevel) {\n const sheetLevel = wbLevel.get(sheetName);\n if (sheetLevel) {\n targetMap = sheetLevel;\n }\n }\n } else if (workbookName) {\n targetMap = this.workbookExpressions.get(workbookName);\n } else {\n targetMap = this.globalExpressions;\n isGlobal = true;\n }\n\n if (!targetMap || !targetMap.has(expressionName)) {\n throw new Error(`Named expression '${expressionName}' does not exist`);\n }\n\n // Check if the new name already exists\n if (targetMap.has(newName)) {\n throw new Error(`Named expression '${newName}' already exists`);\n }\n\n // Get the expression to rename\n const namedExpression = targetMap.get(expressionName)!;\n\n // Update the name and re-add with new name\n const updatedExpression = { ...namedExpression, name: newName };\n targetMap.set(newName, updatedExpression);\n targetMap.delete(expressionName);\n\n return true;\n }\n\n updateAllNamedExpressions(\n updateCallback: (formula: string) => string\n ): string[] {\n const changed = new Set<string>();\n\n const update = (\n map: Map<string, NamedExpression>,\n opts: { workbookName?: string; sheetName?: string }\n ) => {\n map.forEach((namedExpr, name) => {\n // Don't update the expression we're renaming\n const updatedExpression = updateCallback(namedExpr.expression);\n\n if (updatedExpression !== namedExpr.expression) {\n map.set(name, {\n ...namedExpr,\n expression: updatedExpression,\n });\n changed.add(\n getNamedExpressionResourceKey({\n expressionName: name,\n workbookName: opts.workbookName,\n sheetName: opts.sheetName,\n })\n );\n }\n });\n };\n\n update(this.globalExpressions, {});\n\n this.workbookExpressions.forEach((workbookLevel, workbookName) => {\n update(workbookLevel, { workbookName });\n });\n\n this.sheetExpressions.forEach((wbLevel, workbookName) => {\n wbLevel.forEach((sheetLevel, sheetName) => {\n update(sheetLevel, { workbookName, sheetName });\n });\n });\n\n return Array.from(changed);\n }\n\n /**\n * Replace all named expressions\n */\n setNamedExpressions(\n opts: (\n | {\n type: \"global\";\n }\n | {\n type: \"sheet\";\n sheetName: string;\n workbookName: string;\n }\n | {\n type: \"workbook\";\n workbookName: string;\n }\n ) & {\n expressions: Map<string, NamedExpression>;\n }\n ) {\n let map: Map<string, NamedExpression> | undefined;\n\n if (opts.type === \"sheet\") {\n map = this.sheetExpressions.get(opts.workbookName)?.get(opts.sheetName);\n } else if (opts.type === \"workbook\") {\n map = this.workbookExpressions.get(opts.workbookName);\n } else {\n map = this.globalExpressions;\n }\n\n if (!map) {\n throw new Error(\"Invalid options: \" + JSON.stringify(opts));\n }\n\n map.clear();\n\n opts.expressions.forEach((expression, name) => {\n map.set(name, expression);\n });\n }\n\n getNamedExpression(depNode: {\n name: string;\n scope:\n | {\n type: \"global\";\n }\n | {\n type: \"workbook\";\n workbookName: string;\n }\n | {\n type: \"sheet\";\n workbookName: string;\n sheetName: string;\n };\n }): NamedExpression | undefined {\n if (depNode.scope.type === \"global\") {\n return this.globalExpressions.get(depNode.name);\n }\n if (depNode.scope.type === \"workbook\") {\n return this.workbookExpressions\n .get(depNode.scope.workbookName)\n ?.get(depNode.name);\n }\n if (depNode.scope.type === \"sheet\") {\n return this.sheetExpressions\n .get(depNode.scope.workbookName)\n ?.get(depNode.scope.sheetName)\n ?.get(depNode.name);\n }\n return undefined;\n }\n\n resolveNamedExpressionWithScope(\n namedExpression: Pick<\n NamedExpressionNode,\n \"name\" | \"sheetName\" | \"workbookName\"\n >,\n context: EvaluationContext\n ):\n | {\n expression: string;\n scope:\n | { type: \"global\" }\n | { type: \"workbook\"; workbookName: string }\n | { type: \"sheet\"; workbookName: string; sheetName: string };\n }\n | undefined {\n // scenario 1: no sheetName nor workbookName\n if (!namedExpression.sheetName && !namedExpression.workbookName) {\n /**\n * the result of this formula will differ based on in which sheet and workbook we are\n * evaluating it in.\n */\n context.addContextDependency(\"sheet\", \"workbook\");\n\n // step 1, check if there is a named expression in the sheet scope\n const expression = this.sheetExpressions\n .get(context.cellAddress.workbookName)\n ?.get(context.cellAddress.sheetName)\n ?.get(namedExpression.name);\n if (expression) {\n return {\n expression: expression.expression,\n scope: {\n type: \"sheet\",\n workbookName: context.cellAddress.workbookName,\n sheetName: context.cellAddress.sheetName,\n },\n };\n } else {\n // step 2, check if there is a named expression in the workbook scope\n const expression = this.workbookExpressions\n .get(context.cellAddress.workbookName)\n ?.get(namedExpression.name);\n if (expression) {\n return {\n expression: expression.expression,\n scope: {\n type: \"workbook\",\n workbookName: context.cellAddress.workbookName,\n },\n };\n } else {\n // step 3, check if there is a named expression in the global scope\n const expression = this.globalExpressions.get(namedExpression.name);\n if (expression) {\n return {\n expression: expression.expression,\n scope: {\n type: \"global\",\n },\n };\n }\n }\n }\n }\n\n // scenario 2: we only have a workbookName - a bit weird, but could happen\n if (namedExpression.workbookName && !namedExpression.sheetName) {\n // special case: if workbook is the current workbook, we should just resolve the named expression according to scenario 1\n if (\n namedExpression.workbookName ===\n context.cellAddress.workbookName\n ) {\n return this.resolveNamedExpressionWithScope(\n {\n name: namedExpression.name,\n },\n context\n );\n }\n\n const expression = this.workbookExpressions\n .get(namedExpression.workbookName)\n ?.get(namedExpression.name);\n if (expression) {\n // step 1, check if there is a named expression in the workbook scope\n return {\n expression: expression.expression,\n scope: {\n type: \"workbook\",\n workbookName: namedExpression.workbookName,\n },\n };\n } else {\n // step 2, check if there is a named expression in the global scope\n const expression = this.globalExpressions.get(namedExpression.name);\n if (expression) {\n return {\n expression: expression.expression,\n scope: {\n type: \"global\",\n },\n };\n }\n }\n }\n\n // scenario 3: we only have a sheetName\n if (namedExpression.sheetName && !namedExpression.workbookName) {\n const expression = this.sheetExpressions\n .get(context.cellAddress.workbookName)\n ?.get(namedExpression.sheetName)\n ?.get(namedExpression.name);\n /**\n * the result of this formula will differ based on in which workbook we are\n * evaluating it in.\n */\n context.addContextDependency(\"workbook\");\n if (expression) {\n // step 1, check if there is a named expression in the current workbook against the sheet name\n return {\n expression: expression.expression,\n scope: {\n type: \"sheet\",\n workbookName: context.cellAddress.workbookName,\n sheetName: namedExpression.sheetName,\n },\n };\n } else {\n // step 2, check if there is a named expression in the current workbook has a workbook scoped named expression\n const expression = this.workbookExpressions\n .get(context.cellAddress.workbookName)\n ?.get(namedExpression.name);\n if (expression) {\n return {\n expression: expression.expression,\n scope: {\n type: \"workbook\",\n workbookName: context.cellAddress.workbookName,\n },\n };\n } else {\n // step 3, check if there is a named expression in the global scope\n const expression = this.globalExpressions.get(namedExpression.name);\n if (expression) {\n return {\n expression: expression.expression,\n scope: {\n type: \"global\",\n },\n };\n }\n }\n }\n }\n\n // scenario 4: we have both sheetName and workbookName\n if (namedExpression.sheetName && namedExpression.workbookName) {\n const expression = this.sheetExpressions\n .get(namedExpression.workbookName)\n ?.get(namedExpression.sheetName)\n ?.get(namedExpression.name);\n if (expression) {\n // step 1, check if there is a named expression the the sheet scope\n return {\n expression: expression.expression,\n scope: {\n type: \"sheet\",\n workbookName: namedExpression.workbookName,\n sheetName: namedExpression.sheetName,\n },\n };\n } else {\n // step 2, check if there is a named expression in the workbook scope\n const expression = this.workbookExpressions\n .get(namedExpression.workbookName)\n ?.get(namedExpression.name);\n if (expression) {\n return {\n expression: expression.expression,\n scope: {\n type: \"workbook\",\n workbookName: namedExpression.workbookName,\n },\n };\n } else {\n // step 3, check if there is a named expression in the global scope\n const expression = this.globalExpressions.get(namedExpression.name);\n if (expression) {\n return {\n expression: expression.expression,\n scope: {\n type: \"global\",\n },\n };\n }\n }\n }\n }\n }\n\n resolveNamedExpression(\n namedExpression: Pick<\n NamedExpressionNode,\n \"name\" | \"sheetName\" | \"workbookName\"\n >,\n context: EvaluationContext\n ): string | undefined {\n return this.resolveNamedExpressionWithScope(namedExpression, context)\n ?.expression;\n }\n\n getNamedExpressions() {\n return {\n sheetExpressions: this.sheetExpressions,\n workbookExpressions: this.workbookExpressions,\n globalExpressions: this.globalExpressions,\n };\n }\n\n resetNamedExpressions(\n namedExpressions: ReturnType<typeof this.getNamedExpressions>\n ) {\n this.setNamedExpressions({\n type: \"global\",\n expressions: namedExpressions.globalExpressions,\n });\n\n namedExpressions.workbookExpressions.forEach(\n (workbookExpressions, workbookName) => {\n this.setNamedExpressions({\n type: \"workbook\",\n expressions: workbookExpressions,\n workbookName,\n });\n }\n );\n\n namedExpressions.sheetExpressions.forEach(\n (sheetExpressions, workbookName) => {\n sheetExpressions.forEach((sheetExpression, sheetName) => {\n this.setNamedExpressions({\n type: \"sheet\",\n expressions: sheetExpression,\n sheetName,\n workbookName,\n });\n });\n }\n );\n }\n\n toSnapshot(): NamedExpressionManagerSnapshot {\n return this.getNamedExpressions();\n }\n\n restoreFromSnapshot(snapshot: NamedExpressionManagerSnapshot) {\n this.resetNamedExpressions(snapshot);\n }\n\n /**\n * When adding a sheet, we need to initialize the new maps\n */\n addSheet(opts: { workbookName: string; sheetName: string }) {\n const wbLevel = this.sheetExpressions.get(opts.workbookName);\n if (!wbLevel) {\n throw new Error(\"Workbook not found\");\n }\n const sheetLevel = wbLevel.get(opts.sheetName);\n if (sheetLevel) {\n throw new Error(\"Sheet already exists\");\n }\n wbLevel.set(opts.sheetName, new Map());\n }\n\n /**\n * When adding a workbook, we need to initialize the new maps\n */\n addWorkbook(workbookName: string) {\n this.sheetExpressions.set(workbookName, new Map());\n this.workbookExpressions.set(workbookName, new Map());\n }\n\n /**\n * When removing a workbook, we need to remove the workbook from the sheet level\n */\n removeWorkbook(workbookName: string) {\n this.sheetExpressions.delete(workbookName);\n this.workbookExpressions.delete(workbookName);\n }\n\n /**\n * When removing a sheet, we need to remove the sheet from the workbook level\n */\n removeSheet(opts: { workbookName: string; sheetName: string }) {\n const wbLevel = this.sheetExpressions.get(opts.workbookName);\n if (!wbLevel) {\n throw new Error(\"Workbook not found\");\n }\n wbLevel.delete(opts.sheetName);\n }\n\n /**\n * Rename a sheet's named expressions, mainly used when renaming a sheet\n */\n renameSheet(options: {\n sheetName: string;\n newSheetName: string;\n workbookName: string;\n }): void {\n const wbLevel = this.sheetExpressions.get(options.workbookName);\n if (!wbLevel) {\n throw new Error(\"Workbook not found\");\n }\n const sheetLevel = wbLevel.get(options.sheetName);\n if (!sheetLevel) {\n throw new Error(\"Sheet not found\");\n }\n wbLevel.set(options.newSheetName, sheetLevel);\n wbLevel.delete(options.sheetName);\n }\n\n renameWorkbook(opts: { workbookName: string; newWorkbookName: string }) {\n const wbLevel = this.sheetExpressions.get(opts.workbookName);\n if (!wbLevel) {\n throw new Error(\"Workbook not found\");\n }\n this.sheetExpressions.set(opts.newWorkbookName, wbLevel);\n this.sheetExpressions.delete(opts.workbookName);\n\n const wbScopedExpressions = this.workbookExpressions.get(opts.workbookName);\n if (!wbScopedExpressions) {\n throw new Error(\"Workbook not found\");\n }\n this.workbookExpressions.set(opts.newWorkbookName, wbScopedExpressions);\n this.workbookExpressions.delete(opts.workbookName);\n }\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "0B80BB4B76771D4464756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "852A4175DBABE62E64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  entry = __defProp({}, "__esModule", { value: true });
11
- if (from && typeof from === "object" || typeof from === "function")
12
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
- get: () => from[key],
14
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -641,4 +651,4 @@ function findAllDiagonalStepCandidates(targetCell, sheet) {
641
651
  return unblockedCandidates;
642
652
  }
643
653
 
644
- //# debugId=25EBF4FC98D8F2D464756E2164756E21
654
+ //# debugId=EEF96CEA788447D264756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import { EvaluationError } from \"../../evaluator/evaluation-error.cjs\";\nimport {\n FormulaError,\n type CellAddress,\n type RangeAddress,\n type Sheet\n} from \"../types.cjs\";\nimport { getCellReference } from \"../utils.cjs\";\nimport {\n IndexEntryBinarySearch,\n type SheetIndexes,\n type WorkbookManager,\n} from \"./workbook-manager.cjs\";\n\nexport type LookupOrder = \"row-major\" | \"col-major\";\n\nexport type RangeEvalOrderEntryDict = {\n value: {\n type: \"value\";\n address: CellAddress;\n };\n empty_cell: {\n type: \"empty_cell\";\n address: CellAddress;\n candidates: CellAddress[];\n };\n empty_range: {\n type: \"empty_range\";\n address: RangeAddress;\n candidates: CellAddress[];\n };\n};\n\nexport type RangeEvalOrderEntry =\n | RangeEvalOrderEntryDict[\"value\"]\n | RangeEvalOrderEntryDict[\"empty_cell\"]\n | RangeEvalOrderEntryDict[\"empty_range\"];\n\n/**\n * Build a deterministic, ordered list describing every cell inside a lookup range.\n * This function analyzes the range and classifies each cell/range as either:\n * - A value-like cell (occupied)\n * - An empty cell with 0-2 frontier candidates\n * - An empty range with 0-2 frontier candidates\n *\n * @param this - WorkbookManager instance\n * @param lookupOrder - \"row-major\" or \"col-major\" iteration order\n * @param lookupRange - The range to analyze\n * @returns Ordered array of entries describing the range\n */\nexport function buildRangeEvalOrder(\n this: WorkbookManager,\n lookupOrder: LookupOrder,\n lookupRange: RangeAddress\n): RangeEvalOrderEntry[] {\n const sheet = this.getSheet(lookupRange);\n if (!sheet) {\n throw new EvaluationError(\n FormulaError.REF,\n `Sheet ${lookupRange.sheetName} not found`\n );\n }\n\n const result: RangeEvalOrderEntry[] = [];\n\n // Get range bounds\n const startRow = lookupRange.range.start.row;\n const startCol = lookupRange.range.start.col;\n\n // Build a map of occupied cells within the range\n const occupiedCells = new Map<string, CellAddress>();\n let maxRow = startRow;\n let maxCol = startCol;\n\n for (const cellAddr of this.iterateCellsInRange(lookupRange)) {\n occupiedCells.set(getCellReference(cellAddr), cellAddr);\n maxRow = Math.max(maxRow, cellAddr.rowIndex);\n maxCol = Math.max(maxCol, cellAddr.colIndex);\n }\n\n // For infinite ranges, also consider ALL occupied cells in the sheet\n // (including frontier candidates and their spills) to determine extent\n if (\n lookupRange.range.end.row.type === \"infinity\" ||\n lookupRange.range.end.col.type === \"infinity\"\n ) {\n // Get all cells in the sheet to find the full extent\n const allCells = this.iterateCellsInRange({\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: { row: 0, col: 0 },\n end: {\n row: { type: \"infinity\", sign: \"positive\" },\n col: { type: \"infinity\", sign: \"positive\" },\n },\n },\n });\n\n for (const cellAddr of allCells) {\n // Consider all occupied cells (formulas and values) to determine extent\n maxRow = Math.max(maxRow, cellAddr.rowIndex);\n maxCol = Math.max(maxCol, cellAddr.colIndex);\n }\n }\n\n // Determine the effective end bounds\n // For finite ranges, use the specified end\n // For infinite ranges, use the maximum cell found (including frontier candidates)\n const endRow =\n lookupRange.range.end.row.type === \"number\"\n ? lookupRange.range.end.row.value\n : maxRow;\n const endCol =\n lookupRange.range.end.col.type === \"number\"\n ? lookupRange.range.end.col.value\n : maxCol;\n\n // Optimization: If the lookup range is infinite and has NO occupied cells within it,\n // emit a single infinite range with ALL candidates from the sheet that could affect it\n const isInfinite =\n lookupRange.range.end.row.type === \"infinity\" ||\n lookupRange.range.end.col.type === \"infinity\";\n\n if (isInfinite && occupiedCells.size === 0) {\n // Find all formula candidates that could spill into this range\n // by checking formulas to the left and above of the range\n const leftCandidates = new Map<string, CellAddress>();\n const aboveCandidates = new Map<string, CellAddress>();\n const diagonalCandidates = new Map<string, CellAddress>();\n\n // Iterate all cells in the sheet to find candidates\n // (formulas to the left or above that could spill into the range)\n const allCells = this.iterateCellsInRange({\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: { row: 0, col: 0 },\n end: {\n row: { type: \"infinity\", sign: \"positive\" },\n col: { type: \"infinity\", sign: \"positive\" },\n },\n },\n });\n\n for (const cellAddr of allCells) {\n const cellRef = getCellReference(cellAddr);\n const content = sheet.content.get(cellRef);\n\n // Only consider formula cells\n if (typeof content === \"string\" && content.startsWith(\"=\")) {\n // Check if this formula could spill into the lookup range\n // A formula at (r, c) can spill into a range starting at (startRow, startCol) if:\n // 1. It's directly to the left: c < startCol AND r >= startRow (same row or below)\n // 2. It's directly above: r < startRow AND c >= startCol (same column or to the right)\n // 3. It's diagonal: r < startRow AND c < startCol (can spill down-right)\n\n const isLeftCandidate =\n cellAddr.colIndex < startCol && cellAddr.rowIndex >= startRow;\n const isAboveCandidate =\n cellAddr.rowIndex < startRow && cellAddr.colIndex >= startCol;\n const isDiagonalCandidate =\n cellAddr.rowIndex < startRow && cellAddr.colIndex < startCol;\n\n if (isLeftCandidate) {\n leftCandidates.set(cellRef, cellAddr);\n } else if (isAboveCandidate) {\n aboveCandidates.set(cellRef, cellAddr);\n } else if (isDiagonalCandidate) {\n diagonalCandidates.set(cellRef, cellAddr);\n }\n }\n }\n\n // Only include diagonal candidates if there are NO direct left/above candidates\n const candidateMap = new Map<string, CellAddress>();\n if (leftCandidates.size > 0 || aboveCandidates.size > 0) {\n // Have direct candidates - use only those\n for (const [ref, addr] of leftCandidates) {\n candidateMap.set(ref, addr);\n }\n for (const [ref, addr] of aboveCandidates) {\n candidateMap.set(ref, addr);\n }\n } else {\n // No direct candidates - use diagonals\n for (const [ref, addr] of diagonalCandidates) {\n candidateMap.set(ref, addr);\n }\n }\n\n const candidates = sortCandidates(\n Array.from(candidateMap.values()),\n lookupOrder\n );\n\n result.push({\n type: \"empty_range\",\n address: lookupRange,\n candidates,\n });\n return result;\n }\n\n if (lookupOrder === \"row-major\") {\n // Get indexes for efficient row/column lookups\n const indexes = this.getSheetIndexes({\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n });\n\n // Iterate row by row, left to right\n for (let row = startRow; row <= endRow; row++) {\n // Check if this row has any occupied cells using indexes\n const hasOccupiedInRow = indexes.rowGroups.has(row);\n\n // If the row has no occupied cells and the range is infinite in columns,\n // emit a single infinite range for the entire row\n if (!hasOccupiedInRow && lookupRange.range.end.col.type === \"infinity\") {\n const firstCell: CellAddress = {\n rowIndex: row,\n colIndex: startCol,\n sheetName: lookupRange.sheetName,\n workbookName: lookupRange.workbookName,\n };\n\n const candidates = findCandidatesForCell.call(\n this,\n firstCell,\n sheet,\n lookupOrder\n );\n\n result.push({\n type: \"empty_range\",\n address: {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: {\n row: row,\n col: startCol,\n },\n end: {\n row: { type: \"number\", value: row },\n col: lookupRange.range.end.col,\n },\n },\n },\n candidates,\n });\n continue; // Skip normal processing for this row\n }\n\n processRowMajorRow.call(\n this,\n row,\n startCol,\n endCol,\n lookupRange,\n occupiedCells,\n sheet,\n result,\n indexes\n );\n\n // If the lookup range is infinite in columns, emit a final infinite range for this row ONLY\n if (lookupRange.range.end.col.type === \"infinity\") {\n const nextCol = endCol + 1;\n const firstCellBeyondEnd: CellAddress = {\n rowIndex: row,\n colIndex: nextCol,\n sheetName: lookupRange.sheetName,\n workbookName: lookupRange.workbookName,\n };\n\n const candidates = findCandidatesForCell.call(\n this,\n firstCellBeyondEnd,\n sheet,\n lookupOrder\n );\n\n result.push({\n type: \"empty_range\",\n address: {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: {\n row: row,\n col: nextCol,\n },\n end: {\n // Always constrain to this row only in row-major\n row: { type: \"number\", value: row },\n col: lookupRange.range.end.col,\n },\n },\n },\n candidates,\n });\n }\n }\n\n // If the lookup range is infinite in rows, emit a final infinite range\n if (lookupRange.range.end.row.type === \"infinity\") {\n // Find candidates for cells beyond the last processed row\n const nextRow = endRow + 1;\n const firstCellInNextRow: CellAddress = {\n rowIndex: nextRow,\n colIndex: startCol,\n sheetName: lookupRange.sheetName,\n workbookName: lookupRange.workbookName,\n };\n\n const candidates = findCandidatesForCell.call(\n this,\n firstCellInNextRow,\n sheet,\n lookupOrder\n );\n\n result.push({\n type: \"empty_range\",\n address: {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: {\n row: nextRow,\n col: startCol,\n },\n end: {\n row: lookupRange.range.end.row,\n col: lookupRange.range.end.col,\n },\n },\n },\n candidates,\n });\n }\n } else {\n // Get indexes for efficient row/column lookups\n const indexes = this.getSheetIndexes({\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n });\n\n // col-major: iterate column by column, top to bottom\n for (let col = startCol; col <= endCol; col++) {\n // Check if this column has any occupied cells using indexes\n const hasOccupiedInColumn = indexes.colGroups.has(col);\n\n // If the column has no occupied cells and the range is infinite in rows,\n // emit a single infinite range for the entire column\n if (\n !hasOccupiedInColumn &&\n lookupRange.range.end.row.type === \"infinity\"\n ) {\n const firstCell: CellAddress = {\n rowIndex: startRow,\n colIndex: col,\n sheetName: lookupRange.sheetName,\n workbookName: lookupRange.workbookName,\n };\n\n const candidates = findCandidatesForCell.call(\n this,\n firstCell,\n sheet,\n lookupOrder\n );\n\n result.push({\n type: \"empty_range\",\n address: {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: {\n row: startRow,\n col: col,\n },\n end: {\n row: lookupRange.range.end.row,\n col: { type: \"number\", value: col },\n },\n },\n },\n candidates,\n });\n continue; // Skip normal processing for this column\n }\n\n processColMajorColumn.call(\n this,\n col,\n startRow,\n endRow,\n lookupRange,\n occupiedCells,\n sheet,\n result,\n indexes\n );\n\n // If the lookup range is infinite in rows, emit a final infinite range for this column ONLY\n if (lookupRange.range.end.row.type === \"infinity\") {\n const nextRow = endRow + 1;\n const firstCellBeyondEnd: CellAddress = {\n rowIndex: nextRow,\n colIndex: col,\n sheetName: lookupRange.sheetName,\n workbookName: lookupRange.workbookName,\n };\n\n const candidates = findCandidatesForCell.call(\n this,\n firstCellBeyondEnd,\n sheet,\n lookupOrder\n );\n\n result.push({\n type: \"empty_range\",\n address: {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: {\n row: nextRow,\n col: col,\n },\n end: {\n row: lookupRange.range.end.row,\n // Always constrain to this column only in col-major\n col: { type: \"number\", value: col },\n },\n },\n },\n candidates,\n });\n }\n }\n\n // If the lookup range is infinite in columns, emit a final infinite range\n if (lookupRange.range.end.col.type === \"infinity\") {\n // Find candidates for cells beyond the last processed column\n const nextCol = endCol + 1;\n const firstCellInNextCol: CellAddress = {\n rowIndex: startRow,\n colIndex: nextCol,\n sheetName: lookupRange.sheetName,\n workbookName: lookupRange.workbookName,\n };\n\n const candidates = findCandidatesForCell.call(\n this,\n firstCellInNextCol,\n sheet,\n lookupOrder\n );\n\n result.push({\n type: \"empty_range\",\n address: {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: {\n row: startRow,\n col: nextCol,\n },\n end: {\n row: lookupRange.range.end.row,\n col: lookupRange.range.end.col,\n },\n },\n },\n candidates,\n });\n }\n }\n\n return result;\n}\n\n/**\n * Process a single row in row-major order\n */\nfunction processRowMajorRow(\n this: WorkbookManager,\n row: number,\n startCol: number,\n endCol: number,\n lookupRange: RangeAddress,\n occupiedCells: Map<string, CellAddress>,\n sheet: Sheet,\n result: RangeEvalOrderEntry[],\n indexes: SheetIndexes\n): void {\n let col = startCol;\n\n while (col <= endCol) {\n const cellAddr: CellAddress = {\n rowIndex: row,\n colIndex: col,\n sheetName: lookupRange.sheetName,\n workbookName: lookupRange.workbookName,\n };\n const cellRef = getCellReference(cellAddr);\n\n if (occupiedCells.has(cellRef)) {\n // This cell is occupied (has a value or formula)\n result.push({\n type: \"value\",\n address: cellAddr,\n });\n col++;\n } else {\n // This cell is empty - find the contiguous empty range in this row with same candidates\n const emptyRangeStart = col;\n let emptyRangeEnd = endCol;\n\n // Find next occupied cell in this row using binary search (O(log n))\n const rowGroup = indexes.rowGroups.get(row);\n if (rowGroup) {\n // Binary search for the first cell in this row with colIndex > col\n const nextCellIdx = IndexEntryBinarySearch.findFirstGreaterOrEqual(\n rowGroup,\n col + 1\n );\n if (nextCellIdx !== -1) {\n emptyRangeEnd = rowGroup[nextCellIdx]!.number - 1;\n }\n }\n\n // Find ALL unique candidates across the entire empty range\n const allCandidates = findAllCandidatesForRange(\n this,\n {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: { row, col: emptyRangeStart },\n end: {\n row: { type: \"number\", value: row },\n col: { type: \"number\", value: emptyRangeEnd },\n },\n },\n },\n sheet,\n \"row-major\"\n );\n\n // If the empty range is a single cell, emit as empty_cell\n if (emptyRangeStart === emptyRangeEnd) {\n result.push({\n type: \"empty_cell\",\n address: cellAddr,\n candidates: allCandidates,\n });\n } else {\n // Emit as empty_range\n result.push({\n type: \"empty_range\",\n address: {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: {\n row,\n col: emptyRangeStart,\n },\n end: {\n row: { type: \"number\", value: row },\n col: { type: \"number\", value: emptyRangeEnd },\n },\n },\n },\n candidates: allCandidates,\n });\n }\n\n col = emptyRangeEnd + 1;\n }\n }\n}\n\n/**\n * Process a single column in col-major order\n */\nfunction processColMajorColumn(\n this: WorkbookManager,\n col: number,\n startRow: number,\n endRow: number,\n lookupRange: RangeAddress,\n occupiedCells: Map<string, CellAddress>,\n sheet: Sheet,\n result: RangeEvalOrderEntry[],\n indexes: SheetIndexes\n): void {\n let row = startRow;\n\n while (row <= endRow) {\n const cellAddr: CellAddress = {\n rowIndex: row,\n colIndex: col,\n sheetName: lookupRange.sheetName,\n workbookName: lookupRange.workbookName,\n };\n const cellRef = getCellReference(cellAddr);\n\n if (occupiedCells.has(cellRef)) {\n // This cell is occupied (has a value or formula)\n result.push({\n type: \"value\",\n address: cellAddr,\n });\n row++;\n } else {\n // This cell is empty - find the contiguous empty range in this column with same candidates\n const emptyRangeStart = row;\n let emptyRangeEnd = endRow;\n\n // Find next occupied cell in this column using binary search (O(log n))\n const colGroup = indexes.colGroups.get(col);\n if (colGroup) {\n // Binary search for the first cell in this column with rowIndex > row\n const nextCellIdx = IndexEntryBinarySearch.findFirstGreaterOrEqual(\n colGroup,\n row + 1\n );\n if (nextCellIdx !== -1) {\n emptyRangeEnd = colGroup[nextCellIdx]!.number - 1;\n }\n }\n\n // Find ALL unique candidates across the entire empty range\n const allCandidates = findAllCandidatesForRange(\n this,\n {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: { row: emptyRangeStart, col },\n end: {\n row: { type: \"number\", value: emptyRangeEnd },\n col: { type: \"number\", value: col },\n },\n },\n },\n sheet,\n \"col-major\"\n );\n\n // If the empty range is a single cell, emit as empty_cell\n if (emptyRangeStart === emptyRangeEnd) {\n result.push({\n type: \"empty_cell\",\n address: cellAddr,\n candidates: allCandidates,\n });\n } else {\n // Emit as empty_range\n result.push({\n type: \"empty_range\",\n address: {\n workbookName: lookupRange.workbookName,\n sheetName: lookupRange.sheetName,\n range: {\n start: {\n row: emptyRangeStart,\n col,\n },\n end: {\n row: { type: \"number\", value: emptyRangeEnd },\n col: { type: \"number\", value: col },\n },\n },\n },\n candidates: allCandidates,\n });\n }\n\n row = emptyRangeEnd + 1;\n }\n }\n}\n\n/**\n * Find ALL unique candidates that could affect any cell in the given empty range\n * Returns the union of candidates from all cells in the range, sorted deterministically\n */\nfunction findAllCandidatesForRange(\n manager: WorkbookManager,\n emptyRange: RangeAddress,\n sheet: Sheet,\n lookupOrder: LookupOrder\n): CellAddress[] {\n const candidateMap = new Map<string, CellAddress>();\n\n const startRow = emptyRange.range.start.row;\n const startCol = emptyRange.range.start.col;\n const endRow =\n emptyRange.range.end.row.type === \"number\"\n ? emptyRange.range.end.row.value\n : startRow;\n const endCol =\n emptyRange.range.end.col.type === \"number\"\n ? emptyRange.range.end.col.value\n : startCol;\n\n // We need to check positions that could have different candidates:\n // - Different columns might have different \"above\" candidates\n // - Different rows might have different \"left\" candidates\n const positionsToCheck: Array<{ row: number; col: number }> = [];\n\n // For single-row ranges: check each column (different above candidates)\n // For single-column ranges: sample rows efficiently\n // For rectangular ranges: check corners only\n\n if (startRow === endRow) {\n // Single row: check each column (each column might have different above candidates)\n for (let col = startCol; col <= endCol; col++) {\n positionsToCheck.push({ row: startRow, col });\n }\n } else if (startCol === endCol) {\n // Single column: For large ranges, sample rows instead of checking all\n // We check where occupied cells exist, plus endpoints\n const maxSamples = 100; // Performance limit\n const numRows = endRow - startRow + 1;\n\n if (numRows <= maxSamples) {\n // Small range: check every row\n for (let row = startRow; row <= endRow; row++) {\n positionsToCheck.push({ row, col: startCol });\n }\n } else {\n // Large range: sample at occupied cell rows + endpoints\n positionsToCheck.push({ row: startRow, col: startCol }); // First\n positionsToCheck.push({ row: endRow, col: startCol }); // Last\n\n // Add samples at rows where there are occupied cells to the left\n // (these are the rows that might have different left candidates)\n // Use indexes to efficiently find occupied cells instead of nested loop\n const indexes = manager.getSheetIndexes({\n workbookName: emptyRange.workbookName,\n sheetName: emptyRange.sheetName,\n });\n\n const seenRows = new Set<number>();\n for (let c = 0; c < startCol; c++) {\n const colGroup = indexes.colGroups.get(c);\n if (colGroup) {\n // Use binary search to find cells in this column within the row range\n const startIdx = IndexEntryBinarySearch.findFirstGreaterOrEqual(\n colGroup,\n startRow\n );\n if (startIdx !== -1) {\n for (let i = startIdx; i < colGroup.length; i++) {\n const entry = colGroup[i];\n if (!entry || entry.number > endRow) break;\n if (!seenRows.has(entry.number)) {\n seenRows.add(entry.number);\n positionsToCheck.push({ row: entry.number, col: startCol });\n }\n }\n }\n }\n }\n }\n } else {\n // Rectangular range: check corners only for performance\n positionsToCheck.push({ row: startRow, col: startCol }); // Top-left\n positionsToCheck.push({ row: startRow, col: endCol }); // Top-right\n positionsToCheck.push({ row: endRow, col: startCol }); // Bottom-left\n positionsToCheck.push({ row: endRow, col: endCol }); // Bottom-right\n }\n\n // For each position, find candidates\n for (const pos of positionsToCheck) {\n const candidates = findCandidatesForCell.call(\n manager,\n {\n rowIndex: pos.row,\n colIndex: pos.col,\n sheetName: emptyRange.sheetName,\n workbookName: emptyRange.workbookName,\n },\n sheet,\n lookupOrder\n );\n\n for (const cand of candidates) {\n candidateMap.set(getCellReference(cand), cand);\n }\n }\n\n // Return unique candidates, sorted\n return sortCandidates(Array.from(candidateMap.values()), lookupOrder);\n}\n\n/**\n * Find frontier candidates for a single empty cell\n * Returns candidates that could spill into this cell:\n * - If there's a direct left or above candidate, return those (max 2)\n * - Otherwise, return ALL step-pattern diagonal candidates\n * Candidates are sorted deterministically based on lookup order\n */\nfunction findCandidatesForCell(\n this: WorkbookManager,\n cellAddr: CellAddress,\n sheet: Sheet,\n lookupOrder: LookupOrder\n): CellAddress[] {\n // Find nearest-left anchor (same row)\n const leftCandidate = findNearestLeftAnchor.call(this, cellAddr, sheet);\n\n // Find nearest-above anchor (same column)\n const aboveCandidate = findNearestAboveAnchor.call(this, cellAddr, sheet);\n\n // If we have direct candidates (left and/or above), use those\n if (leftCandidate || aboveCandidate) {\n const candidates: CellAddress[] = [];\n if (leftCandidate) candidates.push(leftCandidate);\n if (aboveCandidate) candidates.push(aboveCandidate);\n\n // Sort candidates deterministically based on lookup order\n return sortCandidates(candidates, lookupOrder);\n }\n\n // No direct candidates - find ALL step-pattern diagonal candidates\n const diagonalCandidates = findAllDiagonalStepCandidates.call(\n this,\n cellAddr,\n sheet\n );\n\n // Sort diagonal candidates\n return sortCandidates(diagonalCandidates, lookupOrder);\n}\n\n/**\n * Sort candidates deterministically based on lookup order\n * - Row-major: sort by col first, then row (left-to-right takes priority)\n * - Col-major: sort by row first, then col (top-to-bottom takes priority)\n */\nfunction sortCandidates(\n candidates: CellAddress[],\n lookupOrder: LookupOrder\n): CellAddress[] {\n return candidates.sort((a, b) => {\n if (lookupOrder === \"row-major\") {\n // Row-major: col first, then row\n if (a.colIndex !== b.colIndex) return a.colIndex - b.colIndex;\n return a.rowIndex - b.rowIndex;\n } else {\n // Col-major: row first, then col\n if (a.rowIndex !== b.rowIndex) return a.rowIndex - b.rowIndex;\n return a.colIndex - b.colIndex;\n }\n });\n}\n\n/**\n * Check if two cell addresses refer to the same cell\n */\nfunction isSameCell(a: CellAddress, b: CellAddress): boolean {\n return (\n a.rowIndex === b.rowIndex &&\n a.colIndex === b.colIndex &&\n a.sheetName === b.sheetName &&\n a.workbookName === b.workbookName\n );\n}\n\n/**\n * Find the nearest anchor (formula cell) to the left of the target cell\n * within the same row\n * Only finds cells with formulas (starting with \"=\")\n * Searches both inside and outside the lookup range boundaries\n * OPTIMIZED: Uses indexes to avoid O(n) scan\n */\nfunction findNearestLeftAnchor(\n this: WorkbookManager,\n targetCell: CellAddress,\n sheet: Sheet\n): CellAddress | null {\n const row = targetCell.rowIndex;\n const targetCol = targetCell.colIndex;\n\n // Use indexes to get cells in this row (O(1) lookup + O(cells_in_row) scan)\n const indexes = this.getSheetIndexes({\n workbookName: targetCell.workbookName,\n sheetName: targetCell.sheetName,\n });\n\n const rowGroup = indexes.rowGroups.get(row);\n if (!rowGroup) {\n return null; // No cells in this row\n }\n\n // Search backwards through the sorted array to find nearest left formula\n // rowGroup is sorted by column index\n for (let i = rowGroup.length - 1; i >= 0; i--) {\n const entry = rowGroup[i];\n if (!entry || entry.number >= targetCol) {\n continue; // Skip cells at or right of target\n }\n\n const content = sheet.content.get(entry.key);\n // Only consider formula cells (starting with \"=\")\n if (typeof content === \"string\" && content.startsWith(\"=\")) {\n return {\n rowIndex: row,\n colIndex: entry.number,\n sheetName: targetCell.sheetName,\n workbookName: targetCell.workbookName,\n };\n }\n }\n\n return null;\n}\n\n/**\n * Find the nearest anchor (formula cell) above the target cell\n * within the same column\n * Only finds cells with formulas (starting with \"=\")\n * Searches outside the lookup range boundaries\n * OPTIMIZED: Uses indexes to avoid O(n) scan\n */\nfunction findNearestAboveAnchor(\n this: WorkbookManager,\n targetCell: CellAddress,\n sheet: Sheet\n): CellAddress | null {\n const col = targetCell.colIndex;\n const targetRow = targetCell.rowIndex;\n\n // Use indexes to get cells in this column (O(1) lookup + O(cells_in_col) scan)\n const indexes = this.getSheetIndexes({\n workbookName: targetCell.workbookName,\n sheetName: targetCell.sheetName,\n });\n\n const colGroup = indexes.colGroups.get(col);\n if (!colGroup) {\n return null; // No cells in this column\n }\n\n // Search backwards through the sorted array to find nearest above formula\n // colGroup is sorted by row index\n for (let i = colGroup.length - 1; i >= 0; i--) {\n const entry = colGroup[i];\n if (!entry || entry.number >= targetRow) {\n continue; // Skip cells at or below target\n }\n\n const content = sheet.content.get(entry.key);\n // Only consider formula cells (starting with \"=\")\n if (typeof content === \"string\" && content.startsWith(\"=\")) {\n return {\n rowIndex: entry.number,\n colIndex: col,\n sheetName: targetCell.sheetName,\n workbookName: targetCell.workbookName,\n };\n }\n }\n\n return null;\n}\n\n/**\n * Find ALL step-pattern candidates in the top-left diagonal quadrant\n * These are formulas that could spill diagonally to reach the target cell\n * and don't block each other (forming a \"staircase\" pattern)\n * Searches outside the lookup range boundaries (like direct left/above search)\n * OPTIMIZED: Uses indexes to avoid O(n²) scan\n *\n * For example, for target D7, candidates might be A6, B5, C4\n * - A6 at (5,0) could spill right and down to reach D7\n * - B5 at (4,1) could spill right and down to reach D7\n * - C4 at (3,2) could spill right and down to reach D7\n * - None blocks the others because each is further from origin (A1)\n */\nfunction findAllDiagonalStepCandidates(\n this: WorkbookManager,\n targetCell: CellAddress,\n sheet: Sheet\n): CellAddress[] {\n const targetRow = targetCell.rowIndex;\n const targetCol = targetCell.colIndex;\n\n // Use indexes to efficiently find all formula cells in the top-left quadrant\n const allCandidates: CellAddress[] = [];\n\n const indexes = this.getSheetIndexes({\n workbookName: targetCell.workbookName,\n sheetName: targetCell.sheetName,\n });\n\n // Iterate only through columns that exist in the top-left quadrant\n for (let col = 0; col < targetCol; col++) {\n const colGroup = indexes.colGroups.get(col);\n if (!colGroup) {\n continue; // No cells in this column\n }\n\n // For each cell in this column, check if it's above target row and is a formula\n for (const entry of colGroup) {\n if (entry.number >= targetRow) {\n break; // Cells are sorted by row, so we can stop early\n }\n\n const content = sheet.content.get(entry.key);\n // Only consider formula cells (starting with \"=\")\n if (typeof content === \"string\" && content.startsWith(\"=\")) {\n allCandidates.push({\n rowIndex: entry.number,\n colIndex: col,\n sheetName: targetCell.sheetName,\n workbookName: targetCell.workbookName,\n });\n }\n }\n }\n\n // Filter out candidates that are blocked by other candidates\n // OPTIMIZED: O(n log n) instead of O(n²) using sweep-line algorithm\n //\n // A candidate at (r1, c1) is blocked by another at (r2, c2) if:\n // - r2 >= r1 AND c2 >= c1 (other is at same position or down-right)\n // - This is a 2D dominance problem: find Pareto frontier (undominated points)\n //\n // Algorithm:\n // 1. Sort candidates by row DESCENDING, then col DESCENDING\n // 2. Sweep through, tracking MAXIMUM column seen so far\n // 3. A candidate is unblocked if its col > max col seen\n // 4. For same-row candidates, only the first (largest col) can be unblocked\n\n // Sort by row descending, then col descending\n allCandidates.sort((a, b) => {\n if (a.rowIndex !== b.rowIndex) return b.rowIndex - a.rowIndex; // descending\n return b.colIndex - a.colIndex; // descending\n });\n\n const unblockedCandidates: CellAddress[] = [];\n let maxColSeen = -1;\n let prevRow = -1;\n\n for (const candidate of allCandidates) {\n // First candidate in each row: check if undominated by candidates in rows above\n // Subsequent candidates in same row: dominated by first in row (larger col)\n if (candidate.rowIndex !== prevRow) {\n // New row - check if this candidate's col > max col from rows above\n if (candidate.colIndex > maxColSeen) {\n unblockedCandidates.push(candidate);\n maxColSeen = candidate.colIndex;\n }\n prevRow = candidate.rowIndex;\n }\n // Else: same row as previous, dominated by previous (which had larger col)\n }\n\n return unblockedCandidates;\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "25EBF4FC98D8F2D464756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "EEF96CEA788447D264756E2164756E21",
9
9
  "names": []
10
10
  }