@cj-tech-master/excelts 9.5.4 → 9.5.5

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 (767) hide show
  1. package/dist/browser/modules/archive/compression/streaming-compress.browser.js +29 -0
  2. package/dist/browser/modules/archive/compression/streaming-compress.js +9 -0
  3. package/dist/browser/modules/archive/compression/worker-pool/pool.browser.js +26 -1
  4. package/dist/browser/modules/archive/fs/archive-file.d.ts +8 -5
  5. package/dist/browser/modules/archive/fs/archive-file.js +78 -16
  6. package/dist/browser/modules/archive/unzip/stream.browser.js +43 -2
  7. package/dist/browser/modules/excel/chart/chart-ex-builder.js +7 -2
  8. package/dist/browser/modules/excel/chart/chart-ex-renderer.js +4 -9
  9. package/dist/browser/modules/excel/chart/chart-ex-types.d.ts +0 -12
  10. package/dist/browser/modules/excel/chart/chart.d.ts +1 -5
  11. package/dist/browser/modules/excel/chart/chart.js +1 -7
  12. package/dist/browser/modules/excel/chart/types.d.ts +0 -6
  13. package/dist/browser/modules/excel/stream/workbook-reader.browser.js +25 -1
  14. package/dist/browser/modules/excel/stream/workbook-reader.js +9 -0
  15. package/dist/browser/modules/excel/stream/workbook-writer.browser.d.ts +40 -0
  16. package/dist/browser/modules/excel/stream/workbook-writer.browser.js +228 -13
  17. package/dist/browser/modules/excel/utils/string-buf.d.ts +5 -26
  18. package/dist/browser/modules/excel/utils/string-buf.js +4 -81
  19. package/dist/browser/modules/excel/workbook.browser.js +135 -25
  20. package/dist/browser/modules/excel/xlsx/xform/chart/chart-space-xform.js +6 -20
  21. package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +19 -9
  22. package/dist/browser/modules/excel/xlsx/xlsx.browser.js +32 -8
  23. package/dist/browser/modules/excel/xlsx/xlsx.d.ts +10 -2
  24. package/dist/browser/modules/excel/xlsx/xlsx.js +9 -1
  25. package/dist/browser/modules/pdf/excel-bridge.d.ts +30 -1
  26. package/dist/browser/modules/pdf/excel-bridge.js +32 -0
  27. package/dist/browser/modules/pdf/font/metrics.d.ts +3 -52
  28. package/dist/browser/modules/pdf/font/metrics.js +3 -237
  29. package/dist/browser/modules/pdf/index.d.ts +1 -1
  30. package/dist/browser/modules/pdf/index.js +1 -1
  31. package/dist/browser/modules/pdf/render-layout-to-pdf.d.ts +66 -0
  32. package/dist/browser/modules/pdf/render-layout-to-pdf.js +647 -0
  33. package/dist/browser/modules/pdf/word-bridge.d.ts +80 -12
  34. package/dist/browser/modules/pdf/word-bridge.js +122 -274
  35. package/dist/browser/modules/stream/index.base.d.ts +2 -0
  36. package/dist/browser/modules/stream/index.base.js +2 -1
  37. package/dist/browser/modules/stream/internal/sink-adapter.d.ts +65 -0
  38. package/dist/browser/modules/stream/internal/sink-adapter.js +198 -0
  39. package/dist/browser/modules/stream/pull-stream.d.ts +19 -2
  40. package/dist/browser/modules/stream/pull-stream.js +51 -5
  41. package/dist/browser/modules/stream/types.d.ts +13 -1
  42. package/dist/browser/modules/word/advanced/diff.d.ts +61 -0
  43. package/dist/browser/modules/word/advanced/diff.js +167 -0
  44. package/dist/browser/modules/word/advanced/drawing-shapes.d.ts +269 -0
  45. package/dist/browser/modules/word/advanced/drawing-shapes.js +268 -0
  46. package/dist/browser/modules/word/advanced/field-engine.d.ts +43 -0
  47. package/dist/browser/modules/word/advanced/field-engine.js +1225 -0
  48. package/dist/browser/modules/word/advanced/glossary.d.ts +86 -0
  49. package/dist/browser/modules/word/advanced/glossary.js +79 -0
  50. package/dist/browser/modules/word/advanced/math-convert.d.ts +30 -0
  51. package/dist/browser/modules/word/advanced/math-convert.js +595 -0
  52. package/dist/browser/modules/word/advanced/ole-objects.d.ts +115 -0
  53. package/dist/browser/modules/word/advanced/ole-objects.js +271 -0
  54. package/dist/browser/modules/word/advanced/style-map.d.ts +105 -0
  55. package/dist/browser/modules/word/advanced/style-map.js +322 -0
  56. package/dist/browser/modules/word/advanced/validation.d.ts +56 -0
  57. package/dist/browser/modules/word/advanced/validation.js +1065 -0
  58. package/dist/browser/modules/word/advanced/vba-project.d.ts +91 -0
  59. package/dist/browser/modules/word/advanced/vba-project.js +265 -0
  60. package/dist/browser/modules/word/bridge/excel-bridge.d.ts +127 -0
  61. package/dist/browser/modules/word/bridge/excel-bridge.js +980 -0
  62. package/dist/browser/modules/word/builder/document-handle.d.ts +151 -0
  63. package/dist/browser/modules/word/builder/document-handle.js +664 -0
  64. package/dist/browser/modules/word/builder/paragraph-builders.d.ts +61 -0
  65. package/dist/browser/modules/word/builder/paragraph-builders.js +90 -0
  66. package/dist/browser/modules/word/builder/run-builders.d.ts +374 -0
  67. package/dist/browser/modules/word/builder/run-builders.js +600 -0
  68. package/dist/browser/modules/word/builder/table-builders.d.ts +23 -0
  69. package/dist/browser/modules/word/builder/table-builders.js +45 -0
  70. package/dist/browser/modules/word/constants.d.ts +39 -1
  71. package/dist/browser/modules/word/constants.js +109 -1
  72. package/dist/browser/modules/word/convert/conversion-ir.d.ts +210 -0
  73. package/dist/browser/modules/word/convert/conversion-ir.js +31 -0
  74. package/dist/browser/modules/word/convert/docx-to-semantic.d.ts +39 -0
  75. package/dist/browser/modules/word/convert/docx-to-semantic.js +499 -0
  76. package/dist/browser/modules/word/convert/flat-opc.d.ts +44 -0
  77. package/dist/browser/modules/word/convert/flat-opc.js +385 -0
  78. package/dist/browser/modules/word/convert/html/html-import.d.ts +50 -0
  79. package/dist/browser/modules/word/convert/html/html-import.js +1907 -0
  80. package/dist/{types/modules/word → browser/modules/word/convert/html}/html-renderer.d.ts +14 -1
  81. package/dist/{esm/modules/word → browser/modules/word/convert/html}/html-renderer.js +420 -69
  82. package/dist/browser/modules/word/convert/html/html.d.ts +15 -0
  83. package/dist/browser/modules/word/convert/html/html.js +15 -0
  84. package/dist/browser/modules/word/convert/markdown/markdown-import.d.ts +68 -0
  85. package/dist/browser/modules/word/convert/markdown/markdown-import.js +1325 -0
  86. package/dist/browser/modules/word/convert/markdown/markdown-renderer.d.ts +25 -0
  87. package/dist/browser/modules/word/convert/markdown/markdown-renderer.js +634 -0
  88. package/dist/browser/modules/word/convert/markdown/markdown.d.ts +15 -0
  89. package/dist/browser/modules/word/convert/markdown/markdown.js +15 -0
  90. package/dist/browser/modules/word/convert/odt/odt.d.ts +41 -0
  91. package/dist/browser/modules/word/convert/odt/odt.js +1932 -0
  92. package/dist/browser/modules/word/{color-utils.d.ts → core/color-utils.d.ts} +8 -1
  93. package/dist/browser/modules/word/core/color-utils.js +43 -0
  94. package/dist/browser/modules/word/core/internal-utils.d.ts +90 -0
  95. package/dist/browser/modules/word/core/internal-utils.js +209 -0
  96. package/dist/browser/modules/word/core/mapper.d.ts +44 -0
  97. package/dist/browser/modules/word/core/mapper.js +427 -0
  98. package/dist/browser/modules/word/core/opc-paths.d.ts +33 -0
  99. package/dist/browser/modules/word/core/opc-paths.js +48 -0
  100. package/dist/browser/modules/word/core/text-utils.d.ts +38 -0
  101. package/dist/browser/modules/word/core/text-utils.js +202 -0
  102. package/dist/browser/modules/word/core/walker.d.ts +119 -0
  103. package/dist/browser/modules/word/core/walker.js +570 -0
  104. package/dist/browser/modules/word/crypto.d.ts +14 -9
  105. package/dist/browser/modules/word/crypto.js +13 -7
  106. package/dist/browser/modules/word/document-io.d.ts +59 -27
  107. package/dist/browser/modules/word/document-io.js +80 -197
  108. package/dist/browser/modules/word/errors.d.ts +44 -1
  109. package/dist/browser/modules/word/errors.js +54 -2
  110. package/dist/browser/modules/word/excel.d.ts +14 -0
  111. package/dist/browser/modules/word/excel.js +13 -0
  112. package/dist/browser/modules/word/font/font-embed.d.ts +112 -0
  113. package/dist/browser/modules/word/font/font-embed.js +646 -0
  114. package/dist/{esm/modules/word → browser/modules/word/font}/font-obfuscation.js +4 -9
  115. package/dist/browser/modules/word/font/hyphenation.d.ts +65 -0
  116. package/dist/browser/modules/word/font/hyphenation.js +4210 -0
  117. package/dist/browser/modules/word/font/text-shaping.d.ts +58 -0
  118. package/dist/browser/modules/word/font/text-shaping.js +635 -0
  119. package/dist/browser/modules/word/html.d.ts +7 -6
  120. package/dist/browser/modules/word/html.js +6 -5
  121. package/dist/browser/modules/word/incremental-edit.d.ts +123 -0
  122. package/dist/browser/modules/word/incremental-edit.js +361 -0
  123. package/dist/browser/modules/word/index.base.d.ts +194 -10
  124. package/dist/browser/modules/word/index.base.js +138 -29
  125. package/dist/browser/modules/word/layout/layout-constants.d.ts +17 -0
  126. package/dist/browser/modules/word/layout/layout-constants.js +17 -0
  127. package/dist/browser/modules/word/layout/layout-full.d.ts +53 -0
  128. package/dist/browser/modules/word/layout/layout-full.js +1696 -0
  129. package/dist/browser/modules/word/layout/layout-model.d.ts +344 -0
  130. package/dist/browser/modules/word/layout/layout-model.js +16 -0
  131. package/dist/browser/modules/word/layout/layout.d.ts +63 -0
  132. package/dist/browser/modules/word/layout/layout.js +1167 -0
  133. package/dist/browser/modules/word/layout/render-page.d.ts +57 -0
  134. package/dist/browser/modules/word/layout/render-page.js +1238 -0
  135. package/dist/browser/modules/word/markdown.d.ts +14 -0
  136. package/dist/browser/modules/word/markdown.js +13 -0
  137. package/dist/browser/modules/word/patcher.d.ts +62 -0
  138. package/dist/browser/modules/word/patcher.js +537 -0
  139. package/dist/browser/modules/word/query/compat.d.ts +25 -0
  140. package/dist/browser/modules/word/query/compat.js +58 -0
  141. package/dist/browser/modules/word/query/data-binding.d.ts +22 -0
  142. package/dist/browser/modules/word/query/data-binding.js +392 -0
  143. package/dist/browser/modules/word/query/form-fields.d.ts +41 -0
  144. package/dist/browser/modules/word/query/form-fields.js +268 -0
  145. package/dist/browser/modules/word/query/format-search.d.ts +99 -0
  146. package/dist/browser/modules/word/query/format-search.js +329 -0
  147. package/dist/browser/modules/word/query/mail-merge.d.ts +25 -0
  148. package/dist/browser/modules/word/query/mail-merge.js +111 -0
  149. package/dist/browser/modules/word/query/merge.d.ts +50 -0
  150. package/dist/browser/modules/word/query/merge.js +617 -0
  151. package/dist/browser/modules/word/query/replace.d.ts +47 -0
  152. package/dist/browser/modules/word/query/replace.js +301 -0
  153. package/dist/browser/modules/word/query/revisions.d.ts +67 -0
  154. package/dist/browser/modules/word/query/revisions.js +879 -0
  155. package/dist/browser/modules/word/query/search.d.ts +129 -0
  156. package/dist/browser/modules/word/query/search.js +346 -0
  157. package/dist/browser/modules/word/query/split.d.ts +44 -0
  158. package/dist/browser/modules/word/query/split.js +135 -0
  159. package/dist/browser/modules/word/query/style-resolve.d.ts +104 -0
  160. package/dist/browser/modules/word/query/style-resolve.js +368 -0
  161. package/dist/browser/modules/word/reader/chart-parser.d.ts +20 -0
  162. package/dist/browser/modules/word/reader/chart-parser.js +810 -0
  163. package/dist/browser/modules/word/reader/comments-parser.d.ts +26 -0
  164. package/dist/browser/modules/word/reader/comments-parser.js +92 -0
  165. package/dist/browser/modules/word/reader/doc-props-parsers.d.ts +15 -0
  166. package/dist/browser/modules/word/reader/doc-props-parsers.js +190 -0
  167. package/dist/browser/modules/word/reader/docx-reader.d.ts +27 -0
  168. package/dist/browser/modules/word/reader/docx-reader.js +2557 -0
  169. package/dist/browser/modules/word/reader/drawing-helpers.d.ts +27 -0
  170. package/dist/browser/modules/word/reader/drawing-helpers.js +84 -0
  171. package/dist/browser/modules/word/reader/form-field-parser.d.ts +21 -0
  172. package/dist/browser/modules/word/reader/form-field-parser.js +82 -0
  173. package/dist/browser/modules/word/reader/image-parsers.d.ts +11 -0
  174. package/dist/browser/modules/word/reader/image-parsers.js +291 -0
  175. package/dist/browser/modules/word/reader/math-parser.d.ts +12 -0
  176. package/dist/browser/modules/word/reader/math-parser.js +422 -0
  177. package/dist/browser/modules/word/reader/metadata-parsers.d.ts +17 -0
  178. package/dist/browser/modules/word/reader/metadata-parsers.js +87 -0
  179. package/dist/browser/modules/word/reader/numbering-parser.d.ts +13 -0
  180. package/dist/browser/modules/word/reader/numbering-parser.js +166 -0
  181. package/dist/browser/modules/word/reader/paragraph-section-parsers.d.ts +12 -0
  182. package/dist/browser/modules/word/reader/paragraph-section-parsers.js +503 -0
  183. package/dist/browser/modules/word/reader/parse-utils.d.ts +91 -0
  184. package/dist/browser/modules/word/reader/parse-utils.js +249 -0
  185. package/dist/browser/modules/word/reader/properties-parsers.d.ts +21 -0
  186. package/dist/browser/modules/word/reader/properties-parsers.js +332 -0
  187. package/dist/browser/modules/word/reader/reader-context.d.ts +69 -0
  188. package/dist/browser/modules/word/reader/reader-context.js +61 -0
  189. package/dist/browser/modules/word/reader/sdt-helpers.d.ts +29 -0
  190. package/dist/browser/modules/word/reader/sdt-helpers.js +111 -0
  191. package/dist/browser/modules/word/reader/settings-parser.d.ts +8 -0
  192. package/dist/browser/modules/word/reader/settings-parser.js +263 -0
  193. package/dist/browser/modules/word/reader/styles-parser.d.ts +12 -0
  194. package/dist/browser/modules/word/reader/styles-parser.js +147 -0
  195. package/dist/browser/modules/word/reader/table-properties-parsers.d.ts +12 -0
  196. package/dist/browser/modules/word/reader/table-properties-parsers.js +234 -0
  197. package/dist/browser/modules/word/reader/theme-parser.d.ts +8 -0
  198. package/dist/browser/modules/word/reader/theme-parser.js +167 -0
  199. package/dist/browser/modules/word/reader/watermark-parser.d.ts +15 -0
  200. package/dist/browser/modules/word/reader/watermark-parser.js +110 -0
  201. package/dist/browser/modules/word/security/cfb-reader.d.ts +37 -0
  202. package/dist/browser/modules/word/security/cfb-reader.js +410 -0
  203. package/dist/browser/modules/word/{digital-signatures.d.ts → security/digital-signatures.d.ts} +19 -11
  204. package/dist/browser/modules/word/{digital-signatures.js → security/digital-signatures.js} +34 -34
  205. package/dist/browser/modules/word/security/document-protection.d.ts +93 -0
  206. package/dist/browser/modules/word/security/document-protection.js +201 -0
  207. package/dist/{types/modules/word → browser/modules/word/security}/encryption.d.ts +51 -4
  208. package/dist/browser/modules/word/security/encryption.js +602 -0
  209. package/dist/browser/modules/word/security/policy.d.ts +80 -0
  210. package/dist/browser/modules/word/security/policy.js +102 -0
  211. package/dist/browser/modules/word/template/template-chart.d.ts +56 -0
  212. package/dist/browser/modules/word/template/template-chart.js +167 -0
  213. package/dist/browser/modules/word/template/template-datasource.d.ts +154 -0
  214. package/dist/browser/modules/word/template/template-datasource.js +541 -0
  215. package/dist/browser/modules/word/template/template-engine.d.ts +121 -0
  216. package/dist/browser/modules/word/template/template-engine.js +1435 -0
  217. package/dist/browser/modules/word/types.d.ts +224 -25
  218. package/dist/browser/modules/word/units.d.ts +26 -0
  219. package/dist/browser/modules/word/units.js +43 -14
  220. package/dist/browser/modules/word/{writers → writer}/chart-writer.js +164 -23
  221. package/dist/browser/modules/word/writer/checkbox-writer.d.ts +17 -0
  222. package/dist/browser/modules/word/writer/checkbox-writer.js +79 -0
  223. package/dist/{types/modules/word/writers → browser/modules/word/writer}/comment-writer.d.ts +2 -1
  224. package/dist/browser/modules/word/{writers → writer}/comment-writer.js +8 -6
  225. package/dist/browser/modules/word/writer/common-parts.d.ts +57 -0
  226. package/dist/browser/modules/word/writer/common-parts.js +101 -0
  227. package/dist/{types/modules/word → browser/modules/word/writer}/content-types.d.ts +2 -2
  228. package/dist/{esm/modules/word → browser/modules/word/writer}/content-types.js +14 -6
  229. package/dist/browser/modules/word/writer/document-writer.d.ts +24 -0
  230. package/dist/browser/modules/word/writer/document-writer.js +473 -0
  231. package/dist/browser/modules/word/writer/docx-packager.d.ts +35 -0
  232. package/dist/browser/modules/word/writer/docx-packager.js +1515 -0
  233. package/dist/{types/modules/word/writers → browser/modules/word/writer}/footnote-writer.d.ts +3 -2
  234. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/footnote-writer.js +13 -10
  235. package/dist/{types/modules/word/writers → browser/modules/word/writer}/header-footer-writer.d.ts +3 -2
  236. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/header-footer-writer.js +39 -21
  237. package/dist/{types/modules/word/writers → browser/modules/word/writer}/image-writer.d.ts +1 -1
  238. package/dist/browser/modules/word/{writers → writer}/image-writer.js +11 -7
  239. package/dist/browser/modules/word/writer/math-writer.d.ts +20 -0
  240. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/math-writer.js +21 -1
  241. package/dist/browser/modules/word/{writers → writer}/numbering-writer.d.ts +1 -1
  242. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/numbering-writer.js +11 -4
  243. package/dist/browser/modules/word/{writers → writer}/paragraph-writer.d.ts +2 -1
  244. package/dist/browser/modules/word/{writers → writer}/paragraph-writer.js +73 -38
  245. package/dist/browser/modules/word/{writers → writer}/parts-writer.d.ts +3 -3
  246. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/parts-writer.js +91 -12
  247. package/dist/browser/modules/word/writer/reference-scanners.d.ts +42 -0
  248. package/dist/browser/modules/word/writer/reference-scanners.js +111 -0
  249. package/dist/browser/modules/word/writer/relationships.d.ts +52 -0
  250. package/dist/browser/modules/word/writer/relationships.js +117 -0
  251. package/dist/browser/modules/word/writer/render-context.d.ts +124 -0
  252. package/dist/browser/modules/word/writer/render-context.js +46 -0
  253. package/dist/browser/modules/word/{writers → writer}/run-writer.d.ts +10 -1
  254. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/run-writer.js +126 -24
  255. package/dist/browser/modules/word/writer/sdt-writer.d.ts +25 -0
  256. package/dist/browser/modules/word/writer/sdt-writer.js +189 -0
  257. package/dist/browser/modules/word/writer/stream-buf.d.ts +37 -0
  258. package/dist/browser/modules/word/writer/stream-buf.js +73 -0
  259. package/dist/browser/modules/word/writer/streaming-writer.d.ts +344 -0
  260. package/dist/browser/modules/word/writer/streaming-writer.js +1382 -0
  261. package/dist/browser/modules/word/writer/string-buf.d.ts +8 -0
  262. package/dist/browser/modules/word/writer/string-buf.js +7 -0
  263. package/dist/browser/modules/word/{writers → writer}/styles-writer.js +32 -1
  264. package/dist/browser/modules/word/{writers → writer}/table-writer.d.ts +2 -1
  265. package/dist/browser/modules/word/{writers → writer}/table-writer.js +94 -11
  266. package/dist/browser/modules/xml/types.d.ts +22 -0
  267. package/dist/browser/utils/crypto.browser.d.ts +3 -1
  268. package/dist/browser/utils/crypto.browser.js +3 -1
  269. package/dist/browser/utils/crypto.d.ts +4 -1
  270. package/dist/browser/utils/crypto.js +4 -1
  271. package/dist/browser/utils/font-metrics.d.ts +63 -0
  272. package/dist/browser/utils/font-metrics.js +293 -0
  273. package/dist/browser/utils/string-buf.d.ts +42 -0
  274. package/dist/browser/utils/string-buf.js +89 -0
  275. package/dist/browser/utils/theme-colors.d.ts +55 -0
  276. package/dist/browser/utils/theme-colors.js +120 -0
  277. package/dist/cjs/modules/archive/compression/streaming-compress.browser.js +29 -0
  278. package/dist/cjs/modules/archive/compression/streaming-compress.js +9 -0
  279. package/dist/cjs/modules/archive/compression/worker-pool/pool.browser.js +26 -1
  280. package/dist/cjs/modules/archive/fs/archive-file.js +78 -16
  281. package/dist/cjs/modules/archive/unzip/stream.browser.js +43 -2
  282. package/dist/cjs/modules/excel/chart/chart-ex-builder.js +7 -2
  283. package/dist/cjs/modules/excel/chart/chart-ex-renderer.js +4 -9
  284. package/dist/cjs/modules/excel/chart/chart.js +1 -7
  285. package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +25 -1
  286. package/dist/cjs/modules/excel/stream/workbook-reader.js +9 -0
  287. package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +228 -13
  288. package/dist/cjs/modules/excel/utils/string-buf.js +5 -81
  289. package/dist/cjs/modules/excel/workbook.browser.js +135 -25
  290. package/dist/cjs/modules/excel/xlsx/xform/chart/chart-space-xform.js +6 -20
  291. package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +32 -8
  292. package/dist/cjs/modules/excel/xlsx/xlsx.js +9 -1
  293. package/dist/cjs/modules/pdf/excel-bridge.js +33 -0
  294. package/dist/cjs/modules/pdf/font/metrics.js +11 -244
  295. package/dist/cjs/modules/pdf/index.js +2 -1
  296. package/dist/cjs/modules/pdf/render-layout-to-pdf.js +651 -0
  297. package/dist/cjs/modules/pdf/word-bridge.js +155 -274
  298. package/dist/cjs/modules/stream/index.base.js +4 -2
  299. package/dist/cjs/modules/stream/internal/sink-adapter.js +202 -0
  300. package/dist/cjs/modules/stream/pull-stream.js +51 -5
  301. package/dist/cjs/modules/word/advanced/diff.js +170 -0
  302. package/dist/cjs/modules/word/advanced/drawing-shapes.js +279 -0
  303. package/dist/cjs/modules/word/advanced/field-engine.js +1229 -0
  304. package/dist/cjs/modules/word/advanced/glossary.js +87 -0
  305. package/dist/cjs/modules/word/advanced/math-convert.js +599 -0
  306. package/dist/cjs/modules/word/advanced/ole-objects.js +277 -0
  307. package/dist/cjs/modules/word/advanced/style-map.js +329 -0
  308. package/dist/cjs/modules/word/advanced/validation.js +1068 -0
  309. package/dist/cjs/modules/word/advanced/vba-project.js +274 -0
  310. package/dist/cjs/modules/word/bridge/excel-bridge.js +1020 -0
  311. package/dist/cjs/modules/word/builder/document-handle.js +667 -0
  312. package/dist/cjs/modules/word/builder/paragraph-builders.js +109 -0
  313. package/dist/cjs/modules/word/builder/run-builders.js +676 -0
  314. package/dist/cjs/modules/word/builder/table-builders.js +53 -0
  315. package/dist/cjs/modules/word/constants.js +111 -2
  316. package/dist/cjs/modules/word/convert/conversion-ir.js +34 -0
  317. package/dist/cjs/modules/word/convert/docx-to-semantic.js +502 -0
  318. package/dist/cjs/modules/word/convert/flat-opc.js +390 -0
  319. package/dist/cjs/modules/word/convert/html/html-import.js +1910 -0
  320. package/dist/cjs/modules/word/{html-renderer.js → convert/html/html-renderer.js} +420 -69
  321. package/dist/cjs/modules/word/convert/html/html.js +20 -0
  322. package/dist/cjs/modules/word/convert/markdown/markdown-import.js +1329 -0
  323. package/dist/cjs/modules/word/convert/markdown/markdown-renderer.js +637 -0
  324. package/dist/cjs/modules/word/convert/markdown/markdown.js +21 -0
  325. package/dist/cjs/modules/word/convert/odt/odt.js +1936 -0
  326. package/dist/cjs/modules/word/core/color-utils.js +47 -0
  327. package/dist/cjs/modules/word/core/internal-utils.js +219 -0
  328. package/dist/cjs/modules/word/core/mapper.js +430 -0
  329. package/dist/cjs/modules/word/core/opc-paths.js +53 -0
  330. package/dist/cjs/modules/word/core/text-utils.js +210 -0
  331. package/dist/cjs/modules/word/core/walker.js +577 -0
  332. package/dist/cjs/modules/word/crypto.js +19 -8
  333. package/dist/cjs/modules/word/document-io.js +117 -197
  334. package/dist/cjs/modules/word/errors.js +59 -13
  335. package/dist/cjs/modules/word/excel.js +22 -0
  336. package/dist/cjs/modules/word/font/font-embed.js +652 -0
  337. package/dist/cjs/modules/word/{font-obfuscation.js → font/font-obfuscation.js} +4 -9
  338. package/dist/cjs/modules/word/font/hyphenation.js +4216 -0
  339. package/dist/cjs/modules/word/font/text-shaping.js +640 -0
  340. package/dist/cjs/modules/word/html.js +9 -7
  341. package/dist/cjs/modules/word/incremental-edit.js +366 -0
  342. package/dist/cjs/modules/word/index.base.js +370 -137
  343. package/dist/cjs/modules/word/layout/layout-constants.js +20 -0
  344. package/dist/cjs/modules/word/layout/layout-full.js +1699 -0
  345. package/dist/cjs/modules/word/layout/layout-model.js +17 -0
  346. package/dist/cjs/modules/word/layout/layout.js +1170 -0
  347. package/dist/cjs/modules/word/layout/render-page.js +1243 -0
  348. package/dist/cjs/modules/word/markdown.js +19 -0
  349. package/dist/cjs/modules/word/patcher.js +539 -0
  350. package/dist/cjs/modules/word/query/compat.js +61 -0
  351. package/dist/cjs/modules/word/query/data-binding.js +395 -0
  352. package/dist/cjs/modules/word/query/form-fields.js +272 -0
  353. package/dist/cjs/modules/word/query/format-search.js +334 -0
  354. package/dist/cjs/modules/word/query/mail-merge.js +114 -0
  355. package/dist/cjs/modules/word/query/merge.js +620 -0
  356. package/dist/cjs/modules/word/query/replace.js +304 -0
  357. package/dist/cjs/modules/word/query/revisions.js +885 -0
  358. package/dist/cjs/modules/word/query/search.js +361 -0
  359. package/dist/cjs/modules/word/query/split.js +138 -0
  360. package/dist/cjs/modules/word/query/style-resolve.js +374 -0
  361. package/dist/cjs/modules/word/reader/chart-parser.js +814 -0
  362. package/dist/cjs/modules/word/reader/comments-parser.js +96 -0
  363. package/dist/cjs/modules/word/reader/doc-props-parsers.js +194 -0
  364. package/dist/cjs/modules/word/reader/docx-reader.js +2560 -0
  365. package/dist/cjs/modules/word/reader/drawing-helpers.js +90 -0
  366. package/dist/cjs/modules/word/reader/form-field-parser.js +85 -0
  367. package/dist/cjs/modules/word/reader/image-parsers.js +293 -0
  368. package/dist/cjs/modules/word/reader/math-parser.js +424 -0
  369. package/dist/cjs/modules/word/reader/metadata-parsers.js +93 -0
  370. package/dist/cjs/modules/word/reader/numbering-parser.js +168 -0
  371. package/dist/cjs/modules/word/reader/paragraph-section-parsers.js +505 -0
  372. package/dist/cjs/modules/word/reader/parse-utils.js +271 -0
  373. package/dist/cjs/modules/word/reader/properties-parsers.js +338 -0
  374. package/dist/cjs/modules/word/reader/reader-context.js +66 -0
  375. package/dist/cjs/modules/word/reader/sdt-helpers.js +114 -0
  376. package/dist/cjs/modules/word/reader/settings-parser.js +265 -0
  377. package/dist/cjs/modules/word/reader/styles-parser.js +149 -0
  378. package/dist/cjs/modules/word/reader/table-properties-parsers.js +237 -0
  379. package/dist/cjs/modules/word/reader/theme-parser.js +169 -0
  380. package/dist/cjs/modules/word/reader/watermark-parser.js +113 -0
  381. package/dist/cjs/modules/word/security/cfb-reader.js +414 -0
  382. package/dist/cjs/modules/word/{digital-signatures.js → security/digital-signatures.js} +34 -34
  383. package/dist/cjs/modules/word/security/document-protection.js +208 -0
  384. package/dist/cjs/modules/word/security/encryption.js +612 -0
  385. package/dist/cjs/modules/word/security/policy.js +106 -0
  386. package/dist/cjs/modules/word/template/template-chart.js +170 -0
  387. package/dist/cjs/modules/word/template/template-datasource.js +549 -0
  388. package/dist/cjs/modules/word/template/template-engine.js +1430 -0
  389. package/dist/cjs/modules/word/units.js +44 -14
  390. package/dist/cjs/modules/word/{writers → writer}/chart-writer.js +163 -22
  391. package/dist/cjs/modules/word/writer/checkbox-writer.js +82 -0
  392. package/dist/cjs/modules/word/{writers → writer}/comment-writer.js +8 -6
  393. package/dist/cjs/modules/word/writer/common-parts.js +104 -0
  394. package/dist/cjs/modules/word/{content-types.js → writer/content-types.js} +14 -6
  395. package/dist/cjs/modules/word/writer/document-writer.js +478 -0
  396. package/dist/cjs/modules/word/writer/docx-packager.js +1551 -0
  397. package/dist/cjs/modules/word/{writers → writer}/footnote-writer.js +13 -10
  398. package/dist/cjs/modules/word/{writers → writer}/header-footer-writer.js +38 -20
  399. package/dist/cjs/modules/word/{writers → writer}/image-writer.js +11 -7
  400. package/dist/cjs/modules/word/{writers → writer}/math-writer.js +21 -1
  401. package/dist/cjs/modules/word/{writers → writer}/numbering-writer.js +11 -4
  402. package/dist/cjs/modules/word/{writers → writer}/paragraph-writer.js +72 -37
  403. package/dist/cjs/modules/word/{writers → writer}/parts-writer.js +91 -12
  404. package/dist/cjs/modules/word/writer/reference-scanners.js +120 -0
  405. package/dist/cjs/modules/word/writer/relationships.js +124 -0
  406. package/dist/cjs/modules/word/writer/render-context.js +51 -0
  407. package/dist/cjs/modules/word/{writers → writer}/run-writer.js +127 -24
  408. package/dist/cjs/modules/word/writer/sdt-writer.js +192 -0
  409. package/dist/cjs/modules/word/writer/stream-buf.js +76 -0
  410. package/dist/cjs/modules/word/writer/streaming-writer.js +1387 -0
  411. package/dist/cjs/modules/word/writer/string-buf.js +11 -0
  412. package/dist/cjs/modules/word/{writers → writer}/styles-writer.js +32 -1
  413. package/dist/cjs/modules/word/{writers → writer}/table-writer.js +94 -11
  414. package/dist/cjs/utils/crypto.browser.js +3 -1
  415. package/dist/cjs/utils/crypto.js +4 -1
  416. package/dist/cjs/utils/font-metrics.js +303 -0
  417. package/dist/cjs/utils/string-buf.js +92 -0
  418. package/dist/cjs/utils/theme-colors.js +126 -0
  419. package/dist/esm/modules/archive/compression/streaming-compress.browser.js +29 -0
  420. package/dist/esm/modules/archive/compression/streaming-compress.js +9 -0
  421. package/dist/esm/modules/archive/compression/worker-pool/pool.browser.js +26 -1
  422. package/dist/esm/modules/archive/fs/archive-file.js +78 -16
  423. package/dist/esm/modules/archive/unzip/stream.browser.js +43 -2
  424. package/dist/esm/modules/excel/chart/chart-ex-builder.js +7 -2
  425. package/dist/esm/modules/excel/chart/chart-ex-renderer.js +4 -9
  426. package/dist/esm/modules/excel/chart/chart.js +1 -7
  427. package/dist/esm/modules/excel/stream/workbook-reader.browser.js +25 -1
  428. package/dist/esm/modules/excel/stream/workbook-reader.js +9 -0
  429. package/dist/esm/modules/excel/stream/workbook-writer.browser.js +228 -13
  430. package/dist/esm/modules/excel/utils/string-buf.js +4 -81
  431. package/dist/esm/modules/excel/workbook.browser.js +135 -25
  432. package/dist/esm/modules/excel/xlsx/xform/chart/chart-space-xform.js +6 -20
  433. package/dist/esm/modules/excel/xlsx/xlsx.browser.js +32 -8
  434. package/dist/esm/modules/excel/xlsx/xlsx.js +9 -1
  435. package/dist/esm/modules/pdf/excel-bridge.js +32 -0
  436. package/dist/esm/modules/pdf/font/metrics.js +3 -237
  437. package/dist/esm/modules/pdf/index.js +1 -1
  438. package/dist/esm/modules/pdf/render-layout-to-pdf.js +647 -0
  439. package/dist/esm/modules/pdf/word-bridge.js +122 -274
  440. package/dist/esm/modules/stream/index.base.js +2 -1
  441. package/dist/esm/modules/stream/internal/sink-adapter.js +198 -0
  442. package/dist/esm/modules/stream/pull-stream.js +51 -5
  443. package/dist/esm/modules/word/advanced/diff.js +167 -0
  444. package/dist/esm/modules/word/advanced/drawing-shapes.js +268 -0
  445. package/dist/esm/modules/word/advanced/field-engine.js +1225 -0
  446. package/dist/esm/modules/word/advanced/glossary.js +79 -0
  447. package/dist/esm/modules/word/advanced/math-convert.js +595 -0
  448. package/dist/esm/modules/word/advanced/ole-objects.js +271 -0
  449. package/dist/esm/modules/word/advanced/style-map.js +322 -0
  450. package/dist/esm/modules/word/advanced/validation.js +1065 -0
  451. package/dist/esm/modules/word/advanced/vba-project.js +265 -0
  452. package/dist/esm/modules/word/bridge/excel-bridge.js +980 -0
  453. package/dist/esm/modules/word/builder/document-handle.js +664 -0
  454. package/dist/esm/modules/word/builder/paragraph-builders.js +90 -0
  455. package/dist/esm/modules/word/builder/run-builders.js +600 -0
  456. package/dist/esm/modules/word/builder/table-builders.js +45 -0
  457. package/dist/esm/modules/word/constants.js +109 -1
  458. package/dist/esm/modules/word/convert/conversion-ir.js +31 -0
  459. package/dist/esm/modules/word/convert/docx-to-semantic.js +499 -0
  460. package/dist/esm/modules/word/convert/flat-opc.js +385 -0
  461. package/dist/esm/modules/word/convert/html/html-import.js +1907 -0
  462. package/dist/{browser/modules/word → esm/modules/word/convert/html}/html-renderer.js +420 -69
  463. package/dist/esm/modules/word/convert/html/html.js +15 -0
  464. package/dist/esm/modules/word/convert/markdown/markdown-import.js +1325 -0
  465. package/dist/esm/modules/word/convert/markdown/markdown-renderer.js +634 -0
  466. package/dist/esm/modules/word/convert/markdown/markdown.js +15 -0
  467. package/dist/esm/modules/word/convert/odt/odt.js +1932 -0
  468. package/dist/esm/modules/word/core/color-utils.js +43 -0
  469. package/dist/esm/modules/word/core/internal-utils.js +209 -0
  470. package/dist/esm/modules/word/core/mapper.js +427 -0
  471. package/dist/esm/modules/word/core/opc-paths.js +48 -0
  472. package/dist/esm/modules/word/core/text-utils.js +202 -0
  473. package/dist/esm/modules/word/core/walker.js +570 -0
  474. package/dist/esm/modules/word/crypto.js +13 -7
  475. package/dist/esm/modules/word/document-io.js +80 -197
  476. package/dist/esm/modules/word/errors.js +54 -2
  477. package/dist/esm/modules/word/excel.js +13 -0
  478. package/dist/esm/modules/word/font/font-embed.js +646 -0
  479. package/dist/{browser/modules/word → esm/modules/word/font}/font-obfuscation.js +4 -9
  480. package/dist/esm/modules/word/font/hyphenation.js +4210 -0
  481. package/dist/esm/modules/word/font/text-shaping.js +635 -0
  482. package/dist/esm/modules/word/html.js +6 -5
  483. package/dist/esm/modules/word/incremental-edit.js +361 -0
  484. package/dist/esm/modules/word/index.base.js +138 -29
  485. package/dist/esm/modules/word/layout/layout-constants.js +17 -0
  486. package/dist/esm/modules/word/layout/layout-full.js +1696 -0
  487. package/dist/esm/modules/word/layout/layout-model.js +16 -0
  488. package/dist/esm/modules/word/layout/layout.js +1167 -0
  489. package/dist/esm/modules/word/layout/render-page.js +1238 -0
  490. package/dist/esm/modules/word/markdown.js +13 -0
  491. package/dist/esm/modules/word/patcher.js +537 -0
  492. package/dist/esm/modules/word/query/compat.js +58 -0
  493. package/dist/esm/modules/word/query/data-binding.js +392 -0
  494. package/dist/esm/modules/word/query/form-fields.js +268 -0
  495. package/dist/esm/modules/word/query/format-search.js +329 -0
  496. package/dist/esm/modules/word/query/mail-merge.js +111 -0
  497. package/dist/esm/modules/word/query/merge.js +617 -0
  498. package/dist/esm/modules/word/query/replace.js +301 -0
  499. package/dist/esm/modules/word/query/revisions.js +879 -0
  500. package/dist/esm/modules/word/query/search.js +346 -0
  501. package/dist/esm/modules/word/query/split.js +135 -0
  502. package/dist/esm/modules/word/query/style-resolve.js +368 -0
  503. package/dist/esm/modules/word/reader/chart-parser.js +810 -0
  504. package/dist/esm/modules/word/reader/comments-parser.js +92 -0
  505. package/dist/esm/modules/word/reader/doc-props-parsers.js +190 -0
  506. package/dist/esm/modules/word/reader/docx-reader.js +2557 -0
  507. package/dist/esm/modules/word/reader/drawing-helpers.js +84 -0
  508. package/dist/esm/modules/word/reader/form-field-parser.js +82 -0
  509. package/dist/esm/modules/word/reader/image-parsers.js +291 -0
  510. package/dist/esm/modules/word/reader/math-parser.js +422 -0
  511. package/dist/esm/modules/word/reader/metadata-parsers.js +87 -0
  512. package/dist/esm/modules/word/reader/numbering-parser.js +166 -0
  513. package/dist/esm/modules/word/reader/paragraph-section-parsers.js +503 -0
  514. package/dist/esm/modules/word/reader/parse-utils.js +249 -0
  515. package/dist/esm/modules/word/reader/properties-parsers.js +332 -0
  516. package/dist/esm/modules/word/reader/reader-context.js +61 -0
  517. package/dist/esm/modules/word/reader/sdt-helpers.js +111 -0
  518. package/dist/esm/modules/word/reader/settings-parser.js +263 -0
  519. package/dist/esm/modules/word/reader/styles-parser.js +147 -0
  520. package/dist/esm/modules/word/reader/table-properties-parsers.js +234 -0
  521. package/dist/esm/modules/word/reader/theme-parser.js +167 -0
  522. package/dist/esm/modules/word/reader/watermark-parser.js +110 -0
  523. package/dist/esm/modules/word/security/cfb-reader.js +410 -0
  524. package/dist/esm/modules/word/{digital-signatures.js → security/digital-signatures.js} +34 -34
  525. package/dist/esm/modules/word/security/document-protection.js +201 -0
  526. package/dist/esm/modules/word/security/encryption.js +602 -0
  527. package/dist/esm/modules/word/security/policy.js +102 -0
  528. package/dist/esm/modules/word/template/template-chart.js +167 -0
  529. package/dist/esm/modules/word/template/template-datasource.js +541 -0
  530. package/dist/esm/modules/word/template/template-engine.js +1435 -0
  531. package/dist/esm/modules/word/units.js +43 -14
  532. package/dist/esm/modules/word/{writers → writer}/chart-writer.js +164 -23
  533. package/dist/esm/modules/word/writer/checkbox-writer.js +79 -0
  534. package/dist/esm/modules/word/{writers → writer}/comment-writer.js +8 -6
  535. package/dist/esm/modules/word/writer/common-parts.js +101 -0
  536. package/dist/{browser/modules/word → esm/modules/word/writer}/content-types.js +14 -6
  537. package/dist/esm/modules/word/writer/document-writer.js +473 -0
  538. package/dist/esm/modules/word/writer/docx-packager.js +1515 -0
  539. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/footnote-writer.js +13 -10
  540. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/header-footer-writer.js +39 -21
  541. package/dist/esm/modules/word/{writers → writer}/image-writer.js +11 -7
  542. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/math-writer.js +21 -1
  543. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/numbering-writer.js +11 -4
  544. package/dist/esm/modules/word/{writers → writer}/paragraph-writer.js +73 -38
  545. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/parts-writer.js +91 -12
  546. package/dist/esm/modules/word/writer/reference-scanners.js +111 -0
  547. package/dist/esm/modules/word/writer/relationships.js +117 -0
  548. package/dist/esm/modules/word/writer/render-context.js +46 -0
  549. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/run-writer.js +126 -24
  550. package/dist/esm/modules/word/writer/sdt-writer.js +189 -0
  551. package/dist/esm/modules/word/writer/stream-buf.js +73 -0
  552. package/dist/esm/modules/word/writer/streaming-writer.js +1382 -0
  553. package/dist/esm/modules/word/writer/string-buf.js +7 -0
  554. package/dist/esm/modules/word/{writers → writer}/styles-writer.js +32 -1
  555. package/dist/esm/modules/word/{writers → writer}/table-writer.js +94 -11
  556. package/dist/esm/utils/crypto.browser.js +3 -1
  557. package/dist/esm/utils/crypto.js +4 -1
  558. package/dist/esm/utils/font-metrics.js +293 -0
  559. package/dist/esm/utils/string-buf.js +89 -0
  560. package/dist/esm/utils/theme-colors.js +120 -0
  561. package/dist/iife/excelts.iife.js +70692 -70337
  562. package/dist/iife/excelts.iife.js.map +1 -1
  563. package/dist/iife/excelts.iife.min.js +57 -57
  564. package/dist/types/modules/archive/fs/archive-file.d.ts +8 -5
  565. package/dist/types/modules/excel/chart/chart-ex-types.d.ts +0 -12
  566. package/dist/types/modules/excel/chart/chart.d.ts +1 -5
  567. package/dist/types/modules/excel/chart/types.d.ts +0 -6
  568. package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +40 -0
  569. package/dist/types/modules/excel/utils/string-buf.d.ts +5 -26
  570. package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +19 -9
  571. package/dist/types/modules/excel/xlsx/xlsx.d.ts +10 -2
  572. package/dist/types/modules/pdf/excel-bridge.d.ts +30 -1
  573. package/dist/types/modules/pdf/font/metrics.d.ts +3 -52
  574. package/dist/types/modules/pdf/index.d.ts +1 -1
  575. package/dist/types/modules/pdf/render-layout-to-pdf.d.ts +66 -0
  576. package/dist/types/modules/pdf/word-bridge.d.ts +80 -12
  577. package/dist/types/modules/stream/index.base.d.ts +2 -0
  578. package/dist/types/modules/stream/internal/sink-adapter.d.ts +65 -0
  579. package/dist/types/modules/stream/pull-stream.d.ts +19 -2
  580. package/dist/types/modules/stream/types.d.ts +13 -1
  581. package/dist/types/modules/word/advanced/diff.d.ts +61 -0
  582. package/dist/types/modules/word/advanced/drawing-shapes.d.ts +269 -0
  583. package/dist/types/modules/word/advanced/field-engine.d.ts +43 -0
  584. package/dist/types/modules/word/advanced/glossary.d.ts +86 -0
  585. package/dist/types/modules/word/advanced/math-convert.d.ts +30 -0
  586. package/dist/types/modules/word/advanced/ole-objects.d.ts +115 -0
  587. package/dist/types/modules/word/advanced/style-map.d.ts +105 -0
  588. package/dist/types/modules/word/advanced/validation.d.ts +56 -0
  589. package/dist/types/modules/word/advanced/vba-project.d.ts +91 -0
  590. package/dist/types/modules/word/bridge/excel-bridge.d.ts +127 -0
  591. package/dist/types/modules/word/builder/document-handle.d.ts +151 -0
  592. package/dist/types/modules/word/builder/paragraph-builders.d.ts +61 -0
  593. package/dist/types/modules/word/builder/run-builders.d.ts +374 -0
  594. package/dist/types/modules/word/builder/table-builders.d.ts +23 -0
  595. package/dist/types/modules/word/constants.d.ts +39 -1
  596. package/dist/types/modules/word/convert/conversion-ir.d.ts +210 -0
  597. package/dist/types/modules/word/convert/docx-to-semantic.d.ts +39 -0
  598. package/dist/types/modules/word/convert/flat-opc.d.ts +44 -0
  599. package/dist/types/modules/word/convert/html/html-import.d.ts +50 -0
  600. package/dist/{browser/modules/word → types/modules/word/convert/html}/html-renderer.d.ts +14 -1
  601. package/dist/types/modules/word/convert/html/html.d.ts +15 -0
  602. package/dist/types/modules/word/convert/markdown/markdown-import.d.ts +68 -0
  603. package/dist/types/modules/word/convert/markdown/markdown-renderer.d.ts +25 -0
  604. package/dist/types/modules/word/convert/markdown/markdown.d.ts +15 -0
  605. package/dist/types/modules/word/convert/odt/odt.d.ts +41 -0
  606. package/dist/types/modules/word/{color-utils.d.ts → core/color-utils.d.ts} +8 -1
  607. package/dist/types/modules/word/core/internal-utils.d.ts +90 -0
  608. package/dist/types/modules/word/core/mapper.d.ts +44 -0
  609. package/dist/types/modules/word/core/opc-paths.d.ts +33 -0
  610. package/dist/types/modules/word/core/text-utils.d.ts +38 -0
  611. package/dist/types/modules/word/core/walker.d.ts +119 -0
  612. package/dist/types/modules/word/crypto.d.ts +14 -9
  613. package/dist/types/modules/word/document-io.d.ts +59 -27
  614. package/dist/types/modules/word/errors.d.ts +44 -1
  615. package/dist/types/modules/word/excel.d.ts +14 -0
  616. package/dist/types/modules/word/font/font-embed.d.ts +112 -0
  617. package/dist/types/modules/word/font/hyphenation.d.ts +65 -0
  618. package/dist/types/modules/word/font/text-shaping.d.ts +58 -0
  619. package/dist/types/modules/word/html.d.ts +7 -6
  620. package/dist/types/modules/word/incremental-edit.d.ts +123 -0
  621. package/dist/types/modules/word/index.base.d.ts +194 -10
  622. package/dist/types/modules/word/layout/layout-constants.d.ts +17 -0
  623. package/dist/types/modules/word/layout/layout-full.d.ts +53 -0
  624. package/dist/types/modules/word/layout/layout-model.d.ts +344 -0
  625. package/dist/types/modules/word/layout/layout.d.ts +63 -0
  626. package/dist/types/modules/word/layout/render-page.d.ts +57 -0
  627. package/dist/types/modules/word/markdown.d.ts +14 -0
  628. package/dist/types/modules/word/patcher.d.ts +62 -0
  629. package/dist/types/modules/word/query/compat.d.ts +25 -0
  630. package/dist/types/modules/word/query/data-binding.d.ts +22 -0
  631. package/dist/types/modules/word/query/form-fields.d.ts +41 -0
  632. package/dist/types/modules/word/query/format-search.d.ts +99 -0
  633. package/dist/types/modules/word/query/mail-merge.d.ts +25 -0
  634. package/dist/types/modules/word/query/merge.d.ts +50 -0
  635. package/dist/types/modules/word/query/replace.d.ts +47 -0
  636. package/dist/types/modules/word/query/revisions.d.ts +67 -0
  637. package/dist/types/modules/word/query/search.d.ts +129 -0
  638. package/dist/types/modules/word/query/split.d.ts +44 -0
  639. package/dist/types/modules/word/query/style-resolve.d.ts +104 -0
  640. package/dist/types/modules/word/reader/chart-parser.d.ts +20 -0
  641. package/dist/types/modules/word/reader/comments-parser.d.ts +26 -0
  642. package/dist/types/modules/word/reader/doc-props-parsers.d.ts +15 -0
  643. package/dist/types/modules/word/reader/docx-reader.d.ts +27 -0
  644. package/dist/types/modules/word/reader/drawing-helpers.d.ts +27 -0
  645. package/dist/types/modules/word/reader/form-field-parser.d.ts +21 -0
  646. package/dist/types/modules/word/reader/image-parsers.d.ts +11 -0
  647. package/dist/types/modules/word/reader/math-parser.d.ts +12 -0
  648. package/dist/types/modules/word/reader/metadata-parsers.d.ts +17 -0
  649. package/dist/types/modules/word/reader/numbering-parser.d.ts +13 -0
  650. package/dist/types/modules/word/reader/paragraph-section-parsers.d.ts +12 -0
  651. package/dist/types/modules/word/reader/parse-utils.d.ts +91 -0
  652. package/dist/types/modules/word/reader/properties-parsers.d.ts +21 -0
  653. package/dist/types/modules/word/reader/reader-context.d.ts +69 -0
  654. package/dist/types/modules/word/reader/sdt-helpers.d.ts +29 -0
  655. package/dist/types/modules/word/reader/settings-parser.d.ts +8 -0
  656. package/dist/types/modules/word/reader/styles-parser.d.ts +12 -0
  657. package/dist/types/modules/word/reader/table-properties-parsers.d.ts +12 -0
  658. package/dist/types/modules/word/reader/theme-parser.d.ts +8 -0
  659. package/dist/types/modules/word/reader/watermark-parser.d.ts +15 -0
  660. package/dist/types/modules/word/security/cfb-reader.d.ts +37 -0
  661. package/dist/types/modules/word/{digital-signatures.d.ts → security/digital-signatures.d.ts} +19 -11
  662. package/dist/types/modules/word/security/document-protection.d.ts +93 -0
  663. package/dist/{browser/modules/word → types/modules/word/security}/encryption.d.ts +51 -4
  664. package/dist/types/modules/word/security/policy.d.ts +80 -0
  665. package/dist/types/modules/word/template/template-chart.d.ts +56 -0
  666. package/dist/types/modules/word/template/template-datasource.d.ts +154 -0
  667. package/dist/types/modules/word/template/template-engine.d.ts +121 -0
  668. package/dist/types/modules/word/types.d.ts +224 -25
  669. package/dist/types/modules/word/units.d.ts +26 -0
  670. package/dist/types/modules/word/writer/checkbox-writer.d.ts +17 -0
  671. package/dist/{browser/modules/word/writers → types/modules/word/writer}/comment-writer.d.ts +2 -1
  672. package/dist/types/modules/word/writer/common-parts.d.ts +57 -0
  673. package/dist/{browser/modules/word → types/modules/word/writer}/content-types.d.ts +2 -2
  674. package/dist/types/modules/word/writer/document-writer.d.ts +24 -0
  675. package/dist/types/modules/word/writer/docx-packager.d.ts +35 -0
  676. package/dist/{browser/modules/word/writers → types/modules/word/writer}/footnote-writer.d.ts +3 -2
  677. package/dist/{browser/modules/word/writers → types/modules/word/writer}/header-footer-writer.d.ts +3 -2
  678. package/dist/{browser/modules/word/writers → types/modules/word/writer}/image-writer.d.ts +1 -1
  679. package/dist/types/modules/word/writer/math-writer.d.ts +20 -0
  680. package/dist/types/modules/word/{writers → writer}/numbering-writer.d.ts +1 -1
  681. package/dist/types/modules/word/{writers → writer}/paragraph-writer.d.ts +2 -1
  682. package/dist/types/modules/word/{writers → writer}/parts-writer.d.ts +3 -3
  683. package/dist/types/modules/word/writer/reference-scanners.d.ts +42 -0
  684. package/dist/types/modules/word/writer/relationships.d.ts +52 -0
  685. package/dist/types/modules/word/writer/render-context.d.ts +124 -0
  686. package/dist/types/modules/word/{writers → writer}/run-writer.d.ts +10 -1
  687. package/dist/types/modules/word/writer/sdt-writer.d.ts +25 -0
  688. package/dist/types/modules/word/writer/stream-buf.d.ts +37 -0
  689. package/dist/types/modules/word/writer/streaming-writer.d.ts +344 -0
  690. package/dist/types/modules/word/writer/string-buf.d.ts +8 -0
  691. package/dist/types/modules/word/{writers → writer}/table-writer.d.ts +2 -1
  692. package/dist/types/modules/xml/types.d.ts +22 -0
  693. package/dist/types/utils/crypto.browser.d.ts +3 -1
  694. package/dist/types/utils/crypto.d.ts +4 -1
  695. package/dist/types/utils/font-metrics.d.ts +63 -0
  696. package/dist/types/utils/string-buf.d.ts +42 -0
  697. package/dist/types/utils/theme-colors.d.ts +55 -0
  698. package/package.json +121 -39
  699. package/dist/browser/modules/word/color-utils.js +0 -94
  700. package/dist/browser/modules/word/document.d.ts +0 -657
  701. package/dist/browser/modules/word/document.js +0 -1533
  702. package/dist/browser/modules/word/docx-packager.d.ts +0 -14
  703. package/dist/browser/modules/word/docx-packager.js +0 -822
  704. package/dist/browser/modules/word/docx-reader.d.ts +0 -11
  705. package/dist/browser/modules/word/docx-reader.js +0 -4929
  706. package/dist/browser/modules/word/encryption.js +0 -274
  707. package/dist/browser/modules/word/internal-utils.d.ts +0 -23
  708. package/dist/browser/modules/word/internal-utils.js +0 -54
  709. package/dist/browser/modules/word/namespaces.d.ts +0 -159
  710. package/dist/browser/modules/word/namespaces.js +0 -189
  711. package/dist/browser/modules/word/relationships.d.ts +0 -30
  712. package/dist/browser/modules/word/relationships.js +0 -48
  713. package/dist/browser/modules/word/writers/checkbox-writer.d.ts +0 -9
  714. package/dist/browser/modules/word/writers/checkbox-writer.js +0 -42
  715. package/dist/browser/modules/word/writers/document-writer.d.ts +0 -16
  716. package/dist/browser/modules/word/writers/document-writer.js +0 -461
  717. package/dist/browser/modules/word/writers/math-writer.d.ts +0 -9
  718. package/dist/cjs/modules/word/color-utils.js +0 -97
  719. package/dist/cjs/modules/word/document.js +0 -1645
  720. package/dist/cjs/modules/word/docx-packager.js +0 -825
  721. package/dist/cjs/modules/word/docx-reader.js +0 -4932
  722. package/dist/cjs/modules/word/encryption.js +0 -282
  723. package/dist/cjs/modules/word/internal-utils.js +0 -59
  724. package/dist/cjs/modules/word/namespaces.js +0 -192
  725. package/dist/cjs/modules/word/relationships.js +0 -55
  726. package/dist/cjs/modules/word/writers/checkbox-writer.js +0 -45
  727. package/dist/cjs/modules/word/writers/document-writer.js +0 -465
  728. package/dist/esm/modules/word/color-utils.js +0 -94
  729. package/dist/esm/modules/word/document.js +0 -1533
  730. package/dist/esm/modules/word/docx-packager.js +0 -822
  731. package/dist/esm/modules/word/docx-reader.js +0 -4929
  732. package/dist/esm/modules/word/encryption.js +0 -274
  733. package/dist/esm/modules/word/internal-utils.js +0 -54
  734. package/dist/esm/modules/word/namespaces.js +0 -189
  735. package/dist/esm/modules/word/relationships.js +0 -48
  736. package/dist/esm/modules/word/writers/checkbox-writer.js +0 -42
  737. package/dist/esm/modules/word/writers/document-writer.js +0 -461
  738. package/dist/types/modules/word/document.d.ts +0 -657
  739. package/dist/types/modules/word/docx-packager.d.ts +0 -14
  740. package/dist/types/modules/word/docx-reader.d.ts +0 -11
  741. package/dist/types/modules/word/internal-utils.d.ts +0 -23
  742. package/dist/types/modules/word/namespaces.d.ts +0 -159
  743. package/dist/types/modules/word/relationships.d.ts +0 -30
  744. package/dist/types/modules/word/writers/checkbox-writer.d.ts +0 -9
  745. package/dist/types/modules/word/writers/document-writer.d.ts +0 -16
  746. package/dist/types/modules/word/writers/math-writer.d.ts +0 -9
  747. /package/dist/browser/modules/word/{font-obfuscation.d.ts → font/font-obfuscation.d.ts} +0 -0
  748. /package/dist/browser/modules/word/{writers → writer}/chart-writer.d.ts +0 -0
  749. /package/dist/browser/modules/word/{writers → writer}/section-writer.d.ts +0 -0
  750. /package/dist/browser/modules/word/{writers → writer}/section-writer.js +0 -0
  751. /package/dist/browser/modules/word/{writers → writer}/styles-writer.d.ts +0 -0
  752. /package/dist/browser/modules/word/{writers → writer}/textbox-writer.d.ts +0 -0
  753. /package/dist/browser/modules/word/{writers → writer}/textbox-writer.js +0 -0
  754. /package/dist/browser/modules/word/{writers → writer}/toc-writer.d.ts +0 -0
  755. /package/dist/browser/modules/word/{writers → writer}/toc-writer.js +0 -0
  756. /package/dist/cjs/modules/word/{writers → writer}/section-writer.js +0 -0
  757. /package/dist/cjs/modules/word/{writers → writer}/textbox-writer.js +0 -0
  758. /package/dist/cjs/modules/word/{writers → writer}/toc-writer.js +0 -0
  759. /package/dist/esm/modules/word/{writers → writer}/section-writer.js +0 -0
  760. /package/dist/esm/modules/word/{writers → writer}/textbox-writer.js +0 -0
  761. /package/dist/esm/modules/word/{writers → writer}/toc-writer.js +0 -0
  762. /package/dist/types/modules/word/{font-obfuscation.d.ts → font/font-obfuscation.d.ts} +0 -0
  763. /package/dist/types/modules/word/{writers → writer}/chart-writer.d.ts +0 -0
  764. /package/dist/types/modules/word/{writers → writer}/section-writer.d.ts +0 -0
  765. /package/dist/types/modules/word/{writers → writer}/styles-writer.d.ts +0 -0
  766. /package/dist/types/modules/word/{writers → writer}/textbox-writer.d.ts +0 -0
  767. /package/dist/types/modules/word/{writers → writer}/toc-writer.d.ts +0 -0
