@cj-tech-master/excelts 1.6.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/README.md +139 -24
  2. package/README_zh.md +140 -26
  3. package/dist/browser/excelts.esm.js +18468 -0
  4. package/dist/browser/excelts.esm.js.map +1 -0
  5. package/dist/browser/excelts.esm.min.js +125 -0
  6. package/dist/browser/excelts.iife.js +13107 -47146
  7. package/dist/browser/excelts.iife.js.map +1 -1
  8. package/dist/browser/excelts.iife.min.js +24 -106
  9. package/dist/cjs/csv/csv-core.js +701 -0
  10. package/dist/cjs/csv/csv-stream.js +646 -0
  11. package/dist/cjs/csv/csv.base.js +137 -0
  12. package/dist/cjs/csv/csv.browser.js +68 -0
  13. package/dist/cjs/csv/csv.js +218 -162
  14. package/dist/cjs/doc/anchor.js +2 -2
  15. package/dist/cjs/doc/cell.js +22 -22
  16. package/dist/cjs/doc/column.js +28 -7
  17. package/dist/cjs/doc/data-validations.js +3 -3
  18. package/dist/cjs/doc/defined-names.js +13 -13
  19. package/dist/cjs/doc/image.js +7 -7
  20. package/dist/cjs/doc/modelcontainer.js +2 -2
  21. package/dist/cjs/doc/note.js +2 -2
  22. package/dist/cjs/doc/pivot-table.js +5 -5
  23. package/dist/cjs/doc/range.js +11 -11
  24. package/dist/cjs/doc/row.js +16 -16
  25. package/dist/cjs/doc/table.js +5 -5
  26. package/dist/cjs/doc/workbook.base.js +211 -0
  27. package/dist/cjs/doc/workbook.browser.js +62 -0
  28. package/dist/cjs/doc/workbook.js +68 -179
  29. package/dist/cjs/doc/worksheet.js +45 -41
  30. package/dist/cjs/index.js +49 -32
  31. package/dist/cjs/stream/xlsx/hyperlink-reader.js +6 -6
  32. package/dist/cjs/stream/xlsx/sheet-comments-writer.js +12 -12
  33. package/dist/cjs/stream/xlsx/sheet-rels-writer.js +4 -4
  34. package/dist/cjs/stream/xlsx/workbook-reader.js +22 -22
  35. package/dist/cjs/stream/xlsx/workbook-writer.js +38 -38
  36. package/dist/cjs/stream/xlsx/worksheet-reader.js +17 -17
  37. package/dist/cjs/stream/xlsx/worksheet-writer.js +67 -60
  38. package/dist/cjs/utils/browser-buffer.js +75 -0
  39. package/dist/cjs/utils/cell-format.js +2 -2
  40. package/dist/cjs/utils/cell-matrix.js +5 -5
  41. package/dist/cjs/utils/datetime.js +648 -0
  42. package/dist/cjs/utils/encryptor.browser.js +240 -0
  43. package/dist/cjs/utils/parse-sax.js +1191 -13
  44. package/dist/cjs/utils/shared-formula.js +5 -5
  45. package/dist/cjs/utils/sheet-utils.js +13 -13
  46. package/dist/cjs/utils/stream-buf.browser.js +355 -0
  47. package/dist/cjs/utils/stream-buf.js +5 -5
  48. package/dist/cjs/utils/unzip/extract.js +11 -11
  49. package/dist/cjs/utils/unzip/index.js +21 -21
  50. package/dist/cjs/utils/unzip/parse-extra-field.js +3 -3
  51. package/dist/cjs/utils/unzip/parse.js +16 -16
  52. package/dist/cjs/utils/unzip/zip-parser.js +14 -3
  53. package/dist/cjs/utils/utils.base.js +161 -0
  54. package/dist/cjs/utils/utils.browser.js +89 -0
  55. package/dist/cjs/utils/utils.js +46 -154
  56. package/dist/cjs/utils/xml-stream.js +3 -3
  57. package/dist/cjs/utils/zip/compress.base.js +88 -0
  58. package/dist/cjs/utils/zip/compress.browser.js +127 -0
  59. package/dist/cjs/utils/zip/compress.js +18 -198
  60. package/dist/cjs/utils/zip/crc32.browser.js +88 -0
  61. package/dist/cjs/utils/zip/deflate-fallback.js +575 -0
  62. package/dist/cjs/utils/zip/index.js +17 -17
  63. package/dist/cjs/utils/zip/streaming-zip.js +264 -0
  64. package/dist/cjs/utils/zip/zip-builder.js +10 -10
  65. package/dist/cjs/utils/zip-stream.browser.js +135 -0
  66. package/dist/cjs/utils/zip-stream.js +4 -4
  67. package/dist/cjs/xlsx/xform/base-xform.js +4 -4
  68. package/dist/cjs/xlsx/xform/book/defined-name-xform.js +4 -4
  69. package/dist/cjs/xlsx/xform/book/sheet-xform.js +4 -4
  70. package/dist/cjs/xlsx/xform/book/workbook-calc-properties-xform.js +2 -2
  71. package/dist/cjs/xlsx/xform/book/workbook-pivot-cache-xform.js +2 -2
  72. package/dist/cjs/xlsx/xform/book/workbook-properties-xform.js +2 -2
  73. package/dist/cjs/xlsx/xform/book/workbook-view-xform.js +2 -2
  74. package/dist/cjs/xlsx/xform/book/workbook-xform.js +24 -24
  75. package/dist/cjs/xlsx/xform/comment/comment-xform.js +4 -4
  76. package/dist/cjs/xlsx/xform/comment/comments-xform.js +6 -6
  77. package/dist/cjs/xlsx/xform/comment/style/vml-position-xform.js +2 -2
  78. package/dist/cjs/xlsx/xform/comment/style/vml-protection-xform.js +2 -2
  79. package/dist/cjs/xlsx/xform/comment/vml-anchor-xform.js +2 -2
  80. package/dist/cjs/xlsx/xform/comment/vml-client-data-xform.js +10 -10
  81. package/dist/cjs/xlsx/xform/comment/vml-notes-xform.js +6 -6
  82. package/dist/cjs/xlsx/xform/comment/vml-shape-xform.js +6 -6
  83. package/dist/cjs/xlsx/xform/comment/vml-textbox-xform.js +2 -2
  84. package/dist/cjs/xlsx/xform/composite-xform.js +2 -2
  85. package/dist/cjs/xlsx/xform/core/app-heading-pairs-xform.js +2 -2
  86. package/dist/cjs/xlsx/xform/core/app-titles-of-parts-xform.js +2 -2
  87. package/dist/cjs/xlsx/xform/core/app-xform.js +11 -11
  88. package/dist/cjs/xlsx/xform/core/content-types-xform.js +4 -4
  89. package/dist/cjs/xlsx/xform/core/core-xform.js +23 -23
  90. package/dist/cjs/xlsx/xform/core/relationship-xform.js +2 -2
  91. package/dist/cjs/xlsx/xform/core/relationships-xform.js +6 -6
  92. package/dist/cjs/xlsx/xform/drawing/base-cell-anchor-xform.js +2 -2
  93. package/dist/cjs/xlsx/xform/drawing/blip-fill-xform.js +4 -4
  94. package/dist/cjs/xlsx/xform/drawing/blip-xform.js +2 -2
  95. package/dist/cjs/xlsx/xform/drawing/c-nv-pic-pr-xform.js +2 -2
  96. package/dist/cjs/xlsx/xform/drawing/c-nv-pr-xform.js +6 -6
  97. package/dist/cjs/xlsx/xform/drawing/cell-position-xform.js +7 -7
  98. package/dist/cjs/xlsx/xform/drawing/drawing-xform.js +10 -10
  99. package/dist/cjs/xlsx/xform/drawing/ext-lst-xform.js +2 -2
  100. package/dist/cjs/xlsx/xform/drawing/ext-xform.js +2 -2
  101. package/dist/cjs/xlsx/xform/drawing/hlink-click-xform.js +2 -2
  102. package/dist/cjs/xlsx/xform/drawing/nv-pic-pr-xform.js +6 -6
  103. package/dist/cjs/xlsx/xform/drawing/one-cell-anchor-xform.js +10 -10
  104. package/dist/cjs/xlsx/xform/drawing/pic-xform.js +9 -9
  105. package/dist/cjs/xlsx/xform/drawing/two-cell-anchor-xform.js +9 -9
  106. package/dist/cjs/xlsx/xform/list-xform.js +2 -2
  107. package/dist/cjs/xlsx/xform/pivot-table/cache-field-xform.js +5 -5
  108. package/dist/cjs/xlsx/xform/pivot-table/cache-field.js +3 -3
  109. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +10 -10
  110. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-records-xform.js +9 -9
  111. package/dist/cjs/xlsx/xform/pivot-table/pivot-table-xform.js +10 -11
  112. package/dist/cjs/xlsx/xform/sheet/auto-filter-xform.js +4 -4
  113. package/dist/cjs/xlsx/xform/sheet/cell-xform.js +65 -65
  114. package/dist/cjs/xlsx/xform/sheet/cf/cf-rule-xform.js +27 -27
  115. package/dist/cjs/xlsx/xform/sheet/cf/cfvo-xform.js +3 -3
  116. package/dist/cjs/xlsx/xform/sheet/cf/color-scale-xform.js +6 -6
  117. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formatting-xform.js +6 -6
  118. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formattings-xform.js +4 -4
  119. package/dist/cjs/xlsx/xform/sheet/cf/databar-xform.js +6 -6
  120. package/dist/cjs/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +5 -5
  121. package/dist/cjs/xlsx/xform/sheet/cf/formula-xform.js +2 -2
  122. package/dist/cjs/xlsx/xform/sheet/cf/icon-set-xform.js +11 -11
  123. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +3 -3
  124. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +11 -12
  125. package/dist/cjs/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +4 -4
  126. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +8 -8
  127. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +6 -6
  128. package/dist/cjs/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +26 -26
  129. package/dist/cjs/xlsx/xform/sheet/cf-ext/f-ext-xform.js +2 -2
  130. package/dist/cjs/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +14 -14
  131. package/dist/cjs/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +2 -2
  132. package/dist/cjs/xlsx/xform/sheet/col-breaks-xform.js +38 -0
  133. package/dist/cjs/xlsx/xform/sheet/col-xform.js +6 -6
  134. package/dist/cjs/xlsx/xform/sheet/data-validations-xform.js +18 -18
  135. package/dist/cjs/xlsx/xform/sheet/dimension-xform.js +2 -2
  136. package/dist/cjs/xlsx/xform/sheet/drawing-xform.js +2 -2
  137. package/dist/cjs/xlsx/xform/sheet/ext-lst-xform.js +5 -5
  138. package/dist/cjs/xlsx/xform/sheet/header-footer-xform.js +2 -2
  139. package/dist/cjs/xlsx/xform/sheet/hyperlink-xform.js +2 -2
  140. package/dist/cjs/xlsx/xform/sheet/merge-cell-xform.js +2 -2
  141. package/dist/cjs/xlsx/xform/sheet/merges.js +8 -8
  142. package/dist/cjs/xlsx/xform/sheet/outline-properties-xform.js +2 -2
  143. package/dist/cjs/xlsx/xform/sheet/page-breaks-xform.js +15 -3
  144. package/dist/cjs/xlsx/xform/sheet/page-margins-xform.js +2 -2
  145. package/dist/cjs/xlsx/xform/sheet/page-setup-properties-xform.js +2 -2
  146. package/dist/cjs/xlsx/xform/sheet/page-setup-xform.js +2 -2
  147. package/dist/cjs/xlsx/xform/sheet/picture-xform.js +2 -2
  148. package/dist/cjs/xlsx/xform/sheet/print-options-xform.js +2 -2
  149. package/dist/cjs/xlsx/xform/sheet/row-breaks-xform.js +15 -17
  150. package/dist/cjs/xlsx/xform/sheet/row-xform.js +11 -11
  151. package/dist/cjs/xlsx/xform/sheet/sheet-format-properties-xform.js +2 -2
  152. package/dist/cjs/xlsx/xform/sheet/sheet-properties-xform.js +8 -8
  153. package/dist/cjs/xlsx/xform/sheet/sheet-protection-xform.js +2 -2
  154. package/dist/cjs/xlsx/xform/sheet/sheet-view-xform.js +4 -4
  155. package/dist/cjs/xlsx/xform/sheet/table-part-xform.js +2 -2
  156. package/dist/cjs/xlsx/xform/sheet/worksheet-xform.js +75 -70
  157. package/dist/cjs/xlsx/xform/simple/boolean-xform.js +2 -2
  158. package/dist/cjs/xlsx/xform/simple/date-xform.js +2 -2
  159. package/dist/cjs/xlsx/xform/simple/float-xform.js +2 -2
  160. package/dist/cjs/xlsx/xform/simple/integer-xform.js +2 -2
  161. package/dist/cjs/xlsx/xform/simple/string-xform.js +2 -2
  162. package/dist/cjs/xlsx/xform/static-xform.js +4 -4
  163. package/dist/cjs/xlsx/xform/strings/phonetic-text-xform.js +6 -6
  164. package/dist/cjs/xlsx/xform/strings/rich-text-xform.js +6 -6
  165. package/dist/cjs/xlsx/xform/strings/shared-string-xform.js +8 -8
  166. package/dist/cjs/xlsx/xform/strings/shared-strings-xform.js +6 -6
  167. package/dist/cjs/xlsx/xform/strings/text-xform.js +2 -2
  168. package/dist/cjs/xlsx/xform/style/alignment-xform.js +8 -8
  169. package/dist/cjs/xlsx/xform/style/border-xform.js +8 -8
  170. package/dist/cjs/xlsx/xform/style/color-xform.js +2 -2
  171. package/dist/cjs/xlsx/xform/style/dxf-xform.js +14 -14
  172. package/dist/cjs/xlsx/xform/style/fill-xform.js +9 -9
  173. package/dist/cjs/xlsx/xform/style/font-xform.js +22 -22
  174. package/dist/cjs/xlsx/xform/style/numfmt-xform.js +5 -5
  175. package/dist/cjs/xlsx/xform/style/protection-xform.js +2 -2
  176. package/dist/cjs/xlsx/xform/style/style-xform.js +6 -6
  177. package/dist/cjs/xlsx/xform/style/styles-xform.js +39 -39
  178. package/dist/cjs/xlsx/xform/style/underline-xform.js +2 -2
  179. package/dist/cjs/xlsx/xform/table/auto-filter-xform.js +4 -4
  180. package/dist/cjs/xlsx/xform/table/custom-filter-xform.js +2 -2
  181. package/dist/cjs/xlsx/xform/table/filter-column-xform.js +9 -9
  182. package/dist/cjs/xlsx/xform/table/filter-xform.js +2 -2
  183. package/dist/cjs/xlsx/xform/table/table-column-xform.js +2 -2
  184. package/dist/cjs/xlsx/xform/table/table-style-info-xform.js +2 -2
  185. package/dist/cjs/xlsx/xform/table/table-xform.js +12 -12
  186. package/dist/cjs/xlsx/xlsx.base.js +742 -0
  187. package/dist/cjs/xlsx/xlsx.browser.js +162 -0
  188. package/dist/cjs/xlsx/xlsx.js +118 -892
  189. package/dist/esm/csv/csv-core.js +694 -0
  190. package/dist/esm/csv/csv-stream.js +638 -0
  191. package/dist/esm/csv/csv.base.js +127 -0
  192. package/dist/esm/csv/csv.browser.js +65 -0
  193. package/dist/esm/csv/csv.js +181 -159
  194. package/dist/esm/doc/column.js +21 -0
  195. package/dist/esm/doc/workbook.base.js +207 -0
  196. package/dist/esm/doc/workbook.browser.js +59 -0
  197. package/dist/esm/doc/workbook.js +64 -175
  198. package/dist/esm/doc/worksheet.js +4 -0
  199. package/dist/esm/index.browser.js +33 -1
  200. package/dist/esm/index.js +23 -8
  201. package/dist/esm/local.js +0 -1
  202. package/dist/esm/stream/xlsx/workbook-writer.js +1 -1
  203. package/dist/esm/stream/xlsx/worksheet-writer.js +8 -1
  204. package/dist/esm/utils/browser-buffer.js +67 -0
  205. package/dist/esm/utils/datetime.js +639 -0
  206. package/dist/esm/utils/encryptor.browser.js +237 -0
  207. package/dist/esm/utils/parse-sax.js +1188 -12
  208. package/dist/esm/utils/stream-buf.browser.js +352 -0
  209. package/dist/esm/utils/unzip/zip-parser.js +11 -0
  210. package/dist/esm/utils/utils.base.js +142 -0
  211. package/dist/esm/utils/utils.browser.js +68 -0
  212. package/dist/esm/utils/utils.js +15 -123
  213. package/dist/esm/utils/zip/compress.base.js +83 -0
  214. package/dist/esm/utils/zip/compress.browser.js +121 -0
  215. package/dist/esm/utils/zip/compress.js +16 -164
  216. package/dist/esm/utils/zip/crc32.browser.js +82 -0
  217. package/dist/esm/utils/zip/deflate-fallback.js +570 -0
  218. package/dist/esm/utils/zip/streaming-zip.js +259 -0
  219. package/dist/esm/utils/zip-stream.browser.js +132 -0
  220. package/dist/esm/xlsx/xform/pivot-table/pivot-table-xform.js +2 -3
  221. package/dist/esm/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +2 -3
  222. package/dist/esm/xlsx/xform/sheet/col-breaks-xform.js +35 -0
  223. package/dist/esm/xlsx/xform/sheet/page-breaks-xform.js +13 -1
  224. package/dist/esm/xlsx/xform/sheet/row-breaks-xform.js +11 -13
  225. package/dist/esm/xlsx/xform/sheet/worksheet-xform.js +7 -2
  226. package/dist/esm/xlsx/xlsx.base.js +739 -0
  227. package/dist/esm/xlsx/xlsx.browser.js +159 -0
  228. package/dist/esm/xlsx/xlsx.js +114 -888
  229. package/dist/types/csv/csv-core.d.ts +207 -0
  230. package/dist/types/csv/csv-stream.d.ts +114 -0
  231. package/dist/types/csv/csv.base.d.ts +62 -0
  232. package/dist/types/csv/csv.browser.d.ts +33 -0
  233. package/dist/types/csv/csv.d.ts +97 -71
  234. package/dist/types/doc/anchor.d.ts +1 -1
  235. package/dist/types/doc/cell.d.ts +7 -7
  236. package/dist/types/doc/column.d.ts +9 -3
  237. package/dist/types/doc/defined-names.d.ts +4 -4
  238. package/dist/types/doc/image.d.ts +2 -2
  239. package/dist/types/doc/modelcontainer.d.ts +1 -1
  240. package/dist/types/doc/pivot-table.d.ts +1 -1
  241. package/dist/types/doc/range.d.ts +1 -1
  242. package/dist/types/doc/row.d.ts +3 -3
  243. package/dist/types/doc/table.d.ts +2 -2
  244. package/dist/types/doc/workbook.base.d.ts +111 -0
  245. package/dist/types/doc/workbook.browser.d.ts +38 -0
  246. package/dist/types/doc/workbook.d.ts +62 -92
  247. package/dist/types/doc/worksheet.d.ts +12 -10
  248. package/dist/types/index.browser.d.ts +19 -5
  249. package/dist/types/index.d.ts +24 -23
  250. package/dist/types/local.d.ts +0 -1
  251. package/dist/types/stream/xlsx/hyperlink-reader.d.ts +1 -1
  252. package/dist/types/stream/xlsx/workbook-reader.d.ts +4 -4
  253. package/dist/types/stream/xlsx/workbook-writer.d.ts +7 -7
  254. package/dist/types/stream/xlsx/worksheet-reader.d.ts +5 -5
  255. package/dist/types/stream/xlsx/worksheet-writer.d.ts +11 -9
  256. package/dist/types/types.d.ts +6 -0
  257. package/dist/types/utils/browser-buffer.d.ts +28 -0
  258. package/dist/types/utils/col-cache.d.ts +1 -1
  259. package/dist/types/utils/datetime.d.ts +85 -0
  260. package/dist/types/utils/encryptor.browser.d.ts +28 -0
  261. package/dist/types/utils/parse-sax.d.ts +108 -1
  262. package/dist/types/utils/sheet-utils.d.ts +3 -3
  263. package/dist/types/utils/stream-buf.browser.d.ts +41 -0
  264. package/dist/types/utils/unzip/extract.d.ts +6 -6
  265. package/dist/types/utils/unzip/index.d.ts +8 -8
  266. package/dist/types/utils/unzip/parse.d.ts +3 -3
  267. package/dist/types/utils/unzip/zip-parser.d.ts +5 -0
  268. package/dist/types/utils/utils.base.d.ts +29 -0
  269. package/dist/types/utils/utils.browser.d.ts +29 -0
  270. package/dist/types/utils/utils.d.ts +6 -25
  271. package/dist/types/utils/zip/compress.base.d.ts +45 -0
  272. package/dist/types/utils/zip/compress.browser.d.ts +63 -0
  273. package/dist/types/utils/zip/compress.d.ts +13 -45
  274. package/dist/types/utils/zip/crc32.browser.d.ts +52 -0
  275. package/dist/types/utils/zip/deflate-fallback.d.ts +39 -0
  276. package/dist/types/utils/zip/index.d.ts +5 -5
  277. package/dist/types/utils/zip/streaming-zip.d.ts +96 -0
  278. package/dist/types/utils/zip/zip-builder.d.ts +1 -1
  279. package/dist/types/utils/zip-stream.browser.d.ts +39 -0
  280. package/dist/types/xlsx/xform/base-xform.d.ts +1 -1
  281. package/dist/types/xlsx/xform/book/defined-name-xform.d.ts +1 -1
  282. package/dist/types/xlsx/xform/book/sheet-xform.d.ts +1 -1
  283. package/dist/types/xlsx/xform/book/workbook-calc-properties-xform.d.ts +1 -1
  284. package/dist/types/xlsx/xform/book/workbook-pivot-cache-xform.d.ts +1 -1
  285. package/dist/types/xlsx/xform/book/workbook-properties-xform.d.ts +1 -1
  286. package/dist/types/xlsx/xform/book/workbook-view-xform.d.ts +1 -1
  287. package/dist/types/xlsx/xform/book/workbook-xform.d.ts +2 -2
  288. package/dist/types/xlsx/xform/comment/comment-xform.d.ts +2 -2
  289. package/dist/types/xlsx/xform/comment/comments-xform.d.ts +2 -2
  290. package/dist/types/xlsx/xform/comment/style/vml-position-xform.d.ts +1 -1
  291. package/dist/types/xlsx/xform/comment/style/vml-protection-xform.d.ts +1 -1
  292. package/dist/types/xlsx/xform/comment/vml-anchor-xform.d.ts +1 -1
  293. package/dist/types/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -1
  294. package/dist/types/xlsx/xform/comment/vml-notes-xform.d.ts +1 -1
  295. package/dist/types/xlsx/xform/comment/vml-shape-xform.d.ts +1 -1
  296. package/dist/types/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -1
  297. package/dist/types/xlsx/xform/composite-xform.d.ts +1 -1
  298. package/dist/types/xlsx/xform/core/app-heading-pairs-xform.d.ts +1 -1
  299. package/dist/types/xlsx/xform/core/app-titles-of-parts-xform.d.ts +1 -1
  300. package/dist/types/xlsx/xform/core/app-xform.d.ts +1 -1
  301. package/dist/types/xlsx/xform/core/content-types-xform.d.ts +1 -1
  302. package/dist/types/xlsx/xform/core/core-xform.d.ts +1 -1
  303. package/dist/types/xlsx/xform/core/relationship-xform.d.ts +1 -1
  304. package/dist/types/xlsx/xform/core/relationships-xform.d.ts +1 -1
  305. package/dist/types/xlsx/xform/drawing/base-cell-anchor-xform.d.ts +1 -1
  306. package/dist/types/xlsx/xform/drawing/blip-fill-xform.d.ts +2 -2
  307. package/dist/types/xlsx/xform/drawing/blip-xform.d.ts +1 -1
  308. package/dist/types/xlsx/xform/drawing/c-nv-pic-pr-xform.d.ts +1 -1
  309. package/dist/types/xlsx/xform/drawing/c-nv-pr-xform.d.ts +1 -1
  310. package/dist/types/xlsx/xform/drawing/cell-position-xform.d.ts +2 -2
  311. package/dist/types/xlsx/xform/drawing/drawing-xform.d.ts +1 -1
  312. package/dist/types/xlsx/xform/drawing/ext-lst-xform.d.ts +1 -1
  313. package/dist/types/xlsx/xform/drawing/ext-xform.d.ts +1 -1
  314. package/dist/types/xlsx/xform/drawing/hlink-click-xform.d.ts +1 -1
  315. package/dist/types/xlsx/xform/drawing/nv-pic-pr-xform.d.ts +1 -1
  316. package/dist/types/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +1 -1
  317. package/dist/types/xlsx/xform/drawing/pic-xform.d.ts +1 -1
  318. package/dist/types/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +1 -1
  319. package/dist/types/xlsx/xform/list-xform.d.ts +1 -1
  320. package/dist/types/xlsx/xform/pivot-table/cache-field-xform.d.ts +1 -1
  321. package/dist/types/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +3 -3
  322. package/dist/types/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +2 -2
  323. package/dist/types/xlsx/xform/pivot-table/pivot-table-xform.d.ts +1 -1
  324. package/dist/types/xlsx/xform/sheet/auto-filter-xform.d.ts +1 -1
  325. package/dist/types/xlsx/xform/sheet/cell-xform.d.ts +1 -1
  326. package/dist/types/xlsx/xform/sheet/cf/cf-rule-xform.d.ts +6 -6
  327. package/dist/types/xlsx/xform/sheet/cf/cfvo-xform.d.ts +1 -1
  328. package/dist/types/xlsx/xform/sheet/cf/color-scale-xform.d.ts +3 -3
  329. package/dist/types/xlsx/xform/sheet/cf/conditional-formatting-xform.d.ts +1 -1
  330. package/dist/types/xlsx/xform/sheet/cf/conditional-formattings-xform.d.ts +2 -2
  331. package/dist/types/xlsx/xform/sheet/cf/databar-xform.d.ts +3 -3
  332. package/dist/types/xlsx/xform/sheet/cf/ext-lst-ref-xform.d.ts +1 -1
  333. package/dist/types/xlsx/xform/sheet/cf/formula-xform.d.ts +1 -1
  334. package/dist/types/xlsx/xform/sheet/cf/icon-set-xform.d.ts +2 -2
  335. package/dist/types/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.d.ts +1 -1
  336. package/dist/types/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.d.ts +3 -3
  337. package/dist/types/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.d.ts +2 -2
  338. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.d.ts +3 -3
  339. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.d.ts +2 -2
  340. package/dist/types/xlsx/xform/sheet/cf-ext/databar-ext-xform.d.ts +3 -3
  341. package/dist/types/xlsx/xform/sheet/cf-ext/f-ext-xform.d.ts +1 -1
  342. package/dist/types/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.d.ts +3 -3
  343. package/dist/types/xlsx/xform/sheet/cf-ext/sqref-ext-xform.d.ts +1 -1
  344. package/dist/types/xlsx/xform/sheet/col-breaks-xform.d.ts +16 -0
  345. package/dist/types/xlsx/xform/sheet/col-xform.d.ts +1 -1
  346. package/dist/types/xlsx/xform/sheet/data-validations-xform.d.ts +1 -1
  347. package/dist/types/xlsx/xform/sheet/dimension-xform.d.ts +1 -1
  348. package/dist/types/xlsx/xform/sheet/drawing-xform.d.ts +1 -1
  349. package/dist/types/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -1
  350. package/dist/types/xlsx/xform/sheet/header-footer-xform.d.ts +1 -1
  351. package/dist/types/xlsx/xform/sheet/hyperlink-xform.d.ts +1 -1
  352. package/dist/types/xlsx/xform/sheet/merge-cell-xform.d.ts +1 -1
  353. package/dist/types/xlsx/xform/sheet/outline-properties-xform.d.ts +1 -1
  354. package/dist/types/xlsx/xform/sheet/page-breaks-xform.d.ts +5 -1
  355. package/dist/types/xlsx/xform/sheet/page-margins-xform.d.ts +1 -1
  356. package/dist/types/xlsx/xform/sheet/page-setup-properties-xform.d.ts +1 -1
  357. package/dist/types/xlsx/xform/sheet/page-setup-xform.d.ts +1 -1
  358. package/dist/types/xlsx/xform/sheet/picture-xform.d.ts +1 -1
  359. package/dist/types/xlsx/xform/sheet/print-options-xform.d.ts +1 -1
  360. package/dist/types/xlsx/xform/sheet/row-breaks-xform.d.ts +5 -1
  361. package/dist/types/xlsx/xform/sheet/row-xform.d.ts +1 -1
  362. package/dist/types/xlsx/xform/sheet/sheet-format-properties-xform.d.ts +1 -1
  363. package/dist/types/xlsx/xform/sheet/sheet-properties-xform.d.ts +1 -1
  364. package/dist/types/xlsx/xform/sheet/sheet-protection-xform.d.ts +1 -1
  365. package/dist/types/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -1
  366. package/dist/types/xlsx/xform/sheet/table-part-xform.d.ts +1 -1
  367. package/dist/types/xlsx/xform/sheet/worksheet-xform.d.ts +1 -1
  368. package/dist/types/xlsx/xform/simple/boolean-xform.d.ts +1 -1
  369. package/dist/types/xlsx/xform/simple/date-xform.d.ts +1 -1
  370. package/dist/types/xlsx/xform/simple/float-xform.d.ts +1 -1
  371. package/dist/types/xlsx/xform/simple/integer-xform.d.ts +1 -1
  372. package/dist/types/xlsx/xform/simple/string-xform.d.ts +1 -1
  373. package/dist/types/xlsx/xform/static-xform.d.ts +1 -1
  374. package/dist/types/xlsx/xform/strings/phonetic-text-xform.d.ts +1 -1
  375. package/dist/types/xlsx/xform/strings/rich-text-xform.d.ts +3 -3
  376. package/dist/types/xlsx/xform/strings/shared-string-xform.d.ts +1 -1
  377. package/dist/types/xlsx/xform/strings/shared-strings-xform.d.ts +2 -2
  378. package/dist/types/xlsx/xform/strings/text-xform.d.ts +1 -1
  379. package/dist/types/xlsx/xform/style/alignment-xform.d.ts +1 -1
  380. package/dist/types/xlsx/xform/style/border-xform.d.ts +2 -2
  381. package/dist/types/xlsx/xform/style/color-xform.d.ts +1 -1
  382. package/dist/types/xlsx/xform/style/dxf-xform.d.ts +1 -1
  383. package/dist/types/xlsx/xform/style/fill-xform.d.ts +2 -2
  384. package/dist/types/xlsx/xform/style/font-xform.d.ts +1 -1
  385. package/dist/types/xlsx/xform/style/numfmt-xform.d.ts +1 -1
  386. package/dist/types/xlsx/xform/style/protection-xform.d.ts +1 -1
  387. package/dist/types/xlsx/xform/style/style-xform.d.ts +3 -3
  388. package/dist/types/xlsx/xform/style/styles-xform.d.ts +2 -2
  389. package/dist/types/xlsx/xform/style/underline-xform.d.ts +1 -1
  390. package/dist/types/xlsx/xform/table/auto-filter-xform.d.ts +2 -2
  391. package/dist/types/xlsx/xform/table/custom-filter-xform.d.ts +1 -1
  392. package/dist/types/xlsx/xform/table/filter-column-xform.d.ts +2 -2
  393. package/dist/types/xlsx/xform/table/filter-xform.d.ts +1 -1
  394. package/dist/types/xlsx/xform/table/table-column-xform.d.ts +1 -1
  395. package/dist/types/xlsx/xform/table/table-style-info-xform.d.ts +1 -1
  396. package/dist/types/xlsx/xform/table/table-xform.d.ts +1 -1
  397. package/dist/types/xlsx/xlsx.base.d.ts +134 -0
  398. package/dist/types/xlsx/xlsx.browser.d.ts +31 -0
  399. package/dist/types/xlsx/xlsx.d.ts +20 -80
  400. package/package.json +16 -39
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Streaming ZIP creator - fflate-compatible API
3
+ *
4
+ * This module provides a streaming ZIP API compatible with fflate's Zip/ZipDeflate,
5
+ * but uses native zlib compression for better performance.
6
+ *
7
+ * Usage:
8
+ * ```ts
9
+ * const zip = new StreamingZip((err, data, final) => {
10
+ * if (err) handleError(err);
11
+ * else {
12
+ * stream.write(data);
13
+ * if (final) stream.end();
14
+ * }
15
+ * });
16
+ *
17
+ * const file = new ZipDeflateFile("path/file.txt", { level: 6 });
18
+ * zip.add(file);
19
+ * file.push(data1);
20
+ * file.push(data2, true); // true = final chunk
21
+ *
22
+ * zip.end();
23
+ * ```
24
+ */
25
+ import { crc32 } from "./crc32.js";
26
+ import { compressSync } from "./compress.js";
27
+ // ZIP signature constants
28
+ const LOCAL_FILE_HEADER_SIG = 0x04034b50;
29
+ const CENTRAL_DIR_HEADER_SIG = 0x02014b50;
30
+ const END_OF_CENTRAL_DIR_SIG = 0x06054b50;
31
+ // ZIP version constants
32
+ const VERSION_NEEDED = 20; // 2.0 - supports DEFLATE
33
+ const VERSION_MADE_BY = 20; // 2.0
34
+ // Compression methods
35
+ const COMPRESSION_STORE = 0;
36
+ const COMPRESSION_DEFLATE = 8;
37
+ const encoder = new TextEncoder();
38
+ /**
39
+ * Convert Date to DOS time format
40
+ */
41
+ function dateToDos(date) {
42
+ const dosTime = ((date.getHours() & 0x1f) << 11) |
43
+ ((date.getMinutes() & 0x3f) << 5) |
44
+ ((date.getSeconds() >> 1) & 0x1f);
45
+ const dosDate = (((date.getFullYear() - 1980) & 0x7f) << 9) |
46
+ (((date.getMonth() + 1) & 0x0f) << 5) |
47
+ (date.getDate() & 0x1f);
48
+ return [dosTime, dosDate];
49
+ }
50
+ /**
51
+ * ZipDeflate-compatible file stream
52
+ * Collects data chunks, compresses on finalization
53
+ */
54
+ export class ZipDeflateFile {
55
+ constructor(name, options) {
56
+ this.chunks = [];
57
+ this.totalSize = 0;
58
+ this.finalized = false;
59
+ this._ondata = null;
60
+ this.name = name;
61
+ this.level = options?.level ?? 6;
62
+ }
63
+ /**
64
+ * Set data callback (called by StreamingZip)
65
+ */
66
+ set ondata(cb) {
67
+ this._ondata = cb;
68
+ }
69
+ /**
70
+ * Push data to the file
71
+ * @param data - Data chunk
72
+ * @param final - Whether this is the final chunk
73
+ */
74
+ push(data, final = false) {
75
+ if (this.finalized) {
76
+ throw new Error("Cannot push to finalized ZipDeflateFile");
77
+ }
78
+ if (data.length > 0) {
79
+ this.chunks.push(data);
80
+ this.totalSize += data.length;
81
+ }
82
+ if (final) {
83
+ this.finalized = true;
84
+ this._flush();
85
+ }
86
+ }
87
+ /**
88
+ * Flush collected data through compression and emit
89
+ */
90
+ _flush() {
91
+ if (!this._ondata) {
92
+ return;
93
+ }
94
+ // Combine chunks
95
+ let uncompressed;
96
+ if (this.chunks.length === 0) {
97
+ uncompressed = new Uint8Array(0);
98
+ }
99
+ else if (this.chunks.length === 1) {
100
+ uncompressed = this.chunks[0];
101
+ }
102
+ else {
103
+ uncompressed = new Uint8Array(this.totalSize);
104
+ let offset = 0;
105
+ for (const chunk of this.chunks) {
106
+ uncompressed.set(chunk, offset);
107
+ offset += chunk.length;
108
+ }
109
+ }
110
+ // Compress if level > 0 and data is not empty
111
+ const shouldCompress = this.level > 0 && uncompressed.length > 0;
112
+ const compressed = shouldCompress
113
+ ? compressSync(uncompressed, { level: this.level })
114
+ : uncompressed;
115
+ // Build local file header + data
116
+ const nameBytes = encoder.encode(this.name);
117
+ const crcValue = crc32(uncompressed);
118
+ const [dosTime, dosDate] = dateToDos(new Date());
119
+ // Local file header (30 bytes + filename)
120
+ const header = new Uint8Array(30 + nameBytes.length);
121
+ const view = new DataView(header.buffer);
122
+ view.setUint32(0, LOCAL_FILE_HEADER_SIG, true);
123
+ view.setUint16(4, VERSION_NEEDED, true);
124
+ view.setUint16(6, 0x0800, true); // UTF-8 flag
125
+ view.setUint16(8, shouldCompress ? COMPRESSION_DEFLATE : COMPRESSION_STORE, true);
126
+ view.setUint16(10, dosTime, true);
127
+ view.setUint16(12, dosDate, true);
128
+ view.setUint32(14, crcValue, true);
129
+ view.setUint32(18, compressed.length, true);
130
+ view.setUint32(22, uncompressed.length, true);
131
+ view.setUint16(26, nameBytes.length, true);
132
+ view.setUint16(28, 0, true); // Extra field length
133
+ header.set(nameBytes, 30);
134
+ // Store info for central directory BEFORE emitting data
135
+ // (StreamingZip reads this in the final callback)
136
+ this._entryInfo = {
137
+ name: nameBytes,
138
+ crc: crcValue,
139
+ compressedSize: compressed.length,
140
+ uncompressedSize: uncompressed.length,
141
+ compressionMethod: shouldCompress ? COMPRESSION_DEFLATE : COMPRESSION_STORE,
142
+ dosTime,
143
+ dosDate,
144
+ offset: -1 // Will be set by StreamingZip
145
+ };
146
+ // Emit header
147
+ this._ondata(header, false);
148
+ // Emit compressed data (final chunk)
149
+ this._ondata(compressed, true);
150
+ // Clear chunks for GC
151
+ this.chunks.length = 0;
152
+ }
153
+ /**
154
+ * Get entry info (called by StreamingZip after finalization)
155
+ */
156
+ getEntryInfo() {
157
+ return this._entryInfo || null;
158
+ }
159
+ }
160
+ /**
161
+ * Streaming ZIP - fflate Zip-compatible API
162
+ * Creates ZIP files in a streaming manner
163
+ */
164
+ export class StreamingZip {
165
+ /**
166
+ * Create a streaming ZIP
167
+ * @param callback - Called with (err, data, final) as data becomes available
168
+ */
169
+ constructor(callback) {
170
+ this.entries = [];
171
+ this.currentOffset = 0;
172
+ this.ended = false;
173
+ this.callback = callback;
174
+ }
175
+ /**
176
+ * Add a file to the ZIP
177
+ * @param file - ZipDeflateFile instance
178
+ */
179
+ add(file) {
180
+ if (this.ended) {
181
+ throw new Error("Cannot add files after calling end()");
182
+ }
183
+ // Capture offset when first data is written, not when add() is called
184
+ // This is important because streaming files may have data pushed later
185
+ let startOffset = -1;
186
+ file.ondata = (data, final) => {
187
+ // Capture offset on first data chunk
188
+ if (startOffset === -1) {
189
+ startOffset = this.currentOffset;
190
+ }
191
+ this.currentOffset += data.length;
192
+ this.callback(null, data, false);
193
+ if (final) {
194
+ // Get entry info and set offset
195
+ const entryInfo = file.getEntryInfo();
196
+ if (entryInfo) {
197
+ entryInfo.offset = startOffset;
198
+ this.entries.push(entryInfo);
199
+ }
200
+ }
201
+ };
202
+ }
203
+ /**
204
+ * Finalize the ZIP
205
+ * Writes central directory and end-of-central-directory record
206
+ */
207
+ end() {
208
+ if (this.ended) {
209
+ return;
210
+ }
211
+ this.ended = true;
212
+ const centralDirOffset = this.currentOffset;
213
+ const centralDirChunks = [];
214
+ // Build central directory headers
215
+ for (const entry of this.entries) {
216
+ const header = new Uint8Array(46 + entry.name.length);
217
+ const view = new DataView(header.buffer);
218
+ view.setUint32(0, CENTRAL_DIR_HEADER_SIG, true);
219
+ view.setUint16(4, VERSION_MADE_BY, true);
220
+ view.setUint16(6, VERSION_NEEDED, true);
221
+ view.setUint16(8, 0x0800, true); // UTF-8 flag
222
+ view.setUint16(10, entry.compressionMethod, true);
223
+ view.setUint16(12, entry.dosTime, true);
224
+ view.setUint16(14, entry.dosDate, true);
225
+ view.setUint32(16, entry.crc, true);
226
+ view.setUint32(20, entry.compressedSize, true);
227
+ view.setUint32(24, entry.uncompressedSize, true);
228
+ view.setUint16(28, entry.name.length, true);
229
+ view.setUint16(30, 0, true); // Extra field length
230
+ view.setUint16(32, 0, true); // Comment length
231
+ view.setUint16(34, 0, true); // Disk number start
232
+ view.setUint16(36, 0, true); // Internal file attributes
233
+ view.setUint32(38, 0, true); // External file attributes
234
+ view.setUint32(42, entry.offset, true);
235
+ header.set(entry.name, 46);
236
+ centralDirChunks.push(header);
237
+ }
238
+ // Emit central directory
239
+ for (const chunk of centralDirChunks) {
240
+ this.callback(null, chunk, false);
241
+ }
242
+ const centralDirSize = centralDirChunks.reduce((sum, c) => sum + c.length, 0);
243
+ // Build end of central directory
244
+ const eocd = new Uint8Array(22);
245
+ const eocdView = new DataView(eocd.buffer);
246
+ eocdView.setUint32(0, END_OF_CENTRAL_DIR_SIG, true);
247
+ eocdView.setUint16(4, 0, true); // Disk number
248
+ eocdView.setUint16(6, 0, true); // Disk with central dir
249
+ eocdView.setUint16(8, this.entries.length, true);
250
+ eocdView.setUint16(10, this.entries.length, true);
251
+ eocdView.setUint32(12, centralDirSize, true);
252
+ eocdView.setUint32(16, centralDirOffset, true);
253
+ eocdView.setUint16(20, 0, true); // Comment length
254
+ // Emit end of central directory (final chunk)
255
+ this.callback(null, eocd, true);
256
+ }
257
+ }
258
+ // Export aliases for fflate compatibility
259
+ export { StreamingZip as Zip, ZipDeflateFile as ZipDeflate };
@@ -0,0 +1,132 @@
1
+ import { ZipBuilder } from "./zip/zip-builder.js";
2
+ import { StreamBuf } from "./stream-buf.browser.js";
3
+ // Helper function for base64 decoding in browser
4
+ function base64ToUint8Array(base64) {
5
+ const binaryString = atob(base64);
6
+ const bytes = new Uint8Array(binaryString.length);
7
+ for (let i = 0; i < binaryString.length; i++) {
8
+ bytes[i] = binaryString.charCodeAt(i);
9
+ }
10
+ return bytes;
11
+ }
12
+ // =============================================================================
13
+ // The ZipWriter class - Browser version without Node.js events dependency
14
+ // Packs streamed data into an output zip stream
15
+ class ZipWriter {
16
+ constructor(options) {
17
+ this.finalized = false;
18
+ this.pendingWrites = [];
19
+ this.events = new Map();
20
+ const level = options?.compression === "STORE"
21
+ ? 0
22
+ : Math.max(0, Math.min(9, options?.compressionOptions?.level ?? 1));
23
+ this.stream = new StreamBuf();
24
+ this.zipBuilder = new ZipBuilder({ level });
25
+ }
26
+ // Event emitter methods
27
+ on(event, callback) {
28
+ const callbacks = this.events.get(event) || [];
29
+ callbacks.push(callback);
30
+ this.events.set(event, callbacks);
31
+ return this;
32
+ }
33
+ once(event, callback) {
34
+ const onceCallback = (...args) => {
35
+ this.off(event, onceCallback);
36
+ callback(...args);
37
+ };
38
+ return this.on(event, onceCallback);
39
+ }
40
+ off(event, callback) {
41
+ const callbacks = this.events.get(event) || [];
42
+ const index = callbacks.indexOf(callback);
43
+ if (index !== -1) {
44
+ callbacks.splice(index, 1);
45
+ }
46
+ return this;
47
+ }
48
+ emit(event, ...args) {
49
+ const callbacks = this.events.get(event) || [];
50
+ callbacks.forEach(cb => cb(...args));
51
+ return callbacks.length > 0;
52
+ }
53
+ removeListener(event, callback) {
54
+ return this.off(event, callback);
55
+ }
56
+ append(data, options) {
57
+ let buffer;
58
+ if (Object.prototype.hasOwnProperty.call(options, "base64") && options.base64) {
59
+ const base64Data = typeof data === "string" ? data : String(data);
60
+ buffer = base64ToUint8Array(base64Data);
61
+ }
62
+ else if (typeof data === "string") {
63
+ buffer = new TextEncoder().encode(data);
64
+ }
65
+ else if (data instanceof Uint8Array) {
66
+ buffer = data;
67
+ }
68
+ else if (ArrayBuffer.isView(data)) {
69
+ buffer = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
70
+ }
71
+ else if (data instanceof ArrayBuffer) {
72
+ buffer = new Uint8Array(data);
73
+ }
74
+ else {
75
+ buffer = data;
76
+ }
77
+ const writePromise = this.zipBuilder
78
+ .addFile({ name: options.name, data: buffer })
79
+ .then(chunks => {
80
+ for (const chunk of chunks) {
81
+ this.stream.write(new Uint8Array(chunk));
82
+ }
83
+ });
84
+ this.pendingWrites.push(writePromise);
85
+ }
86
+ push(chunk) {
87
+ return this.stream.push(chunk);
88
+ }
89
+ async finalize() {
90
+ if (this.finalized) {
91
+ return;
92
+ }
93
+ this.finalized = true;
94
+ await Promise.all(this.pendingWrites);
95
+ const finalChunks = this.zipBuilder.finalize();
96
+ for (const chunk of finalChunks) {
97
+ this.stream.write(new Uint8Array(chunk));
98
+ }
99
+ this.stream.end();
100
+ this.emit("finish");
101
+ }
102
+ // ==========================================================================
103
+ // Stream.Readable interface
104
+ read(size) {
105
+ return this.stream.read(size);
106
+ }
107
+ setEncoding(encoding) {
108
+ return this.stream.setEncoding(encoding);
109
+ }
110
+ pause() {
111
+ return this.stream.pause();
112
+ }
113
+ resume() {
114
+ return this.stream.resume();
115
+ }
116
+ isPaused() {
117
+ return this.stream.isPaused();
118
+ }
119
+ pipe(destination) {
120
+ return this.stream.pipe(destination);
121
+ }
122
+ unpipe(destination) {
123
+ return this.stream.unpipe(destination);
124
+ }
125
+ unshift() {
126
+ return this.stream.unshift();
127
+ }
128
+ wrap() {
129
+ return this.stream.wrap();
130
+ }
131
+ }
132
+ export { ZipWriter };
@@ -1,4 +1,3 @@
1
- import { v4 as uuidv4 } from "uuid";
2
1
  import { XmlStream } from "../../../utils/xml-stream.js";
