@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,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/core/commands/content-commands.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Content Commands - Commands that modify cell/sheet content\n *\n * These commands all require re-evaluation after execution.\n */\n\nimport type { WorkbookManager } from \"../managers/workbook-manager.mjs\";\nimport type { CopyManager } from \"../managers/copy-manager.mjs\";\nimport type {\n CellAddress,\n CopyCellsOptions,\n RangeAddress,\n SerializedCellValue,\n} from \"../types.mjs\";\nimport type { EngineCommand, EngineAction } from \"./types.mjs\";\nimport { ActionTypes } from \"./types.mjs\";\nimport { getCellReference, parseCellReference } from \"../utils.mjs\";\n\n/**\n * Command to set a single cell's content.\n */\nexport class SetCellContentCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousValue: SerializedCellValue | undefined;\n private hadPreviousValue = false;\n\n constructor(\n private workbookManager: WorkbookManager,\n private address: CellAddress,\n private newContent: SerializedCellValue\n ) {}\n\n execute(): void {\n // Capture previous value\n const sheet = this.workbookManager.getSheet({\n workbookName: this.address.workbookName,\n sheetName: this.address.sheetName,\n });\n if (sheet) {\n const key = getCellReference(this.address);\n this.hadPreviousValue = sheet.content.has(key);\n this.previousValue = sheet.content.get(key);\n }\n\n this.workbookManager.setCellContent(this.address, this.newContent);\n }\n\n undo(): void {\n if (this.hadPreviousValue) {\n this.workbookManager.setCellContent(this.address, this.previousValue);\n } else {\n this.workbookManager.setCellContent(this.address, undefined);\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.SET_CELL_CONTENT,\n payload: {\n address: this.address,\n content: this.newContent,\n },\n };\n }\n}\n\n/**\n * Command to set an entire sheet's content.\n */\nexport class SetSheetContentCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousContent: Map<string, SerializedCellValue> | undefined;\n\n constructor(\n private workbookManager: WorkbookManager,\n private opts: { workbookName: string; sheetName: string },\n private newContent: Map<string, SerializedCellValue>\n ) {}\n\n execute(): void {\n // Capture previous content\n const sheet = this.workbookManager.getSheet(this.opts);\n if (sheet) {\n this.previousContent = new Map(sheet.content);\n }\n\n this.workbookManager.setSheetContent(this.opts, this.newContent);\n }\n\n undo(): void {\n if (this.previousContent) {\n this.workbookManager.setSheetContent(this.opts, this.previousContent);\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.SET_SHEET_CONTENT,\n payload: {\n opts: this.opts,\n content: Array.from(this.newContent.entries()),\n },\n };\n }\n}\n\n/**\n * Command to clear a range of cells.\n */\nexport class ClearRangeCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private clearedCells: Map<string, SerializedCellValue> = new Map();\n\n constructor(\n private workbookManager: WorkbookManager,\n private address: RangeAddress\n ) {}\n\n execute(): void {\n // Capture cells before clearing using the optimized iterator\n // This handles infinite ranges by only iterating over cells that actually exist\n try {\n for (const cellAddress of this.workbookManager.iterateCellsInRange(this.address)) {\n const key = getCellReference(cellAddress);\n const value = this.workbookManager.getCellContent(cellAddress);\n if (value !== undefined) {\n this.clearedCells.set(key, value);\n }\n }\n } catch {\n // Sheet doesn't exist, nothing to capture\n }\n\n this.workbookManager.clearSpreadsheetRange(this.address);\n }\n\n undo(): void {\n // Restore cleared cells\n for (const [key, value] of this.clearedCells) {\n const { colIndex, rowIndex } = parseCellReference(key);\n this.workbookManager.setCellContent(\n {\n workbookName: this.address.workbookName,\n sheetName: this.address.sheetName,\n colIndex,\n rowIndex,\n },\n value\n );\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.CLEAR_RANGE,\n payload: {\n address: this.address,\n },\n };\n }\n}\n\n/**\n * Snapshot of a cell for undo purposes.\n */\ninterface CellSnapshot {\n address: CellAddress;\n content: SerializedCellValue | undefined;\n metadata: unknown | undefined;\n}\n\n/**\n * Command to paste cells.\n */\nexport class PasteCellsCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private targetSnapshots: CellSnapshot[] = [];\n private sourceSnapshots: CellSnapshot[] = [];\n\n constructor(\n private workbookManager: WorkbookManager,\n private copyManager: CopyManager,\n private source: CellAddress[],\n private target: CellAddress,\n private options: CopyCellsOptions\n ) {}\n\n execute(): void {\n // Calculate target cells and capture their state\n if (this.source.length > 0) {\n const firstSource = this.source[0]!;\n const colOffset = this.target.colIndex - firstSource.colIndex;\n const rowOffset = this.target.rowIndex - firstSource.rowIndex;\n\n // Capture target cells before paste\n for (const sourceCell of this.source) {\n const targetCell: CellAddress = {\n workbookName: this.target.workbookName,\n sheetName: this.target.sheetName,\n colIndex: sourceCell.colIndex + colOffset,\n rowIndex: sourceCell.rowIndex + rowOffset,\n };\n\n const sheet = this.workbookManager.getSheet({\n workbookName: targetCell.workbookName,\n sheetName: targetCell.sheetName,\n });\n\n if (sheet) {\n const key = getCellReference(targetCell);\n this.targetSnapshots.push({\n address: targetCell,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n\n // If cut operation, capture source cells too\n if (this.options.cut) {\n for (const sourceCell of this.source) {\n const sheet = this.workbookManager.getSheet({\n workbookName: sourceCell.workbookName,\n sheetName: sourceCell.sheetName,\n });\n\n if (sheet) {\n const key = getCellReference(sourceCell);\n this.sourceSnapshots.push({\n address: sourceCell,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n }\n }\n\n this.copyManager.pasteCells(this.source, this.target, this.options);\n }\n\n undo(): void {\n // Restore target cells\n for (const snapshot of this.targetSnapshots) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n\n // Restore source cells if it was a cut operation\n if (this.options.cut) {\n for (const snapshot of this.sourceSnapshots) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.PASTE_CELLS,\n payload: {\n source: this.source,\n target: this.target,\n options: this.options,\n },\n };\n }\n}\n\n/**\n * Command to fill areas with a seed range.\n */\nexport class FillAreasCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private targetSnapshots: Map<string, CellSnapshot> = new Map();\n\n constructor(\n private workbookManager: WorkbookManager,\n private copyManager: CopyManager,\n private seedRange: RangeAddress,\n private targetRanges: RangeAddress[],\n private options: CopyCellsOptions\n ) {}\n\n execute(): void {\n // Capture all target cells before filling\n for (const targetRange of this.targetRanges) {\n const sheet = this.workbookManager.getSheet({\n workbookName: targetRange.workbookName,\n sheetName: targetRange.sheetName,\n });\n\n if (sheet) {\n const { start, end } = targetRange.range;\n const endCol = end.col.type === \"number\" ? end.col.value : start.col + 100;\n const endRow = end.row.type === \"number\" ? end.row.value : start.row + 100;\n\n for (let col = start.col; col <= endCol; col++) {\n for (let row = start.row; row <= endRow; row++) {\n const address: CellAddress = {\n workbookName: targetRange.workbookName,\n sheetName: targetRange.sheetName,\n colIndex: col,\n rowIndex: row,\n };\n const key = getCellReference(address);\n const fullKey = `${targetRange.workbookName}:${targetRange.sheetName}:${key}`;\n\n if (!this.targetSnapshots.has(fullKey)) {\n this.targetSnapshots.set(fullKey, {\n address,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n }\n }\n }\n\n this.copyManager.fillAreas(this.seedRange, this.targetRanges, this.options);\n }\n\n undo(): void {\n // Restore all target cells\n for (const snapshot of this.targetSnapshots.values()) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.FILL_AREAS,\n payload: {\n seedRange: this.seedRange,\n targetRanges: this.targetRanges,\n options: this.options,\n },\n };\n }\n}\n\n/**\n * Command to move a single cell.\n */\nexport class MoveCellCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private sourceSnapshot: CellSnapshot | undefined;\n private targetSnapshot: CellSnapshot | undefined;\n\n constructor(\n private workbookManager: WorkbookManager,\n private copyManager: CopyManager,\n private source: CellAddress,\n private target: CellAddress\n ) {}\n\n execute(): void {\n // Capture source cell\n const sourceSheet = this.workbookManager.getSheet({\n workbookName: this.source.workbookName,\n sheetName: this.source.sheetName,\n });\n\n if (sourceSheet) {\n const key = getCellReference(this.source);\n this.sourceSnapshot = {\n address: this.source,\n content: sourceSheet.content.get(key),\n metadata: sourceSheet.metadata.get(key),\n };\n }\n\n // Capture target cell\n const targetSheet = this.workbookManager.getSheet({\n workbookName: this.target.workbookName,\n sheetName: this.target.sheetName,\n });\n\n if (targetSheet) {\n const key = getCellReference(this.target);\n this.targetSnapshot = {\n address: this.target,\n content: targetSheet.content.get(key),\n metadata: targetSheet.metadata.get(key),\n };\n }\n\n // Execute the move via paste with cut option\n this.copyManager.pasteCells([this.source], this.target, {\n cut: true,\n type: \"formula\",\n include: \"all\",\n });\n }\n\n undo(): void {\n // Restore source cell\n if (this.sourceSnapshot) {\n this.workbookManager.setCellContent(\n this.sourceSnapshot.address,\n this.sourceSnapshot.content\n );\n if (this.sourceSnapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(\n this.sourceSnapshot.address,\n this.sourceSnapshot.metadata\n );\n }\n }\n\n // Restore target cell\n if (this.targetSnapshot) {\n this.workbookManager.setCellContent(\n this.targetSnapshot.address,\n this.targetSnapshot.content\n );\n if (this.targetSnapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(\n this.targetSnapshot.address,\n this.targetSnapshot.metadata\n );\n }\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.MOVE_CELL,\n payload: {\n source: this.source,\n target: this.target,\n },\n };\n }\n}\n\n/**\n * Command to move a range of cells.\n */\nexport class MoveRangeCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private sourceSnapshots: CellSnapshot[] = [];\n private targetSnapshots: CellSnapshot[] = [];\n\n constructor(\n private workbookManager: WorkbookManager,\n private copyManager: CopyManager,\n private sourceRange: RangeAddress,\n private target: CellAddress\n ) {}\n\n execute(): void {\n // Expand source range to cells\n const sourceCells = this.copyManager.expandRangeToCells(this.sourceRange);\n\n // Capture source cells\n for (const cell of sourceCells) {\n const sheet = this.workbookManager.getSheet({\n workbookName: cell.workbookName,\n sheetName: cell.sheetName,\n });\n\n if (sheet) {\n const key = getCellReference(cell);\n this.sourceSnapshots.push({\n address: cell,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n\n // Calculate and capture target cells\n if (sourceCells.length > 0) {\n const firstSource = sourceCells[0]!;\n const colOffset = this.target.colIndex - firstSource.colIndex;\n const rowOffset = this.target.rowIndex - firstSource.rowIndex;\n\n for (const sourceCell of sourceCells) {\n const targetCell: CellAddress = {\n workbookName: this.target.workbookName,\n sheetName: this.target.sheetName,\n colIndex: sourceCell.colIndex + colOffset,\n rowIndex: sourceCell.rowIndex + rowOffset,\n };\n\n const sheet = this.workbookManager.getSheet({\n workbookName: targetCell.workbookName,\n sheetName: targetCell.sheetName,\n });\n\n if (sheet) {\n const key = getCellReference(targetCell);\n this.targetSnapshots.push({\n address: targetCell,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n }\n\n // Execute the move\n this.copyManager.pasteCells(sourceCells, this.target, {\n cut: true,\n type: \"formula\",\n include: \"all\",\n });\n }\n\n undo(): void {\n // Restore source cells\n for (const snapshot of this.sourceSnapshots) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n\n // Restore target cells\n for (const snapshot of this.targetSnapshots) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.MOVE_RANGE,\n payload: {\n sourceRange: this.sourceRange,\n target: this.target,\n },\n };\n }\n}\n\n/**\n * Command to auto-fill ranges based on a seed pattern.\n * Captures the entire affected area for undo.\n */\nexport class AutoFillCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousContent: Map<string, SerializedCellValue> = new Map();\n private previousMetadata: Map<string, unknown> = new Map();\n\n constructor(\n private workbookManager: WorkbookManager,\n private styleManager: import(\"../managers/style-manager.mjs\").StyleManager,\n private autoFillManager: import(\"../autofill-utils.mjs\").AutoFill,\n private opts: { sheetName: string; workbookName: string },\n private seedRange: import(\"../types.mjs\").SpreadsheetRange,\n private fillRanges: import(\"../types.mjs\").SpreadsheetRange[],\n private direction: import(\"@ricsam/selection-manager\").FillDirection\n ) {}\n\n execute(): void {\n // Capture current content and metadata in fill ranges before modification\n for (const fillRange of this.fillRanges) {\n if (fillRange.end.col.type === \"infinity\" || fillRange.end.row.type === \"infinity\") {\n continue; // Skip infinite ranges\n }\n \n const startCol = fillRange.start.col;\n const startRow = fillRange.start.row;\n const endCol = fillRange.end.col.value;\n const endRow = fillRange.end.row.value;\n\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n const key = getCellReference({ colIndex: col, rowIndex: row });\n const address = {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n colIndex: col,\n rowIndex: row,\n };\n \n const content = this.workbookManager.getCellContent(address);\n if (content !== undefined) {\n this.previousContent.set(key, content);\n }\n \n const metadata = this.workbookManager.getCellMetadata(address);\n if (metadata !== undefined) {\n this.previousMetadata.set(key, metadata);\n }\n }\n }\n }\n\n // Execute the auto-fill operation\n this.autoFillManager.fill(this.opts, this.seedRange, this.fillRanges, this.direction);\n }\n\n undo(): void {\n // Get current sheet content\n const currentContent = this.workbookManager.getSheetSerialized(this.opts);\n const newContent = new Map(currentContent);\n\n // Restore all fill range cells to their previous state\n for (const fillRange of this.fillRanges) {\n if (fillRange.end.col.type === \"infinity\" || fillRange.end.row.type === \"infinity\") {\n continue;\n }\n \n const startCol = fillRange.start.col;\n const startRow = fillRange.start.row;\n const endCol = fillRange.end.col.value;\n const endRow = fillRange.end.row.value;\n\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n const key = getCellReference({ colIndex: col, rowIndex: row });\n const address = {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n colIndex: col,\n rowIndex: row,\n };\n \n // Restore content\n if (this.previousContent.has(key)) {\n newContent.set(key, this.previousContent.get(key)!);\n } else {\n newContent.delete(key);\n }\n \n // Restore metadata\n if (this.previousMetadata.has(key)) {\n this.workbookManager.setCellMetadata(address, this.previousMetadata.get(key));\n } else {\n this.workbookManager.setCellMetadata(address, undefined);\n }\n }\n }\n }\n\n // Apply restored content\n this.workbookManager.setSheetContent(this.opts, newContent);\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.AUTO_FILL,\n payload: {\n opts: this.opts,\n seedRange: this.seedRange,\n fillRanges: this.fillRanges,\n direction: this.direction,\n },\n };\n }\n}\n\n"
5
+ "/**\n * Content Commands - Commands that modify cell/sheet content\n *\n * These commands all require re-evaluation after execution.\n */\n\nimport type { WorkbookManager } from \"../managers/workbook-manager.mjs\";\nimport type { CopyManager } from \"../managers/copy-manager.mjs\";\nimport type {\n CellAddress,\n CopyCellsOptions,\n RangeAddress,\n SerializedCellValue,\n} from \"../types.mjs\";\nimport type {\n EngineCommand,\n EngineAction,\n MutationInvalidation,\n} from \"./types.mjs\";\nimport {\n ActionTypes,\n emptyMutationInvalidation,\n getSerializedCellValueKind,\n} from \"./types.mjs\";\nimport { getCellReference, parseCellReference } from \"../utils.mjs\";\n\nfunction buildTouchedCells(\n cells: Array<{\n address: CellAddress;\n before: SerializedCellValue | undefined;\n after: SerializedCellValue | undefined;\n }>\n): MutationInvalidation[\"touchedCells\"] {\n const deduped = new Map<\n string,\n {\n address: CellAddress;\n beforeKind: ReturnType<typeof getSerializedCellValueKind>;\n afterKind: ReturnType<typeof getSerializedCellValueKind>;\n }\n >();\n\n for (const cell of cells) {\n deduped.set(`${cell.address.workbookName}:${cell.address.sheetName}:${getCellReference(cell.address)}`, {\n address: cell.address,\n beforeKind: getSerializedCellValueKind(cell.before),\n afterKind: getSerializedCellValueKind(cell.after),\n });\n }\n\n return Array.from(deduped.values());\n}\n\nfunction getAddressKey(address: CellAddress): string {\n return `${address.workbookName}:${address.sheetName}:${getCellReference(address)}`;\n}\n\nfunction captureCellContents(\n workbookManager: WorkbookManager,\n addresses: CellAddress[]\n): Map<string, SerializedCellValue | undefined> {\n const contents = new Map<string, SerializedCellValue | undefined>();\n for (const address of addresses) {\n contents.set(getAddressKey(address), workbookManager.getCellContent(address));\n }\n return contents;\n}\n\n/**\n * Command to set a single cell's content.\n */\nexport class SetCellContentCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousValue: SerializedCellValue | undefined;\n private hadPreviousValue = false;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private workbookManager: WorkbookManager,\n private address: CellAddress,\n private newContent: SerializedCellValue\n ) {}\n\n execute(): void {\n // Capture previous value\n const sheet = this.workbookManager.getSheet({\n workbookName: this.address.workbookName,\n sheetName: this.address.sheetName,\n });\n if (sheet) {\n const key = getCellReference(this.address);\n this.hadPreviousValue = sheet.content.has(key);\n this.previousValue = sheet.content.get(key);\n }\n\n this.workbookManager.setCellContent(this.address, this.newContent);\n this.executeFootprint = {\n touchedCells: buildTouchedCells([\n {\n address: this.address,\n before: this.previousValue,\n after: this.newContent,\n },\n ]),\n resourceKeys: [],\n };\n this.undoFootprint = {\n touchedCells: buildTouchedCells([\n {\n address: this.address,\n before: this.newContent,\n after: this.hadPreviousValue ? this.previousValue : undefined,\n },\n ]),\n resourceKeys: [],\n };\n }\n\n undo(): void {\n if (this.hadPreviousValue) {\n this.workbookManager.setCellContent(this.address, this.previousValue);\n } else {\n this.workbookManager.setCellContent(this.address, undefined);\n }\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.SET_CELL_CONTENT,\n payload: {\n address: this.address,\n content: this.newContent,\n },\n };\n }\n}\n\n/**\n * Command to set an entire sheet's content.\n */\nexport class SetSheetContentCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousContent: Map<string, SerializedCellValue> | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private workbookManager: WorkbookManager,\n private opts: { workbookName: string; sheetName: string },\n private newContent: Map<string, SerializedCellValue>\n ) {}\n\n execute(): void {\n // Capture previous content\n const sheet = this.workbookManager.getSheet(this.opts);\n if (sheet) {\n this.previousContent = new Map(sheet.content);\n }\n\n this.workbookManager.setSheetContent(this.opts, this.newContent);\n const touchedKeys = new Set<string>([\n ...Array.from(this.previousContent?.keys() ?? []),\n ...Array.from(this.newContent.keys()),\n ]);\n const touchedCells = buildTouchedCells(\n Array.from(touchedKeys, (key) => ({\n address: {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n ...parseCellReference(key),\n },\n before: this.previousContent?.get(key),\n after: this.newContent.get(key),\n }))\n );\n this.executeFootprint = {\n touchedCells,\n resourceKeys: [],\n };\n this.undoFootprint = {\n touchedCells: buildTouchedCells(\n Array.from(touchedKeys, (key) => ({\n address: {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n ...parseCellReference(key),\n },\n before: this.newContent.get(key),\n after: this.previousContent?.get(key),\n }))\n ),\n resourceKeys: [],\n };\n }\n\n undo(): void {\n if (this.previousContent) {\n this.workbookManager.setSheetContent(this.opts, this.previousContent);\n }\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.SET_SHEET_CONTENT,\n payload: {\n opts: this.opts,\n content: Array.from(this.newContent.entries()),\n },\n };\n }\n}\n\n/**\n * Command to clear a range of cells.\n */\nexport class ClearRangeCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private clearedCells: Map<string, SerializedCellValue> = new Map();\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private workbookManager: WorkbookManager,\n private address: RangeAddress\n ) {}\n\n execute(): void {\n this.clearedCells.clear();\n // Capture cells before clearing using the optimized iterator\n // This handles infinite ranges by only iterating over cells that actually exist\n try {\n for (const cellAddress of this.workbookManager.iterateCellsInRange(this.address)) {\n const key = getCellReference(cellAddress);\n const value = this.workbookManager.getCellContent(cellAddress);\n if (value !== undefined) {\n this.clearedCells.set(key, value);\n }\n }\n } catch {\n // Sheet doesn't exist, nothing to capture\n }\n\n this.workbookManager.clearSpreadsheetRange(this.address);\n this.executeFootprint = {\n touchedCells: buildTouchedCells(\n Array.from(this.clearedCells.entries(), ([key, before]) => ({\n address: {\n workbookName: this.address.workbookName,\n sheetName: this.address.sheetName,\n ...parseCellReference(key),\n },\n before,\n after: undefined,\n }))\n ),\n resourceKeys: [],\n };\n this.undoFootprint = {\n touchedCells: buildTouchedCells(\n Array.from(this.clearedCells.entries(), ([key, after]) => ({\n address: {\n workbookName: this.address.workbookName,\n sheetName: this.address.sheetName,\n ...parseCellReference(key),\n },\n before: undefined,\n after,\n }))\n ),\n resourceKeys: [],\n };\n }\n\n undo(): void {\n // Restore cleared cells\n for (const [key, value] of this.clearedCells) {\n const { colIndex, rowIndex } = parseCellReference(key);\n this.workbookManager.setCellContent(\n {\n workbookName: this.address.workbookName,\n sheetName: this.address.sheetName,\n colIndex,\n rowIndex,\n },\n value\n );\n }\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.CLEAR_RANGE,\n payload: {\n address: this.address,\n },\n };\n }\n}\n\n/**\n * Snapshot of a cell for undo purposes.\n */\ninterface CellSnapshot {\n address: CellAddress;\n content: SerializedCellValue | undefined;\n metadata: unknown | undefined;\n}\n\n/**\n * Command to paste cells.\n */\nexport class PasteCellsCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private targetSnapshots: CellSnapshot[] = [];\n private sourceSnapshots: CellSnapshot[] = [];\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n private executedContents: Map<string, SerializedCellValue | undefined> =\n new Map();\n\n constructor(\n private workbookManager: WorkbookManager,\n private copyManager: CopyManager,\n private source: CellAddress[],\n private target: CellAddress,\n private options: CopyCellsOptions\n ) {}\n\n execute(): void {\n this.targetSnapshots = [];\n this.sourceSnapshots = [];\n this.executedContents.clear();\n // Calculate target cells and capture their state\n if (this.source.length > 0) {\n const firstSource = this.source[0]!;\n const colOffset = this.target.colIndex - firstSource.colIndex;\n const rowOffset = this.target.rowIndex - firstSource.rowIndex;\n\n // Capture target cells before paste\n for (const sourceCell of this.source) {\n const targetCell: CellAddress = {\n workbookName: this.target.workbookName,\n sheetName: this.target.sheetName,\n colIndex: sourceCell.colIndex + colOffset,\n rowIndex: sourceCell.rowIndex + rowOffset,\n };\n\n const sheet = this.workbookManager.getSheet({\n workbookName: targetCell.workbookName,\n sheetName: targetCell.sheetName,\n });\n\n if (sheet) {\n const key = getCellReference(targetCell);\n this.targetSnapshots.push({\n address: targetCell,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n\n // If cut operation, capture source cells too\n if (this.options.cut) {\n for (const sourceCell of this.source) {\n const sheet = this.workbookManager.getSheet({\n workbookName: sourceCell.workbookName,\n sheetName: sourceCell.sheetName,\n });\n\n if (sheet) {\n const key = getCellReference(sourceCell);\n this.sourceSnapshots.push({\n address: sourceCell,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n }\n }\n\n this.copyManager.pasteCells(this.source, this.target, this.options);\n const touchedAddresses = [\n ...this.targetSnapshots.map((snapshot) => snapshot.address),\n ...this.sourceSnapshots.map((snapshot) => snapshot.address),\n ];\n this.executedContents = captureCellContents(this.workbookManager, touchedAddresses);\n this.executeFootprint = {\n touchedCells: buildTouchedCells(\n touchedAddresses.map((address) => {\n const beforeSnapshot =\n this.targetSnapshots.find(\n (snapshot) =>\n snapshot.address.workbookName === address.workbookName &&\n snapshot.address.sheetName === address.sheetName &&\n snapshot.address.colIndex === address.colIndex &&\n snapshot.address.rowIndex === address.rowIndex\n ) ??\n this.sourceSnapshots.find(\n (snapshot) =>\n snapshot.address.workbookName === address.workbookName &&\n snapshot.address.sheetName === address.sheetName &&\n snapshot.address.colIndex === address.colIndex &&\n snapshot.address.rowIndex === address.rowIndex\n );\n return {\n address,\n before: beforeSnapshot?.content,\n after: this.executedContents.get(getAddressKey(address)),\n };\n })\n ),\n resourceKeys: [],\n };\n }\n\n undo(): void {\n // Restore target cells\n for (const snapshot of this.targetSnapshots) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n\n // Restore source cells if it was a cut operation\n if (this.options.cut) {\n for (const snapshot of this.sourceSnapshots) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n }\n\n const touchedAddresses = [\n ...this.targetSnapshots.map((snapshot) => snapshot.address),\n ...this.sourceSnapshots.map((snapshot) => snapshot.address),\n ];\n this.undoFootprint = {\n touchedCells: buildTouchedCells(\n touchedAddresses.map((address) => {\n return {\n address,\n before: this.executedContents.get(getAddressKey(address)),\n after: this.workbookManager.getCellContent(address),\n };\n })\n ),\n resourceKeys: [],\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.PASTE_CELLS,\n payload: {\n source: this.source,\n target: this.target,\n options: this.options,\n },\n };\n }\n}\n\n/**\n * Command to fill areas with a seed range.\n */\nexport class FillAreasCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private targetSnapshots: Map<string, CellSnapshot> = new Map();\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n private executedContents: Map<string, SerializedCellValue | undefined> =\n new Map();\n\n constructor(\n private workbookManager: WorkbookManager,\n private copyManager: CopyManager,\n private seedRange: RangeAddress,\n private targetRanges: RangeAddress[],\n private options: CopyCellsOptions\n ) {}\n\n execute(): void {\n this.targetSnapshots.clear();\n this.executedContents.clear();\n // Capture all target cells before filling\n for (const targetRange of this.targetRanges) {\n const sheet = this.workbookManager.getSheet({\n workbookName: targetRange.workbookName,\n sheetName: targetRange.sheetName,\n });\n\n if (sheet) {\n const { start, end } = targetRange.range;\n const endCol = end.col.type === \"number\" ? end.col.value : start.col + 100;\n const endRow = end.row.type === \"number\" ? end.row.value : start.row + 100;\n\n for (let col = start.col; col <= endCol; col++) {\n for (let row = start.row; row <= endRow; row++) {\n const address: CellAddress = {\n workbookName: targetRange.workbookName,\n sheetName: targetRange.sheetName,\n colIndex: col,\n rowIndex: row,\n };\n const key = getCellReference(address);\n const fullKey = `${targetRange.workbookName}:${targetRange.sheetName}:${key}`;\n\n if (!this.targetSnapshots.has(fullKey)) {\n this.targetSnapshots.set(fullKey, {\n address,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n }\n }\n }\n\n this.copyManager.fillAreas(this.seedRange, this.targetRanges, this.options);\n const touchedAddresses = Array.from(this.targetSnapshots.values()).map(\n (snapshot) => snapshot.address\n );\n this.executedContents = captureCellContents(this.workbookManager, touchedAddresses);\n this.executeFootprint = {\n touchedCells: buildTouchedCells(\n touchedAddresses.map((address) => ({\n address,\n before: this.targetSnapshots.get(getAddressKey(address))?.content,\n after: this.executedContents.get(getAddressKey(address)),\n }))\n ),\n resourceKeys: [],\n };\n }\n\n undo(): void {\n // Restore all target cells\n for (const snapshot of this.targetSnapshots.values()) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n\n const touchedAddresses = Array.from(this.targetSnapshots.values()).map(\n (snapshot) => snapshot.address\n );\n this.undoFootprint = {\n touchedCells: buildTouchedCells(\n touchedAddresses.map((address) => ({\n address,\n before: this.executedContents.get(getAddressKey(address)),\n after: this.workbookManager.getCellContent(address),\n }))\n ),\n resourceKeys: [],\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.FILL_AREAS,\n payload: {\n seedRange: this.seedRange,\n targetRanges: this.targetRanges,\n options: this.options,\n },\n };\n }\n}\n\n/**\n * Command to move a single cell.\n */\nexport class MoveCellCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private sourceSnapshot: CellSnapshot | undefined;\n private targetSnapshot: CellSnapshot | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n private executedContents: Map<string, SerializedCellValue | undefined> =\n new Map();\n\n constructor(\n private workbookManager: WorkbookManager,\n private copyManager: CopyManager,\n private source: CellAddress,\n private target: CellAddress\n ) {}\n\n execute(): void {\n this.sourceSnapshot = undefined;\n this.targetSnapshot = undefined;\n this.executedContents.clear();\n // Capture source cell\n const sourceSheet = this.workbookManager.getSheet({\n workbookName: this.source.workbookName,\n sheetName: this.source.sheetName,\n });\n\n if (sourceSheet) {\n const key = getCellReference(this.source);\n this.sourceSnapshot = {\n address: this.source,\n content: sourceSheet.content.get(key),\n metadata: sourceSheet.metadata.get(key),\n };\n }\n\n // Capture target cell\n const targetSheet = this.workbookManager.getSheet({\n workbookName: this.target.workbookName,\n sheetName: this.target.sheetName,\n });\n\n if (targetSheet) {\n const key = getCellReference(this.target);\n this.targetSnapshot = {\n address: this.target,\n content: targetSheet.content.get(key),\n metadata: targetSheet.metadata.get(key),\n };\n }\n\n // Execute the move via paste with cut option\n this.copyManager.pasteCells([this.source], this.target, {\n cut: true,\n type: \"formula\",\n include: \"all\",\n });\n const touchedAddresses = [this.source, this.target];\n this.executedContents = captureCellContents(this.workbookManager, touchedAddresses);\n this.executeFootprint = {\n touchedCells: buildTouchedCells(\n touchedAddresses.map((address) => ({\n address,\n before:\n this.sourceSnapshot?.address === address\n ? this.sourceSnapshot.content\n : this.targetSnapshot?.content,\n after: this.executedContents.get(getAddressKey(address)),\n }))\n ),\n resourceKeys: [],\n };\n }\n\n undo(): void {\n // Restore source cell\n if (this.sourceSnapshot) {\n this.workbookManager.setCellContent(\n this.sourceSnapshot.address,\n this.sourceSnapshot.content\n );\n if (this.sourceSnapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(\n this.sourceSnapshot.address,\n this.sourceSnapshot.metadata\n );\n }\n }\n\n // Restore target cell\n if (this.targetSnapshot) {\n this.workbookManager.setCellContent(\n this.targetSnapshot.address,\n this.targetSnapshot.content\n );\n if (this.targetSnapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(\n this.targetSnapshot.address,\n this.targetSnapshot.metadata\n );\n }\n }\n\n const touchedAddresses = [this.source, this.target];\n this.undoFootprint = {\n touchedCells: buildTouchedCells(\n touchedAddresses.map((address) => ({\n address,\n before: this.executedContents.get(getAddressKey(address)),\n after: this.workbookManager.getCellContent(address),\n }))\n ),\n resourceKeys: [],\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.MOVE_CELL,\n payload: {\n source: this.source,\n target: this.target,\n },\n };\n }\n}\n\n/**\n * Command to move a range of cells.\n */\nexport class MoveRangeCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private sourceSnapshots: CellSnapshot[] = [];\n private targetSnapshots: CellSnapshot[] = [];\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n private executedContents: Map<string, SerializedCellValue | undefined> =\n new Map();\n\n constructor(\n private workbookManager: WorkbookManager,\n private copyManager: CopyManager,\n private sourceRange: RangeAddress,\n private target: CellAddress\n ) {}\n\n execute(): void {\n this.sourceSnapshots = [];\n this.targetSnapshots = [];\n this.executedContents.clear();\n // Expand source range to cells\n const sourceCells = this.copyManager.expandRangeToCells(this.sourceRange);\n\n // Capture source cells\n for (const cell of sourceCells) {\n const sheet = this.workbookManager.getSheet({\n workbookName: cell.workbookName,\n sheetName: cell.sheetName,\n });\n\n if (sheet) {\n const key = getCellReference(cell);\n this.sourceSnapshots.push({\n address: cell,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n\n // Calculate and capture target cells\n if (sourceCells.length > 0) {\n const firstSource = sourceCells[0]!;\n const colOffset = this.target.colIndex - firstSource.colIndex;\n const rowOffset = this.target.rowIndex - firstSource.rowIndex;\n\n for (const sourceCell of sourceCells) {\n const targetCell: CellAddress = {\n workbookName: this.target.workbookName,\n sheetName: this.target.sheetName,\n colIndex: sourceCell.colIndex + colOffset,\n rowIndex: sourceCell.rowIndex + rowOffset,\n };\n\n const sheet = this.workbookManager.getSheet({\n workbookName: targetCell.workbookName,\n sheetName: targetCell.sheetName,\n });\n\n if (sheet) {\n const key = getCellReference(targetCell);\n this.targetSnapshots.push({\n address: targetCell,\n content: sheet.content.get(key),\n metadata: sheet.metadata.get(key),\n });\n }\n }\n }\n\n // Execute the move\n this.copyManager.pasteCells(sourceCells, this.target, {\n cut: true,\n type: \"formula\",\n include: \"all\",\n });\n const touchedAddresses = [\n ...this.sourceSnapshots.map((snapshot) => snapshot.address),\n ...this.targetSnapshots.map((snapshot) => snapshot.address),\n ];\n this.executedContents = captureCellContents(this.workbookManager, touchedAddresses);\n this.executeFootprint = {\n touchedCells: buildTouchedCells(\n touchedAddresses.map((address) => {\n const snapshot =\n this.sourceSnapshots.find(\n (candidate) => getAddressKey(candidate.address) === getAddressKey(address)\n ) ??\n this.targetSnapshots.find(\n (candidate) => getAddressKey(candidate.address) === getAddressKey(address)\n );\n return {\n address,\n before: snapshot?.content,\n after: this.executedContents.get(getAddressKey(address)),\n };\n })\n ),\n resourceKeys: [],\n };\n }\n\n undo(): void {\n // Restore source cells\n for (const snapshot of this.sourceSnapshots) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n\n // Restore target cells\n for (const snapshot of this.targetSnapshots) {\n this.workbookManager.setCellContent(snapshot.address, snapshot.content);\n if (snapshot.metadata !== undefined) {\n this.workbookManager.setCellMetadata(snapshot.address, snapshot.metadata);\n }\n }\n\n const touchedAddresses = [\n ...this.sourceSnapshots.map((snapshot) => snapshot.address),\n ...this.targetSnapshots.map((snapshot) => snapshot.address),\n ];\n this.undoFootprint = {\n touchedCells: buildTouchedCells(\n touchedAddresses.map((address) => ({\n address,\n before: this.executedContents.get(getAddressKey(address)),\n after: this.workbookManager.getCellContent(address),\n }))\n ),\n resourceKeys: [],\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.MOVE_RANGE,\n payload: {\n sourceRange: this.sourceRange,\n target: this.target,\n },\n };\n }\n}\n\n/**\n * Command to auto-fill ranges based on a seed pattern.\n * Captures the entire affected area for undo.\n */\nexport class AutoFillCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousContent: Map<string, SerializedCellValue> = new Map();\n private previousMetadata: Map<string, unknown> = new Map();\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n private touchedAddresses: CellAddress[] = [];\n private executedContents: Map<string, SerializedCellValue | undefined> =\n new Map();\n\n constructor(\n private workbookManager: WorkbookManager,\n private styleManager: import(\"../managers/style-manager.mjs\").StyleManager,\n private autoFillManager: import(\"../autofill-utils.mjs\").AutoFill,\n private opts: { sheetName: string; workbookName: string },\n private seedRange: import(\"../types.mjs\").SpreadsheetRange,\n private fillRanges: import(\"../types.mjs\").SpreadsheetRange[],\n private direction: import(\"@ricsam/selection-manager\").FillDirection\n ) {}\n\n execute(): void {\n this.previousContent.clear();\n this.previousMetadata.clear();\n this.touchedAddresses = [];\n this.executedContents.clear();\n // Capture current content and metadata in fill ranges before modification\n for (const fillRange of this.fillRanges) {\n if (fillRange.end.col.type === \"infinity\" || fillRange.end.row.type === \"infinity\") {\n continue; // Skip infinite ranges\n }\n \n const startCol = fillRange.start.col;\n const startRow = fillRange.start.row;\n const endCol = fillRange.end.col.value;\n const endRow = fillRange.end.row.value;\n\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n const key = getCellReference({ colIndex: col, rowIndex: row });\n const address = {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n colIndex: col,\n rowIndex: row,\n };\n this.touchedAddresses.push(address);\n \n const content = this.workbookManager.getCellContent(address);\n if (content !== undefined) {\n this.previousContent.set(key, content);\n }\n \n const metadata = this.workbookManager.getCellMetadata(address);\n if (metadata !== undefined) {\n this.previousMetadata.set(key, metadata);\n }\n }\n }\n }\n\n // Execute the auto-fill operation\n this.autoFillManager.fill(this.opts, this.seedRange, this.fillRanges, this.direction);\n this.executedContents = captureCellContents(this.workbookManager, this.touchedAddresses);\n this.executeFootprint = {\n touchedCells: buildTouchedCells(\n this.touchedAddresses.map((address) => {\n const key = getCellReference(address);\n return {\n address,\n before: this.previousContent.get(key),\n after: this.executedContents.get(getAddressKey(address)),\n };\n })\n ),\n resourceKeys: [],\n };\n }\n\n undo(): void {\n // Get current sheet content\n const currentContent = this.workbookManager.getSheetSerialized(this.opts);\n const newContent = new Map(currentContent);\n\n // Restore all fill range cells to their previous state\n for (const fillRange of this.fillRanges) {\n if (fillRange.end.col.type === \"infinity\" || fillRange.end.row.type === \"infinity\") {\n continue;\n }\n \n const startCol = fillRange.start.col;\n const startRow = fillRange.start.row;\n const endCol = fillRange.end.col.value;\n const endRow = fillRange.end.row.value;\n\n for (let row = startRow; row <= endRow; row++) {\n for (let col = startCol; col <= endCol; col++) {\n const key = getCellReference({ colIndex: col, rowIndex: row });\n const address = {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n colIndex: col,\n rowIndex: row,\n };\n \n // Restore content\n if (this.previousContent.has(key)) {\n newContent.set(key, this.previousContent.get(key)!);\n } else {\n newContent.delete(key);\n }\n \n // Restore metadata\n if (this.previousMetadata.has(key)) {\n this.workbookManager.setCellMetadata(address, this.previousMetadata.get(key));\n } else {\n this.workbookManager.setCellMetadata(address, undefined);\n }\n }\n }\n }\n\n // Apply restored content\n this.workbookManager.setSheetContent(this.opts, newContent);\n this.undoFootprint = {\n touchedCells: buildTouchedCells(\n this.touchedAddresses.map((address) => ({\n address,\n before: this.executedContents.get(getAddressKey(address)),\n after: this.workbookManager.getCellContent(address),\n }))\n ),\n resourceKeys: [],\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.AUTO_FILL,\n payload: {\n opts: this.opts,\n seedRange: this.seedRange,\n fillRanges: this.fillRanges,\n direction: this.direction,\n },\n };\n }\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "D1EC078DEF90C73764756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "827AAF04E7067A3964756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,6 @@
1
1
  // src/core/commands/named-expression-commands.ts