@@ -59,7 +59,7 @@ const RAW_TX_CV_RE = /<c:v(?:\s[^>]*)?>([\s\S]*?)<\/c:v>/g;
59
59
  * `toPNG`, `unknownElements`) work uniformly. ChartTypeGroup-level
60
60
  * APIs (`chartTypes`, `axes`, `plotArea`, `getAxis`, `categoryAxis`,
61
61
  * `valueAxis`, `addSeries`, `removeSeries`, `getSeries`,
62
- * `updateSeries`, `addSeriesFromOptions`, `seriesCount`, `mutate`,
62
+ * `updateSeries`, `addSeriesFromOptions`, `getSeriesCount`, `mutate`,
63
63
  * `setStyle`) are classic-only — ChartEx has its own topology that
64
64
  * doesn't map cleanly onto the classic group/series abstraction;
65
65
  * use {@link Chart.mutateChartEx} for ChartEx mutations.
@@ -882,12 +882,6 @@ class Chart {
882
882
  const ctg = this.chartTypes[groupIndex];
883
883
  return ctg?.series?.length ?? 0;
884
884
  }
885
- /**
886
- * @deprecated Use `getSeriesCount()` instead. Returns the count of series in the first chart type group.
887
- */
888
- get seriesCount() {
889
- return this.getSeriesCount(0);
890
- }
891
885
  // ===========================================================================
