@ricsam/formula-engine 0.2.2 → 0.2.4

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 +51 -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 +27 -11
  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 +35 -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 +14 -4
  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 +1 -0
  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.cjs\";\nimport type { CopyManager } from \"../managers/copy-manager.cjs\";\nimport type {\n CellAddress,\n CopyCellsOptions,\n RangeAddress,\n SerializedCellValue,\n} from \"../types.cjs\";\nimport type { EngineCommand, EngineAction } from \"./types.cjs\";\nimport { ActionTypes } from \"./types.cjs\";\nimport { getCellReference, parseCellReference } from \"../utils.cjs\";\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.cjs\").StyleManager,\n private autoFillManager: import(\"../autofill-utils.cjs\").AutoFill,\n private opts: { sheetName: string; workbookName: string },\n private seedRange: import(\"../types.cjs\").SpreadsheetRange,\n private fillRanges: import(\"../types.cjs\").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.cjs\";\nimport type { CopyManager } from \"../managers/copy-manager.cjs\";\nimport type {\n CellAddress,\n CopyCellsOptions,\n RangeAddress,\n SerializedCellValue,\n} from \"../types.cjs\";\nimport type {\n EngineCommand,\n EngineAction,\n MutationInvalidation,\n} from \"./types.cjs\";\nimport {\n ActionTypes,\n emptyMutationInvalidation,\n getSerializedCellValueKind,\n} from \"./types.cjs\";\nimport { getCellReference, parseCellReference } from \"../utils.cjs\";\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.cjs\").StyleManager,\n private autoFillManager: import(\"../autofill-utils.cjs\").AutoFill,\n private opts: { sheetName: string; workbookName: string },\n private seedRange: import(\"../types.cjs\").SpreadsheetRange,\n private fillRanges: import(\"../types.cjs\").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": "C5074A7894EBFBCB64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "7AAB2F977AF7BA6364756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  entry = __defProp({}, "__esModule", { value: true });
11
- if (from && typeof from === "object" || typeof from === "function")
12
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
- get: () => from[key],
14
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -147,4 +157,4 @@ class SetWorkbookMetadataCommand {
147
157
  }
148
158
  }
149
159
 
150
- //# debugId=217C72C14F152C7664756E2164756E21
160
+ //# debugId=C465E3A9D09E7A5864756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "/**\n * Metadata Commands - Commands that modify cell/sheet/workbook metadata\n *\n * These commands do NOT require re-evaluation after execution.\n * They only affect metadata, not cell values or formulas.\n */\n\nimport type { WorkbookManager } from \"../managers/workbook-manager.cjs\";\nimport type { CellAddress } from \"../types.cjs\";\nimport type { EngineCommand, EngineAction } from \"./types.cjs\";\nimport { ActionTypes } from \"./types.cjs\";\nimport { getCellReference } from \"../utils.cjs\";\n\n/**\n * Command to set cell metadata.\n */\nexport class SetCellMetadataCommand<TMetadata = unknown> implements EngineCommand {\n readonly requiresReevaluation = false;\n private previousMetadata: TMetadata | undefined;\n private hadPreviousMetadata = false;\n\n constructor(\n private workbookManager: WorkbookManager,\n private address: CellAddress,\n private newMetadata: TMetadata | undefined\n ) {}\n\n execute(): void {\n // Capture previous metadata\n const sheet = this.workbookManager.getSheet({\n workbookName: this.address.workbookName,\n sheetName: this.address.sheetName,\n });\n\n if (sheet) {\n const key = getCellReference(this.address);\n this.hadPreviousMetadata = sheet.metadata.has(key);\n this.previousMetadata = sheet.metadata.get(key) as TMetadata | undefined;\n }\n\n this.workbookManager.setCellMetadata(this.address, this.newMetadata);\n }\n\n undo(): void {\n if (this.hadPreviousMetadata) {\n this.workbookManager.setCellMetadata(this.address, this.previousMetadata);\n } else {\n this.workbookManager.setCellMetadata(this.address, undefined);\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.SET_CELL_METADATA,\n payload: {\n address: this.address,\n metadata: this.newMetadata,\n },\n };\n }\n}\n\n/**\n * Command to set sheet metadata.\n */\nexport class SetSheetMetadataCommand<TMetadata = unknown> implements EngineCommand {\n readonly requiresReevaluation = false;\n private previousMetadata: TMetadata | undefined;\n\n constructor(\n private workbookManager: WorkbookManager,\n private opts: { workbookName: string; sheetName: string },\n private newMetadata: TMetadata\n ) {}\n\n execute(): void {\n // Capture previous metadata\n const sheet = this.workbookManager.getSheet(this.opts);\n if (sheet) {\n this.previousMetadata = sheet.sheetMetadata as TMetadata | undefined;\n }\n\n this.workbookManager.setSheetMetadata(this.opts, this.newMetadata);\n }\n\n undo(): void {\n if (this.previousMetadata !== undefined) {\n this.workbookManager.setSheetMetadata(this.opts, this.previousMetadata);\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.SET_SHEET_METADATA,\n payload: {\n opts: this.opts,\n metadata: this.newMetadata,\n },\n };\n }\n}\n\n/**\n * Command to set workbook metadata.\n */\nexport class SetWorkbookMetadataCommand<TMetadata = unknown> implements EngineCommand {\n readonly requiresReevaluation = false;\n private previousMetadata: TMetadata | undefined;\n\n constructor(\n private workbookManager: WorkbookManager,\n private workbookName: string,\n private newMetadata: TMetadata\n ) {}\n\n execute(): void {\n // Capture previous metadata\n const workbook = this.workbookManager.getWorkbooks().get(this.workbookName);\n if (workbook) {\n this.previousMetadata = workbook.workbookMetadata as TMetadata | undefined;\n }\n\n this.workbookManager.setWorkbookMetadata(this.workbookName, this.newMetadata);\n }\n\n undo(): void {\n if (this.previousMetadata !== undefined) {\n this.workbookManager.setWorkbookMetadata(this.workbookName, this.previousMetadata);\n }\n }\n\n toAction(): EngineAction {\n return {\n type: ActionTypes.SET_WORKBOOK_METADATA,\n payload: {\n workbookName: this.workbookName,\n metadata: this.newMetadata,\n },\n };\n }\n}\n\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "217C72C14F152C7664756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "C465E3A9D09E7A5864756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __moduleCache = /* @__PURE__ */ new WeakMap;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
6
8
  var __toCommonJS = (from) => {
7
- var entry = __moduleCache.get(from), desc;
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
8
10
  if (entry)
9
11
  return entry;
10
12
  entry = __defProp({}, "__esModule", { value: true });
11
- if (from && typeof from === "object" || typeof from === "function")
12
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
- get: () => from[key],
14
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
- }));
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
16
21
  __moduleCache.set(from, entry);