3
2
  import { xmlEncode, xmlDecode } from "../../../utils/utils.js";
4
3
  import { BaseXform } from "../base-xform.js";
@@ -57,7 +56,7 @@ class PivotTableXform extends BaseXform {
57
56
  renderNew(xmlStream, model) {
58
57
  const { rows, columns, values, cacheFields, cacheId, applyWidthHeightFormats } = model;
59
58
  // Generate unique UID for each pivot table to prevent Excel treating them as identical
60
- const uniqueUid = `{${uuidv4().toUpperCase()}}`;
59
+ const uniqueUid = `{${crypto.randomUUID().toUpperCase()}}`;
61
60
  xmlStream.openXml(XmlStream.StdDocAttributes);
62
61
  xmlStream.openNode(this.tag, {
63
62
  ...PivotTableXform.PIVOT_TABLE_ATTRIBUTES,
@@ -138,7 +137,7 @@ class PivotTableXform extends BaseXform {
138
137
  * Render loaded pivot table (preserving original structure)
139
138
  */
140
139
  renderLoaded(xmlStream, model) {
141
- const uniqueUid = model.uid || `{${uuidv4().toUpperCase()}}`;
140
+ const uniqueUid = model.uid || `{${crypto.randomUUID().toUpperCase()}}`;
142
141
  xmlStream.openXml(XmlStream.StdDocAttributes);
143
142
  xmlStream.openNode(this.tag, {
144
143
  ...PivotTableXform.PIVOT_TABLE_ATTRIBUTES,
@@ -1,4 +1,3 @@
1
- import { v4 } from "uuid";
2
1
  import { BaseXform } from "../../base-xform.js";
3
2
  import { CompositeXform } from "../../composite-xform.js";
4
3
  import { DatabarExtXform } from "./databar-ext-xform.js";
@@ -33,7 +32,7 @@ class CfRuleExtXform extends CompositeXform {
33
32
  }
34
33
  prepare(model) {
35
34
  if (CfRuleExtXform.isExt(model)) {
36
- model.x14Id = `{${v4()}}`.toUpperCase();
35
+ model.x14Id = `{${crypto.randomUUID()}}`.toUpperCase();
37
36
  }
38
37
  }
39
38
  render(xmlStream, model) {
@@ -61,7 +60,7 @@ class CfRuleExtXform extends CompositeXform {
61
60
  xmlStream.openNode(this.tag, {
62
61
  type: "iconSet",
63
62
  priority: model.priority,
64
- id: model.x14Id || `{${v4()}}`
63
+ id: model.x14Id || `{${crypto.randomUUID()}}`
65
64
  });
66
65
  this.iconSetXform.render(xmlStream, model);
67
66
  xmlStream.closeNode();
@@ -0,0 +1,35 @@
1
+ import { PageBreaksXform } from "./page-breaks-xform.js";
2
+ import { ListXform } from "../list-xform.js";
3
+ /**
4
+ * Xform for column page breaks (colBreaks element in worksheet XML)
5
+ * Used to define manual page breaks between columns when printing.
6
+ *
7
+ * XML structure:
8
+ * <colBreaks count="3" manualBreakCount="3">
9
+ * <brk id="3" max="1048575" man="1"/>
10
+ * <brk id="6" max="1048575" man="1"/>
11
+ * </colBreaks>
12
+ */
13
+ class ColBreaksXform extends ListXform {
14
+ constructor() {
15
+ super({
16
+ tag: "colBreaks",
17
+ count: true,
18
+ childXform: new PageBreaksXform()
19
+ });
20
+ }
21
+ // Override to add manualBreakCount attribute required by Excel
22
+ render(xmlStream, model) {
23
+ if (model && model.length) {
24
+ xmlStream.openNode(this.tag, this.$);
25
+ xmlStream.addAttribute(this.$count, model.length);
26
+ xmlStream.addAttribute("manualBreakCount", model.length);
27
+ const { childXform } = this;
28
+ for (const childModel of model) {
29
+ childXform.render(xmlStream, childModel);
30
+ }
31
+ xmlStream.closeNode();
32
+ }
33
+ }
34
+ }
35
+ export { ColBreaksXform };
@@ -1,4 +1,8 @@
1
1
  import { BaseXform } from "../base-xform.js";
2
+ /**
3
+ * Xform for individual page break (brk element)
4
+ * Used by both RowBreaksXform and ColBreaksXform
5
+ */
2
6
  class PageBreaksXform extends BaseXform {
3
7
  get tag() {
4
8
  return "brk";
@@ -8,7 +12,15 @@ class PageBreaksXform extends BaseXform {
8
12
  }
9
13
  parseOpen(node) {
10
14
  if (node.name === "brk") {
11
- this.model = node.attributes.ref;
15
+ const { id, max, man, min } = node.attributes;
16
+ this.model = {
17
+ id: +id,
18
+ max: +max,
19
+ man: +man
20
+ };
21
+ if (min !== undefined) {
22
+ this.model.min = +min;
23
+ }
12
24
  return true;
13
25
  }
14
26
  return false;
@@ -1,31 +1,29 @@
1
1
  import { PageBreaksXform } from "./page-breaks-xform.js";
2
2
  import { ListXform } from "../list-xform.js";
3
+ /**
4
+ * Xform for row page breaks (rowBreaks element in worksheet XML)
5
+ * Used to define manual page breaks between rows when printing.
6
+ */
3
7
  class RowBreaksXform extends ListXform {
4
8
  constructor() {
5
- const options = {
9
+ super({
6
10
  tag: "rowBreaks",
7
11
  count: true,
8
12
  childXform: new PageBreaksXform()
9
- };
10
- super(options);
13
+ });
11
14
  }
12
- // get tag() { return 'rowBreaks'; }
15
+ // Override to add manualBreakCount attribute required by Excel
13
16
  render(xmlStream, model) {
14
17
  if (model && model.length) {
15
18
  xmlStream.openNode(this.tag, this.$);
16
- if (this.count) {
17
- xmlStream.addAttribute(this.$count, model.length);
18
- xmlStream.addAttribute("manualBreakCount", model.length);
19
- }
19
+ xmlStream.addAttribute(this.$count, model.length);
20
+ xmlStream.addAttribute("manualBreakCount", model.length);
20
21
  const { childXform } = this;
21
- model.forEach((childModel) => {
22
+ for (const childModel of model) {
22
23
  childXform.render(xmlStream, childModel);
23
- });
24
+ }
24
25
  xmlStream.closeNode();
25
26
  }
26
- else if (this.empty) {
27
- xmlStream.leafNode(this.tag);
28
- }
29
27
  }
30
28
  }
31
29
  export { RowBreaksXform };
@@ -22,6 +22,7 @@ import { PictureXform } from "./picture-xform.js";
22
22
  import { DrawingXform } from "./drawing-xform.js";
23
23
  import { TablePartXform } from "./table-part-xform.js";
24
24
  import { RowBreaksXform } from "./row-breaks-xform.js";
25
+ import { ColBreaksXform } from "./col-breaks-xform.js";
25
26
  import { HeaderFooterXform } from "./header-footer-xform.js";
26
27
  import { ConditionalFormattingsXform } from "./cf/conditional-formattings-xform.js";
27
28
  import { ExtLstXform } from "./ext-lst-xform.js";
@@ -108,6 +109,7 @@ class WorkSheetXform extends BaseXform {
108
109
  childXform: new MergeCellXform()
109
110
  }),
110
111
  rowBreaks: new RowBreaksXform(),
112
+ colBreaks: new ColBreaksXform(),
111
113
  hyperlinks: new ListXform({
112
114
  tag: "hyperlinks",
113
115
  count: false,
@@ -324,7 +326,8 @@ class WorkSheetXform extends BaseXform {
324
326
  this.map.pageSetup.render(xmlStream, model.pageSetup);
325
327
  this.map.headerFooter.render(xmlStream, model.headerFooter);
326
328
  this.map.rowBreaks.render(xmlStream, model.rowBreaks);
327
- this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks
329
+ this.map.colBreaks.render(xmlStream, model.colBreaks);
330
+ this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks/colBreaks
328
331
  this.map.picture.render(xmlStream, model.background); // Note: must be after drawing
329
332
  this.map.tableParts.render(xmlStream, model.tables);
330
333
  this.map.extLst.render(xmlStream, model);
@@ -399,7 +402,9 @@ class WorkSheetXform extends BaseXform {
399
402
  background: this.map.picture.model,
400
403
  drawing: this.map.drawing.model,
401
404
  tables: this.map.tableParts.model,
402
- conditionalFormattings
405
+ conditionalFormattings,
406
+ rowBreaks: this.map.rowBreaks.model || [],
407
+ colBreaks: this.map.colBreaks.model || []
403
408
  };
404
409
  if (this.map.autoFilter.model) {
405
410
  this.model.autoFilter = this.map.autoFilter.model;