892
886
  // Chart cloning and duplication
893
887
  // ===========================================================================
@@ -503,7 +503,31 @@ class WorkbookReaderBase extends event_emitter_1.EventEmitter {
503
503
  }
504
504
  async *_parseEntries(stream) {
505
505
  const zip = (0, stream_1.createParse)({ forceStream: true });
506
- stream.on("error", (err) => zip.emit("error", err));
506
+ // Bidirectional error propagation, guarded against re-entry: each side
507
+ // marks itself "settled" before forwarding so the partner's destroy/emit
508
+ // doesn't bounce the error back into an infinite loop.
509
+ let propagating = false;
510
+ stream.on("error", (err) => {
511
+ if (propagating) {
512
+ return;
513
+ }
514
+ propagating = true;
515
+ zip.emit("error", err);
516
+ });
517
+ zip.on("error", (err) => {
518
+ if (propagating) {
519
+ return;
520
+ }
521
+ propagating = true;
522
+ try {
523
+ if (typeof stream.destroy === "function") {
524
+ stream.destroy(err);
525
+ }
526
+ }
527
+ catch {
528
+ // Best-effort cleanup; original error already on `zip`.
529
+ }
530
+ });
507
531
  stream.pipe(zip);
508
532
  for await (const entry of (0, iterate_stream_1.iterateStream)(zip)) {
509
533
  let sheetNo;
@@ -52,6 +52,15 @@ class WorkbookReader extends workbook_reader_browser_1.WorkbookReaderBase {
52
52
  return originalWrite(chunk, ...args);
53
53
  };
54
54
  tempStream.write = trackWrite;
55
+ // Forward source errors to the temp file stream so:
56
+ // - the file write doesn't silently leak when zip parsing fails
57
+ // - `writePromise` rejects with the original cause instead of hanging
58
+ // Without this, an `error` on `entry` (e.g. zip corruption / decryption
59
+ // failure) becomes an uncaught exception in Node ≥ 16.
60
+ entry.on("error", err => {
61
+ tempStream.destroy(err);
62
+ reject(err);
63
+ });
55
64
  entry.pipe(tempStream);
56
65
  });