17
22
  return entry;
18
23
  };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
19
29
  var __export = (target, all) => {
20
30
  for (var name in all)
21
31
  __defProp(target, name, {
22
32
  get: all[name],
23
33
  enumerable: true,
24
34
  configurable: true,
25
- set: (newValue) => all[name] = () => newValue
35
+ set: __exportSetter.bind(all, name)
26
36
  });
27
37
  };
28
38
 
@@ -37,6 +47,7 @@ __export(exports_named_expression_commands, {
37
47
  });
38
48
  module.exports = __toCommonJS(exports_named_expression_commands);
39
49
  var import_types = require("./types.cjs");
50
+ var import_resource_keys = require("../resource-keys.cjs");
40
51
  function optsToScope(opts) {
41
52
  if (opts.sheetName && opts.workbookName) {
42
53
  return {
@@ -59,17 +70,35 @@ function optsToScope(opts) {
59
70
  };
60
71
  }
61
72
  }
73
+ function getNamedExpressionScopeResourceKeys(expressions, opts) {
74
+ return Array.from(new Set(Array.from(expressions, (expressionName) => import_resource_keys.getNamedExpressionResourceKey({
75
+ expressionName,
76
+ workbookName: opts.workbookName,
77
+ sheetName: opts.sheetName
78
+ }))));
79
+ }
62
80
 
63
81
  class AddNamedExpressionCommand {
64
82
  deps;
65
83
  opts;
66
84
  requiresReevaluation = true;
85
+ executeFootprint = import_types.emptyMutationInvalidation();
86
+ undoFootprint = import_types.emptyMutationInvalidation();
67
87
  constructor(deps, opts) {
68
88
  this.deps = deps;
69
89
  this.opts = opts;
70
90
  }
71
91
  execute() {
72
92
  this.deps.namedExpressionManager.addNamedExpression(this.opts);
93
+ const resourceKey = import_resource_keys.getNamedExpressionResourceKey(this.opts);
94
+ this.executeFootprint = {
95
+ touchedCells: [],
96
+ resourceKeys: [resourceKey]
97
+ };
98
+ this.undoFootprint = {
99
+ touchedCells: [],
100
+ resourceKeys: [resourceKey]
101
+ };
73
102
  }
74
103
  undo() {
75
104
  this.deps.namedExpressionManager.removeNamedExpression({
@@ -78,6 +107,9 @@ class AddNamedExpressionCommand {
78
107
  workbookName: this.opts.workbookName
79
108
  });
80
109
  }
110
+ getInvalidationFootprint(phase) {
111
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
112
+ }
81
113
  toAction() {
82
114
  return {
83
115
  type: import_types.ActionTypes.ADD_NAMED_EXPRESSION,
@@ -91,6 +123,8 @@ class RemoveNamedExpressionCommand {
91
123
  opts;
92
124
  requiresReevaluation = true;
93
125
  removedExpression;
126
+ executeFootprint = import_types.emptyMutationInvalidation();
127
+ undoFootprint = import_types.emptyMutationInvalidation();
94
128
  constructor(deps, opts) {
95
129
  this.deps = deps;
96
130
  this.opts = opts;
@@ -98,6 +132,15 @@ class RemoveNamedExpressionCommand {
98
132
  execute() {
99
133
  this.removedExpression = this.deps.namedExpressionManager.getNamedExpression(optsToScope(this.opts));
100
134
  this.deps.namedExpressionManager.removeNamedExpression(this.opts);
135
+ const resourceKey = import_resource_keys.getNamedExpressionResourceKey(this.opts);
136
+ this.executeFootprint = {
137
+ touchedCells: [],
138
+ resourceKeys: [resourceKey]
139
+ };
140
+ this.undoFootprint = {
141
+ touchedCells: [],
142
+ resourceKeys: [resourceKey]
143
+ };
101
144
  }
102
145
  undo() {
103
146
  if (!this.removedExpression)
@@ -109,6 +152,9 @@ class RemoveNamedExpressionCommand {
109
152
  workbookName: this.opts.workbookName
110
153
  });
111
154
  }
155
+ getInvalidationFootprint(phase) {
156
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
157
+ }
112
158
  toAction() {
113
159
  return {
114
160
  type: import_types.ActionTypes.REMOVE_NAMED_EXPRESSION,
@@ -122,6 +168,8 @@ class UpdateNamedExpressionCommand {
122
168
  opts;
123
169
  requiresReevaluation = true;
124
170
  previousExpression;
171
+ executeFootprint = import_types.emptyMutationInvalidation();
172
+ undoFootprint = import_types.emptyMutationInvalidation();
125
173
  constructor(deps, opts) {
126
174
  this.deps = deps;
127
175
  this.opts = opts;
@@ -130,6 +178,15 @@ class UpdateNamedExpressionCommand {
130
178
  const existing = this.deps.namedExpressionManager.getNamedExpression(optsToScope(this.opts));
131
179
  this.previousExpression = existing?.expression;
132
180
  this.deps.namedExpressionManager.updateNamedExpression(this.opts);
181
+ const resourceKey = import_resource_keys.getNamedExpressionResourceKey(this.opts);
182
+ this.executeFootprint = {
183
+ touchedCells: [],
184
+ resourceKeys: [resourceKey]
185
+ };
186
+ this.undoFootprint = {
187
+ touchedCells: [],
188
+ resourceKeys: [resourceKey]
189
+ };
133
190
  }
134
191
  undo() {
135
192
  if (this.previousExpression === undefined)
@@ -141,6 +198,9 @@ class UpdateNamedExpressionCommand {
141
198
  workbookName: this.opts.workbookName
142
199
  });
143
200
  }
201
+ getInvalidationFootprint(phase) {
202
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
203
+ }
144
204
  toAction() {
145
205
  return {
146
206
  type: import_types.ActionTypes.UPDATE_NAMED_EXPRESSION,
@@ -153,14 +213,36 @@ class RenameNamedExpressionCommand {
153
213
  deps;
154
214
  opts;
155
215
  requiresReevaluation = true;
216
+ executeFootprint = import_types.emptyMutationInvalidation();
217
+ undoFootprint = import_types.emptyMutationInvalidation();
156
218
  constructor(deps, opts) {
157
219
  this.deps = deps;
158
220
  this.opts = opts;
159
221
  }
160
222
  execute() {
161
223
  this.deps.namedExpressionManager.renameNamedExpression(this.opts);
162
- this.deps.workbookManager.updateAllFormulas((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.expressionName, this.opts.newName));
163
- this.deps.namedExpressionManager.updateAllNamedExpressions((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.expressionName, this.opts.newName));
224
+ const changedCells = this.deps.workbookManager.updateAllFormulas((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.expressionName, this.opts.newName));
225
+ const changedNamedExpressions = this.deps.namedExpressionManager.updateAllNamedExpressions((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.expressionName, this.opts.newName));
226
+ this.executeFootprint = {
227
+ touchedCells: changedCells.map((address) => ({
228
+ address,
229
+ beforeKind: "formula",
230
+ afterKind: "formula"
231
+ })),
232
+ resourceKeys: [
233
+ import_resource_keys.getNamedExpressionResourceKey({
234
+ expressionName: this.opts.expressionName,
235
+ workbookName: this.opts.workbookName,
236
+ sheetName: this.opts.sheetName
237
+ }),
238
+ import_resource_keys.getNamedExpressionResourceKey({
239
+ expressionName: this.opts.newName,
240
+ workbookName: this.opts.workbookName,
241
+ sheetName: this.opts.sheetName
242
+ }),
243
+ ...changedNamedExpressions
244
+ ]
245
+ };
164
246
  }
165
247
  undo() {
166
248
  this.deps.namedExpressionManager.renameNamedExpression({
@@ -169,8 +251,31 @@ class RenameNamedExpressionCommand {
169
251
  workbookName: this.opts.workbookName,
170
252
  newName: this.opts.expressionName
171
253
  });
172
- this.deps.workbookManager.updateAllFormulas((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.newName, this.opts.expressionName));
173
- this.deps.namedExpressionManager.updateAllNamedExpressions((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.newName, this.opts.expressionName));
254
+ const changedCells = this.deps.workbookManager.updateAllFormulas((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.newName, this.opts.expressionName));
255
+ const changedNamedExpressions = this.deps.namedExpressionManager.updateAllNamedExpressions((formula) => this.deps.renameNamedExpressionInFormula(formula, this.opts.newName, this.opts.expressionName));
256
+ this.undoFootprint = {
257
+ touchedCells: changedCells.map((address) => ({
258
+ address,
259
+ beforeKind: "formula",
260
+ afterKind: "formula"
261
+ })),
262
+ resourceKeys: [
263
+ import_resource_keys.getNamedExpressionResourceKey({
264
+ expressionName: this.opts.expressionName,
265
+ workbookName: this.opts.workbookName,
266
+ sheetName: this.opts.sheetName
267
+ }),
268
+ import_resource_keys.getNamedExpressionResourceKey({
269
+ expressionName: this.opts.newName,
270
+ workbookName: this.opts.workbookName,
271
+ sheetName: this.opts.sheetName
272
+ }),
273
+ ...changedNamedExpressions
274
+ ]
275
+ };
276
+ }
277
+ getInvalidationFootprint(phase) {
278
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
174
279
  }
175
280
  toAction() {
176
281
  return {
@@ -185,6 +290,8 @@ class SetNamedExpressionsCommand {
185
290
  opts;
186
291
  requiresReevaluation = true;
187
292
  previousExpressions;
293
+ executeFootprint = import_types.emptyMutationInvalidation();
294
+ undoFootprint = import_types.emptyMutationInvalidation();
188
295
  constructor(deps, opts) {
189
296
  this.deps = deps;
190
297
  this.opts = opts;
@@ -200,6 +307,21 @@ class SetNamedExpressionsCommand {
200
307
  this.previousExpressions = new Map(sheetExpressions || []);
201
308
  }
202
309
  this.deps.namedExpressionManager.setNamedExpressions(this.opts);
310
+ const scope = this.opts.type === "global" ? {} : this.opts.type === "workbook" ? { workbookName: this.opts.workbookName } : {
311
+ workbookName: this.opts.workbookName,
312
+ sheetName: this.opts.sheetName
313
+ };
314
+ this.executeFootprint = {
315
+ touchedCells: [],
316
+ resourceKeys: [
317
+ ...getNamedExpressionScopeResourceKeys(this.previousExpressions?.keys() ?? [], scope),
318
+ ...getNamedExpressionScopeResourceKeys(this.opts.expressions.keys(), scope)
319
+ ]
320
+ };
321
+ this.undoFootprint = {
322
+ touchedCells: [],
323
+ resourceKeys: this.executeFootprint.resourceKeys
324
+ };
203
325
  }
204
326
  undo() {
205
327
  if (!this.previousExpressions)
@@ -224,6 +346,9 @@ class SetNamedExpressionsCommand {
224
346
  });
225
347
  }
226
348
  }
349
+ getInvalidationFootprint(phase) {
350
+ return phase === "execute" ? this.executeFootprint : this.undoFootprint;
351
+ }
227
352
  toAction() {
228
353
  return {
229
354
  type: import_types.ActionTypes.SET_NAMED_EXPRESSIONS,
@@ -235,4 +360,4 @@ class SetNamedExpressionsCommand {
235
360
  }
236
361
  }
237
362
 
238
- //# debugId=A1A243F98A4F164A64756E2164756E21
363
+ //# debugId=8ED2CE285A90DE7764756E2164756E21