@cj-tech-master/excelts 9.2.1 → 9.3.0

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 (383) hide show
  1. package/README.md +25 -2
  2. package/README_zh.md +29 -6
  3. package/dist/browser/index.browser.d.ts +1 -1
  4. package/dist/browser/index.browser.js +4 -0
  5. package/dist/browser/index.d.ts +1 -1
  6. package/dist/browser/index.js +4 -0
  7. package/dist/browser/modules/excel/cell.d.ts +17 -3
  8. package/dist/browser/modules/excel/cell.js +170 -22
  9. package/dist/browser/modules/excel/defined-names.d.ts +96 -1
  10. package/dist/browser/modules/excel/defined-names.js +411 -21
  11. package/dist/browser/modules/excel/image.d.ts +11 -0
  12. package/dist/browser/modules/excel/image.js +24 -1
  13. package/dist/browser/modules/excel/stream/workbook-reader.browser.d.ts +9 -3
  14. package/dist/browser/modules/excel/stream/workbook-reader.browser.js +14 -0
  15. package/dist/browser/modules/excel/stream/workbook-reader.d.ts +2 -1
  16. package/dist/browser/modules/excel/stream/workbook-writer.browser.d.ts +39 -5
  17. package/dist/browser/modules/excel/stream/workbook-writer.browser.js +48 -1
  18. package/dist/browser/modules/excel/stream/workbook-writer.d.ts +3 -2
  19. package/dist/browser/modules/excel/stream/worksheet-reader.js +17 -1
  20. package/dist/browser/modules/excel/stream/worksheet-writer.d.ts +39 -6
  21. package/dist/browser/modules/excel/stream/worksheet-writer.js +45 -5
  22. package/dist/browser/modules/excel/table.js +15 -2
  23. package/dist/browser/modules/excel/types.d.ts +133 -2
  24. package/dist/browser/modules/excel/utils/col-cache.d.ts +1 -0
  25. package/dist/browser/modules/excel/utils/col-cache.js +15 -0
  26. package/dist/browser/modules/excel/utils/drawing-utils.d.ts +3 -3
  27. package/dist/browser/modules/excel/utils/drawing-utils.js +4 -0
  28. package/dist/browser/modules/excel/utils/external-link-formula.d.ts +76 -0
  29. package/dist/browser/modules/excel/utils/external-link-formula.js +208 -0
  30. package/dist/browser/modules/excel/utils/iterate-stream.d.ts +9 -3
  31. package/dist/browser/modules/excel/utils/iterate-stream.js +3 -1
  32. package/dist/browser/modules/excel/utils/ooxml-paths.d.ts +19 -0
  33. package/dist/browser/modules/excel/utils/ooxml-paths.js +37 -2
  34. package/dist/browser/modules/excel/utils/shared-strings.d.ts +8 -3
  35. package/dist/browser/modules/excel/utils/shared-strings.js +21 -2
  36. package/dist/browser/modules/excel/utils/workbook-protection.d.ts +30 -0
  37. package/dist/browser/modules/excel/utils/workbook-protection.js +30 -0
  38. package/dist/browser/modules/excel/workbook.browser.d.ts +257 -6
  39. package/dist/browser/modules/excel/workbook.browser.js +318 -34
  40. package/dist/browser/modules/excel/workbook.d.ts +1 -1
  41. package/dist/browser/modules/excel/worksheet.d.ts +3 -1
  42. package/dist/browser/modules/excel/worksheet.js +21 -2
  43. package/dist/browser/modules/excel/xlsx/rel-type.d.ts +15 -0
  44. package/dist/browser/modules/excel/xlsx/rel-type.js +16 -1
  45. package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +6 -5
  46. package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.js +21 -86
  47. package/dist/browser/modules/excel/xlsx/xform/book/external-link-xform.d.ts +84 -0
  48. package/dist/browser/modules/excel/xlsx/xform/book/external-link-xform.js +330 -0
  49. package/dist/browser/modules/excel/xlsx/xform/book/external-reference-xform.d.ts +17 -0
  50. package/dist/browser/modules/excel/xlsx/xform/book/external-reference-xform.js +24 -0
  51. package/dist/browser/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.d.ts +3 -0
  52. package/dist/browser/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.js +11 -2
  53. package/dist/browser/modules/excel/xlsx/xform/book/workbook-protection-xform.d.ts +20 -0
  54. package/dist/browser/modules/excel/xlsx/xform/book/workbook-protection-xform.js +66 -0
  55. package/dist/browser/modules/excel/xlsx/xform/book/workbook-xform.js +38 -5
  56. package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.js +19 -1
  57. package/dist/browser/modules/excel/xlsx/xform/core/metadata-xform.d.ts +56 -0
  58. package/dist/browser/modules/excel/xlsx/xform/core/metadata-xform.js +158 -0
  59. package/dist/browser/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.d.ts +26 -0
  60. package/dist/browser/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +105 -0
  61. package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +3 -0
  62. package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.js +10 -2
  63. package/dist/browser/modules/excel/xlsx/xform/sheet/cell-xform.d.ts +1 -1
  64. package/dist/browser/modules/excel/xlsx/xform/sheet/cell-xform.js +166 -8
  65. package/dist/browser/modules/excel/xlsx/xform/sheet/data-validations-xform.js +1 -1
  66. package/dist/browser/modules/excel/xlsx/xform/sheet/ignored-errors-xform.d.ts +21 -0
  67. package/dist/browser/modules/excel/xlsx/xform/sheet/ignored-errors-xform.js +80 -0
  68. package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +9 -4
  69. package/dist/browser/modules/excel/xlsx/xform/style/border-xform.js +4 -1
  70. package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +172 -13
  71. package/dist/browser/modules/excel/xlsx/xlsx.browser.js +410 -20
  72. package/dist/browser/modules/excel/xlsx/xlsx.d.ts +7 -4
  73. package/dist/browser/modules/excel/xlsx/xlsx.js +4 -5
  74. package/dist/browser/modules/formula/compile/address-utils.d.ts +62 -0
  75. package/dist/browser/modules/formula/compile/address-utils.js +83 -0
  76. package/dist/browser/modules/formula/compile/binder.d.ts +42 -0
  77. package/dist/browser/modules/formula/compile/binder.js +487 -0
  78. package/dist/browser/modules/formula/compile/bound-ast.d.ts +230 -0
  79. package/dist/browser/modules/formula/compile/bound-ast.js +80 -0
  80. package/dist/browser/modules/formula/compile/compiled-formula.d.ts +137 -0
  81. package/dist/browser/modules/formula/compile/compiled-formula.js +383 -0
  82. package/dist/browser/modules/formula/compile/dependency-analysis.d.ts +93 -0
  83. package/dist/browser/modules/formula/compile/dependency-analysis.js +432 -0
  84. package/dist/browser/modules/formula/compile/structured-ref-utils.d.ts +93 -0
  85. package/dist/browser/modules/formula/compile/structured-ref-utils.js +136 -0
  86. package/dist/browser/modules/formula/default-syntax-probe.d.ts +79 -0
  87. package/dist/browser/modules/formula/default-syntax-probe.js +83 -0
  88. package/dist/browser/modules/formula/functions/_date-context.d.ts +4 -0
  89. package/dist/browser/modules/formula/functions/_date-context.js +29 -0
  90. package/dist/browser/modules/formula/functions/_shared.d.ts +121 -0
  91. package/dist/browser/modules/formula/functions/_shared.js +381 -0
  92. package/dist/browser/modules/formula/functions/conditional.d.ts +27 -0
  93. package/dist/browser/modules/formula/functions/conditional.js +343 -0
  94. package/dist/browser/modules/formula/functions/database.d.ts +37 -0
  95. package/dist/browser/modules/formula/functions/database.js +274 -0
  96. package/dist/browser/modules/formula/functions/date.d.ts +61 -0
  97. package/dist/browser/modules/formula/functions/date.js +855 -0
  98. package/dist/browser/modules/formula/functions/dynamic-array.d.ts +23 -0
  99. package/dist/browser/modules/formula/functions/dynamic-array.js +860 -0
  100. package/dist/browser/modules/formula/functions/engineering.d.ts +57 -0
  101. package/dist/browser/modules/formula/functions/engineering.js +1128 -0
  102. package/dist/browser/modules/formula/functions/financial.d.ts +202 -0
  103. package/dist/browser/modules/formula/functions/financial.js +2296 -0
  104. package/dist/browser/modules/formula/functions/lookup.d.ts +18 -0
  105. package/dist/browser/modules/formula/functions/lookup.js +886 -0
  106. package/dist/browser/modules/formula/functions/math.d.ts +114 -0
  107. package/dist/browser/modules/formula/functions/math.js +1406 -0
  108. package/dist/browser/modules/formula/functions/statistical.d.ts +193 -0
  109. package/dist/browser/modules/formula/functions/statistical.js +3390 -0
  110. package/dist/browser/modules/formula/functions/text.d.ts +86 -0
  111. package/dist/browser/modules/formula/functions/text.js +1845 -0
  112. package/dist/browser/modules/formula/host-registry.d.ts +53 -0
  113. package/dist/browser/modules/formula/host-registry.js +69 -0
  114. package/dist/browser/modules/formula/index.d.ts +39 -0
  115. package/dist/browser/modules/formula/index.js +49 -0
  116. package/dist/browser/modules/formula/install.d.ts +62 -0
  117. package/dist/browser/modules/formula/install.js +88 -0
  118. package/dist/browser/modules/formula/integration/apply-writeback-plan.d.ts +26 -0
  119. package/dist/browser/modules/formula/integration/apply-writeback-plan.js +210 -0
  120. package/dist/browser/modules/formula/integration/calculate-formulas-impl.d.ts +30 -0
  121. package/dist/browser/modules/formula/integration/calculate-formulas-impl.js +616 -0
  122. package/dist/browser/modules/formula/integration/calculate-formulas.d.ts +67 -0
  123. package/dist/browser/modules/formula/integration/calculate-formulas.js +68 -0
  124. package/dist/browser/modules/formula/integration/formula-instance.d.ts +64 -0
  125. package/dist/browser/modules/formula/integration/formula-instance.js +79 -0
  126. package/dist/browser/modules/formula/integration/workbook-adapter.d.ts +26 -0
  127. package/dist/browser/modules/formula/integration/workbook-adapter.js +324 -0
  128. package/dist/browser/modules/formula/integration/workbook-snapshot.d.ts +267 -0
  129. package/dist/browser/modules/formula/integration/workbook-snapshot.js +77 -0
  130. package/dist/browser/modules/formula/materialize/build-writeback-plan.d.ts +34 -0
  131. package/dist/browser/modules/formula/materialize/build-writeback-plan.js +473 -0
  132. package/dist/browser/modules/formula/materialize/spill-engine.d.ts +9 -0
  133. package/dist/browser/modules/formula/materialize/spill-engine.js +38 -0
  134. package/dist/browser/modules/formula/materialize/types.d.ts +179 -0
  135. package/dist/browser/modules/formula/materialize/types.js +29 -0
  136. package/dist/browser/modules/formula/materialize/writeback-plan.d.ts +167 -0
  137. package/dist/browser/modules/formula/materialize/writeback-plan.js +27 -0
  138. package/dist/browser/modules/formula/runtime/evaluator.d.ts +151 -0
  139. package/dist/browser/modules/formula/runtime/evaluator.js +2291 -0
  140. package/dist/browser/modules/formula/runtime/function-registry.d.ts +47 -0
  141. package/dist/browser/modules/formula/runtime/function-registry.js +840 -0
  142. package/dist/browser/modules/formula/runtime/values.d.ts +211 -0
  143. package/dist/browser/modules/formula/runtime/values.js +385 -0
  144. package/dist/browser/modules/formula/syntax/ast.d.ts +129 -0
  145. package/dist/browser/modules/formula/syntax/ast.js +28 -0
  146. package/dist/browser/modules/formula/syntax/parser.d.ts +18 -0
  147. package/dist/browser/modules/formula/syntax/parser.js +439 -0
  148. package/dist/browser/modules/formula/syntax/token-types.d.ts +153 -0
  149. package/dist/browser/modules/formula/syntax/token-types.js +59 -0
  150. package/dist/browser/modules/formula/syntax/tokenizer.d.ts +10 -0
  151. package/dist/browser/modules/formula/syntax/tokenizer.js +1074 -0
  152. package/dist/browser/modules/pdf/excel-bridge.js +9 -0
  153. package/dist/cjs/index.js +4 -0
  154. package/dist/cjs/modules/excel/cell.js +170 -22
  155. package/dist/cjs/modules/excel/defined-names.js +411 -21
  156. package/dist/cjs/modules/excel/image.js +24 -1
  157. package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +14 -0
  158. package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +48 -1
  159. package/dist/cjs/modules/excel/stream/worksheet-reader.js +17 -1
  160. package/dist/cjs/modules/excel/stream/worksheet-writer.js +45 -5
  161. package/dist/cjs/modules/excel/table.js +15 -2
  162. package/dist/cjs/modules/excel/utils/col-cache.js +15 -0
  163. package/dist/cjs/modules/excel/utils/drawing-utils.js +4 -0
  164. package/dist/cjs/modules/excel/utils/external-link-formula.js +212 -0
  165. package/dist/cjs/modules/excel/utils/iterate-stream.js +3 -1
  166. package/dist/cjs/modules/excel/utils/ooxml-paths.js +42 -2
  167. package/dist/cjs/modules/excel/utils/shared-strings.js +21 -2
  168. package/dist/cjs/modules/excel/utils/workbook-protection.js +33 -0
  169. package/dist/cjs/modules/excel/workbook.browser.js +318 -34
  170. package/dist/cjs/modules/excel/worksheet.js +20 -1
  171. package/dist/cjs/modules/excel/xlsx/rel-type.js +16 -1
  172. package/dist/cjs/modules/excel/xlsx/xform/book/defined-name-xform.js +21 -86
  173. package/dist/cjs/modules/excel/xlsx/xform/book/external-link-xform.js +333 -0
  174. package/dist/cjs/modules/excel/xlsx/xform/book/external-reference-xform.js +27 -0
  175. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.js +11 -2
  176. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-protection-xform.js +69 -0
  177. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-xform.js +38 -5
  178. package/dist/cjs/modules/excel/xlsx/xform/core/content-types-xform.js +18 -0
  179. package/dist/cjs/modules/excel/xlsx/xform/core/metadata-xform.js +161 -0
  180. package/dist/cjs/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +108 -0
  181. package/dist/cjs/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +3 -0
  182. package/dist/cjs/modules/excel/xlsx/xform/drawing/drawing-xform.js +10 -2
  183. package/dist/cjs/modules/excel/xlsx/xform/sheet/cell-xform.js +166 -8
  184. package/dist/cjs/modules/excel/xlsx/xform/sheet/data-validations-xform.js +1 -1
  185. package/dist/cjs/modules/excel/xlsx/xform/sheet/ignored-errors-xform.js +83 -0
  186. package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +9 -4
  187. package/dist/cjs/modules/excel/xlsx/xform/style/border-xform.js +4 -1
  188. package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +408 -18
  189. package/dist/cjs/modules/excel/xlsx/xlsx.js +4 -5
  190. package/dist/cjs/modules/formula/compile/address-utils.js +89 -0
  191. package/dist/cjs/modules/formula/compile/binder.js +489 -0
  192. package/dist/cjs/modules/formula/compile/bound-ast.js +68 -0
  193. package/dist/cjs/modules/formula/compile/compiled-formula.js +387 -0
  194. package/dist/cjs/modules/formula/compile/dependency-analysis.js +437 -0
  195. package/dist/cjs/modules/formula/compile/structured-ref-utils.js +141 -0
  196. package/dist/cjs/modules/formula/default-syntax-probe.js +87 -0
  197. package/dist/cjs/modules/formula/functions/_date-context.js +33 -0
  198. package/dist/cjs/modules/formula/functions/_shared.js +396 -0
  199. package/dist/cjs/modules/formula/functions/conditional.js +354 -0
  200. package/dist/cjs/modules/formula/functions/database.js +288 -0
  201. package/dist/cjs/modules/formula/functions/date.js +883 -0
  202. package/dist/cjs/modules/formula/functions/dynamic-array.js +881 -0
  203. package/dist/cjs/modules/formula/functions/engineering.js +1183 -0
  204. package/dist/cjs/modules/formula/functions/financial.js +2348 -0
  205. package/dist/cjs/modules/formula/functions/lookup.js +902 -0
  206. package/dist/cjs/modules/formula/functions/math.js +1487 -0
  207. package/dist/cjs/modules/formula/functions/statistical.js +3488 -0
  208. package/dist/cjs/modules/formula/functions/text.js +1889 -0
  209. package/dist/cjs/modules/formula/host-registry.js +75 -0
  210. package/dist/cjs/modules/formula/index.js +58 -0
  211. package/dist/cjs/modules/formula/install.js +93 -0
  212. package/dist/cjs/modules/formula/integration/apply-writeback-plan.js +213 -0
  213. package/dist/cjs/modules/formula/integration/calculate-formulas-impl.js +619 -0
  214. package/dist/cjs/modules/formula/integration/calculate-formulas.js +71 -0
  215. package/dist/cjs/modules/formula/integration/formula-instance.js +82 -0
  216. package/dist/cjs/modules/formula/integration/workbook-adapter.js +327 -0
  217. package/dist/cjs/modules/formula/integration/workbook-snapshot.js +84 -0
  218. package/dist/cjs/modules/formula/materialize/build-writeback-plan.js +475 -0
  219. package/dist/cjs/modules/formula/materialize/spill-engine.js +42 -0
  220. package/dist/cjs/modules/formula/materialize/types.js +32 -0
  221. package/dist/cjs/modules/formula/materialize/writeback-plan.js +28 -0
  222. package/dist/cjs/modules/formula/runtime/evaluator.js +2298 -0
  223. package/dist/cjs/modules/formula/runtime/function-registry.js +846 -0
  224. package/dist/cjs/modules/formula/runtime/values.js +385 -0
  225. package/dist/cjs/modules/formula/syntax/ast.js +8 -0
  226. package/dist/cjs/modules/formula/syntax/parser.js +440 -0
  227. package/dist/cjs/modules/formula/syntax/token-types.js +32 -0
  228. package/dist/cjs/modules/formula/syntax/tokenizer.js +1076 -0
  229. package/dist/cjs/modules/pdf/excel-bridge.js +9 -0
  230. package/dist/esm/index.browser.js +4 -0
  231. package/dist/esm/index.js +4 -0
  232. package/dist/esm/modules/excel/cell.js +170 -22
  233. package/dist/esm/modules/excel/defined-names.js +411 -21
  234. package/dist/esm/modules/excel/image.js +24 -1
  235. package/dist/esm/modules/excel/stream/workbook-reader.browser.js +14 -0
  236. package/dist/esm/modules/excel/stream/workbook-writer.browser.js +48 -1
  237. package/dist/esm/modules/excel/stream/worksheet-reader.js +17 -1
  238. package/dist/esm/modules/excel/stream/worksheet-writer.js +45 -5
  239. package/dist/esm/modules/excel/table.js +15 -2
  240. package/dist/esm/modules/excel/utils/col-cache.js +15 -0
  241. package/dist/esm/modules/excel/utils/drawing-utils.js +4 -0
  242. package/dist/esm/modules/excel/utils/external-link-formula.js +208 -0
  243. package/dist/esm/modules/excel/utils/iterate-stream.js +3 -1
  244. package/dist/esm/modules/excel/utils/ooxml-paths.js +37 -2
  245. package/dist/esm/modules/excel/utils/shared-strings.js +21 -2
  246. package/dist/esm/modules/excel/utils/workbook-protection.js +30 -0
  247. package/dist/esm/modules/excel/workbook.browser.js +318 -34
  248. package/dist/esm/modules/excel/worksheet.js +21 -2
  249. package/dist/esm/modules/excel/xlsx/rel-type.js +16 -1
  250. package/dist/esm/modules/excel/xlsx/xform/book/defined-name-xform.js +21 -86
  251. package/dist/esm/modules/excel/xlsx/xform/book/external-link-xform.js +330 -0
  252. package/dist/esm/modules/excel/xlsx/xform/book/external-reference-xform.js +24 -0
  253. package/dist/esm/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.js +11 -2
  254. package/dist/esm/modules/excel/xlsx/xform/book/workbook-protection-xform.js +66 -0
  255. package/dist/esm/modules/excel/xlsx/xform/book/workbook-xform.js +38 -5
  256. package/dist/esm/modules/excel/xlsx/xform/core/content-types-xform.js +19 -1
  257. package/dist/esm/modules/excel/xlsx/xform/core/metadata-xform.js +158 -0
  258. package/dist/esm/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +105 -0
  259. package/dist/esm/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +3 -0
  260. package/dist/esm/modules/excel/xlsx/xform/drawing/drawing-xform.js +10 -2
  261. package/dist/esm/modules/excel/xlsx/xform/sheet/cell-xform.js +166 -8
  262. package/dist/esm/modules/excel/xlsx/xform/sheet/data-validations-xform.js +1 -1
  263. package/dist/esm/modules/excel/xlsx/xform/sheet/ignored-errors-xform.js +80 -0
  264. package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +9 -4
  265. package/dist/esm/modules/excel/xlsx/xform/style/border-xform.js +4 -1
  266. package/dist/esm/modules/excel/xlsx/xlsx.browser.js +410 -20
  267. package/dist/esm/modules/excel/xlsx/xlsx.js +4 -5
  268. package/dist/esm/modules/formula/compile/address-utils.js +83 -0
  269. package/dist/esm/modules/formula/compile/binder.js +487 -0
  270. package/dist/esm/modules/formula/compile/bound-ast.js +80 -0
  271. package/dist/esm/modules/formula/compile/compiled-formula.js +383 -0
  272. package/dist/esm/modules/formula/compile/dependency-analysis.js +432 -0
  273. package/dist/esm/modules/formula/compile/structured-ref-utils.js +136 -0
  274. package/dist/esm/modules/formula/default-syntax-probe.js +83 -0
  275. package/dist/esm/modules/formula/functions/_date-context.js +29 -0
  276. package/dist/esm/modules/formula/functions/_shared.js +381 -0
  277. package/dist/esm/modules/formula/functions/conditional.js +343 -0
  278. package/dist/esm/modules/formula/functions/database.js +274 -0
  279. package/dist/esm/modules/formula/functions/date.js +855 -0
  280. package/dist/esm/modules/formula/functions/dynamic-array.js +860 -0
  281. package/dist/esm/modules/formula/functions/engineering.js +1128 -0
  282. package/dist/esm/modules/formula/functions/financial.js +2296 -0
  283. package/dist/esm/modules/formula/functions/lookup.js +886 -0
  284. package/dist/esm/modules/formula/functions/math.js +1406 -0
  285. package/dist/esm/modules/formula/functions/statistical.js +3390 -0
  286. package/dist/esm/modules/formula/functions/text.js +1845 -0
  287. package/dist/esm/modules/formula/host-registry.js +69 -0
  288. package/dist/esm/modules/formula/index.js +49 -0
  289. package/dist/esm/modules/formula/install.js +88 -0
  290. package/dist/esm/modules/formula/integration/apply-writeback-plan.js +210 -0
  291. package/dist/esm/modules/formula/integration/calculate-formulas-impl.js +616 -0
  292. package/dist/esm/modules/formula/integration/calculate-formulas.js +68 -0
  293. package/dist/esm/modules/formula/integration/formula-instance.js +79 -0
  294. package/dist/esm/modules/formula/integration/workbook-adapter.js +324 -0
  295. package/dist/esm/modules/formula/integration/workbook-snapshot.js +77 -0
  296. package/dist/esm/modules/formula/materialize/build-writeback-plan.js +473 -0
  297. package/dist/esm/modules/formula/materialize/spill-engine.js +38 -0
  298. package/dist/esm/modules/formula/materialize/types.js +29 -0
  299. package/dist/esm/modules/formula/materialize/writeback-plan.js +27 -0
  300. package/dist/esm/modules/formula/runtime/evaluator.js +2291 -0
  301. package/dist/esm/modules/formula/runtime/function-registry.js +840 -0
  302. package/dist/esm/modules/formula/runtime/values.js +385 -0
  303. package/dist/esm/modules/formula/syntax/ast.js +28 -0
  304. package/dist/esm/modules/formula/syntax/parser.js +439 -0
  305. package/dist/esm/modules/formula/syntax/token-types.js +59 -0
  306. package/dist/esm/modules/formula/syntax/tokenizer.js +1074 -0
  307. package/dist/esm/modules/pdf/excel-bridge.js +9 -0
  308. package/dist/iife/excelts.iife.js +2302 -373
  309. package/dist/iife/excelts.iife.js.map +1 -1
  310. package/dist/iife/excelts.iife.min.js +34 -34
  311. package/dist/types/index.browser.d.ts +1 -1
  312. package/dist/types/index.d.ts +1 -1
  313. package/dist/types/modules/excel/cell.d.ts +17 -3
  314. package/dist/types/modules/excel/defined-names.d.ts +96 -1
  315. package/dist/types/modules/excel/image.d.ts +11 -0
  316. package/dist/types/modules/excel/stream/workbook-reader.browser.d.ts +9 -3
  317. package/dist/types/modules/excel/stream/workbook-reader.d.ts +2 -1
  318. package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +39 -5
  319. package/dist/types/modules/excel/stream/workbook-writer.d.ts +3 -2
  320. package/dist/types/modules/excel/stream/worksheet-writer.d.ts +39 -6
  321. package/dist/types/modules/excel/types.d.ts +133 -2
  322. package/dist/types/modules/excel/utils/col-cache.d.ts +1 -0
  323. package/dist/types/modules/excel/utils/drawing-utils.d.ts +3 -3
  324. package/dist/types/modules/excel/utils/external-link-formula.d.ts +76 -0
  325. package/dist/types/modules/excel/utils/iterate-stream.d.ts +9 -3
  326. package/dist/types/modules/excel/utils/ooxml-paths.d.ts +19 -0
  327. package/dist/types/modules/excel/utils/shared-strings.d.ts +8 -3
  328. package/dist/types/modules/excel/utils/workbook-protection.d.ts +30 -0
  329. package/dist/types/modules/excel/workbook.browser.d.ts +257 -6
  330. package/dist/types/modules/excel/workbook.d.ts +1 -1
  331. package/dist/types/modules/excel/worksheet.d.ts +3 -1
  332. package/dist/types/modules/excel/xlsx/rel-type.d.ts +15 -0
  333. package/dist/types/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +6 -5
  334. package/dist/types/modules/excel/xlsx/xform/book/external-link-xform.d.ts +84 -0
  335. package/dist/types/modules/excel/xlsx/xform/book/external-reference-xform.d.ts +17 -0
  336. package/dist/types/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.d.ts +3 -0
  337. package/dist/types/modules/excel/xlsx/xform/book/workbook-protection-xform.d.ts +20 -0
  338. package/dist/types/modules/excel/xlsx/xform/core/metadata-xform.d.ts +56 -0
  339. package/dist/types/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.d.ts +26 -0
  340. package/dist/types/modules/excel/xlsx/xform/sheet/cell-xform.d.ts +1 -1
  341. package/dist/types/modules/excel/xlsx/xform/sheet/ignored-errors-xform.d.ts +21 -0
  342. package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +172 -13
  343. package/dist/types/modules/excel/xlsx/xlsx.d.ts +7 -4
  344. package/dist/types/modules/formula/compile/address-utils.d.ts +62 -0
  345. package/dist/types/modules/formula/compile/binder.d.ts +42 -0
  346. package/dist/types/modules/formula/compile/bound-ast.d.ts +230 -0
  347. package/dist/types/modules/formula/compile/compiled-formula.d.ts +137 -0
  348. package/dist/types/modules/formula/compile/dependency-analysis.d.ts +93 -0
  349. package/dist/types/modules/formula/compile/structured-ref-utils.d.ts +93 -0
  350. package/dist/types/modules/formula/default-syntax-probe.d.ts +79 -0
  351. package/dist/types/modules/formula/functions/_date-context.d.ts +4 -0
  352. package/dist/types/modules/formula/functions/_shared.d.ts +121 -0
  353. package/dist/types/modules/formula/functions/conditional.d.ts +27 -0
  354. package/dist/types/modules/formula/functions/database.d.ts +37 -0
  355. package/dist/types/modules/formula/functions/date.d.ts +61 -0
  356. package/dist/types/modules/formula/functions/dynamic-array.d.ts +23 -0
  357. package/dist/types/modules/formula/functions/engineering.d.ts +57 -0
  358. package/dist/types/modules/formula/functions/financial.d.ts +202 -0
  359. package/dist/types/modules/formula/functions/lookup.d.ts +18 -0
  360. package/dist/types/modules/formula/functions/math.d.ts +114 -0
  361. package/dist/types/modules/formula/functions/statistical.d.ts +193 -0
  362. package/dist/types/modules/formula/functions/text.d.ts +86 -0
  363. package/dist/types/modules/formula/host-registry.d.ts +53 -0
  364. package/dist/types/modules/formula/index.d.ts +39 -0
  365. package/dist/types/modules/formula/install.d.ts +62 -0
  366. package/dist/types/modules/formula/integration/apply-writeback-plan.d.ts +26 -0
  367. package/dist/types/modules/formula/integration/calculate-formulas-impl.d.ts +30 -0
  368. package/dist/types/modules/formula/integration/calculate-formulas.d.ts +67 -0
  369. package/dist/types/modules/formula/integration/formula-instance.d.ts +64 -0
  370. package/dist/types/modules/formula/integration/workbook-adapter.d.ts +26 -0
  371. package/dist/types/modules/formula/integration/workbook-snapshot.d.ts +267 -0
  372. package/dist/types/modules/formula/materialize/build-writeback-plan.d.ts +34 -0
  373. package/dist/types/modules/formula/materialize/spill-engine.d.ts +9 -0
  374. package/dist/types/modules/formula/materialize/types.d.ts +179 -0
  375. package/dist/types/modules/formula/materialize/writeback-plan.d.ts +167 -0
  376. package/dist/types/modules/formula/runtime/evaluator.d.ts +151 -0
  377. package/dist/types/modules/formula/runtime/function-registry.d.ts +47 -0
  378. package/dist/types/modules/formula/runtime/values.d.ts +211 -0
  379. package/dist/types/modules/formula/syntax/ast.d.ts +129 -0
  380. package/dist/types/modules/formula/syntax/parser.d.ts +18 -0
  381. package/dist/types/modules/formula/syntax/token-types.d.ts +153 -0
  382. package/dist/types/modules/formula/syntax/tokenizer.d.ts +10 -0
  383. package/package.json +28 -28
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Workbook Snapshot — Immutable data layer for the formula engine.
3
+ *
4
+ * The snapshot captures all workbook state needed for formula compilation
5
+ * and evaluation as plain, read-only data structures. Runtime/compile code
6
+ * must depend only on these types — never on live Workbook/Worksheet/Cell
7
+ * objects.
8
+ *
9
+ * ## Design Principles
10
+ *
11
+ * 1. **Immutable** — all interfaces use `readonly` modifiers. The engine
12
+ * must never mutate snapshot data.
13
+ * 2. **Self-contained** — every piece of information the engine needs
14
+ * (cell values, formula text, table metadata, defined names, calc
15
+ * properties) is captured up front.
16
+ * 3. **No @excel/ imports** — this file defines pure data types. The
17
+ * concrete builder that populates these structures lives in
18
+ * `workbook-adapter.ts` and is the only file that touches live objects.
19
+ */
20
+ /**
21
+ * Error codes recognized by the formula engine.
22
+ * This is an engine-internal type that avoids importing from `@excel/types`.
23
+ */
24
+ export type ErrorCode = "#N/A" | "#REF!" | "#NAME?" | "#DIV/0!" | "#NULL!" | "#VALUE!" | "#NUM!" | "#SPILL!" | "#CALC!";
25
+ export interface SnapshotErrorValue {
26
+ readonly error: ErrorCode;
27
+ }
28
+ /**
29
+ * A cell's raw value as captured in the snapshot.
30
+ *
31
+ * - `Date` is NOT included — dates are stored as their Excel serial number.
32
+ * The snapshot builder converts Date objects to serial numbers at capture
33
+ * time so the engine never needs to reason about Date objects.
34
+ * - Rich text is flattened to a plain string.
35
+ */
36
+ export type SnapshotCellValue = number | string | boolean | SnapshotErrorValue | null;
37
+ /**
38
+ * The kind of formula a cell contains.
39
+ *
40
+ * - `"none"` — not a formula cell (literal value)
41
+ * - `"normal"` — ordinary formula
42
+ * - `"shared-master"` — master cell of a shared formula group
43
+ * - `"shared-slave"` — slave cell that inherits from a shared master
44
+ * - `"cse"` — legacy CSE (Ctrl+Shift+Enter) array formula
45
+ * - `"dynamic-array"` — Excel 365 dynamic array formula
46
+ */
47
+ export type FormulaCellKind = "none" | "normal" | "shared-master" | "shared-slave" | "cse" | "dynamic-array";
48
+ /**
49
+ * Snapshot of a single cell.
50
+ *
51
+ * Only cells that contain data or formulas are captured — truly empty
52
+ * positions are represented by the absence of a CellSnapshot in the
53
+ * worksheet's cell map.
54
+ */
55
+ export interface CellSnapshot {
56
+ /** 1-based row number. */
57
+ readonly row: number;
58
+ /** 1-based column number. */
59
+ readonly col: number;
60
+ /** The cell's raw value (for non-formula cells) or cached result (for formula cells). */
61
+ readonly value: SnapshotCellValue;
62
+ /** The formula classification. */
63
+ readonly formulaKind: FormulaCellKind;
64
+ /**
65
+ * The formula source text.
66
+ * - For normal / shared-master / CSE / dynamic-array: the actual formula.
67
+ * - For shared-slave: the *translated* formula (already offset from master).
68
+ * - For non-formula cells: `undefined`.
69
+ */
70
+ readonly formula?: string;
71
+ /**
72
+ * For CSE and shared-master formulas: the target range in "A1:B2" format.
73
+ * Used by the materialize layer to determine where results are written.
74
+ */
75
+ readonly ref?: string;
76
+ /**
77
+ * Whether this is a dynamic array formula (explicit `isDynamicArray` flag
78
+ * from the XLSX model, or inferred from the top-level function name).
79
+ */
80
+ readonly isDynamicArray?: boolean;
81
+ /**
82
+ * The cached result from the XLSX file (before engine evaluation).
83
+ * Used by `shouldPreserveCachedResult` to avoid overwriting usable data
84
+ * when the engine returns #NAME? for an unsupported function.
85
+ */
86
+ readonly cachedResult?: SnapshotCellValue;
87
+ }
88
+ /**
89
+ * Snapshot of a single worksheet.
90
+ */
91
+ export interface WorksheetSnapshot {
92
+ /** Stable worksheet identifier (survives renames). */
93
+ readonly id: number;
94
+ /** Worksheet name (used as the key for cross-sheet references). */
95
+ readonly name: string;
96
+ /**
97
+ * The used range of the worksheet. `null` if the sheet has no data.
98
+ * All values are 1-based.
99
+ */
100
+ readonly dimensions: {
101
+ readonly top: number;
102
+ readonly left: number;
103
+ readonly bottom: number;
104
+ readonly right: number;
105
+ } | null;
106
+ /**
107
+ * All cells with data, keyed by `"row:col"` (e.g. `"1:1"` for A1).
108
+ * Only non-empty cells are present.
109
+ */
110
+ readonly cells: ReadonlyMap<string, CellSnapshot>;
111
+ /**
112
+ * Rows that are hidden. Used by SUBTOTAL's 1xx-variant codes
113
+ * (101-111) and AGGREGATE option 5/7 to skip hidden rows during
114
+ * aggregation. Excel distinguishes filter-hidden vs manually hidden,
115
+ * but our worksheet model carries a single `row.hidden` boolean for
116
+ * either case — SUBTOTAL 1xx/AGGREGATE treat them identically anyway,
117
+ * and SUBTOTAL 9 (plain) always skips filter-hidden rows (not
118
+ * distinguishable here, so we conservatively treat them as visible).
119
+ * 1-based row numbers.
120
+ */
121
+ readonly hiddenRows: ReadonlySet<number>;
122
+ /** Tables defined in this worksheet. */
123
+ readonly tables: readonly TableSnapshot[];
124
+ }
125
+ /**
126
+ * Column definition within a table.
127
+ */
128
+ export interface TableColumnSnapshot {
129
+ readonly name: string;
130
+ }
131
+ /**
132
+ * Snapshot of a table (ListObject) within a worksheet.
133
+ */
134
+ export interface TableSnapshot {
135
+ /** The table name (used in structured references). */
136
+ readonly name: string;
137
+ /** Column definitions — order matches physical column order. */
138
+ readonly columns: readonly TableColumnSnapshot[];
139
+ /** Top-left corner of the table (1-based). */
140
+ readonly topLeft: {
141
+ readonly row: number;
142
+ readonly col: number;
143
+ };
144
+ /** Number of data rows (excludes header and totals). */
145
+ readonly dataRowCount: number;
146
+ /** Whether the table has a header row (default true). */
147
+ readonly hasHeaderRow: boolean;
148
+ /** Whether the table has a totals row. */
149
+ readonly hasTotalsRow: boolean;
150
+ }
151
+ /**
152
+ * A single defined name in the workbook.
153
+ *
154
+ * Defined names can reference:
155
+ * - A cell or range: `"Sheet1!$A$1:$B$2"`
156
+ * - A formula expression: `"LAMBDA(x,y,x+y)"`
157
+ * - Multiple areas (currently unsupported by the engine)
158
+ */
159
+ export interface DefinedNameSnapshot {
160
+ /** The defined name (case-insensitive). */
161
+ readonly name: string;
162
+ /**
163
+ * The range strings associated with this name.
164
+ * Usually a single entry. Multi-area names (length > 1) are not supported
165
+ * by the engine and will produce #VALUE!.
166
+ */
167
+ readonly ranges: readonly string[];
168
+ /**
169
+ * The scope of this defined name.
170
+ * - `undefined` or empty string means workbook-scoped (global).
171
+ * - A sheet name means this name is local to that worksheet.
172
+ *
173
+ * Excel allows the same name to exist both as a workbook-scoped name
174
+ * and as a sheet-scoped name on specific worksheets. When a formula on
175
+ * Sheet1 references the name "Total", the engine first looks for a
176
+ * sheet-scoped name on Sheet1, then falls back to the workbook-scoped name.
177
+ */
178
+ readonly scope?: string;
179
+ }
180
+ /**
181
+ * Calculation settings from the workbook.
182
+ */
183
+ export interface CalcPropertiesSnapshot {
184
+ /** Whether to perform a full calculation on load. */
185
+ readonly fullCalcOnLoad?: boolean;
186
+ /** Whether iterative calculation is enabled (for circular references). */
187
+ readonly iterate?: boolean;
188
+ /** Maximum number of iterations (default 100). */
189
+ readonly iterateCount?: number;
190
+ /** Maximum change threshold for convergence (default 0.001). */
191
+ readonly iterateDelta?: number;
192
+ }
193
+ /**
194
+ * Global workbook properties relevant to the formula engine.
195
+ */
196
+ export interface WorkbookPropertiesSnapshot {
197
+ /** Whether the workbook uses the 1904 date system. */
198
+ readonly date1904?: boolean;
199
+ }
200
+ /**
201
+ * A table resolved with its containing worksheet name.
202
+ * Used by the `tablesByName` index for O(1) table lookup.
203
+ */
204
+ export interface ResolvedTable {
205
+ readonly table: TableSnapshot;
206
+ readonly sheetName: string;
207
+ }
208
+ /**
209
+ * Complete, immutable snapshot of all workbook state needed by the formula
210
+ * engine. This is the sole input to the compile → evaluate → materialize
211
+ * pipeline.
212
+ */
213
+ export interface WorkbookSnapshot {
214
+ /** All worksheets in workbook order. */
215
+ readonly worksheets: readonly WorksheetSnapshot[];
216
+ /** Quick lookup: worksheet name (lowercase) → WorksheetSnapshot. */
217
+ readonly worksheetsByName: ReadonlyMap<string, WorksheetSnapshot>;
218
+ /** Quick lookup: worksheet id → WorksheetSnapshot. */
219
+ readonly worksheetsById: ReadonlyMap<number, WorksheetSnapshot>;
220
+ /** All defined names in the workbook. Keyed by uppercase name for global
221
+ * names, or `"SHEETNAME\0NAME"` for sheet-scoped names. Use the
222
+ * `resolveDefinedNameKey()` helper to find the correct entry. */
223
+ readonly definedNames: ReadonlyMap<string, DefinedNameSnapshot>;
224
+ /**
225
+ * Quick lookup: table name (lowercase) → table + sheet info.
226
+ * Built at snapshot creation time to avoid O(sheets × tables) scans
227
+ * in the binder and evaluator.
228
+ */
229
+ readonly tablesByName: ReadonlyMap<string, ResolvedTable>;
230
+ /** Calculation properties (iterative calc settings, etc.). */
231
+ readonly calcProperties: CalcPropertiesSnapshot;
232
+ /** Global workbook properties. */
233
+ readonly properties: WorkbookPropertiesSnapshot;
234
+ }
235
+ /**
236
+ * Build a snapshot cell key from row and column.
237
+ * This key format is used for the `WorksheetSnapshot.cells` map.
238
+ */
239
+ export declare function snapshotCellKey(row: number, col: number): string;
240
+ /**
241
+ * Build a formula cell key that includes the sheet name.
242
+ * Used by the dependency graph and eval session cache.
243
+ */
244
+ export declare function formulaCellKey(sheet: string, row: number, col: number): string;
245
+ /**
246
+ * Build a spill cell key using the worksheet id (stable across renames).
247
+ * Used by the spill engine for persistent tracking.
248
+ */
249
+ export declare function spillCellKeyFromId(worksheetId: number, row: number, col: number): string;
250
+ /**
251
+ * Build the key used to store a sheet-scoped defined name.
252
+ * Format: `"SHEETNAME\0NAME"` (null character separator ensures no collisions).
253
+ */
254
+ export declare function scopedNameKey(sheetName: string, name: string): string;
255
+ /**
256
+ * Resolve a defined name considering scope precedence.
257
+ *
258
+ * Excel name resolution order:
259
+ * 1. Sheet-scoped name on `currentSheet` (if any)
260
+ * 2. Workbook-scoped (global) name
261
+ *
262
+ * @param definedNames - The defined names map from the snapshot
263
+ * @param name - The name to resolve (case-insensitive)
264
+ * @param currentSheet - The sheet where the formula is located
265
+ * @returns The matching DefinedNameSnapshot, or undefined
266
+ */
267
+ export declare function resolveDefinedName(definedNames: ReadonlyMap<string, DefinedNameSnapshot>, name: string, currentSheet?: string): DefinedNameSnapshot | undefined;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Workbook Snapshot — Immutable data layer for the formula engine.
3
+ *
4
+ * The snapshot captures all workbook state needed for formula compilation
5
+ * and evaluation as plain, read-only data structures. Runtime/compile code
6
+ * must depend only on these types — never on live Workbook/Worksheet/Cell
7
+ * objects.
8
+ *
9
+ * ## Design Principles
10
+ *
11
+ * 1. **Immutable** — all interfaces use `readonly` modifiers. The engine
12
+ * must never mutate snapshot data.
13
+ * 2. **Self-contained** — every piece of information the engine needs
14
+ * (cell values, formula text, table metadata, defined names, calc
15
+ * properties) is captured up front.
16
+ * 3. **No @excel/ imports** — this file defines pure data types. The
17
+ * concrete builder that populates these structures lives in
18
+ * `workbook-adapter.ts` and is the only file that touches live objects.
19
+ */
20
+ // ============================================================================
21
+ // Cell Key Helpers
22
+ // ============================================================================
23
+ /**
24
+ * Build a snapshot cell key from row and column.
25
+ * This key format is used for the `WorksheetSnapshot.cells` map.
26
+ */
27
+ export function snapshotCellKey(row, col) {
28
+ return `${row}:${col}`;
29
+ }
30
+ /**
31
+ * Build a formula cell key that includes the sheet name.
32
+ * Used by the dependency graph and eval session cache.
33
+ */
34
+ export function formulaCellKey(sheet, row, col) {
35
+ return `${sheet}!${row}:${col}`;
36
+ }
37
+ /**
38
+ * Build a spill cell key using the worksheet id (stable across renames).
39
+ * Used by the spill engine for persistent tracking.
40
+ */
41
+ export function spillCellKeyFromId(worksheetId, row, col) {
42
+ return `ws:${worksheetId}!${row}:${col}`;
43
+ }
44
+ // ============================================================================
45
+ // Defined Name Resolution
46
+ // ============================================================================
47
+ /**
48
+ * Build the key used to store a sheet-scoped defined name.
49
+ * Format: `"SHEETNAME\0NAME"` (null character separator ensures no collisions).
50
+ */
51
+ export function scopedNameKey(sheetName, name) {
52
+ return `${sheetName.toUpperCase()}\0${name.toUpperCase()}`;
53
+ }
54
+ /**
55
+ * Resolve a defined name considering scope precedence.
56
+ *
57
+ * Excel name resolution order:
58
+ * 1. Sheet-scoped name on `currentSheet` (if any)
59
+ * 2. Workbook-scoped (global) name
60
+ *
61
+ * @param definedNames - The defined names map from the snapshot
62
+ * @param name - The name to resolve (case-insensitive)
63
+ * @param currentSheet - The sheet where the formula is located
64
+ * @returns The matching DefinedNameSnapshot, or undefined
65
+ */
66
+ export function resolveDefinedName(definedNames, name, currentSheet) {
67
+ // 1. Try sheet-scoped name first
68
+ if (currentSheet) {
69
+ const scopedKey = scopedNameKey(currentSheet, name);
70
+ const scoped = definedNames.get(scopedKey);
71
+ if (scoped) {
72
+ return scoped;
73
+ }
74
+ }
75
+ // 2. Fall back to global name
76
+ return definedNames.get(name.toUpperCase());
77
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Build Writeback Plan — Convert evaluation results into a WritebackPlan.
3
+ *
4
+ * This module takes the evaluation results from the evaluator and
5
+ * produces a declarative `WritebackPlan` that describes all cell mutations.
6
+ * The plan is then applied by `apply-writeback-plan.ts`.
7
+ *
8
+ * ## Responsibilities
9
+ *
10
+ * 1. Classify each formula's result as scalar, CSE, or dynamic-array.
11
+ * 2. Check spill availability and detect #SPILL! conflicts.
12
+ * 3. Generate cleanup operations for stale ghost cells.
13
+ * 4. Track spill regions and ghost snapshots for persistence.
14
+ *
15
+ * ## Key Principle
16
+ *
17
+ * This module does NOT touch any live workbook objects. It reads only
18
+ * from the `WorkbookSnapshot` and the evaluation results.
19
+ */
20
+ import type { CompiledFormula } from "../compile/compiled-formula.js";
21
+ import type { WorkbookSnapshot } from "../integration/workbook-snapshot.js";
22
+ import type { RuntimeValue } from "../runtime/values.js";
23
+ import type { SpillRegion } from "./types.js";
24
+ import type { WritebackPlan } from "./writeback-plan.js";
25
+ /**
26
+ * Build a complete `WritebackPlan` from evaluation results.
27
+ *
28
+ * @param snapshot - The workbook snapshot
29
+ * @param compiled - All compiled formulas in evaluation order
30
+ * @param results - Raw evaluation results, keyed by formula cell key
31
+ * @param previousSpills - Persistent spill regions from previous calculation
32
+ * @param previousGhosts - Persistent ghost snapshots from previous calculation
33
+ */
34
+ export declare function buildWritebackPlan(snapshot: WorkbookSnapshot, compiled: readonly CompiledFormula[], results: ReadonlyMap<string, RuntimeValue>, previousSpills: ReadonlyMap<string, SpillRegion>, previousGhosts: ReadonlyMap<string, unknown>): WritebackPlan;