57
66
  return { sheetNo, path: filePath, cleanup, writePromise };
@@ -36,11 +36,77 @@ const binary_1 = require("../../../utils/binary.js");
36
36
  const utils_1 = require("../../../utils/utils.js");
37
37
  const EMPTY_U8 = new Uint8Array(0);
38
38
  const TEXT_DECODER = new TextDecoder();
39
+ /**
40
+ * Drain a resolver list, calling each. Mutates the array to empty.
41
+ *
42
+ * Used by the backpressure machinery: when a sink drains or errors, every
43
+ * parked `_waitForUserSinkDrain()` / pending-async waiter must be woken
44
+ * exactly once, and the array reset so the next backpressure cycle starts
45
+ * clean. Hoisted to a free function so it can be re-used across the three
46
+ * wake sites without per-site duplication of the splice/loop pattern.
47
+ */
48
+ function callAllResolvers(resolvers) {
49
+ if (resolvers.length === 0) {
50
+ return;
51
+ }
52
+ // Snapshot then clear, so a resolver that itself triggers a fresh wait
53
+ // (re-pushing into the same array) doesn't get confused with the current
54
+ // batch.
55
+ const snapshot = resolvers.splice(0);
56
+ for (const r of snapshot) {
57
+ r();
58
+ }
59
+ }
39
60
  // ============================================================================
