@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,385 @@
1
+ /**
2
+ * Runtime Value System — The engine's canonical value representation.
3
+ *
4
+ * Every value that flows through the formula evaluator is a `RuntimeValue`.
5
+ * This is a properly tagged discriminated union that all function
6
+ * implementations operate on directly — no adapter layer.
7
+ *
8
+ * ## Design Principles
9
+ *
10
+ * 1. **No Date objects** — dates are represented as their Excel serial
11
+ * number (a plain `number`). Date formatting is an output concern.
12
+ * 2. **No monkey-patched arrays** — `ArrayValue` is a proper type with
13
+ * explicit `height`, `width`, and optional origin metadata.
14
+ * 3. **Reference is a first-class value** — `ReferenceValue` can flow
15
+ * through the evaluator and be passed to functions.
16
+ * 4. **Error codes are strict** — `ErrorValue` uses a typed code enum.
17
+ * 5. **Lambda is a value** — `LambdaValue` is part of the value union.
18
+ */
19
+ // ============================================================================
20
+ // Value Tag Enum
21
+ // ============================================================================
22
+ export var RVKind;
23
+ (function (RVKind) {
24
+ /** Empty cell / blank. Numeric value 0, string value "". */
25
+ RVKind[RVKind["Blank"] = 0] = "Blank";
26
+ /** A number (includes dates as serial numbers). */
27
+ RVKind[RVKind["Number"] = 1] = "Number";
28
+ /** A string. */
29
+ RVKind[RVKind["String"] = 2] = "String";
30
+ /** A boolean (TRUE / FALSE). */
31
+ RVKind[RVKind["Boolean"] = 3] = "Boolean";
32
+ /** An error value (#N/A, #VALUE!, etc.). */
33
+ RVKind[RVKind["Error"] = 4] = "Error";
34
+ /** A 2D array of scalar values. */
35
+ RVKind[RVKind["Array"] = 5] = "Array";
36
+ /** A cell or area reference (lazy — not yet resolved to values). */
37
+ RVKind[RVKind["Reference"] = 6] = "Reference";
38
+ /** A lambda (closure). */
39
+ RVKind[RVKind["Lambda"] = 7] = "Lambda";
40
+ })(RVKind || (RVKind = {}));
41
+ // ============================================================================
42
+ // Singleton Constants
43
+ // ============================================================================
44
+ /** The singleton blank value. */
45
+ export const BLANK = { kind: RVKind.Blank };
46
+ /** Common error values. */
47
+ export const ERRORS = {
48
+ VALUE: { kind: RVKind.Error, code: "#VALUE!" },
49
+ REF: { kind: RVKind.Error, code: "#REF!" },
50
+ NAME: { kind: RVKind.Error, code: "#NAME?" },
51
+ DIV0: { kind: RVKind.Error, code: "#DIV/0!" },
52
+ NA: { kind: RVKind.Error, code: "#N/A" },
53
+ NUM: { kind: RVKind.Error, code: "#NUM!" },
54
+ NULL: { kind: RVKind.Error, code: "#NULL!" },
55
+ SPILL: { kind: RVKind.Error, code: "#SPILL!" },
56
+ CALC: { kind: RVKind.Error, code: "#CALC!" }
57
+ };
58
+ // ============================================================================
59
+ // Constructor Helpers
60
+ // ============================================================================
61
+ export function rvNumber(value) {
62
+ return { kind: RVKind.Number, value };
63
+ }
64
+ export function rvString(value) {
65
+ return { kind: RVKind.String, value };
66
+ }
67
+ export function rvBoolean(value) {
68
+ return { kind: RVKind.Boolean, value };
69
+ }
70
+ export function rvError(code) {
71
+ return { kind: RVKind.Error, code };
72
+ }
73
+ export function rvArray(rows, originRow, originCol, subtotalMask, hiddenRowMask) {
74
+ const height = rows.length;
75
+ // Determine max width across all rows for rectangular normalisation.
76
+ let width = 0;
77
+ for (const row of rows) {
78
+ if (row.length > width) {
79
+ width = row.length;
80
+ }
81
+ }
82
+ // Pad short rows with BLANK so the resulting ArrayValue is rectangular.
83
+ // The old implementation did `row.push(BLANK)` directly — mutating the
84
+ // caller's arrays. Callers that shared row references across multiple
85
+ // `rvArray` calls could observe surprise modifications; we now copy any
86
+ // row that needs padding and leave the caller's arrays untouched.
87
+ let normalisedRows = rows;
88
+ if (height > 0 && width > 0) {
89
+ let anyNeedPadding = false;
90
+ for (const row of rows) {
91
+ if (row.length < width) {
92
+ anyNeedPadding = true;
93
+ break;
94
+ }
95
+ }
96
+ if (anyNeedPadding) {
97
+ normalisedRows = new Array(height);
98
+ for (let r = 0; r < height; r++) {
99
+ const row = rows[r];
100
+ if (row.length === width) {
101
+ normalisedRows[r] = row;
102
+ continue;
103
+ }
104
+ const padded = new Array(width);
105
+ for (let c = 0; c < row.length; c++) {
106
+ padded[c] = row[c];
107
+ }
108
+ for (let c = row.length; c < width; c++) {
109
+ padded[c] = BLANK;
110
+ }
111
+ normalisedRows[r] = padded;
112
+ }
113
+ }
114
+ }
115
+ return originRow !== undefined
116
+ ? {
117
+ kind: RVKind.Array,
118
+ rows: normalisedRows,
119
+ height,
120
+ width,
121
+ originRow,
122
+ originCol,
123
+ ...(subtotalMask ? { subtotalMask } : {}),
124
+ ...(hiddenRowMask ? { hiddenRowMask } : {})
125
+ }
126
+ : {
127
+ kind: RVKind.Array,
128
+ rows: normalisedRows,
129
+ height,
130
+ width,
131
+ ...(subtotalMask ? { subtotalMask } : {}),
132
+ ...(hiddenRowMask ? { hiddenRowMask } : {})
133
+ };
134
+ }
135
+ export function rvRef(sheet, top, left, bottom, right) {
136
+ return {
137
+ kind: RVKind.Reference,
138
+ areas: [{ sheet, top, left, bottom, right }]
139
+ };
140
+ }
141
+ export function rvCellRef(sheet, row, col) {
142
+ return {
143
+ kind: RVKind.Reference,
144
+ areas: [{ sheet, top: row, left: col, bottom: row, right: col }],
145
+ singleCell: true
146
+ };
147
+ }
148
+ export function rvLambda(params, body, closureBindings) {
149
+ return { kind: RVKind.Lambda, params, body, closureBindings };
150
+ }
151
+ // ============================================================================
152
+ // Type Guards
153
+ // ============================================================================
154
+ export function isError(v) {
155
+ return v.kind === RVKind.Error;
156
+ }
157
+ export function isArray(v) {
158
+ return v.kind === RVKind.Array;
159
+ }
160
+ export function isLambda(v) {
161
+ return v.kind === RVKind.Lambda;
162
+ }
163
+ export function isScalar(v) {
164
+ return (v.kind === RVKind.Blank ||
165
+ v.kind === RVKind.Number ||
166
+ v.kind === RVKind.String ||
167
+ v.kind === RVKind.Boolean ||
168
+ v.kind === RVKind.Error);
169
+ }
170
+ // ============================================================================
171
+ // Coercion Helpers
172
+ // ============================================================================
173
+ /**
174
+ * Parse a user-facing numeric string the way Excel does.
175
+ *
176
+ * Accepts:
177
+ * - plain decimals: `"1"`, `"-1.5"`, `"+.25"`
178
+ * - scientific notation: `"1.2e3"`, `"2E-4"`
179
+ * - percentage suffix: `"50%"` → 0.5
180
+ * - leading/trailing whitespace around the above
181
+ *
182
+ * Rejects (unlike JavaScript's `Number()`):
183
+ * - empty strings and whitespace-only (`" "` would become 0)
184
+ * - `"Infinity"`, `"-Infinity"`, `"NaN"` (Excel treats as text)
185
+ * - hexadecimal (`"0x10"`), octal, binary literals
186
+ * - currency symbols, thousands separators, locale-specific formats
187
+ * (these are out of scope for the engine; callers should strip before
188
+ * calling)
189
+ *
190
+ * Returns `#VALUE!` on any rejection so the error bubbles naturally
191
+ * through formula evaluation.
192
+ */
193
+ function parseNumericString(raw) {
194
+ const s = raw.trim();
195
+ if (s === "") {
196
+ return ERRORS.VALUE;
197
+ }
198
+ let body = s;
199
+ let percentFactor = 1;
200
+ if (body.endsWith("%")) {
201
+ percentFactor = 0.01;
202
+ body = body.slice(0, -1).trim();
203
+ if (body === "") {
204
+ return ERRORS.VALUE;
205
+ }
206
+ }
207
+ // Require at least one digit somewhere; this shuts the door on
208
+ // "Infinity", "NaN", "0x10", "1e" (Excel's own lexer refuses these).
209
+ // The strict decimal grammar below also rejects "1_000" etc.
210
+ if (!/^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/.test(body)) {
211
+ return ERRORS.VALUE;
212
+ }
213
+ const n = Number(body);
214
+ if (!Number.isFinite(n)) {
215
+ return ERRORS.VALUE;
216
+ }
217
+ return rvNumber(n * percentFactor);
218
+ }
219
+ /**
220
+ * Coerce a runtime value to a number.
221
+ * - Blank → 0
222
+ * - Number → itself
223
+ * - Boolean → 1 / 0
224
+ * - String → parse or #VALUE!
225
+ * - Error → propagate
226
+ */
227
+ export function toNumberRV(v) {
228
+ switch (v.kind) {
229
+ case RVKind.Number:
230
+ return v;
231
+ case RVKind.Blank:
232
+ return rvNumber(0);
233
+ case RVKind.Boolean:
234
+ return rvNumber(v.value ? 1 : 0);
235
+ case RVKind.String: {
236
+ return parseNumericString(v.value);
237
+ }
238
+ case RVKind.Error:
239
+ return v;
240
+ default:
241
+ return ERRORS.VALUE;
242
+ }
243
+ }
244
+ /**
245
+ * Coerce a runtime value to a string.
246
+ */
247
+ export function toStringRV(v) {
248
+ switch (v.kind) {
249
+ case RVKind.String:
250
+ return v.value;
251
+ case RVKind.Number:
252
+ return String(v.value);
253
+ case RVKind.Boolean:
254
+ return v.value ? "TRUE" : "FALSE";
255
+ case RVKind.Blank:
256
+ return "";
257
+ case RVKind.Error:
258
+ return v.code;
259
+ default:
260
+ return "";
261
+ }
262
+ }
263
+ /**
264
+ * Coerce a runtime value to a boolean.
265
+ */
266
+ export function toBooleanRV(v) {
267
+ switch (v.kind) {
268
+ case RVKind.Boolean:
269
+ return v;
270
+ case RVKind.Number:
271
+ return rvBoolean(v.value !== 0);
272
+ case RVKind.Blank:
273
+ return rvBoolean(false);
274
+ case RVKind.String: {
275
+ const u = v.value.toUpperCase();
276
+ if (u === "TRUE") {
277
+ return rvBoolean(true);
278
+ }
279
+ if (u === "FALSE") {
280
+ return rvBoolean(false);
281
+ }
282
+ return ERRORS.VALUE;
283
+ }
284
+ case RVKind.Error:
285
+ return v;
286
+ default:
287
+ return ERRORS.VALUE;
288
+ }
289
+ }
290
+ /**
291
+ * Structural equality of scalar values.
292
+ *
293
+ * - Different kinds → false
294
+ * - Number / Boolean / Blank → strict value equality (Blank always equal)
295
+ * - String → case-insensitive comparison (Excel semantics)
296
+ * - Error → not equal (errors do not compare equal to each other)
297
+ */
298
+ /**
299
+ * Three-way compare two scalars that share a kind.
300
+ *
301
+ * Returns a negative number if `a < b`, zero if equal, positive if `a > b`.
302
+ * Returns `NaN` when the kinds differ or cannot be ordered (e.g. errors);
303
+ * callers decide how to surface the incomparability — sort helpers usually
304
+ * skip NaN pairs, while comparison operators route to a kind-priority
305
+ * tiebreak. Strings are compared case-insensitively to match Excel.
306
+ */
307
+ export function compareScalarsSameKind(a, b) {
308
+ if (a.kind !== b.kind) {
309
+ return Number.NaN;
310
+ }
311
+ switch (a.kind) {
312
+ case RVKind.Number:
313
+ return a.value - b.value;
314
+ case RVKind.String: {
315
+ const al = a.value.toLowerCase();
316
+ const bl = b.value.toLowerCase();
317
+ return al < bl ? -1 : al > bl ? 1 : 0;
318
+ }
319
+ case RVKind.Boolean: {
320
+ const bv = b.value;
321
+ return a.value === bv ? 0 : a.value ? 1 : -1;
322
+ }
323
+ case RVKind.Blank:
324
+ return 0;
325
+ default:
326
+ return Number.NaN;
327
+ }
328
+ }
329
+ export function scalarEquals(a, b) {
330
+ if (a.kind !== b.kind) {
331
+ return false;
332
+ }
333
+ switch (a.kind) {
334
+ case RVKind.Number:
335
+ return a.value === b.value;
336
+ case RVKind.String:
337
+ return a.value.toLowerCase() === b.value.toLowerCase();
338
+ case RVKind.Boolean:
339
+ return a.value === b.value;
340
+ case RVKind.Blank:
341
+ return true;
342
+ default:
343
+ return false;
344
+ }
345
+ }
346
+ /**
347
+ * Get the top-left scalar from any value (for implicit intersection fallback).
348
+ */
349
+ export function topLeft(v) {
350
+ if (isScalar(v)) {
351
+ return v;
352
+ }
353
+ if (v.kind === RVKind.Array) {
354
+ if (v.height === 0 || v.width === 0) {
355
+ return BLANK;
356
+ }
357
+ return v.rows[0][0];
358
+ }
359
+ // Reference, Lambda → need context to resolve
360
+ return ERRORS.VALUE;
361
+ }
362
+ // ============================================================================
363
+ // Snapshot Value Conversion
364
+ // ============================================================================
365
+ /**
366
+ * Convert a SnapshotCellValue to a RuntimeValue.
367
+ */
368
+ export function fromSnapshotValue(v) {
369
+ if (v === null) {
370
+ return BLANK;
371
+ }
372
+ if (typeof v === "number") {
373
+ return rvNumber(v);
374
+ }
375
+ if (typeof v === "string") {
376
+ return rvString(v);
377
+ }
378
+ if (typeof v === "boolean") {
379
+ return rvBoolean(v);
380
+ }
381
+ if (typeof v === "object" && "error" in v) {
382
+ return rvError(v.error);
383
+ }
384
+ return BLANK;
385
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * AST Node Types for Formula Parser
3
+ *
4
+ * Defines the Abstract Syntax Tree node types as a proper discriminated union.
5
+ * Each node variant carries only the data relevant to its type.
6
+ */
7
+ // ============================================================================
8
+ // Node Type Enum
9
+ // ============================================================================
10
+ export var NodeType;
11
+ (function (NodeType) {
12
+ NodeType[NodeType["Number"] = 1] = "Number";
13
+ NodeType[NodeType["String"] = 2] = "String";
14
+ NodeType[NodeType["Boolean"] = 3] = "Boolean";
15
+ NodeType[NodeType["Error"] = 4] = "Error";
16
+ NodeType[NodeType["CellRef"] = 5] = "CellRef";
17
+ NodeType[NodeType["RangeRef"] = 6] = "RangeRef";
18
+ NodeType[NodeType["BinaryOp"] = 7] = "BinaryOp";
19
+ NodeType[NodeType["UnaryOp"] = 8] = "UnaryOp";
20
+ NodeType[NodeType["FunctionCall"] = 9] = "FunctionCall";
21
+ NodeType[NodeType["Array"] = 10] = "Array";
22
+ NodeType[NodeType["Percent"] = 11] = "Percent";
23
+ NodeType[NodeType["Name"] = 12] = "Name";
24
+ NodeType[NodeType["ColRangeRef"] = 13] = "ColRangeRef";
25
+ NodeType[NodeType["RowRangeRef"] = 14] = "RowRangeRef";
26
+ NodeType[NodeType["StructuredRef"] = 15] = "StructuredRef";
27
+ NodeType[NodeType["Missing"] = 16] = "Missing";
28
+ })(NodeType || (NodeType = {}));