@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
@@ -0,0 +1,612 @@
1
+ "use strict";
2
+ /**
3
+ * DOCX Agile Encryption (MS-OFFCRYPTO)
4
+ *
5
+ * Implements ECMA-376 Agile Encryption (used by Office 2010+) for encrypted
6
+ * DOCX files. Encrypted DOCX files use the CFB (Compound File Binary) format
7
+ * to wrap the ZIP content.
8
+ *
9
+ * This module provides:
10
+ * - Password-based encryption/decryption of DOCX content
11
+ * - EncryptionInfo XML generation/parsing
12
+ *
13
+ * All AES and SHA primitives are delegated to `@utils/crypto`, which uses
14
+ * synchronous `node:crypto` APIs in Node and Web Crypto in the browser.
15
+ * The KDF inner loop runs ~100,000 hashes per derived key; on Node we go
16
+ * through the synchronous fast path so a round-trip completes in well
17
+ * under a second instead of the multi-second microtask churn that the
18
+ * old `await crypto.subtle.digest()` loop produced.
19
+ *
20
+ * References:
21
+ * - MS-OFFCRYPTO: Office Document Cryptography Structure
22
+ * - ECMA-376 Part 3: Markup Compatibility and Extensibility
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.AGILE_BLOCK_KEYS = void 0;
26
+ exports.isEncryptedDocx = isEncryptedDocx;
27
+ exports.deriveEncryptionKey = deriveEncryptionKey;
28
+ exports.verifyPassword = verifyPassword;
29
+ exports.decryptPackage = decryptPackage;
30
+ exports.parseEncryptionInfoXml = parseEncryptionInfoXml;
31
+ exports.decryptDocx = decryptDocx;
32
+ exports.encryptDocx = encryptDocx;
33
+ const crypto_1 = require("../../../utils/crypto.js");
34
+ const internal_utils_1 = require("../core/internal-utils");
35
+ const errors_1 = require("../errors");
36
+ const cfb_reader_1 = require("./cfb-reader");
37
+ /** Detect whether a buffer is an encrypted Office document (CFB format). */
38
+ function isEncryptedDocx(buffer) {
39
+ // CFB signature: D0CF11E0A1B11AE1
40
+ if (buffer.length < 8) {
41
+ return false;
42
+ }
43
+ return (buffer[0] === 0xd0 &&
44
+ buffer[1] === 0xcf &&
45
+ buffer[2] === 0x11 &&
46
+ buffer[3] === 0xe0 &&
47
+ buffer[4] === 0xa1 &&
48
+ buffer[5] === 0xb1 &&
49
+ buffer[6] === 0x1a &&
50
+ buffer[7] === 0xe1);
51
+ }
52
+ /**
53
+ * Detect whether the platform's `@utils/crypto.hash` supports the requested
54
+ * algorithm synchronously. Node's implementation accepts every OpenSSL
55
+ * digest (SHA-1/256/384/512, MD5); the browser implementation only ships
56
+ * synchronous SHA-256 and MD5 — anything else throws.
57
+ *
58
+ * The detection result is cached per algorithm so we only pay the probe
59
+ * cost once.
60
+ */
61
+ const _syncHashCache = new Map();
62
+ function canHashSync(algorithm) {
63
+ const cached = _syncHashCache.get(algorithm);
64
+ if (cached !== undefined) {
65
+ return cached;
66
+ }
67
+ let ok = false;
68
+ try {
69
+ (0, crypto_1.hash)(algorithm, new Uint8Array(0));
70
+ ok = true;
71
+ }
72
+ catch {
73
+ ok = false;
74
+ }
75
+ _syncHashCache.set(algorithm, ok);
76
+ return ok;
77
+ }
78
+ /**
79
+ * Derive an encryption key from a password using the agile encryption KDF.
80
+ *
81
+ * Per MS-OFFCRYPTO 2.3.4.11:
82
+ * H_0 = H(salt + password)
83
+ * H_i = H(iterator + H_{i-1}) for i = 0..spinCount-1
84
+ * H_final = H(H_{spinCount} + blockKey)
85
+ * Key = first keySize bytes of H_final
86
+ */
87
+ async function deriveEncryptionKey(password, info, blockKey) {
88
+ const pwdBytes = stringToUtf16LE(password);
89
+ const hashName = mapHashName(info.hashAlgorithm);
90
+ // Reusable 4-byte iterator + scratch buffer to avoid per-iteration
91
+ // allocations inside the spin loop. The scratch holds [iter || H_{i-1}]
92
+ // and is rebuilt in place.
93
+ const iterAndPrev = new Uint8Array(4 + getHashSizeFor(hashName));
94
+ const iterView = new DataView(iterAndPrev.buffer, 0, 4);
95
+ let h;
96
+ if (canHashSync(hashName)) {
97
+ // Fast path: ~100,000 synchronous digests, no microtask churn.
98
+ h = (0, crypto_1.hash)(hashName, concat(info.keySalt, pwdBytes));
99
+ for (let i = 0; i < info.spinCount; i++) {
100
+ iterView.setUint32(0, i, true);
101
+ iterAndPrev.set(h, 4);
102
+ h = (0, crypto_1.hash)(hashName, iterAndPrev);
103
+ }
104
+ h = (0, crypto_1.hash)(hashName, concat(h, blockKey));
105
+ }
106
+ else {
107
+ // Browser fallback: Web Crypto SHA-1/384/512 are async-only.
108
+ h = await (0, crypto_1.hashAsync)(hashName, concat(info.keySalt, pwdBytes));
109
+ for (let i = 0; i < info.spinCount; i++) {
110
+ iterView.setUint32(0, i, true);
111
+ iterAndPrev.set(h, 4);
112
+ h = await (0, crypto_1.hashAsync)(hashName, iterAndPrev);
113
+ }
114
+ h = await (0, crypto_1.hashAsync)(hashName, concat(h, blockKey));
115
+ }
116
+ // Truncate to keySize. The hash size MUST be at least the requested
117
+ // key length — otherwise we'd hand the AES layer a short key buffer
118
+ // that either fails import or produces a key the counterparty can't
119
+ // validate. Reject misconfigured EncryptionInfo up-front with a clear
120
+ // error.
121
+ const keyBytes = info.keyBits / 8;
122
+ if (h.length < keyBytes) {
123
+ throw new Error(`deriveEncryptionKey: hash output of ${h.length} bytes is too ` +
124
+ `short for keyBits=${info.keyBits} (need ${keyBytes}). ` +
125
+ `Use a hash algorithm with a larger digest size (e.g. SHA-512 ` +
126
+ `for keyBits ≤ 512).`);
127
+ }
128
+ return h.slice(0, keyBytes);
129
+ }
130
+ /** Block keys as defined in MS-OFFCRYPTO 2.3.4.13. */
131
+ exports.AGILE_BLOCK_KEYS = {
132
+ /** For encrypting verifier hash input. */
133
+ verifierHashInput: new Uint8Array([0xfe, 0xa7, 0xd2, 0x76, 0x3b, 0x4b, 0x9e, 0x79]),
134
+ /** For encrypting verifier hash value. */
135
+ verifierHashValue: new Uint8Array([0xd7, 0xaa, 0x0f, 0x6d, 0x30, 0x61, 0x34, 0x4e]),
136
+ /** For encrypting the main key. */
137
+ encryptedKey: new Uint8Array([0x14, 0x6e, 0x0b, 0xe7, 0xab, 0xac, 0xd0, 0xd6]),
138
+ /** For data integrity HMAC key. */
139
+ dataIntegrityKey: new Uint8Array([0x5f, 0xb2, 0xad, 0x01, 0x0c, 0xb9, 0xe1, 0xf6]),
140
+ /** For data integrity HMAC value. */
141
+ dataIntegrityValue: new Uint8Array([0xa0, 0x67, 0x7f, 0x02, 0xb2, 0x2c, 0x84, 0x33])
142
+ };
143
+ /**
144
+ * Verify a password against the encryption info.
145
+ *
146
+ * @returns True if password is correct.
147
+ */
148
+ async function verifyPassword(password, info) {
149
+ try {
150
+ // Derive verifier hash input key
151
+ const verifierInputKey = await deriveEncryptionKey(password, info, exports.AGILE_BLOCK_KEYS.verifierHashInput);
152
+ // Decrypt the verifier hash input (PKCS#7 padded by encryption write path)
153
+ const verifierInput = aesCbcPkcs7Decrypt(info.encryptedVerifierHashInput, verifierInputKey, info.keySalt);
154
+ // Hash the verifier input
155
+ const hashAlg = mapHashName(info.hashAlgorithm);
156
+ const computedHash = await (0, crypto_1.hashAsync)(hashAlg, verifierInput);
157
+ // Derive verifier hash value key
158
+ const verifierValueKey = await deriveEncryptionKey(password, info, exports.AGILE_BLOCK_KEYS.verifierHashValue);
159
+ // Decrypt the verifier hash value (PKCS#7 padded by encryption write path)
160
+ const expectedHash = aesCbcPkcs7Decrypt(info.encryptedVerifierHashValue, verifierValueKey, info.keySalt);
161
+ // Compare (truncate to hashSize in case of padding)
162
+ return bytesEqual(computedHash.slice(0, info.hashSize), expectedHash.slice(0, info.hashSize));
163
+ }
164
+ catch {
165
+ return false;
166
+ }
167
+ }
168
+ /**
169
+ * Decrypt the package data using the password.
170
+ *
171
+ * @param encryptedPackage - The EncryptedPackage stream from CFB.
172
+ * @param info - Agile encryption parameters.
173
+ * @param password - The user password.
174
+ * @param maxDecryptedSize - Optional upper bound on the decrypted size; if the
175
+ * `totalSize` header claims a larger value, throw rather than allocate.
176
+ * Defaults to 512 MiB so adversarial files cannot trigger arbitrary-size
177
+ * allocations before security policy is applied at the unzip layer.
178
+ * @returns The decrypted (unencrypted) package bytes.
179
+ */
180
+ async function decryptPackage(encryptedPackage, info, password, maxDecryptedSize = 512 * 1024 * 1024) {
181
+ // Derive key encryption key
182
+ const keyEncryptionKey = await deriveEncryptionKey(password, info, exports.AGILE_BLOCK_KEYS.encryptedKey);
183
+ // Decrypt the actual package key (PKCS#7 padded by encryption write path)
184
+ const packageKey = aesCbcPkcs7Decrypt(info.encryptedKeyValue, keyEncryptionKey, info.keySalt);
185
+ if (encryptedPackage.length < 8) {
186
+ throw new errors_1.DocxDecryptionError("EncryptedPackage too small (missing 8-byte size header)");
187
+ }
188
+ // First 8 bytes are the total decrypted size (uint64 LE)
189
+ const totalSizeView = new DataView(encryptedPackage.buffer, encryptedPackage.byteOffset, 8);
190
+ const totalSize = Number(totalSizeView.getBigUint64(0, true));
191
+ // Sanity check the declared size: it cannot legally exceed the encrypted
192
+ // body length, and we refuse to allocate above the configured bound.
193
+ const encryptedBodyLength = encryptedPackage.length - 8;
194
+ if (!Number.isFinite(totalSize) ||
195
+ totalSize < 0 ||
196
+ totalSize > encryptedBodyLength ||
197
+ totalSize > maxDecryptedSize) {
198
+ throw new errors_1.DocxDecryptionError(`EncryptedPackage declared size (${totalSize}) is invalid or exceeds the maximum allowed (${maxDecryptedSize})`);
199
+ }
200
+ // Decrypt in 4096-byte segments
201
+ const segmentSize = 4096;
202
+ const encData = encryptedPackage.slice(8);
203
+ const segments = [];
204
+ const segCount = Math.ceil(encData.length / segmentSize);
205
+ const hashName = mapHashName(info.hashAlgorithm);
206
+ const idxBytes = new Uint8Array(4);
207
+ const idxView = new DataView(idxBytes.buffer);
208
+ for (let i = 0; i < segCount; i++) {
209
+ const segStart = i * segmentSize;
210
+ const segEnd = Math.min(segStart + segmentSize, encData.length);
211
+ const segData = encData.slice(segStart, segEnd);
212
+ // Segment IV is hash(salt + segment_index_LE), truncated to block size.
213
+ idxView.setUint32(0, i, true);
214
+ const segIv = (await (0, crypto_1.hashAsync)(hashName, concat(info.keySalt, idxBytes))).slice(0, info.blockSize);
215
+ // Package segments use zero padding (MS-OFFCRYPTO §2.3.4.15). Use the
216
+ // raw (no-padding) AES-CBC decrypt — never the PKCS#7 path, which
217
+ // would silently mis-strip valid-looking trailing zeros.
218
+ segments.push((0, crypto_1.aesCbcDecryptRaw)(segData, packageKey, ivToBlockSize(segIv)));
219
+ }
220
+ // Concatenate and truncate to total size
221
+ const result = new Uint8Array(totalSize);
222
+ let offset = 0;
223
+ for (const seg of segments) {
224
+ const copyLen = Math.min(seg.length, totalSize - offset);
225
+ result.set(seg.slice(0, copyLen), offset);
226
+ offset += copyLen;
227
+ if (offset >= totalSize) {
228
+ break;
229
+ }
230
+ }
231
+ return result;
232
+ }
233
+ // =============================================================================
234
+ // Internal Crypto Helpers
235
+ //
236
+ // All AES and SHA work is delegated to `@utils/crypto`. Node uses
237
+ // synchronous `node:crypto`, the browser variant uses Web Crypto / pure
238
+ // JS — same API on both sides.
239
+ // =============================================================================
240
+ function mapHashName(name) {
241
+ const map = {
242
+ SHA1: "SHA-1",
243
+ SHA256: "SHA-256",
244
+ SHA384: "SHA-384",
245
+ SHA512: "SHA-512"
246
+ };
247
+ return map[name] ?? "SHA-512";
248
+ }
249
+ /** Static lookup so the KDF spin loop doesn't pay a per-call cost. */
250
+ function getHashSizeFor(hashName) {
251
+ switch (hashName) {
252
+ case "SHA-1":
253
+ return 20;
254
+ case "SHA-256":
255
+ return 32;
256
+ case "SHA-384":
257
+ return 48;
258
+ case "SHA-512":
259
+ return 64;
260
+ default:
261
+ // Conservative upper bound: any reasonable hash output fits in 64 bytes.
262
+ // Callers that go through this path are misconfigured anyway and will
263
+ // be rejected by the keyBits sanity check after the first digest.
264
+ return 64;
265
+ }
266
+ }
267
+ /**
268
+ * Decrypt an AES-CBC blob whose plaintext was written with PKCS#7 padding.
269
+ * Used for the encryptedKeyValue / encryptedVerifierHashInput /
270
+ * encryptedVerifierHashValue blobs. The IV is truncated/extended to 16
271
+ * bytes per the OOXML spec.
272
+ */
273
+ function aesCbcPkcs7Decrypt(data, key, iv) {
274
+ return (0, crypto_1.aesCbcDecrypt)(data, key, ivToBlockSize(iv));
275
+ }
276
+ /**
277
+ * Encrypt with AES-CBC + PKCS#7 padding — the Agile spec's standard
278
+ * choice for verifier blobs and the encrypted package key.
279
+ */
280
+ function aesCbcPkcs7Encrypt(data, key, iv) {
281
+ return (0, crypto_1.aesCbcEncrypt)(data, key, ivToBlockSize(iv));
282
+ }
283
+ /**
284
+ * Encrypt with AES-CBC and zero-padding (no PKCS#7). Used by package
285
+ * segment encryption: data is already padded to a 16-byte boundary by
286
+ * the caller, and the on-disk format does not include a PKCS#7 trailer.
287
+ */
288
+ function aesCbcZeroPadEncrypt(data, key, iv) {
289
+ return (0, crypto_1.aesCbcEncryptRaw)(data, key, ivToBlockSize(iv));
290
+ }
291
+ /** Truncate or right-pad an IV to the AES block size (16 bytes). */
292
+ function ivToBlockSize(iv) {
293
+ if (iv.length === 16) {
294
+ return iv;
295
+ }
296
+ const out = new Uint8Array(16);
297
+ out.set(iv.slice(0, 16));
298
+ return out;
299
+ }
300
+ function concat(a, b) {
301
+ const result = new Uint8Array(a.length + b.length);
302
+ result.set(a, 0);
303
+ result.set(b, a.length);
304
+ return result;
305
+ }
306
+ function stringToUtf16LE(s) {
307
+ const buf = new Uint8Array(s.length * 2);
308
+ for (let i = 0; i < s.length; i++) {
309
+ const code = s.charCodeAt(i);
310
+ buf[i * 2] = code & 0xff;
311
+ buf[i * 2 + 1] = (code >> 8) & 0xff;
312
+ }
313
+ return buf;
314
+ }
315
+ function bytesEqual(a, b) {
316
+ if (a.length !== b.length) {
317
+ return false;
318
+ }
319
+ let diff = 0;
320
+ for (let i = 0; i < a.length; i++) {
321
+ diff |= a[i] ^ b[i];
322
+ }
323
+ return diff === 0;
324
+ }
325
+ // =============================================================================
326
+ // EncryptionInfo XML Parser
327
+ // =============================================================================
328
+ /**
329
+ * Parse an EncryptionInfo XML stream from a CFB-wrapped encrypted DOCX.
330
+ *
331
+ * This is the UTF-8 XML part after the 8-byte version/flags header.
332
+ *
333
+ * @param xmlStr - The EncryptionInfo XML content.
334
+ * @returns Parsed agile encryption info.
335
+ */
336
+ function parseEncryptionInfoXml(xmlStr) {
337
+ // Simple regex-based extraction for the key <keyEncryptors><keyEncryptor>... element
338
+ const keyDataMatch = /<keyData\s([\s\S]*?)\/>/.exec(xmlStr);
339
+ const pwdEncryptorMatch = /<p:encryptedKey\s([\s\S]*?)\/>/.exec(xmlStr);
340
+ if (!keyDataMatch || !pwdEncryptorMatch) {
341
+ throw new errors_1.DocxDecryptionError("Invalid EncryptionInfo XML - missing keyData or encryptedKey");
342
+ }
343
+ const pwdData = parseAttrs(pwdEncryptorMatch[1]);
344
+ // Required cryptographic fields — empty/missing values cannot decrypt and
345
+ // produce confusing CryptoOperation errors downstream. Fail fast with a
346
+ // clear message instead.
347
+ const requireField = (name) => {
348
+ const v = pwdData[name];
349
+ if (v === undefined || v === "") {
350
+ throw new errors_1.DocxDecryptionError(`Invalid EncryptionInfo XML - missing or empty required field: ${name}`);
351
+ }
352
+ return v;
353
+ };
354
+ const keyBitsRaw = parseInt(pwdData.keyBits ?? "256", 10);
355
+ if (keyBitsRaw !== 128 && keyBitsRaw !== 192 && keyBitsRaw !== 256) {
356
+ throw new errors_1.DocxDecryptionError(`Unsupported keyBits in EncryptionInfo: ${pwdData.keyBits} (expected 128, 192, or 256)`);
357
+ }
358
+ const hashAlgRaw = pwdData.hashAlgorithm ?? "SHA512";
359
+ if (hashAlgRaw !== "SHA1" &&
360
+ hashAlgRaw !== "SHA256" &&
361
+ hashAlgRaw !== "SHA384" &&
362
+ hashAlgRaw !== "SHA512") {
363
+ throw new errors_1.DocxDecryptionError(`Unsupported hashAlgorithm in EncryptionInfo: ${hashAlgRaw} (expected SHA1/SHA256/SHA384/SHA512)`);
364
+ }
365
+ // Validate numeric fields against sane ranges. EncryptionInfo XML is
366
+ // parsed straight from the CFB stream of an arbitrary input file, so
367
+ // every numeric attribute is attacker-controlled. Without bounds
368
+ // checks:
369
+ // - spinCount: a hostile file specifying spinCount=10⁹ would freeze
370
+ // the verifier-derivation loop in deriveEncryptionKey.
371
+ // - hashSize/blockSize: used as slice lengths and AES IV sizes.
372
+ // Outsized values silently produce wrong keys / IVs and obscure
373
+ // decryption errors; negative or NaN crashes downstream.
374
+ // Limits are deliberately wider than what real Office files emit so we
375
+ // don't reject legitimate documents.
376
+ const spinCount = parseInt(pwdData.spinCount ?? "100000", 10);
377
+ if (!Number.isFinite(spinCount) || spinCount < 0 || spinCount > 10000000) {
378
+ throw new errors_1.DocxDecryptionError(`Invalid spinCount in EncryptionInfo: ${pwdData.spinCount} (expected 0..10_000_000)`);
379
+ }
380
+ const hashSize = parseInt(pwdData.hashSize ?? "64", 10);
381
+ // Largest legitimate hash here is SHA-512 → 64 bytes. Cap at 128 to
382
+ // accommodate hypothetical extensions while still rejecting crazy values.
383
+ if (!Number.isFinite(hashSize) || hashSize < 1 || hashSize > 128) {
384
+ throw new errors_1.DocxDecryptionError(`Invalid hashSize in EncryptionInfo: ${pwdData.hashSize} (expected 1..128)`);
385
+ }
386
+ const blockSize = parseInt(pwdData.blockSize ?? "16", 10);
387
+ // AES is fixed at 16; some tooling emits 8 for legacy ciphers. Anything
388
+ // outside [8, 64] is bogus.
389
+ if (!Number.isFinite(blockSize) || blockSize < 8 || blockSize > 64) {
390
+ throw new errors_1.DocxDecryptionError(`Invalid blockSize in EncryptionInfo: ${pwdData.blockSize} (expected 8..64)`);
391
+ }
392
+ return {
393
+ cipherAlgorithm: "AES",
394
+ cipherChaining: "ChainingModeCBC",
395
+ keyBits: keyBitsRaw,
396
+ hashAlgorithm: hashAlgRaw,
397
+ hashSize,
398
+ spinCount,
399
+ keySalt: (0, internal_utils_1.base64ToBytes)(requireField("saltValue")),
400
+ encryptedVerifierHashInput: (0, internal_utils_1.base64ToBytes)(requireField("encryptedVerifierHashInput")),
401
+ encryptedVerifierHashValue: (0, internal_utils_1.base64ToBytes)(requireField("encryptedVerifierHashValue")),
402
+ encryptedKeyValue: (0, internal_utils_1.base64ToBytes)(requireField("encryptedKeyValue")),
403
+ blockSize
404
+ };
405
+ }
406
+ function parseAttrs(str) {
407
+ const attrs = {};
408
+ const re = /(\w+)="([^"]*)"/g;
409
+ let match;
410
+ while ((match = re.exec(str)) !== null) {
411
+ attrs[match[1]] = match[2];
412
+ }
413
+ return attrs;
414
+ }
415
+ // =============================================================================
416
+ // High-level Encrypted DOCX Reader
417
+ // =============================================================================
418
+ /**
419
+ * Read an encrypted DOCX file by providing a password.
420
+ *
421
+ * Handles the full pipeline:
422
+ * 1. Parse CFB container
423
+ * 2. Extract EncryptionInfo and EncryptedPackage streams
424
+ * 3. Verify password and decrypt
425
+ * 4. Return the decrypted DOCX ZIP bytes
426
+ *
427
+ * @param buffer - The encrypted DOCX file (CFB format).
428
+ * @param password - The password to decrypt with.
429
+ * @param maxDecryptedSize - Optional cap on the decrypted size (defaults to 512 MiB).
430
+ * @returns The decrypted DOCX ZIP bytes (can be passed to readDocx).
431
+ * @throws Error if the file is not encrypted, password is wrong, or decryption fails.
432
+ */
433
+ async function decryptDocx(buffer, password, maxDecryptedSize) {
434
+ if (!isEncryptedDocx(buffer)) {
435
+ throw new errors_1.DocxDecryptionError("Not an encrypted DOCX file (CFB signature not found)");
436
+ }
437
+ // Parse CFB container
438
+ const entries = (0, cfb_reader_1.readCfb)(buffer);
439
+ // Find EncryptionInfo stream
440
+ const _encInfoEntry = entries.find(e => e.name === "EncryptionInfo" || e.name === "\x06DataSpaces");
441
+ // The actual EncryptionInfo stream
442
+ const encInfoStream = entries.find(e => e.name === "EncryptionInfo");
443
+ if (!encInfoStream) {
444
+ throw new errors_1.DocxDecryptionError("CFB: EncryptionInfo stream not found");
445
+ }
446
+ // Find EncryptedPackage stream
447
+ const encPkgEntry = entries.find(e => e.name === "EncryptedPackage");
448
+ if (!encPkgEntry) {
449
+ throw new errors_1.DocxDecryptionError("CFB: EncryptedPackage stream not found");
450
+ }
451
+ // Parse EncryptionInfo — first 4 bytes are version major + minor + flags.
452
+ const infoData = encInfoStream.data;
453
+ const versionView = new DataView(infoData.buffer, infoData.byteOffset, 4);
454
+ const versionMajor = versionView.getUint16(0, true);
455
+ const versionMinor = versionView.getUint16(2, true);
456
+ // MS-OFFCRYPTO §2.3 distinguishes encryption families primarily by the
457
+ // (major, minor) pair: Agile is 4.4, Extensible is 4.3, ECMA-376 Standard
458
+ // Encryption is 4.2, RC4 CryptoAPI is 4.x with minor < 2, etc. We
459
+ // currently implement only Agile.
460
+ if (versionMajor === 4 && versionMinor === 4) {
461
+ // Agile encryption — XML follows after 8 bytes
462
+ const xmlStr = internal_utils_1.utf8Decoder.decode(infoData.slice(8));
463
+ const info = parseEncryptionInfoXml(xmlStr);
464
+ // Verify password
465
+ const valid = await verifyPassword(password, info);
466
+ if (!valid) {
467
+ throw new errors_1.DocxDecryptionError("Incorrect password");
468
+ }
469
+ // Decrypt package
470
+ return decryptPackage(encPkgEntry.data, info, password, maxDecryptedSize);
471
+ }
472
+ throw new errors_1.DocxDecryptionError(`Unsupported encryption version: ${versionMajor}.${versionMinor}. ` +
473
+ `Only Agile Encryption (4.4) is supported.`);
474
+ }
475
+ // =============================================================================
476
+ // Encrypt DOCX
477
+ // =============================================================================
478
+ /**
479
+ * Encrypt a DOCX ZIP file with a password using Agile Encryption (MS-OFFCRYPTO).
480
+ *
481
+ * Produces a CFB (OLE2 Compound File) containing:
482
+ * - EncryptionInfo stream (Agile encryption XML)
483
+ * - EncryptedPackage stream (segment-encrypted ZIP data)
484
+ *
485
+ * The output can be opened by Microsoft Word with the given password.
486
+ *
487
+ * @param zipBytes - The unencrypted DOCX content (ZIP format).
488
+ * @param password - The password to encrypt with.
489
+ * @param options - Encryption options (key length, hash algorithm, spin count).
490
+ * @returns The encrypted DOCX as a CFB-formatted Uint8Array.
491
+ */
492
+ async function encryptDocx(zipBytes, password, options) {
493
+ const keyBits = options?.keyBits ?? 256;
494
+ const hashAlgorithm = options?.hashAlgorithm ?? "SHA512";
495
+ const spinCount = options?.spinCount ?? 100000;
496
+ const hashName = mapHashName(hashAlgorithm);
497
+ const hashSize = getHashSizeFor(hashName);
498
+ const keyBytes = keyBits / 8;
499
+ const blockSize = 16;
500
+ // 1. Generate random salt (16 bytes) and package key
501
+ const keySalt = (0, internal_utils_1.randomBytes)(16);
502
+ const packageKey = (0, internal_utils_1.randomBytes)(keyBytes);
503
+ // 2. Generate key encryption key (for encrypting the package key)
504
+ const keyEncryptionKey = await deriveEncryptionKey(password, { keySalt, spinCount, hashAlgorithm, keyBits }, exports.AGILE_BLOCK_KEYS.encryptedKey);
505
+ // 3. Encrypt the package key
506
+ const encryptedKeyValue = aesCbcPkcs7Encrypt(packageKey, keyEncryptionKey, keySalt);
507
+ // 4. Generate verifier: random 16 bytes, hash them, encrypt both
508
+ const verifierInput = (0, internal_utils_1.randomBytes)(16);
509
+ const verifierHash = await (0, crypto_1.hashAsync)(hashName, verifierInput);
510
+ const verifierInputKey = await deriveEncryptionKey(password, { keySalt, spinCount, hashAlgorithm, keyBits }, exports.AGILE_BLOCK_KEYS.verifierHashInput);
511
+ const encryptedVerifierHashInput = aesCbcPkcs7Encrypt(verifierInput, verifierInputKey, keySalt);
512
+ const verifierValueKey = await deriveEncryptionKey(password, { keySalt, spinCount, hashAlgorithm, keyBits }, exports.AGILE_BLOCK_KEYS.verifierHashValue);
513
+ const encryptedVerifierHashValue = aesCbcPkcs7Encrypt(verifierHash, verifierValueKey, keySalt);
514
+ // 5. Encrypt the ZIP data in 4096-byte segments
515
+ const encryptedPackage = await encryptPackageData(zipBytes, packageKey, keySalt, hashName, blockSize);
516
+ // 6. Generate EncryptionInfo XML
517
+ const encInfoXml = buildEncryptionInfoXml({
518
+ keyBits,
519
+ hashAlgorithm,
520
+ hashSize,
521
+ spinCount,
522
+ blockSize,
523
+ keySalt,
524
+ encryptedVerifierHashInput,
525
+ encryptedVerifierHashValue,
526
+ encryptedKeyValue
527
+ });
528
+ // Prepend 8-byte version header: version 4.4 + flags 0x40
529
+ const xmlBytes = internal_utils_1.utf8Encoder.encode(encInfoXml);
530
+ const encInfoStream = new Uint8Array(8 + xmlBytes.length);
531
+ const encInfoView = new DataView(encInfoStream.buffer);
532
+ encInfoView.setUint16(0, 4, true); // version major
533
+ encInfoView.setUint16(2, 4, true); // version minor
534
+ encInfoView.setUint32(4, 0x40, true); // flags (agile)
535
+ encInfoStream.set(xmlBytes, 8);
536
+ // 7. Package into CFB
537
+ const cfbBytes = (0, cfb_reader_1.writeCfb)([
538
+ { name: "EncryptionInfo", data: encInfoStream },
539
+ { name: "EncryptedPackage", data: encryptedPackage }
540
+ ]);
541
+ return cfbBytes;
542
+ }
543
+ // =============================================================================
544
+ // Encrypt Helpers
545
+ // =============================================================================
546
+ /**
547
+ * Encrypt the package data in 4096-byte segments.
548
+ *
549
+ * Format: [8 bytes: total size LE uint64] [encrypted segment 0] [encrypted segment 1] ...
550
+ * Each segment IV = hash(salt + segment_index_LE) truncated to 16 bytes.
551
+ */
552
+ async function encryptPackageData(data, packageKey, keySalt, hashName, blockSize) {
553
+ const segmentSize = 4096;
554
+ const segCount = Math.ceil(data.length / segmentSize);
555
+ const encSegments = [];
556
+ const idxBytes = new Uint8Array(4);
557
+ const idxView = new DataView(idxBytes.buffer);
558
+ for (let i = 0; i < segCount; i++) {
559
+ const segStart = i * segmentSize;
560
+ const segEnd = Math.min(segStart + segmentSize, data.length);
561
+ let segData = data.slice(segStart, segEnd);
562
+ // Pad last segment to multiple of blockSize if needed
563
+ if (segData.length % blockSize !== 0) {
564
+ const padded = new Uint8Array(Math.ceil(segData.length / blockSize) * blockSize);
565
+ padded.set(segData);
566
+ segData = padded;
567
+ }
568
+ // Segment IV = hash(salt + segment_index_LE) truncated to blockSize
569
+ idxView.setUint32(0, i, true);
570
+ const segIv = (await (0, crypto_1.hashAsync)(hashName, concat(keySalt, idxBytes))).slice(0, blockSize);
571
+ encSegments.push(aesCbcZeroPadEncrypt(segData, packageKey, segIv));
572
+ }
573
+ // Total size (8 bytes LE uint64) + concatenated encrypted segments
574
+ const totalEncLen = encSegments.reduce((sum, s) => sum + s.length, 0);
575
+ const result = new Uint8Array(8 + totalEncLen);
576
+ const sizeView = new DataView(result.buffer);
577
+ sizeView.setBigUint64(0, BigInt(data.length), true);
578
+ let offset = 8;
579
+ for (const seg of encSegments) {
580
+ result.set(seg, offset);
581
+ offset += seg.length;
582
+ }
583
+ return result;
584
+ }
585
+ /** Build the Agile EncryptionInfo XML document. */
586
+ function buildEncryptionInfoXml(params) {
587
+ const { keyBits, hashAlgorithm, hashSize, spinCount, blockSize, keySalt, encryptedVerifierHashInput, encryptedVerifierHashValue, encryptedKeyValue } = params;
588
+ const saltB64 = (0, internal_utils_1.bytesToBase64)(keySalt);
589
+ const vhiB64 = (0, internal_utils_1.bytesToBase64)(encryptedVerifierHashInput);
590
+ const vhvB64 = (0, internal_utils_1.bytesToBase64)(encryptedVerifierHashValue);
591
+ const ekvB64 = (0, internal_utils_1.bytesToBase64)(encryptedKeyValue);
592
+ return ('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n' +
593
+ '<encryption xmlns="http://schemas.microsoft.com/office/2006/encryption" ' +
594
+ 'xmlns:p="http://schemas.microsoft.com/office/2006/keyEncryptor/password" ' +
595
+ 'xmlns:c="http://schemas.microsoft.com/office/2006/keyEncryptor/certificate">\r\n' +
596
+ `<keyData saltSize="16" blockSize="${blockSize}" keyBits="${keyBits}" ` +
597
+ `hashSize="${hashSize}" cipherAlgorithm="AES" cipherChaining="ChainingModeCBC" ` +
598
+ `hashAlgorithm="${hashAlgorithm}" saltValue="${saltB64}"/>\r\n` +
599
+ '<dataIntegrity encryptedHmacKey="" encryptedHmacValue=""/>\r\n' +
600
+ "<keyEncryptors>\r\n" +
601
+ '<keyEncryptor uri="http://schemas.microsoft.com/office/2006/keyEncryptor/password">\r\n' +
602
+ `<p:encryptedKey spinCount="${spinCount}" saltSize="16" blockSize="${blockSize}" ` +
603
+ `keyBits="${keyBits}" hashSize="${hashSize}" cipherAlgorithm="AES" ` +
604
+ `cipherChaining="ChainingModeCBC" hashAlgorithm="${hashAlgorithm}" ` +
605
+ `saltValue="${saltB64}" ` +
606
+ `encryptedVerifierHashInput="${vhiB64}" ` +
607
+ `encryptedVerifierHashValue="${vhvB64}" ` +
608
+ `encryptedKeyValue="${ekvB64}"/>\r\n` +
609
+ "</keyEncryptor>\r\n" +
610
+ "</keyEncryptors>\r\n" +
611
+ "</encryption>");
612
+ }