40
61
  // Base Class
41
62
  // ============================================================================
42
63
  class WorkbookWriterBase {
43
64
  constructor(options, WorksheetWriterClass) {
65
+ // ---------------------------------------------------------------------------
66
+ // Backpressure tracking for the user-supplied output sink.
67
+ //
68
+ // Set by `_trackBackpressure(ok)` whenever `this.stream.write(data)` returns
69
+ // false (or a Promise that resolves to false). Cleared when the sink emits
70
+ // `'drain'`. Awaited by `_waitForUserSinkDrain()` at async boundaries
71
+ // (between worksheets, before `addWorkbook`, etc) so a slow sink throttles
72
+ // the producer instead of letting bytes accumulate unboundedly inside the
73
+ // sink's internal buffer or in the zip pipeline.
74
+ //
75
+ // Important caveat: this **cannot** block a single tight synchronous
76
+ // `for (...) row.commit()` loop inside one worksheet — JavaScript has no
77
+ // sync wait, and `row.commit()` is sync void. During such a loop, every
78
+ // produced compressed chunk is pushed straight into the sink's internal
79
+ // buffer (Node `Writable` accepts writes after returning false; it just
80
+ // hints "drain"). For very-large single-worksheet workloads with a slow
81
+ // sink, the practical bound on how much can pile up is roughly the total
82
+ // compressed size of one worksheet — only the `wb.commit()` boundary
83
+ // (and any `worksheet.commit()` between sheets) gives the event loop a
84
+ // chance to park here on `_waitForUserSinkDrain()`.
85
+ //
86
+ // Multi-sheet workloads benefit fully because each `worksheet.commit()`
87
+ // hands control back to `_commitWorksheets()` which awaits drain before
88
+ // the next sheet starts.
89
+ this._needsDrain = false;
90
+ this._drainResolvers = [];
91
+ this._drainListenerAttached = false;
92
+ // Captured if the user sink fires 'error' before `_finalize()` attaches its
93
+ // own listener. Replayed by `_finalize()` so the original error is what
94
+ // rejects `commit()`, not a generic timeout.
95
+ this._sinkError = null;
96
+ /**
97
+ * Attach error/close listeners on the user sink so any parked backpressure
98
+ * waiters are released the moment the sink fails. Without this, a
99
+ * `commit()` parked on `_waitForUserSinkDrain()` would hang forever if
100
+ * the sink errored before emitting 'drain'. Idempotent and a no-op for
101
+ * sinks that don't expose `.on` (e.g. internal `StreamBuf`).
102
+ *
103
+ * Uses a non-consuming listener: if the user has their own 'error' handler
104
+ * it still fires (EventEmitter broadcasts to all listeners). The error is
105
+ * also captured into `_sinkError` so `_finalize()` can replay it — `_finalize`
106
+ * registers its own listener with `once()`, which would miss errors that
107
+ * arrived earlier in the commit pipeline.
108
+ */
109
+ this._lifecycleListenersAttached = false;
44
110
  this.WorksheetWriterClass = WorksheetWriterClass;
45
111
  this.created = options.created || new Date();
46
112
  this.modified = options.modified || this.created;
@@ -60,14 +126,26 @@ class WorkbookWriterBase {
60
126
  this.commentRefs = [];
61
127
  this.dynamicArrayCount = 0;
62
128
  this._trueStreaming = options.trueStreaming ?? false;
63
- // Create Zip instance
129
+ // Create Zip instance.
130
+ //
131
+ // Backpressure note: when `this.stream.write(data)` returns false (the
132
+ // user-supplied sink — e.g. fs.WriteStream, PassThrough, HTTP response
133
+ // — has reached its highWaterMark), we cannot synchronously block the
134
+ // zip callback (it's invoked from inside `row.commit()`'s sync chain).
135
+ // Instead we record a `_needsDrain` flag and a Promise that resolves
136
+ // when the sink emits `'drain'`. `commit()` and `_commitWorksheets()`
137
+ // await this promise at their natural async boundaries, so the producer
138
+ // stops generating new zip data until the sink has caught up. This
139
+ // makes `WorkbookWriter` safe against slow sinks (network responses,
140
+ // throttled fs, etc) without changing the public API.
64
141
  this.zip = new stream_1.Zip((err, data, final) => {
65
142
  if (err) {
66
143
  this.stream.emit("error", err);
67
144
  }
68
145
  else {
69
146
  // `streaming-zip` already emits `Uint8Array`; avoid copying per chunk.
70
- this.stream.write(data);
147
+ const ok = this.stream.write(data);
148
+ this._trackBackpressure(ok);
71
149
  if (final) {
72
150
  this.stream.end();
73
151
  }
@@ -75,6 +153,11 @@ class WorkbookWriterBase {
75
153
  });
76
154
  // Setup output stream
77
155
  this.stream = this._createOutputStream(options);
156
+ // Eagerly attach error/close listeners on the sink so any backpressure
157
+ // waiters are released the moment the sink fails — without this, a
158
+ // `commit()` parked on `_waitForUserSinkDrain()` would hang forever if
159
+ // the sink errored before emitting 'drain'.
160
+ this._attachSinkLifecycleListeners();
78
161
  // Theme and office rels are deferred to commit() so that worksheet files
79
162
  // are added to the ZIP first. This ensures StreamingZip sets ondata on
80
163
  // the worksheet immediately, allowing pushSync to flow data through
@@ -90,6 +173,106 @@ class WorkbookWriterBase {
90
173
  }
91
174
  return new stream_buf_1.StreamBuf();
92
175
  }
176
+ /**
177
+ * Internal: record whether the sink accepted the last write. The
178
+ * `OutputStreamLike.write` type advertises `boolean | Promise<boolean>`
179
+ * for forward compatibility, but in practice every concrete sink we
180
+ * accept (Node `Writable`, browser `Writable` from `@stream`, internal
181
+ * `StreamBuf`, fs.WriteStream, etc) returns a sync `boolean`. We
182
+ * defensively handle the Promise shape but it's never exercised.
183
+ */
184
+ _trackBackpressure(ok) {
185
+ if (ok instanceof Promise) {
186
+ // Defensive path: a hypothetical sink whose `write()` returns a
187
+ // Promise. Await its resolution and treat false as backpressure.
188
+ ok.then(result => {
189
+ if (!result) {
190
+ this._needsDrain = true;
191
+ }
192
+ }, () => {
193
+ // Errors surface via the sink's 'error' event; ignore here.
194
+ });
195
+ return;
196
+ }
197
+ if (ok === false) {
198
+ this._needsDrain = true;
199
+ }
200
+ this._ensureDrainListener();
201
+ }
202
+ _ensureDrainListener() {
203
+ if (this._drainListenerAttached) {
204
+ return;
205
+ }
206
+ if (typeof this.stream.on !== "function") {
207
+ // StreamBuf and similar sinks that don't follow the Writable contract
208
+ // never emit 'drain'; they also never return false from write(), so
209
+ // they reach this branch only spuriously. Skip listener attach.
210
+ return;
211
+ }
212
+ this._drainListenerAttached = true;
213
+ this.stream.on("drain", () => {
214
+ this._needsDrain = false;
215
+ callAllResolvers(this._drainResolvers);
216
+ });
217
+ }
218
+ _attachSinkLifecycleListeners() {
219
+ if (this._lifecycleListenersAttached) {
220
+ return;
221
+ }
222
+ if (typeof this.stream.on !== "function") {
223
+ return;
224
+ }
225
+ this._lifecycleListenersAttached = true;
226
+ // Use `.once()` for both events: we only care about the first error
227
+ // (subsequent errors are captured in `_sinkError` only if we haven't
228
+ // recorded one yet). Using `.once()` also avoids leaking the listener
229
+ // if the sink lives longer than the WorkbookWriter — the EventEmitter
230
+ // releases the closure as soon as the event fires.
231
+ if (typeof this.stream.once === "function") {
232
+ this.stream.once("error", (err) => {
233
+ if (!this._sinkError) {
234
+ this._sinkError = err;
235
+ }
236
+ this._wakeAllBackpressureWaiters();
237
+ });
238
+ this.stream.once("close", () => {
239
+ this._wakeAllBackpressureWaiters();
240
+ });
241
+ }
242
+ else {
243
+ // Fallback: sink only has .on, attach normally.
244
+ this.stream.on("error", (err) => {
245
+ if (!this._sinkError) {
246
+ this._sinkError = err;
247
+ }
248
+ this._wakeAllBackpressureWaiters();
249
+ });
250
+ }
251
+ }
252
+ _wakeAllBackpressureWaiters() {
253
+ this._needsDrain = false;
254
+ callAllResolvers(this._drainResolvers);
255
+ }
256
+ /**
257
+ * Park here until any async writes have settled and the user sink has
258
+ * drained below its high-water mark. Resolves immediately when no
259
+ * backpressure is in flight.
260
+ *
261
+ * Called at async boundaries inside `commit()` so a slow sink throttles
262
+ * the producer instead of letting bytes accumulate unboundedly.
263
+ */
264
+ async _waitForUserSinkDrain() {
265
+ // Short-circuit if the sink already errored — no point waiting for a
266
+ // drain that will never come. The error itself surfaces from
267
+ // `_finalize()` later.
268
+ if (this._sinkError) {
269
+ return;
270
+ }
271
+ if (!this._needsDrain) {
272
+ return;
273
+ }
274
+ return new Promise(resolve => this._drainResolvers.push(resolve));
275
+ }
93
276
  get definedNames() {
94
277
  return this._definedNames;
95
278
  }
@@ -138,24 +321,32 @@ class WorkbookWriterBase {
138
321
  }
139
322
  zipFile.push(buffer, true);
140
323
  }
141
- _commitWorksheets() {
142
- const commitWorksheet = (worksheet) => {
143
- if (!worksheet.committed) {
144
- return new Promise(resolve => {
145
- worksheet.stream.once("zipped", () => resolve());
146
- worksheet.commit();
147
- });
324
+ async _commitWorksheets() {
325
+ // Commit worksheets sequentially (not in parallel) so we can park on
326
+ // user-sink backpressure between them. Parallel commit was the old
327
+ // behavior; for a single-worksheet workbook the difference is nil, and
328
+ // for multi-sheet workbooks honoring backpressure between them keeps
329
+ // memory bounded against slow sinks. ZIP itself is inherently serial
330
+ // (StreamingZip processes one entry at a time via `activeFile`), so
331
+ // sequential commit imposes no real CPU cost — measured throughput is
332
+ // identical to parallel commit on multi-sheet workbooks.
333
+ for (const worksheet of this._worksheets) {
334
+ if (!worksheet || worksheet.committed) {
335
+ continue;
148
336
  }
149
- return Promise.resolve();
150
- };
151
- const promises = this._worksheets.map(commitWorksheet);
152
- return promises.length ? Promise.all(promises).then(() => { }) : Promise.resolve();
337
+ await new Promise(resolve => {
338
+ worksheet.stream.once("zipped", () => resolve());
339
+ worksheet.commit();
340
+ });
341
+ await this._waitForUserSinkDrain();
342
+ }
153
343
  }
154
344
  async commit() {
155
345
  await this.promise;
156
346
  await this._commitWorksheets();
157
347
  await this.addMedia();
158
348
  this.addDrawings();
349
+ await this._waitForUserSinkDrain();
159
350
  await Promise.all([
160
351
  this.addThemes(),
161
352
  this.addOfficeRels(),
@@ -168,7 +359,9 @@ class WorkbookWriterBase {
168
359
  this.addMetadata(),
169
360
  this.addWorkbookRels()
170
361
  ]);
362
+ await this._waitForUserSinkDrain();
171
363
  await this.addWorkbook();
364
+ await this._waitForUserSinkDrain();
172
365
  await this._finalize();
173
366
  }
174
367
  get nextId() {
@@ -439,6 +632,22 @@ class WorkbookWriterBase {
439
632
  });
440
633
  }
441
634
  _finalize() {
635
+ // If the user sink errored earlier in the commit pipeline (captured by
636
+ // `_attachSinkLifecycleListeners`), surface that error now — `commit()`
637
+ // would otherwise reach `_finalize` and hang waiting for `'close'` from
638
+ // a sink that's already destroyed.
639
+ if (this._sinkError) {
640
+ // End the zip pipeline cleanly so its internal callbacks don't keep
641
+ // firing into a torn-down sink. Best-effort: ignore any error from
642
+ // end() since the original `_sinkError` is what we care about.
643
+ try {
644
+ this.zip.end();
645
+ }
646
+ catch {
647
+ // Best-effort cleanup.
648
+ }
649
+ return Promise.reject(this._sinkError);
650
+ }
442
651
  // Wait for "close" — emitted by all supported output streams (Node Writable,
443
652
  // browser Writable, and StreamBuf) after "finish". For file streams this
444
653
  // guarantees the fd is released, which is critical on Windows where reading
@@ -454,6 +663,12 @@ class WorkbookWriterBase {
454
663
  };
455
664
  const onDone = () => {
456
665
  cleanup();
666
+ // If an error fired between us checking `_sinkError` and reaching
667
+ // 'close' (rare but possible with concurrent emit), surface it.
668
+ if (this._sinkError) {
669
+ reject(this._sinkError);
670
+ return;
671
+ }
457
672
  resolve(this);
458
673
  };
459
674
  this.stream.once("error", onError);
@@ -1,87 +1,11 @@
1
1
  "use strict";
2
2
  /**
3
- * StringBuf - Cross-Platform String Buffer
3
+ * Re-export of the shared {@link StringBuf} from `@utils/string-buf`.
4
4
  *
5
- * A way to keep string memory operations to a minimum while building XML strings.
6
- * Uses TextEncoder and Uint8Array for cross-platform compatibility (Node.js + Browser).
5
+ * Kept as a thin alias so existing imports (`@excel/utils/string-buf`)
6
+ * continue to work without churn.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.StringBuf = void 0;
10
- const encoder = new TextEncoder();
11
- /**
12
- * StringBuf - efficient string builder using Uint8Array
13
- * Works identically in Node.js and Browser environments.
14
- */
15
- class StringBuf {
16
- constructor(options) {
17
- this._buf = new Uint8Array((options && options.size) || 16384);
18
- // TextEncoder only supports UTF-8, so encoding option is ignored
19
- this._inPos = 0;
20
- this._buffer = undefined;
21
- }
22
- get length() {
23
- return this._inPos;
24
- }
25
- get capacity() {
26
- return this._buf.length;
27
- }
28
- get buffer() {
29
- return this._buf;
30
- }
31
- toBuffer() {
32
- // Return the current data as a single enclosing buffer
33
- if (!this._buffer) {
34
- this._buffer = this._buf.slice(0, this._inPos);
35
- }
36
- return this._buffer;
37
- }
38
- reset(position) {
39
- position = position ?? 0;
40
- this._buffer = undefined;
41
- this._inPos = position;
42
- }
43
- _grow(min) {
44
- let size = this._buf.length * 2;
45
- while (size < min) {
46
- size *= 2;
47
- }
48
- const buf = new Uint8Array(size);
49
- buf.set(this._buf);
50
- this._buf = buf;
51
- }
52
- addText(text) {
53
- this._buffer = undefined;
54
- // Ensure there's room for at least the string length (optimistic: 1 byte per char).
55
- const optimistic = this._inPos + text.length;
56
- if (optimistic > this._buf.length - 4) {
57
- this._grow(optimistic);
58
- }
59
- // Use encodeInto to write directly into the buffer, avoiding the
60
- // intermediate Uint8Array allocation that encoder.encode() creates.
61
- const target = this._buf.subarray(this._inPos);
62
- const result = encoder.encodeInto(text, target);
63
- if (result.read < text.length) {
64
- // Didn't fit — text has multi-byte UTF-8 chars that exceed the optimistic estimate.
65
- // Grow to accommodate the remainder (worst case: 3 bytes per remaining char).
66
- const remaining = text.length - result.read;
67
- this._grow(this._inPos + result.written + remaining * 3);
68
- const result2 = encoder.encodeInto(text.substring(result.read), this._buf.subarray(this._inPos + result.written));
69
- this._inPos += result.written + result2.written;
70
- }
71
- else {
72
- this._inPos += result.written;
73
- }
74
- }
75
- addStringBuf(inBuf) {
76
- if (inBuf.length) {
77
- this._buffer = undefined;
78
- if (this.length + inBuf.length > this.capacity) {
79
- this._grow(this.length + inBuf.length);
80
- }
81
- // Copy bytes from input buffer
82
- this._buf.set(inBuf._buf.subarray(0, inBuf.length), this._inPos);
83
- this._inPos += inBuf.length;
84
- }
85
- }
86
- }
87
- exports.StringBuf = StringBuf;
10
+ var string_buf_1 = require("../../../utils/string-buf.js");
11
+ Object.defineProperty(exports, "StringBuf", { enumerable: true, get: function () { return string_buf_1.StringBuf; } });
@@ -234,6 +234,59 @@ function isReadableStream(input) {
234
234
  // =============================================================================
235
235
  // CSV Helper Functions (Internal)
236
236
  // =============================================================================
237
+ /**
238
+ * Iterate worksheet rows lazily — yields `{row, rowNumber}` for every row
239
+ * with values, in sheet order. Reaches into the worksheet's internal
240
+ * `_rows` array directly so we don't have to materialise the whole row
241
+ * set up front (matters for very large worksheets piped to slow sinks).
242
+ *
243
+ * Note: `_rows` is 0-based but XLSX row numbers are 1-based. Row N lives
244
+ * at `_rows[N - 1]`, so the yielded `rowNumber` is `i + 1`.
245
+ */
246
+ function* iterateWorksheetRows(worksheet) {
247
+ const rows = worksheet._rows;
248
+ if (!rows || rows.length === 0) {
249
+ return;
250
+ }
251
+ for (let i = 0; i < rows.length; i++) {
252
+ const row = rows[i];
253
+ if (row && row.hasValues) {
254
+ yield { row, rowNumber: i + 1 };
255
+ }
256
+ }
257
+ }
258
+ /**
259
+ * Build a `() => Promise<void>` that resolves on the next `'drain'` event
260
+ * of `emitter`, but rejects promptly if `'error'` or `'close'` fires first.
261
+ *
262
+ * Without the error/close races, a producer parked on `once('drain')`
263
+ * would hang forever after the downstream sink errors mid-write — the
264
+ * Transform is destroyed and never emits drain again.
265
+ */
266
+ function createDrainRacer(emitter) {
267
+ return () => new Promise((resolve, reject) => {
268
+ const cleanup = () => {
269
+ emitter.off("drain", onDrain);
270
+ emitter.off("error", onError);
271
+ emitter.off("close", onClose);
272
+ };
273
+ const onDrain = () => {
274
+ cleanup();
275
+ resolve();
276
+ };
277
+ const onError = (err) => {
278
+ cleanup();
279
+ reject(err);
280
+ };
281
+ const onClose = () => {
282
+ cleanup();
283
+ reject(new Error("stream closed before drain"));
284
+ };
285
+ emitter.once("drain", onDrain);
286
+ emitter.once("error", onError);
287
+ emitter.once("close", onClose);
288
+ });
289
+ }
237
290
  function buildParserOptions(options) {
238
291
  return {
239
292
  delimiter: options?.delimiter ?? ",",
@@ -599,26 +652,56 @@ class Workbook {
599
652
  const map = options?.map || createDefaultWriteMapper(options?.dateFormat, options?.dateUTC);
600
653
  const includeEmptyRows = options?.includeEmptyRows !== false;
601
654
  const formatter = new stream_1.CsvFormatterStream(buildFormatterOptions(options));
602
- if (worksheet) {
603
- setTimeout(() => {
655
+ if (!worksheet) {
656
+ setTimeout(() => formatter.end(), 0);
657
+ return formatter;
658
+ }
659
+ // Drive rows asynchronously so the formatter's backpressure signal can
660
+ // throttle production. The drain wait races against `'error'` / `'close'`
661
+ // so a downstream sink failure unwinds the producer instead of hanging.
662
+ const awaitFormatterDrain = createDrainRacer(formatter);
663
+ const writeAndDrain = (values) => {
664
+ if (formatter.write(values)) {
665
+ return;
666
+ }
667
+ return awaitFormatterDrain();
668
+ };
669
+ (async () => {
670
+ try {
604
671
  let lastRow = 1;
605
- worksheet.eachRow((row, rowNumber) => {
672
+ // Iterate worksheet rows lazily — no snapshot. Each row's `values`
673
+ // are mapped at iteration time, so already-yielded data is GC-able
674
+ // as the consumer drains the formatter.
675
+ for (const { row, rowNumber } of iterateWorksheetRows(worksheet)) {
676
+ if (formatter.destroyed) {
677
+ return;
678
+ }
679
+ // First slot is the 1-based padding cell — skip without mutating
680
+ // the row (mutating would corrupt subsequent reads / writes).
681
+ const dataValues = row.values.slice(1).map(map);
606
682
  if (includeEmptyRows) {
607
683
  while (lastRow++ < rowNumber - 1) {
608
- formatter.write([]);
684
+ const p = writeAndDrain([]);
685
+ if (p) {
686
+ await p;
687
+ }
688
+ if (formatter.destroyed) {
689
+ return;
690
+ }
609
691
  }
610
692
  }
611
- const { values } = row;
612
- values.shift();
613
- formatter.write(values.map(map));
693
+ const p = writeAndDrain(dataValues);
694
+ if (p) {
695
+ await p;
696
+ }
614
697
  lastRow = rowNumber;
615
- });
698
+ }
616
699
  formatter.end();
617
- }, 0);
618
- }
619
- else {
620
- setTimeout(() => formatter.end(), 0);
621
- }
700
+ }
701
+ catch (err) {
702
+ formatter.destroy(err instanceof Error ? err : new Error(String(err)));
703
+ }
704
+ })();
622
705
  return formatter;
623
706
  }
624
707
  /**
@@ -817,20 +900,47 @@ class Workbook {
817
900
  const includeEmptyRows = options?.includeEmptyRows !== false;
818
901
  const formatter = new stream_1.CsvFormatterStream(buildFormatterOptions(options));
819
902
  const pipelinePromise = (0, _stream_1.pipeline)(formatter, stream);
820
- let lastRow = 1;
821
- worksheet.eachRow((row, rowNumber) => {
822
- if (includeEmptyRows) {
823
- while (lastRow++ < rowNumber - 1) {
824
- formatter.write([]);
903
+ // Race drain against error / close so a mid-stream sink failure makes
904
+ // `writeAndDrain` reject (and the for-loop unwind) instead of hanging
905
+ // on a 'drain' the destroyed formatter will never emit.
906
+ const awaitFormatterDrain = createDrainRacer(formatter);
907
+ const writeAndDrain = async (values) => {
908
+ if (!formatter.write(values)) {
909
+ await awaitFormatterDrain();
910
+ }
911
+ };
912
+ try {
913
+ let lastRow = 1;
914
+ // Iterate worksheet rows directly without pre-collecting them. The
915
+ // Workbook model is already in memory, so reaching into `_rows` here
916
+ // adds no per-row allocation — just a Row reference per iteration,
917
+ // immediately reassigned. The async loop honours formatter
918
+ // backpressure between rows so the formatter's internal buffer can't
919
+ // grow unbounded against a slow sink.
920
+ for (const { row, rowNumber } of iterateWorksheetRows(worksheet)) {
921
+ // First slot is the 1-based padding cell — skip without mutating
922
+ // the row (mutating would corrupt subsequent reads / writes).
923
+ const dataValues = row.values.slice(1).map(map);
924
+ if (includeEmptyRows) {
925
+ while (lastRow++ < rowNumber - 1) {
926
+ await writeAndDrain([]);
927
+ }
825
928
  }
929
+ await writeAndDrain(dataValues);
930
+ lastRow = rowNumber;
826
931
  }
827
- const { values } = row;
828
- values.shift();
829
- formatter.write(values.map(map));
830
- lastRow = rowNumber;
831
- });
832
- formatter.end();
833
- await pipelinePromise;
932
+ formatter.end();
933
+ await pipelinePromise;
934
+ }
935
+ catch (err) {
936
+ // Sink errored mid-write (or pipeline tore down for any reason).
937
+ // Destroy the formatter so the pipeline unwinds, swallow the
938
+ // pipeline rejection (the original error is what we want to surface),
939
+ // and rethrow.
940
+ formatter.destroy(err instanceof Error ? err : new Error(String(err)));
941
+ await pipelinePromise.catch(() => { });
942
+ throw err;
943
+ }
834
944
  }
835
945
  /**
836
946
  * Populate a worksheet from a parsed Markdown table result.