@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
@@ -22,15 +22,28 @@ export interface IParseStream extends EmitterLike {
22
22
  pipe(dest: any): any;
23
23
  [Symbol.asyncIterator]?: () => AsyncIterator<Uint8Array | string>;
24
24
  }
25
- export interface IStreamBuf extends EmitterLike {
26
- write(data: any): boolean | void | Promise<boolean>;
25
+ /**
26
+ * Minimal write-side shape required to receive XLSX bytes. Anything that
27
+ * behaves like a Node `WritableStream` (a `write()` method plus `end()` and
28
+ * event emitter basics) satisfies this — including Node's `fs.WriteStream`,
29
+ * `PassThrough`, and our `@stream` Writable class.
30
+ */
31
+ export interface IWritableStream extends EmitterLike {
32
+ write(data: string | Uint8Array): boolean | void | Promise<boolean>;
27
33
  end(): void;
28
- read(): any;
29
- toBuffer?(): any;
30
34
  pipe?(dest: any): any;
31
35
  }
36
+ /**
37
+ * An in-memory buffered stream. Extends the write-side shape with `read()`
38
+ * and optional `toBuffer()` for callers that use the stream as a sink and
39
+ * then harvest the accumulated bytes (e.g. `writeBuffer()`'s internal buffer).
40
+ */
41
+ export interface IStreamBuf extends IWritableStream {
42
+ read(): Uint8Array | null;
43
+ toBuffer?(): Uint8Array | null;
44
+ }
32
45
  export interface IZipWriter extends EmitterLike {
33
- append(data: any, options: {
46
+ append(data: string | Uint8Array, options: {
34
47
  name: string;
35
48
  base64?: boolean;
36
49
  }): void;
@@ -39,13 +52,46 @@ export interface IZipWriter extends EmitterLike {
39
52
  write(chunk: string): void;
40
53
  end(): void;
41
54
  };
42
- pipe(stream: any): void;
55
+ pipe(stream: IWritableStream): void;
43
56
  finalize(): void;
44
57
  /** Wait for downstream backpressure to clear. Resolves immediately if no backpressure. */
45
58
  waitForDrain(): Promise<void>;
46
59
  }
60
+ /**
61
+ * Options for reading (loading) an XLSX workbook.
62
+ *
63
+ * All officially supported options are declared below with proper types so
64
+ * callers get IDE completion and type-checking. Additional fields are
65
+ * permitted via the index signature for forward compatibility and for
66
+ * callers who subclass `XLSX` to pass through private flags.
67
+ */
47
68
  export interface XlsxReadOptions {
69
+ /**
70
+ * When the input to `load()` is a string, interpret it as a base64-encoded
71
+ * zip archive instead of a binary buffer. Defaults to `false`.
72
+ */
48
73
  base64?: boolean;
74
+ /**
75
+ * Maximum number of rows to parse from each worksheet. Rows beyond this
76
+ * limit are silently skipped. Useful for previewing very large sheets
77
+ * without loading everything into memory.
78
+ */
79
+ maxRows?: number;
80
+ /**
81
+ * Maximum number of columns to parse from each worksheet. Columns beyond
82
+ * this limit are silently skipped. Useful for previewing very wide sheets.
83
+ */
84
+ maxCols?: number;
85
+ /**
86
+ * List of worksheet XML node names to skip while parsing (e.g.
87
+ * `"dataValidations"`, `"conditionalFormatting"`). Use for workbooks that
88
+ * contain corrupted or unsupported elements you want to ignore.
89
+ */
90
+ ignoreNodes?: string[];
91
+ /**
92
+ * Forward-compatibility / subclass extension escape hatch. Unknown keys are
93
+ * passed through to internal loaders; unrecognised keys are ignored.
94
+ */
49
95
  [key: string]: unknown;
50
96
  }
51
97
  export interface ZipWriterOptions {
@@ -55,8 +101,33 @@ export interface ZipWriterOptions {
55
101
  /** Timestamp writing strategy for ZIP entry metadata (optional). */
56
102
  timestamps?: ZipTimestampMode;
57
103
  }
104
+ /**
105
+ * Options for writing an XLSX workbook.
106
+ *
107
+ * All officially supported options are declared below with proper types so
108
+ * callers get IDE completion and type-checking. Additional fields are
109
+ * permitted via the index signature for forward compatibility and for
110
+ * callers who subclass `XLSX` to pass through private flags.
111
+ */
58
112
  export interface XlsxWriteOptions {
113
+ /** ZIP archive options (compression level, timestamps, ...). */
59
114
  zip?: ZipWriterOptions;
115
+ /**
116
+ * Use a shared-string table for cell text values. Defaults to `true`.
117
+ * Set to `false` to write string values inline (larger file, but streams
118
+ * better for very large sheets).
119
+ */
120
+ useSharedStrings?: boolean;
121
+ /**
122
+ * Emit style definitions (fonts, fills, borders, number formats, …).
123
+ * Defaults to `true`. Set to `false` to skip style blocks for maximum
124
+ * compatibility with minimal readers.
125
+ */
126
+ useStyles?: boolean;
127
+ /**
128
+ * Forward-compatibility / subclass extension escape hatch. Unknown keys are
129
+ * passed through to internal writers; unrecognised keys are ignored.
130
+ */
60
131
  [key: string]: unknown;
61
132
  }
62
133
  export type XlsxOptions = XlsxReadOptions & XlsxWriteOptions;
@@ -73,7 +144,7 @@ export interface MediaModel {
73
144
  }
74
145
  interface ZipEntryLike {
75
146
  name: string;
76
- type: "Directory" | "File";
147
+ type: "Directory" | "File" | "Symlink";
77
148
  stream: IParseStream;
78
149
  drain: () => Promise<void>;
79
150
  }
@@ -102,6 +173,9 @@ declare class XLSX {
102
173
  PivotTable: string;
103
174
  FeaturePropertyBag: string;
104
175
  CtrlProp: string;
176
+ SheetMetadata: string;
177
+ ExternalLink: string;
178
+ ExternalLinkPath: string;
105
179
  };
106
180
  constructor(workbook: Workbook);
107
181
  /**
@@ -133,19 +207,28 @@ declare class XLSX {
133
207
  /**
134
208
  * Read workbook from a stream
135
209
  */
136
- read(stream: IParseStream, options?: XlsxReadOptions): Promise<any>;
210
+ read(stream: IParseStream, options?: XlsxReadOptions): Promise<Workbook>;
137
211
  /**
138
212
  * Write workbook to a stream
139
213
  */
140
- write(stream: any, options?: XlsxWriteOptions): Promise<XLSX>;
214
+ write(stream: IWritableStream, options?: XlsxWriteOptions): Promise<XLSX>;
141
215
  /**
142
- * Load workbook from buffer/ArrayBuffer/Uint8Array
216
+ * Load a workbook from binary data.
217
+ *
218
+ * Accepted inputs:
219
+ * - `Uint8Array` (and `Buffer`, which is a Uint8Array at runtime)
220
+ * - `ArrayBuffer` / `SharedArrayBuffer`
221
+ * - Any `ArrayBufferView` (DataView, Int8Array, Float32Array, …) — the
222
+ * underlying bytes are reinterpreted as a zip archive
223
+ * - `string` — treated as base64-encoded data when `options.base64 === true`;
224
+ * raw binary cannot be round-tripped through a JS string and is rejected
225
+ * to prevent silent corruption.
143
226
  */
144
- load(data: any, options?: XlsxReadOptions): Promise<any>;
227
+ load(data: Uint8Array | ArrayBuffer | ArrayBufferView | string, options?: XlsxReadOptions): Promise<Workbook>;
145
228
  /**
146
229
  * Internal: Load from Uint8Array buffer
147
230
  */
148
- protected loadBuffer(buffer: Uint8Array, options?: XlsxReadOptions): Promise<any>;
231
+ protected loadBuffer(buffer: Uint8Array, options?: XlsxReadOptions): Promise<Workbook>;
149
232
  /**
150
233
  * Internal: Load workbook from an async stream of ZIP entries.
151
234
  *
@@ -194,6 +277,53 @@ declare class XLSX {
194
277
  parseWorkbook(stream: IParseStream): Promise<any>;
195
278
  parseSharedStrings(stream: IParseStream): Promise<any>;
196
279
  reconcile(model: any, options?: XlsxOptions): void;
280
+ /**
281
+ * Join the three on-disk sources that together describe external workbook
282
+ * references into a single dense `model.externalLinks: ExternalLinkModel[]`.
283
+ *
284
+ * Sources:
285
+ * - `<externalReferences>` list in workbook.xml (declaration order)
286
+ * - `xl/_rels/workbook.xml.rels` (rId → internal path)
287
+ * - `xl/externalLinks/externalLink{N}.xml` (sheet names, cached values)
288
+ * - `xl/externalLinks/_rels/externalLink{N}.xml.rels` (target, TargetMode)
289
+ *
290
+ * The 1-based index of each resulting ExternalLinkModel matches the `[N]`
291
+ * used in formula strings — this is the single source of truth formula
292
+ * code should rely on.
293
+ */
294
+ protected _reconcileExternalLinks(model: any): void;
295
+ /**
296
+ * Write-time pass that brings the workbook model into a shape the writer
297
+ * can serialise cleanly. Two concerns:
298
+ *
299
+ * 1. Build the final external-link list for this write, combining
300
+ * user-declared links (`wb.externalLinks`) with auto-discovered
301
+ * ones from previous writes (cached on the Workbook). The result
302
+ * is assigned to `model.externalLinks` and consumed by the writer;
303
+ * `wb.externalLinks` is **not** modified.
304
+ *
305
+ * 2. Scan every formula cell for `[Book]Sheet!` prefixes. Filename-form
306
+ * references that don't match an existing link trigger
307
+ * `_recordAutoExternalLink()` on the Workbook, which adds the target
308
+ * to the private writer cache (so subsequent writes are fixed-point
309
+ * stable) but leaves `wb.externalLinks` untouched.
310
+ *
311
+ * 3. Rewrite every external-ref formula so it uses the numeric `[N]`
312
+ * form, the canonical OOXML storage form. This mutation lands on
313
+ * the cell's model object — matching the library's existing
314
+ * write-time pattern for `ssId`, `styleId`, `si`, and `cm`.
315
+ * Subsequent writes see the `[N]` form directly and resolve it
316
+ * against `model.externalLinks`, giving idempotent output.
317
+ */
318
+ protected _normaliseExternalLinks(model: any): void;
319
+ /**
320
+ * Rewrite a single formula so every external-ref prefix uses the numeric
321
+ * `[N]` form. When an unknown filename-form reference is found we record
322
+ * it on the workbook's private writer cache (so the next write can still
323
+ * resolve it) and append a local link to `scratch.links` so subsequent
324
+ * refs in the same formula see the freshly-assigned index.
325
+ */
326
+ private _normaliseFormulaExternalRefs;
197
327
  /**
198
328
  * Reconcile pivot tables by linking them to worksheets and their cache data.
199
329
  */
@@ -229,7 +359,21 @@ declare class XLSX {
229
359
  _processPivotTableRelsEntry(stream: IParseStream, model: any, name: string): Promise<void>;
230
360
  _processPivotCacheDefinitionEntry(stream: IParseStream, model: any, name: string): Promise<void>;
231
361
  _processPivotCacheRecordsEntry(stream: IParseStream, model: any, name: string): Promise<void>;
232
- loadFromFiles(zipData: Record<string, Uint8Array>, options?: any): Promise<any>;
362
+ /**
363
+ * Parse `xl/externalLinks/externalLink{N}.xml` into the intermediate
364
+ * ParsedExternalLink shape. Reconciliation (joining with the rels file
365
+ * and the workbook's `<externalReferences>` list) happens later in
366
+ * {@link reconcile}.
367
+ */
368
+ _processExternalLinkEntry(stream: IParseStream, model: any, index: number): Promise<void>;
369
+ /**
370
+ * Parse `xl/externalLinks/_rels/externalLink{N}.xml.rels`. The Target /
371
+ * TargetMode carried here is what Excel uses to locate the actual external
372
+ * file at open time, so we must preserve it verbatim (including relative
373
+ * paths like `"测试.xlsx"`).
374
+ */
375
+ _processExternalLinkRelsEntry(stream: IParseStream, model: any, index: number): Promise<void>;
376
+ loadFromFiles(zipData: Record<string, Uint8Array>, options?: XlsxReadOptions): Promise<Workbook>;
233
377
  /**
234
378
  * Process default entries (drawings, comments, tables, etc.)
235
379
  * @param rawData Optional raw entry data for passthrough preservation (used by loadFromFiles)
@@ -253,12 +397,27 @@ declare class XLSX {
253
397
  addOfficeRels(zip: IZipWriter, _model: any): Promise<void>;
254
398
  addWorkbookRels(zip: IZipWriter, model: any): Promise<void>;
255
399
  addFeaturePropertyBag(zip: IZipWriter, model: any): Promise<void>;
400
+ addMetadata(zip: IZipWriter, model: any): Promise<void>;
256
401
  addSharedStrings(zip: IZipWriter, model: any): Promise<void>;
257
402
  addStyles(zip: IZipWriter, model: any): Promise<void>;
258
403
  addWorkbook(zip: IZipWriter, model: any): Promise<void>;
259
404
  addWorksheets(zip: IZipWriter, model: any): Promise<void>;
260
405
  addDrawings(zip: IZipWriter, model: any): Promise<void>;
261
406
  addTables(zip: IZipWriter, model: any): Promise<void>;
407
+ /**
408
+ * Write every external workbook reference into the archive. For each
409
+ * {@link ExternalLinkModel} in `model.externalLinks` we emit two files:
410
+ *
411
+ * xl/externalLinks/externalLink{index}.xml — sheet names + cache
412
+ * xl/externalLinks/_rels/externalLink{index}.xml.rels — target path
413
+ *
414
+ * The target-path rel carries `TargetMode="External"` with a **bare
415
+ * relative** `Target` whenever the user supplied one. This is the single
416
+ * line that makes Office / WPS resolve the referenced workbook relative
417
+ * to the current file's directory (not the `%USERPROFILE%\Documents`
418
+ * fallback) — the root of the behaviour reported in exceljs#3039.
419
+ */
420
+ addExternalLinks(zip: IZipWriter, model: any): Promise<void>;
262
421
  /**
263
422
  * Write passthrough files (charts, etc.) that were preserved during read.
264
423
  * These files are written back unchanged to preserve unsupported features.
@@ -13,12 +13,15 @@
13
13
  * - writeBuffer: Write to buffer (Uint8Array)
14
14
  * - addMedia: Supports buffer, base64, and filename (via readFileAsync)
15
15
  */
16
+ import type { Workbook } from "../workbook.js";
17
+ import type { XlsxReadOptions, XlsxWriteOptions } from "./xlsx.browser.js";
16
18
  import { XLSX as XLSXBase } from "./xlsx.browser.js";
19
+ import type { ReadableLike } from "../../stream/types.js";
17
20
  declare class XLSX extends XLSXBase {
18
- constructor(workbook: any);
21
+ constructor(workbook: Workbook);
19
22
  private static iterateZipEntries;
20
- read(stream: any, options?: any): Promise<any>;
21
- readFile(filename: string, options?: any): Promise<any>;
22
- writeFile(filename: string, options?: any): Promise<void>;
23
+ read(stream: ReadableLike, options?: XlsxReadOptions): Promise<Workbook>;
24
+ readFile(filename: string, options?: XlsxReadOptions): Promise<Workbook>;
25
+ writeFile(filename: string, options?: XlsxWriteOptions): Promise<void>;
23
26
  }
24
27
  export { XLSX };
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Formula Address Utilities — Shared helpers for address parsing and conversion.
3
+ *
4
+ * These pure functions are used across the compile, runtime, and materialize
5
+ * layers. Centralizing them here eliminates duplication and ensures consistent
6
+ * behavior.
7
+ *
8
+ * ## Design Constraint
9
+ *
10
+ * This module must NOT import from `@excel/utils/col-cache` or any live
11
+ * workbook type. All functions are self-contained.
12
+ */
13
+ /**
14
+ * Convert a column letter string (e.g. "A", "AA", "XFD") to a 1-based number.
15
+ *
16
+ * - `"A"` → 1
17
+ * - `"Z"` → 26
18
+ * - `"AA"` → 27
19
+ * - `"XFD"` → 16384
20
+ */
21
+ export declare function colLetterToNumber(col: string): number;
22
+ /**
23
+ * A parsed defined-name range reference.
24
+ */
25
+ export interface ParsedNameRange {
26
+ readonly sheet: string;
27
+ readonly startRow: number;
28
+ readonly startCol: number;
29
+ readonly endRow: number;
30
+ readonly endCol: number;
31
+ }
32
+ /**
33
+ * Parse a defined-name range string like `"Sheet1!$A$1:$B$2"` or `"'Sheet Name'!$C$3"`
34
+ * into a `ParsedNameRange`. Returns `null` if the format is unrecognized.
35
+ */
36
+ export declare function parseDefinedNameRange(rangeStr: string): ParsedNameRange | null;
37
+ /**
38
+ * A parsed simple cell address (no sheet name).
39
+ */
40
+ export interface ParsedAddress {
41
+ readonly row: number;
42
+ readonly col: number;
43
+ }
44
+ /**
45
+ * Parse a simple cell address like `"A1"`, `"$B$2"`, or `"AA100"`.
46
+ * Dollar signs are stripped. Returns `null` on parse failure.
47
+ */
48
+ export declare function parseSimpleAddress(addr: string): ParsedAddress | null;
49
+ /**
50
+ * A parsed rectangular range (no sheet name).
51
+ */
52
+ export interface ParsedRefRange {
53
+ readonly top: number;
54
+ readonly left: number;
55
+ readonly bottom: number;
56
+ readonly right: number;
57
+ }
58
+ /**
59
+ * Parse a cell range string like `"A1:B2"` into a `ParsedRefRange`.
60
+ * Returns `null` if the format is unrecognized.
61
+ */
62
+ export declare function parseRefRange(ref: string): ParsedRefRange | null;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Binder — Transform raw AST into BoundExpr.
3
+ *
4
+ * The binder performs static symbol resolution:
5
+ * - Cell/range references → BoundCellRef / BoundAreaRef with resolved sheet
6
+ * - Defined names → BoundCellRef / BoundAreaRef (if resolvable) or BoundNameExpr
7
+ * - Structured references → BoundCellRef / BoundAreaRef
8
+ * - Function calls → BoundCall or BoundSpecialCall
9
+ * - 3D references → BoundRef3D
10
+ *
11
+ * The binder operates on snapshot data only — no live workbook objects.
12
+ */
13
+ import type { WorkbookSnapshot } from "../integration/workbook-snapshot.js";
14
+ import type { AstNode } from "../syntax/ast.js";
15
+ import type { BoundExpr } from "./bound-ast.js";
16
+ /**
17
+ * Static context for the binder. Contains all information needed to
18
+ * resolve symbols at compile time.
19
+ */
20
+ export interface BindingContext {
21
+ /** The workbook snapshot. */
22
+ readonly snapshot: WorkbookSnapshot;
23
+ /** The current sheet name (for relative references). */
24
+ readonly currentSheet: string;
25
+ /**
26
+ * Identifier names that are bound locally (uppercase). Populated by
27
+ * LAMBDA when descending into its body; prevents local parameter names
28
+ * from being shadowed by same-named workbook-level defined names at
29
+ * compile time. LET uses a different mechanism (it keeps the body
30
+ * bound as-is and resolves names at runtime via `localBindings`), but
31
+ * LAMBDA's body is pre-bound when the lambda is constructed so we have
32
+ * to inject scope info up front.
33
+ */
34
+ readonly localNames?: ReadonlySet<string>;
35
+ }
36
+ /**
37
+ * Bind a raw AST node to produce a BoundExpr.
38
+ *
39
+ * This is the main entry point for the compilation phase. It recursively
40
+ * walks the AST and resolves all symbols against the snapshot.
41
+ */
42
+ export declare function bind(node: AstNode, ctx: BindingContext): BoundExpr;
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Bound Expression AST — The output of the compilation (binding) phase.
3
+ *
4
+ * After parsing produces a raw AST, the binder resolves all static symbols:
5
+ * - Defined names → resolved cell/range references or formula expressions
6
+ * - Structured references → resolved cell/range references
7
+ * - Sheet names → validated against the snapshot
8
+ * - Function names → validated against the registry
9
+ *
10
+ * The result is a `BoundExpr` tree where every reference is resolved and
11
+ * every function call is validated. The runtime evaluator only executes
12
+ * `BoundExpr` nodes — it never needs to perform symbol resolution.
13
+ *
14
+ * ## Node Types (compile output)
15
+ *
16
+ * After binding, only these node types exist:
17
+ *
18
+ * - `BoundLiteral` — number, string, boolean, error, null (missing)
19
+ * - `BoundCellRef` — resolved cell reference (sheet + row + col)
20
+ * - `BoundAreaRef` — resolved rectangular range (sheet + bounds)
21
+ * - `BoundColRangeRef` — resolved whole-column range
22
+ * - `BoundRowRangeRef` — resolved whole-row range
23
+ * - `BoundRef3D` — resolved 3D reference (multiple sheets)
24
+ * - `BoundBinaryOp` — binary operation
25
+ * - `BoundUnaryOp` — unary operation (including @)
26
+ * - `BoundPercent` — postfix %
27
+ * - `BoundCall` — function call (eagerly evaluated args)
28
+ * - `BoundSpecialCall` — special form (IF, LET, LAMBDA, etc.) with lazy args
29
+ * - `BoundArray` — array constant {1,2;3,4}
30
+ * - `BoundNameExpr` — UNRESOLVED name (only for names that must be resolved at runtime,
31
+ * e.g. formula-based defined names that produce lambdas, or truly unknown names)
32
+ * - `BoundLambda` — LAMBDA expression (params + body)
33
+ */
34
+ export declare const enum BoundExprKind {
35
+ Literal = 1,
36
+ CellRef = 2,
37
+ AreaRef = 3,
38
+ ColRangeRef = 4,
39
+ RowRangeRef = 5,
40
+ Ref3D = 6,
41
+ BinaryOp = 7,
42
+ UnaryOp = 8,
43
+ Percent = 9,
44
+ Call = 10,
45
+ SpecialCall = 11,
46
+ Array = 12,
47
+ NameExpr = 13,
48
+ Lambda = 14,
49
+ StructuredRef = 15
50
+ }
51
+ /**
52
+ * A resolved literal value.
53
+ */
54
+ export interface BoundLiteral {
55
+ readonly kind: BoundExprKind.Literal;
56
+ /** number | string | boolean | null (for Missing/blank) */
57
+ readonly value: number | string | boolean | null;
58
+ /** If this is an error literal (e.g. #N/A), the error code. */
59
+ readonly errorCode?: string;
60
+ }
61
+ /**
62
+ * A fully resolved cell reference.
63
+ * After binding, sheet is always resolved (never undefined).
64
+ */
65
+ export interface BoundCellRef {
66
+ readonly kind: BoundExprKind.CellRef;
67
+ /** Resolved sheet name. */
68
+ readonly sheet: string;
69
+ /** 1-based row number. */
70
+ readonly row: number;
71
+ /** 1-based column number. */
72
+ readonly col: number;
73
+ }
74
+ /**
75
+ * A fully resolved rectangular area reference.
76
+ */
77
+ export interface BoundAreaRef {
78
+ readonly kind: BoundExprKind.AreaRef;
79
+ /** Resolved sheet name. */
80
+ readonly sheet: string;
81
+ /** 1-based bounds. */
82
+ readonly top: number;
83
+ readonly left: number;
84
+ readonly bottom: number;
85
+ readonly right: number;
86
+ }
87
+ /**
88
+ * A resolved whole-column range (e.g. A:B).
89
+ * Row bounds are determined at runtime from sheet dimensions.
90
+ */
91
+ export interface BoundColRangeRef {
92
+ readonly kind: BoundExprKind.ColRangeRef;
93
+ readonly sheet: string;
94
+ readonly leftCol: number;
95
+ readonly rightCol: number;
96
+ }
97
+ /**
98
+ * A resolved whole-row range (e.g. 1:5).
99
+ * Column bounds are determined at runtime from sheet dimensions.
100
+ */
101
+ export interface BoundRowRangeRef {
102
+ readonly kind: BoundExprKind.RowRangeRef;
103
+ readonly sheet: string;
104
+ readonly topRow: number;
105
+ readonly bottomRow: number;
106
+ }
107
+ /**
108
+ * A resolved 3D reference spanning multiple sheets.
109
+ * The inner reference is either a cell or an area.
110
+ */
111
+ export interface BoundRef3D {
112
+ readonly kind: BoundExprKind.Ref3D;
113
+ /** Sheet names in workbook order, from start to end (inclusive). */
114
+ readonly sheets: readonly string[];
115
+ /** The cell/area that is replicated across sheets. */
116
+ readonly inner: BoundCellRef | BoundAreaRef;
117
+ }
118
+ /**
119
+ * Binary operation with two sub-expressions.
120
+ */
121
+ export interface BoundBinaryOp {
122
+ readonly kind: BoundExprKind.BinaryOp;
123
+ readonly op: string;
124
+ readonly left: BoundExpr;
125
+ readonly right: BoundExpr;
126
+ }
127
+ /**
128
+ * Unary operation (prefix +, -, or @ implicit intersection).
129
+ */
130
+ export interface BoundUnaryOp {
131
+ readonly kind: BoundExprKind.UnaryOp;
132
+ readonly op: string;
133
+ readonly operand: BoundExpr;
134
+ }
135
+ /**
136
+ * Postfix percent operation.
137
+ */
138
+ export interface BoundPercent {
139
+ readonly kind: BoundExprKind.Percent;
140
+ readonly operand: BoundExpr;
141
+ }
142
+ /**
143
+ * A standard (eager) function call.
144
+ * All arguments are evaluated before the function is called.
145
+ */
146
+ export interface BoundCall {
147
+ readonly kind: BoundExprKind.Call;
148
+ /** Uppercase, canonical function name. */
149
+ readonly name: string;
150
+ /** Bound argument expressions. */
151
+ readonly args: readonly BoundExpr[];
152
+ }
153
+ /**
154
+ * Special form identifiers for lazy/short-circuit evaluation.
155
+ */
156
+ export type SpecialFormName = "IF" | "IFERROR" | "IFNA" | "IFS" | "SWITCH" | "CHOOSE" | "LET" | "LAMBDA" | "INDIRECT" | "OFFSET" | "MAP" | "REDUCE" | "SCAN" | "MAKEARRAY" | "BYROW" | "BYCOL";
157
+ /**
158
+ * A special-form function call with lazy argument evaluation.
159
+ * The evaluator handles these with custom logic (short-circuit, binding, etc.).
160
+ */
161
+ export interface BoundSpecialCall {
162
+ readonly kind: BoundExprKind.SpecialCall;
163
+ readonly name: SpecialFormName;
164
+ /** Argument expressions (evaluated lazily by the evaluator). */
165
+ readonly args: readonly BoundExpr[];
166
+ }
167
+ /**
168
+ * Array constant: {1,2;3,4}.
169
+ */
170
+ export interface BoundArray {
171
+ readonly kind: BoundExprKind.Array;
172
+ /** rows[i][j] = element expression. */
173
+ readonly rows: readonly (readonly BoundExpr[])[];
174
+ }
175
+ /**
176
+ * An unresolved name reference.
177
+ *
178
+ * This exists for names that cannot be fully resolved at compile time:
179
+ * - Formula-based defined names (e.g. =LAMBDA(x,y,x+y))
180
+ * - Names that resolve to lambdas stored in cells
181
+ * - LET-bound local variables (resolved at runtime from localBindings)
182
+ * - Truly unknown names (#NAME? at runtime)
183
+ *
184
+ * For names that resolve to simple cell/range references, the binder
185
+ * produces `BoundCellRef` or `BoundAreaRef` directly.
186
+ */
187
+ export interface BoundNameExpr {
188
+ readonly kind: BoundExprKind.NameExpr;
189
+ /** The original name (case-preserved). */
190
+ readonly name: string;
191
+ /** Uppercase name for lookup. */
192
+ readonly upperName: string;
193
+ }
194
+ /**
195
+ * A LAMBDA expression with parameter names and a body.
196
+ * Produced by the binder when it encounters a LAMBDA special form.
197
+ */
198
+ export interface BoundLambda {
199
+ readonly kind: BoundExprKind.Lambda;
200
+ /** Parameter names (uppercase). */
201
+ readonly params: readonly string[];
202
+ /** The body expression. */
203
+ readonly body: BoundExpr;
204
+ }
205
+ /**
206
+ * An unresolved structured reference that requires runtime context.
207
+ *
208
+ * This is produced by the binder when:
209
+ * - The table name is empty (implicit `@` syntax — needs current cell position)
210
+ * - The reference includes `#This Row` (needs current cell's row)
211
+ *
212
+ * The evaluator resolves these at runtime using the current cell address.
213
+ */
214
+ export interface BoundStructuredRef {
215
+ readonly kind: BoundExprKind.StructuredRef;
216
+ /** Table name (empty string for implicit table). */
217
+ readonly tableName: string;
218
+ /** Column names. */
219
+ readonly columns: readonly string[];
220
+ /** Special items (#Headers, #Data, #Totals, #All, #This Row). */
221
+ readonly specials: readonly string[];
222
+ }
223
+ export type BoundExpr = BoundLiteral | BoundCellRef | BoundAreaRef | BoundColRangeRef | BoundRowRangeRef | BoundRef3D | BoundBinaryOp | BoundUnaryOp | BoundPercent | BoundCall | BoundSpecialCall | BoundArray | BoundNameExpr | BoundLambda | BoundStructuredRef;
224
+ export declare function boundLiteral(value: number | string | boolean | null, errorCode?: string): BoundLiteral;
225
+ export declare function boundCellRef(sheet: string, row: number, col: number): BoundCellRef;
226
+ export declare function boundAreaRef(sheet: string, top: number, left: number, bottom: number, right: number): BoundAreaRef;
227
+ export declare function boundCall(name: string, args: BoundExpr[]): BoundCall;
228
+ export declare function boundSpecialCall(name: SpecialFormName, args: BoundExpr[]): BoundSpecialCall;
229
+ export declare function boundNameExpr(name: string): BoundNameExpr;
230
+ export declare function boundErrorLiteral(errorCode: string): BoundLiteral;