2
- import { ActionTypes } from "./types.mjs";
2
+ import { ActionTypes, emptyMutationInvalidation } from "./types.mjs";
3
+ import { getNamedExpressionResourceKey } from "../resource-keys.mjs";
3
4
  function optsToScope(opts) {
4
5
  if (opts.sheetName && opts.workbookName) {
5
6
  return {
@@ -22,17 +23,35 @@ function optsToScope(opts) {
22
23
  };
23
24
  }
24
25
  }
26
+ function getNamedExpressionScopeResourceKeys(expressions, opts) {
27
+ return Array.from(new Set(Array.from(expressions, (expressionName) => getNamedExpressionResourceKey({
28
+ expressionName,
29
+ workbookName: opts.workbookName,
30
+ sheetName: opts.sheetName
31
+ }))));
32
+ }
25
33
 
26
34
  class AddNamedExpressionCommand {
27
35
  deps;
28
36
  opts;
29
37
  requiresReevaluation = true;
38
+ executeFootprint = emptyMutationInvalidation();
39
+ undoFootprint = emptyMutationInvalidation();
30
40
  constructor(deps, opts) {
31
41
  this.deps = deps;
32
42
  this.opts = opts;
33
43
  }
34
44
  execute() {
35
45
  this.deps.namedExpressionManager.addNamedExpression(this.opts);
46
+ const resourceKey = getNamedExpressionResourceKey(this.opts);
47
+ this.executeFootprint = {
48
+ touchedCells: [],
49
+ resourceKeys: [resourceKey]
50
+ };
51
+ this.undoFootprint = {
52
+ touchedCells: [],
53
+ resourceKeys: [resourceKey]
54
+ };
36
55
  }
37
56
  undo() {
38
57
  this.deps.namedExpressionManager.removeNamedExpression({
@@ -41,6 +60,9 @@ class AddNamedExpressionCommand {
41
60
  workbookName: this.opts.workbookName
42
61
  });
43
62
  }
63
+ getInvalidationFootprint(phase) {
64
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
65
+ }
44
66
  toAction() {
45
67
  return {
46
68
  type: ActionTypes.ADD_NAMED_EXPRESSION,
@@ -54,6 +76,8 @@ class RemoveNamedExpressionCommand {
54
76
  opts;
55
77
  requiresReevaluation = true;
56
78
  removedExpression;
79
+ executeFootprint = emptyMutationInvalidation();
80
+ undoFootprint = emptyMutationInvalidation();
57
81
  constructor(deps, opts) {
58
82
  this.deps = deps;
59
83
  this.opts = opts;
@@ -61,6 +85,15 @@ class RemoveNamedExpressionCommand {
61
85
  execute() {
62
86
  this.removedExpression = this.deps.namedExpressionManager.getNamedExpression(optsToScope(this.opts));
63
87
  this.deps.namedExpressionManager.removeNamedExpression(this.opts);
88
+ const resourceKey = getNamedExpressionResourceKey(this.opts);
89
+ this.executeFootprint = {
90
+ touchedCells: [],
91
+ resourceKeys: [resourceKey]
92
+ };
93
+ this.undoFootprint = {
94
+ touchedCells: [],
95
+ resourceKeys: [resourceKey]
96
+ };
64
97
  }
65
98
  undo() {
66
99
  if (!this.removedExpression)
@@ -72,6 +105,9 @@ class RemoveNamedExpressionCommand {
72
105
  workbookName: this.opts.workbookName
73
106
  });
74
107
  }
108
+ getInvalidationFootprint(phase) {
109
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
110
+ }
75
111
  toAction() {
76
112
  return {
77
113
  type: ActionTypes.REMOVE_NAMED_EXPRESSION,
@@ -85,6 +121,8 @@ class UpdateNamedExpressionCommand {
85
121
  opts;
86
122
  requiresReevaluation = true;
87
123
  previousExpression;
124
+ executeFootprint = emptyMutationInvalidation();
125
+ undoFootprint = emptyMutationInvalidation();
88
126
  constructor(deps, opts) {
89
127
  this.deps = deps;
90
128
  this.opts = opts;
@@ -93,6 +131,15 @@ class UpdateNamedExpressionCommand {
93
131
  const existing = this.deps.namedExpressionManager.getNamedExpression(optsToScope(this.opts));
94
132
  this.previousExpression = existing?.expression;
95
133
  this.deps.namedExpressionManager.updateNamedExpression(this.opts);
134
+ const resourceKey = getNamedExpressionResourceKey(this.opts);
135
+ this.executeFootprint = {
136
+ touchedCells: [],
137
+ resourceKeys: [resourceKey]
138
+ };
139
+ this.undoFootprint = {
140
+ touchedCells: [],
141
+ resourceKeys: [resourceKey]
142
+ };
96
143
  }
97
144
  undo() {
98
145
  if (this.previousExpression === undefined)
@@ -104,6 +151,9 @@ class UpdateNamedExpressionCommand {
104
151
  workbookName: this.opts.workbookName
105
152
  });
106
153
  }
154
+ getInvalidationFootprint(phase) {
155
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
156
+ }
107
157
  toAction() {
108
158
  return {
109
159
  type: ActionTypes.UPDATE_NAMED_EXPRESSION,
@@ -116,14 +166,36 @@ class RenameNamedExpressionCommand {
116
166
  deps;
117
167
  opts;
118
168
  requiresReevaluation = true;
169
+ executeFootprint = emptyMutationInvalidation();
170
+ undoFootprint = emptyMutationInvalidation();
119
171
  constructor(deps, opts) {
120
172
  this.deps = deps;
121
173
  this.opts = opts;
122
174
  }
123
175
  execute() {
124
176
  this.deps.namedExpressionManager.renameNamedExpression(this.opts);
125
- this.deps.workbookManager.updateAllFormulas((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.expressionName, this.opts.newName));
126
- this.deps.namedExpressionManager.updateAllNamedExpressions((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.expressionName, this.opts.newName));
177
+ const changedCells = this.deps.workbookManager.updateAllFormulas((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.expressionName, this.opts.newName));
178
+ const changedNamedExpressions = this.deps.namedExpressionManager.updateAllNamedExpressions((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.expressionName, this.opts.newName));
179
+ this.executeFootprint = {
180
+ touchedCells: changedCells.map((address) => ({
181
+ address,
182
+ beforeKind: "formula",
183
+ afterKind: "formula"
184
+ })),
185
+ resourceKeys: [
186
+ getNamedExpressionResourceKey({
187
+ expressionName: this.opts.expressionName,
188
+ workbookName: this.opts.workbookName,
189
+ sheetName: this.opts.sheetName
190
+ }),
191
+ getNamedExpressionResourceKey({
192
+ expressionName: this.opts.newName,
193
+ workbookName: this.opts.workbookName,
194
+ sheetName: this.opts.sheetName
195
+ }),
196
+ ...changedNamedExpressions
197
+ ]
198
+ };
127
199
  }
128
200
  undo() {
129
201
  this.deps.namedExpressionManager.renameNamedExpression({
@@ -132,8 +204,31 @@ class RenameNamedExpressionCommand {
132
204
  workbookName: this.opts.workbookName,
133
205
  newName: this.opts.expressionName
134
206
  });
135
- this.deps.workbookManager.updateAllFormulas((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.newName, this.opts.expressionName));
136
- this.deps.namedExpressionManager.updateAllNamedExpressions((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.newName, this.opts.expressionName));
207
+ const changedCells = this.deps.workbookManager.updateAllFormulas((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.newName, this.opts.expressionName));
208
+ const changedNamedExpressions = this.deps.namedExpressionManager.updateAllNamedExpressions((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.newName, this.opts.expressionName));
209
+ this.undoFootprint = {
210
+ touchedCells: changedCells.map((address) => ({
211
+ address,
212
+ beforeKind: "formula",
213
+ afterKind: "formula"
214
+ })),
215
+ resourceKeys: [
216
+ getNamedExpressionResourceKey({
217
+ expressionName: this.opts.expressionName,
218
+ workbookName: this.opts.workbookName,
219
+ sheetName: this.opts.sheetName
220
+ }),
221
+ getNamedExpressionResourceKey({
222
+ expressionName: this.opts.newName,
223
+ workbookName: this.opts.workbookName,
224
+ sheetName: this.opts.sheetName
225
+ }),
226
+ ...changedNamedExpressions
227
+ ]
228
+ };
229
+ }
230
+ getInvalidationFootprint(phase) {
231
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
137
232
  }
138
233
  toAction() {
139
234
  return {
@@ -148,6 +243,8 @@ class SetNamedExpressionsCommand {
148
243
  opts;
149
244
  requiresReevaluation = true;
150
245
  previousExpressions;
246
+ executeFootprint = emptyMutationInvalidation();
247
+ undoFootprint = emptyMutationInvalidation();
151
248
  constructor(deps, opts) {
152
249
  this.deps = deps;
153
250
  this.opts = opts;
@@ -163,6 +260,21 @@ class SetNamedExpressionsCommand {
163
260
  this.previousExpressions = new Map(sheetExpressions || []);
164
261
  }
165
262
  this.deps.namedExpressionManager.setNamedExpressions(this.opts);
263
+ const scope = this.opts.type === "global" ? {} : this.opts.type === "workbook" ? { workbookName: this.opts.workbookName } : {
264
+ workbookName: this.opts.workbookName,
265
+ sheetName: this.opts.sheetName
266
+ };
267
+ this.executeFootprint = {
268
+ touchedCells: [],
269
+ resourceKeys: [
270
+ ...getNamedExpressionScopeResourceKeys(this.previousExpressions?.keys() ?? [], scope),
271
+ ...getNamedExpressionScopeResourceKeys(this.opts.expressions.keys(), scope)
272
+ ]
273
+ };
274
+ this.undoFootprint = {
275
+ touchedCells: [],
276
+ resourceKeys: this.executeFootprint.resourceKeys
277
+ };
166
278
  }
167
279
  undo() {
168
280
  if (!this.previousExpressions)
@@ -187,6 +299,9 @@ class SetNamedExpressionsCommand {
187
299
  });
188
300
  }
189
301
  }
302
+ getInvalidationFootprint(phase) {
303
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
304
+ }
190
305
  toAction() {
191
306
  return {
192
307
  type: ActionTypes.SET_NAMED_EXPRESSIONS,
@@ -205,4 +320,4 @@ export {
205
320
  AddNamedExpressionCommand
206
321
  };
207
322
 
208
- //# debugId=7F0D0F102B4E5F7064756E2164756E21
323
+ //# debugId=F6D9AAFD4062ABD164756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/core/commands/named-expression-commands.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Named Expression Commands - Commands that modify named expressions\n *\n * These commands all require re-evaluation after execution.\n */\n\nimport type { NamedExpressionManager } from \"../managers/named-expression-manager.mjs\";\nimport type { WorkbookManager } from \"../managers/workbook-manager.mjs\";\nimport type { NamedExpression } from \"../types.mjs\";\nimport type { EngineCommand, EngineAction } from \"./types.mjs\";\nimport { ActionTypes } from \"./types.mjs\";\n\n/**\n * Dependencies needed for named expression commands.\n */\nexport interface NamedExpressionCommandDeps {\n namedExpressionManager: NamedExpressionManager;\n workbookManager: WorkbookManager;\n renameNamedExpressionInFormula: (\n formula: string,\n oldName: string,\n newName: string\n ) => string;\n}\n\n/**\n * Helper to convert opts to getNamedExpression format\n */\nfunction optsToScope(opts: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n}): {\n name: string;\n scope:\n | { type: \"global\" }\n | { type: \"workbook\"; workbookName: string }\n | { type: \"sheet\"; workbookName: string; sheetName: string };\n} {\n if (opts.sheetName && opts.workbookName) {\n return {\n name: opts.expressionName,\n scope: {\n type: \"sheet\",\n workbookName: opts.workbookName,\n sheetName: opts.sheetName,\n },\n };\n } else if (opts.workbookName) {\n return {\n name: opts.expressionName,\n scope: { type: \"workbook\", workbookName: opts.workbookName },\n };\n } else {\n return {\n name: opts.expressionName,\n scope: { type: \"global\" },\n };\n }\n}\n\n/**\n * Command to add a named expression.\n */\nexport class AddNamedExpressionCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: {\n expression: string;\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }\n ) {}\n\n execute(): void {\n this.deps.namedExpressionManager.addNamedExpression(this.opts);\n }\n\n undo(): void {\n this.deps.namedExpressionManager.removeNamedExpression({\n expressionName: this.opts.expressionName,\n sheetName: this.opts.sheetName,\n workbookName: this.opts.workbookName,\n });\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_NAMED_EXPRESSION,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to remove a named expression.\n */\nexport class RemoveNamedExpressionCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private removedExpression: NamedExpression | undefined;\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }\n ) {}\n\n execute(): void {\n // Capture expression before removal\n this.removedExpression = this.deps.namedExpressionManager.getNamedExpression(\n optsToScope(this.opts)\n );\n\n this.deps.namedExpressionManager.removeNamedExpression(this.opts);\n }\n\n undo(): void {\n if (!this.removedExpression) return;\n\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: this.removedExpression.name,\n expression: this.removedExpression.expression,\n sheetName: this.opts.sheetName,\n workbookName: this.opts.workbookName,\n });\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_NAMED_EXPRESSION,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to update a named expression.\n */\nexport class UpdateNamedExpressionCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousExpression: string | undefined;\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: {\n expression: string;\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }\n ) {}\n\n execute(): void {\n // Capture previous expression\n const existing = this.deps.namedExpressionManager.getNamedExpression(\n optsToScope(this.opts)\n );\n this.previousExpression = existing?.expression;\n\n this.deps.namedExpressionManager.updateNamedExpression(this.opts);\n }\n\n undo(): void {\n if (this.previousExpression === undefined) return;\n\n this.deps.namedExpressionManager.updateNamedExpression({\n expressionName: this.opts.expressionName,\n expression: this.previousExpression,\n sheetName: this.opts.sheetName,\n workbookName: this.opts.workbookName,\n });\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.UPDATE_NAMED_EXPRESSION,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to rename a named expression.\n */\nexport class RenameNamedExpressionCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n newName: string;\n }\n ) {}\n\n execute(): void {\n this.deps.namedExpressionManager.renameNamedExpression(this.opts);\n\n // Update formulas in sheet cells\n this.deps.workbookManager.updateAllFormulas((formula) =>\n this.deps.renameNamedExpressionInFormula(\n formula,\n this.opts.expressionName,\n this.opts.newName\n )\n );\n\n // Update named expressions\n this.deps.namedExpressionManager.updateAllNamedExpressions((formula) =>\n this.deps.renameNamedExpressionInFormula(\n formula,\n this.opts.expressionName,\n this.opts.newName\n )\n );\n }\n\n undo(): void {\n // Rename back\n this.deps.namedExpressionManager.renameNamedExpression({\n expressionName: this.opts.newName,\n sheetName: this.opts.sheetName,\n workbookName: this.opts.workbookName,\n newName: this.opts.expressionName,\n });\n\n // Update formulas back\n this.deps.workbookManager.updateAllFormulas((formula) =>\n this.deps.renameNamedExpressionInFormula(\n formula,\n this.opts.newName,\n this.opts.expressionName\n )\n );\n\n // Update named expressions back\n this.deps.namedExpressionManager.updateAllNamedExpressions((formula) =>\n this.deps.renameNamedExpressionInFormula(\n formula,\n this.opts.newName,\n this.opts.expressionName\n )\n );\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_NAMED_EXPRESSION,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Options for setNamedExpressions command.\n */\ntype SetNamedExpressionsOpts = (\n | { type: \"global\" }\n | { type: \"sheet\"; sheetName: string; workbookName: string }\n | { type: \"workbook\"; workbookName: string }\n) & {\n expressions: Map<string, NamedExpression>;\n};\n\n/**\n * Command to set named expressions (replace all at a scope).\n */\nexport class SetNamedExpressionsCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousExpressions: Map<string, NamedExpression> | undefined;\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: SetNamedExpressionsOpts\n ) {}\n\n execute(): void {\n // Capture previous expressions at this scope\n const allExpressions = this.deps.namedExpressionManager.getNamedExpressions();\n\n if (this.opts.type === \"global\") {\n this.previousExpressions = new Map(allExpressions.globalExpressions);\n } else if (this.opts.type === \"workbook\") {\n this.previousExpressions = new Map(\n allExpressions.workbookExpressions.get(this.opts.workbookName) || []\n );\n } else if (this.opts.type === \"sheet\") {\n const sheetExpressions = allExpressions.sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName);\n this.previousExpressions = new Map(sheetExpressions || []);\n }\n\n this.deps.namedExpressionManager.setNamedExpressions(this.opts);\n }\n\n undo(): void {\n if (!this.previousExpressions) return;\n\n // Restore previous expressions\n if (this.opts.type === \"global\") {\n this.deps.namedExpressionManager.setNamedExpressions({\n type: \"global\",\n expressions: this.previousExpressions,\n });\n } else if (this.opts.type === \"workbook\") {\n this.deps.namedExpressionManager.setNamedExpressions({\n type: \"workbook\",\n workbookName: this.opts.workbookName,\n expressions: this.previousExpressions,\n });\n } else if (this.opts.type === \"sheet\") {\n this.deps.namedExpressionManager.setNamedExpressions({\n type: \"sheet\",\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n expressions: this.previousExpressions,\n });\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.SET_NAMED_EXPRESSIONS,\n payload: {\n ...this.opts,\n expressions: Array.from(this.opts.expressions.entries()),\n },\n };\n }\n}\n\n"
5
+ "/**\n * Named Expression Commands - Commands that modify named expressions\n *\n * These commands all require re-evaluation after execution.\n */\n\nimport type { NamedExpressionManager } from \"../managers/named-expression-manager.mjs\";\nimport type { WorkbookManager } from \"../managers/workbook-manager.mjs\";\nimport type { NamedExpression } from \"../types.mjs\";\nimport type {\n EngineCommand,\n EngineAction,\n MutationInvalidation,\n} from \"./types.mjs\";\nimport { ActionTypes, emptyMutationInvalidation } from \"./types.mjs\";\nimport { getNamedExpressionResourceKey } from \"../resource-keys.mjs\";\n\n/**\n * Dependencies needed for named expression commands.\n */\nexport interface NamedExpressionCommandDeps {\n namedExpressionManager: NamedExpressionManager;\n workbookManager: WorkbookManager;\n renameNamedExpressionInFormula: (\n formula: string,\n oldName: string,\n newName: string\n ) => string;\n}\n\n/**\n * Helper to convert opts to getNamedExpression format\n */\nfunction optsToScope(opts: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n}): {\n name: string;\n scope:\n | { type: \"global\" }\n | { type: \"workbook\"; workbookName: string }\n | { type: \"sheet\"; workbookName: string; sheetName: string };\n} {\n if (opts.sheetName && opts.workbookName) {\n return {\n name: opts.expressionName,\n scope: {\n type: \"sheet\",\n workbookName: opts.workbookName,\n sheetName: opts.sheetName,\n },\n };\n } else if (opts.workbookName) {\n return {\n name: opts.expressionName,\n scope: { type: \"workbook\", workbookName: opts.workbookName },\n };\n } else {\n return {\n name: opts.expressionName,\n scope: { type: \"global\" },\n };\n }\n}\n\nfunction getNamedExpressionScopeResourceKeys(\n expressions: Iterable<string>,\n opts: {\n workbookName?: string;\n sheetName?: string;\n }\n): string[] {\n return Array.from(\n new Set(\n Array.from(expressions, (expressionName) =>\n getNamedExpressionResourceKey({\n expressionName,\n workbookName: opts.workbookName,\n sheetName: opts.sheetName,\n })\n )\n )\n );\n}\n\n/**\n * Command to add a named expression.\n */\nexport class AddNamedExpressionCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: {\n expression: string;\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }\n ) {}\n\n execute(): void {\n this.deps.namedExpressionManager.addNamedExpression(this.opts);\n const resourceKey = getNamedExpressionResourceKey(this.opts);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n };\n }\n\n undo(): void {\n this.deps.namedExpressionManager.removeNamedExpression({\n expressionName: this.opts.expressionName,\n sheetName: this.opts.sheetName,\n workbookName: this.opts.workbookName,\n });\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.ADD_NAMED_EXPRESSION,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to remove a named expression.\n */\nexport class RemoveNamedExpressionCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private removedExpression: NamedExpression | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }\n ) {}\n\n execute(): void {\n // Capture expression before removal\n this.removedExpression = this.deps.namedExpressionManager.getNamedExpression(\n optsToScope(this.opts)\n );\n\n this.deps.namedExpressionManager.removeNamedExpression(this.opts);\n const resourceKey = getNamedExpressionResourceKey(this.opts);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n };\n }\n\n undo(): void {\n if (!this.removedExpression) return;\n\n this.deps.namedExpressionManager.addNamedExpression({\n expressionName: this.removedExpression.name,\n expression: this.removedExpression.expression,\n sheetName: this.opts.sheetName,\n workbookName: this.opts.workbookName,\n });\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.REMOVE_NAMED_EXPRESSION,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to update a named expression.\n */\nexport class UpdateNamedExpressionCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousExpression: string | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: {\n expression: string;\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n }\n ) {}\n\n execute(): void {\n // Capture previous expression\n const existing = this.deps.namedExpressionManager.getNamedExpression(\n optsToScope(this.opts)\n );\n this.previousExpression = existing?.expression;\n\n this.deps.namedExpressionManager.updateNamedExpression(this.opts);\n const resourceKey = getNamedExpressionResourceKey(this.opts);\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: [resourceKey],\n };\n }\n\n undo(): void {\n if (this.previousExpression === undefined) return;\n\n this.deps.namedExpressionManager.updateNamedExpression({\n expressionName: this.opts.expressionName,\n expression: this.previousExpression,\n sheetName: this.opts.sheetName,\n workbookName: this.opts.workbookName,\n });\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.UPDATE_NAMED_EXPRESSION,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Command to rename a named expression.\n */\nexport class RenameNamedExpressionCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: {\n expressionName: string;\n sheetName?: string;\n workbookName?: string;\n newName: string;\n }\n ) {}\n\n execute(): void {\n this.deps.namedExpressionManager.renameNamedExpression(this.opts);\n\n // Update formulas in sheet cells\n const changedCells = this.deps.workbookManager.updateAllFormulas((formula) =>\n this.deps.renameNamedExpressionInFormula(\n formula,\n this.opts.expressionName,\n this.opts.newName\n )\n );\n\n // Update named expressions\n const changedNamedExpressions =\n this.deps.namedExpressionManager.updateAllNamedExpressions((formula) =>\n this.deps.renameNamedExpressionInFormula(\n formula,\n this.opts.expressionName,\n this.opts.newName\n )\n );\n\n this.executeFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: [\n getNamedExpressionResourceKey({\n expressionName: this.opts.expressionName,\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n }),\n getNamedExpressionResourceKey({\n expressionName: this.opts.newName,\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n }),\n ...changedNamedExpressions,\n ],\n };\n }\n\n undo(): void {\n // Rename back\n this.deps.namedExpressionManager.renameNamedExpression({\n expressionName: this.opts.newName,\n sheetName: this.opts.sheetName,\n workbookName: this.opts.workbookName,\n newName: this.opts.expressionName,\n });\n\n // Update formulas back\n const changedCells = this.deps.workbookManager.updateAllFormulas((formula) =>\n this.deps.renameNamedExpressionInFormula(\n formula,\n this.opts.newName,\n this.opts.expressionName\n )\n );\n\n // Update named expressions back\n const changedNamedExpressions =\n this.deps.namedExpressionManager.updateAllNamedExpressions((formula) =>\n this.deps.renameNamedExpressionInFormula(\n formula,\n this.opts.newName,\n this.opts.expressionName\n )\n );\n\n this.undoFootprint = {\n touchedCells: changedCells.map((address) => ({\n address,\n beforeKind: \"formula\" as const,\n afterKind: \"formula\" as const,\n })),\n resourceKeys: [\n getNamedExpressionResourceKey({\n expressionName: this.opts.expressionName,\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n }),\n getNamedExpressionResourceKey({\n expressionName: this.opts.newName,\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n }),\n ...changedNamedExpressions,\n ],\n };\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.RENAME_NAMED_EXPRESSION,\n payload: this.opts,\n };\n }\n}\n\n/**\n * Options for setNamedExpressions command.\n */\ntype SetNamedExpressionsOpts = (\n | { type: \"global\" }\n | { type: \"sheet\"; sheetName: string; workbookName: string }\n | { type: \"workbook\"; workbookName: string }\n) & {\n expressions: Map<string, NamedExpression>;\n};\n\n/**\n * Command to set named expressions (replace all at a scope).\n */\nexport class SetNamedExpressionsCommand implements EngineCommand {\n readonly requiresReevaluation = true;\n private previousExpressions: Map<string, NamedExpression> | undefined;\n private executeFootprint = emptyMutationInvalidation();\n private undoFootprint = emptyMutationInvalidation();\n\n constructor(\n private deps: NamedExpressionCommandDeps,\n private opts: SetNamedExpressionsOpts\n ) {}\n\n execute(): void {\n // Capture previous expressions at this scope\n const allExpressions = this.deps.namedExpressionManager.getNamedExpressions();\n\n if (this.opts.type === \"global\") {\n this.previousExpressions = new Map(allExpressions.globalExpressions);\n } else if (this.opts.type === \"workbook\") {\n this.previousExpressions = new Map(\n allExpressions.workbookExpressions.get(this.opts.workbookName) || []\n );\n } else if (this.opts.type === \"sheet\") {\n const sheetExpressions = allExpressions.sheetExpressions\n .get(this.opts.workbookName)\n ?.get(this.opts.sheetName);\n this.previousExpressions = new Map(sheetExpressions || []);\n }\n\n this.deps.namedExpressionManager.setNamedExpressions(this.opts);\n const scope =\n this.opts.type === \"global\"\n ? {}\n : this.opts.type === \"workbook\"\n ? { workbookName: this.opts.workbookName }\n : {\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n };\n this.executeFootprint = {\n touchedCells: [],\n resourceKeys: [\n ...getNamedExpressionScopeResourceKeys(\n this.previousExpressions?.keys() ?? [],\n scope\n ),\n ...getNamedExpressionScopeResourceKeys(this.opts.expressions.keys(), scope),\n ],\n };\n this.undoFootprint = {\n touchedCells: [],\n resourceKeys: this.executeFootprint.resourceKeys,\n };\n }\n\n undo(): void {\n if (!this.previousExpressions) return;\n\n // Restore previous expressions\n if (this.opts.type === \"global\") {\n this.deps.namedExpressionManager.setNamedExpressions({\n type: \"global\",\n expressions: this.previousExpressions,\n });\n } else if (this.opts.type === \"workbook\") {\n this.deps.namedExpressionManager.setNamedExpressions({\n type: \"workbook\",\n workbookName: this.opts.workbookName,\n expressions: this.previousExpressions,\n });\n } else if (this.opts.type === \"sheet\") {\n this.deps.namedExpressionManager.setNamedExpressions({\n type: \"sheet\",\n workbookName: this.opts.workbookName,\n sheetName: this.opts.sheetName,\n expressions: this.previousExpressions,\n });\n }\n }\n\n getInvalidationFootprint(phase: \"execute\" | \"undo\"): MutationInvalidation {\n return phase === \"execute\" ? this.executeFootprint : this.undoFootprint;\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.SET_NAMED_EXPRESSIONS,\n payload: {\n ...this.opts,\n expressions: Array.from(this.opts.expressions.entries()),\n },\n };\n }\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "7F0D0F102B4E5F7064756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "F6D9AAFD4062ABD164756E2164756E21",
9
9
  "names": []
10
10
  }