@cj-tech-master/excelts 1.6.2 → 1.6.3-canary.20251224124621.73c5d94

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 (382) hide show
  1. package/README.md +36 -4
  2. package/README_zh.md +37 -6
  3. package/dist/browser/excelts.esm.js +19115 -0
  4. package/dist/browser/excelts.esm.js.map +1 -0
  5. package/dist/browser/excelts.esm.min.js +127 -0
  6. package/dist/browser/excelts.iife.js +13576 -46968
  7. package/dist/browser/excelts.iife.js.map +1 -1
  8. package/dist/browser/excelts.iife.min.js +25 -105
  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 +154 -0
  12. package/dist/cjs/csv/csv.browser.js +68 -0
  13. package/dist/cjs/csv/csv.js +226 -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 +7 -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 +41 -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 +29 -26
  35. package/dist/cjs/stream/xlsx/workbook-writer.js +71 -57
  36. package/dist/cjs/stream/xlsx/worksheet-reader.js +27 -23
  37. package/dist/cjs/stream/xlsx/worksheet-writer.js +72 -66
  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/encryptor.browser.js +240 -0
  42. package/dist/cjs/utils/parse-sax.js +2 -2
  43. package/dist/cjs/utils/shared-formula.js +5 -5
  44. package/dist/cjs/utils/sheet-utils.js +13 -13
  45. package/dist/cjs/utils/stream-buf.browser.js +355 -0
  46. package/dist/cjs/utils/stream-buf.js +5 -5
  47. package/dist/cjs/utils/unzip/extract.js +11 -11
  48. package/dist/cjs/utils/unzip/index.js +21 -21
  49. package/dist/cjs/utils/unzip/parse-extra-field.js +3 -3
  50. package/dist/cjs/utils/unzip/parse.js +16 -16
  51. package/dist/cjs/utils/unzip/zip-parser.js +3 -3
  52. package/dist/cjs/utils/utils.base.js +161 -0
  53. package/dist/cjs/utils/utils.browser.js +89 -0
  54. package/dist/cjs/utils/utils.js +46 -154
  55. package/dist/cjs/utils/xml-stream.js +3 -3
  56. package/dist/cjs/utils/zip/compress.base.js +85 -0
  57. package/dist/cjs/utils/zip/compress.browser.js +83 -0
  58. package/dist/cjs/utils/zip/compress.js +18 -198
  59. package/dist/cjs/utils/zip/crc32.browser.js +88 -0
  60. package/dist/cjs/utils/zip/index.js +17 -17
  61. package/dist/cjs/utils/zip/zip-builder.js +10 -10
  62. package/dist/cjs/utils/zip-stream.browser.js +135 -0
  63. package/dist/cjs/utils/zip-stream.js +4 -4
  64. package/dist/cjs/xlsx/xform/base-xform.js +4 -4
  65. package/dist/cjs/xlsx/xform/book/defined-name-xform.js +4 -4
  66. package/dist/cjs/xlsx/xform/book/sheet-xform.js +4 -4
  67. package/dist/cjs/xlsx/xform/book/workbook-calc-properties-xform.js +2 -2
  68. package/dist/cjs/xlsx/xform/book/workbook-pivot-cache-xform.js +2 -2
  69. package/dist/cjs/xlsx/xform/book/workbook-properties-xform.js +2 -2
  70. package/dist/cjs/xlsx/xform/book/workbook-view-xform.js +2 -2
  71. package/dist/cjs/xlsx/xform/book/workbook-xform.js +24 -24
  72. package/dist/cjs/xlsx/xform/comment/comment-xform.js +4 -4
  73. package/dist/cjs/xlsx/xform/comment/comments-xform.js +6 -6
  74. package/dist/cjs/xlsx/xform/comment/style/vml-position-xform.js +2 -2
  75. package/dist/cjs/xlsx/xform/comment/style/vml-protection-xform.js +2 -2
  76. package/dist/cjs/xlsx/xform/comment/vml-anchor-xform.js +2 -2
  77. package/dist/cjs/xlsx/xform/comment/vml-client-data-xform.js +10 -10
  78. package/dist/cjs/xlsx/xform/comment/vml-notes-xform.js +6 -6
  79. package/dist/cjs/xlsx/xform/comment/vml-shape-xform.js +6 -6
  80. package/dist/cjs/xlsx/xform/comment/vml-textbox-xform.js +2 -2
  81. package/dist/cjs/xlsx/xform/composite-xform.js +2 -2
  82. package/dist/cjs/xlsx/xform/core/app-heading-pairs-xform.js +2 -2
  83. package/dist/cjs/xlsx/xform/core/app-titles-of-parts-xform.js +2 -2
  84. package/dist/cjs/xlsx/xform/core/app-xform.js +11 -11
  85. package/dist/cjs/xlsx/xform/core/content-types-xform.js +4 -4
  86. package/dist/cjs/xlsx/xform/core/core-xform.js +23 -23
  87. package/dist/cjs/xlsx/xform/core/relationship-xform.js +2 -2
  88. package/dist/cjs/xlsx/xform/core/relationships-xform.js +6 -6
  89. package/dist/cjs/xlsx/xform/drawing/base-cell-anchor-xform.js +2 -2
  90. package/dist/cjs/xlsx/xform/drawing/blip-fill-xform.js +4 -4
  91. package/dist/cjs/xlsx/xform/drawing/blip-xform.js +2 -2
  92. package/dist/cjs/xlsx/xform/drawing/c-nv-pic-pr-xform.js +2 -2
  93. package/dist/cjs/xlsx/xform/drawing/c-nv-pr-xform.js +6 -6
  94. package/dist/cjs/xlsx/xform/drawing/cell-position-xform.js +7 -7
  95. package/dist/cjs/xlsx/xform/drawing/drawing-xform.js +10 -10
  96. package/dist/cjs/xlsx/xform/drawing/ext-lst-xform.js +2 -2
  97. package/dist/cjs/xlsx/xform/drawing/ext-xform.js +2 -2
  98. package/dist/cjs/xlsx/xform/drawing/hlink-click-xform.js +2 -2
  99. package/dist/cjs/xlsx/xform/drawing/nv-pic-pr-xform.js +6 -6
  100. package/dist/cjs/xlsx/xform/drawing/one-cell-anchor-xform.js +10 -10
  101. package/dist/cjs/xlsx/xform/drawing/pic-xform.js +9 -9
  102. package/dist/cjs/xlsx/xform/drawing/two-cell-anchor-xform.js +9 -9
  103. package/dist/cjs/xlsx/xform/list-xform.js +2 -2
  104. package/dist/cjs/xlsx/xform/pivot-table/cache-field-xform.js +5 -5
  105. package/dist/cjs/xlsx/xform/pivot-table/cache-field.js +3 -3
  106. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +10 -10
  107. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-records-xform.js +9 -9
  108. package/dist/cjs/xlsx/xform/pivot-table/pivot-table-xform.js +10 -11
  109. package/dist/cjs/xlsx/xform/sheet/auto-filter-xform.js +4 -4
  110. package/dist/cjs/xlsx/xform/sheet/cell-xform.js +65 -65
  111. package/dist/cjs/xlsx/xform/sheet/cf/cf-rule-xform.js +27 -27
  112. package/dist/cjs/xlsx/xform/sheet/cf/cfvo-xform.js +3 -3
  113. package/dist/cjs/xlsx/xform/sheet/cf/color-scale-xform.js +6 -6
  114. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formatting-xform.js +6 -6
  115. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formattings-xform.js +4 -4
  116. package/dist/cjs/xlsx/xform/sheet/cf/databar-xform.js +6 -6
  117. package/dist/cjs/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +5 -5
  118. package/dist/cjs/xlsx/xform/sheet/cf/formula-xform.js +2 -2
  119. package/dist/cjs/xlsx/xform/sheet/cf/icon-set-xform.js +11 -11
  120. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +3 -3
  121. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +11 -12
  122. package/dist/cjs/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +4 -4
  123. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +8 -8
  124. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +6 -6
  125. package/dist/cjs/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +26 -26
  126. package/dist/cjs/xlsx/xform/sheet/cf-ext/f-ext-xform.js +2 -2
  127. package/dist/cjs/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +14 -14
  128. package/dist/cjs/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +2 -2
  129. package/dist/cjs/xlsx/xform/sheet/col-xform.js +6 -6
  130. package/dist/cjs/xlsx/xform/sheet/data-validations-xform.js +18 -18
  131. package/dist/cjs/xlsx/xform/sheet/dimension-xform.js +2 -2
  132. package/dist/cjs/xlsx/xform/sheet/drawing-xform.js +2 -2
  133. package/dist/cjs/xlsx/xform/sheet/ext-lst-xform.js +5 -5
  134. package/dist/cjs/xlsx/xform/sheet/header-footer-xform.js +2 -2
  135. package/dist/cjs/xlsx/xform/sheet/hyperlink-xform.js +2 -2
  136. package/dist/cjs/xlsx/xform/sheet/merge-cell-xform.js +2 -2
  137. package/dist/cjs/xlsx/xform/sheet/merges.js +8 -8
  138. package/dist/cjs/xlsx/xform/sheet/outline-properties-xform.js +2 -2
  139. package/dist/cjs/xlsx/xform/sheet/page-breaks-xform.js +2 -2
  140. package/dist/cjs/xlsx/xform/sheet/page-margins-xform.js +2 -2
  141. package/dist/cjs/xlsx/xform/sheet/page-setup-properties-xform.js +2 -2
  142. package/dist/cjs/xlsx/xform/sheet/page-setup-xform.js +2 -2
  143. package/dist/cjs/xlsx/xform/sheet/picture-xform.js +2 -2
  144. package/dist/cjs/xlsx/xform/sheet/print-options-xform.js +2 -2
  145. package/dist/cjs/xlsx/xform/sheet/row-breaks-xform.js +4 -4
  146. package/dist/cjs/xlsx/xform/sheet/row-xform.js +11 -11
  147. package/dist/cjs/xlsx/xform/sheet/sheet-format-properties-xform.js +2 -2
  148. package/dist/cjs/xlsx/xform/sheet/sheet-properties-xform.js +8 -8
  149. package/dist/cjs/xlsx/xform/sheet/sheet-protection-xform.js +2 -2
  150. package/dist/cjs/xlsx/xform/sheet/sheet-view-xform.js +4 -4
  151. package/dist/cjs/xlsx/xform/sheet/table-part-xform.js +2 -2
  152. package/dist/cjs/xlsx/xform/sheet/worksheet-xform.js +68 -68
  153. package/dist/cjs/xlsx/xform/simple/boolean-xform.js +2 -2
  154. package/dist/cjs/xlsx/xform/simple/date-xform.js +2 -2
  155. package/dist/cjs/xlsx/xform/simple/float-xform.js +2 -2
  156. package/dist/cjs/xlsx/xform/simple/integer-xform.js +2 -2
  157. package/dist/cjs/xlsx/xform/simple/string-xform.js +2 -2
  158. package/dist/cjs/xlsx/xform/static-xform.js +4 -4
  159. package/dist/cjs/xlsx/xform/strings/phonetic-text-xform.js +6 -6
  160. package/dist/cjs/xlsx/xform/strings/rich-text-xform.js +6 -6
  161. package/dist/cjs/xlsx/xform/strings/shared-string-xform.js +8 -8
  162. package/dist/cjs/xlsx/xform/strings/shared-strings-xform.js +6 -6
  163. package/dist/cjs/xlsx/xform/strings/text-xform.js +2 -2
  164. package/dist/cjs/xlsx/xform/style/alignment-xform.js +8 -8
  165. package/dist/cjs/xlsx/xform/style/border-xform.js +8 -8
  166. package/dist/cjs/xlsx/xform/style/color-xform.js +2 -2
  167. package/dist/cjs/xlsx/xform/style/dxf-xform.js +14 -14
  168. package/dist/cjs/xlsx/xform/style/fill-xform.js +9 -9
  169. package/dist/cjs/xlsx/xform/style/font-xform.js +22 -22
  170. package/dist/cjs/xlsx/xform/style/numfmt-xform.js +5 -5
  171. package/dist/cjs/xlsx/xform/style/protection-xform.js +2 -2
  172. package/dist/cjs/xlsx/xform/style/style-xform.js +6 -6
  173. package/dist/cjs/xlsx/xform/style/styles-xform.js +39 -39
  174. package/dist/cjs/xlsx/xform/style/underline-xform.js +2 -2
  175. package/dist/cjs/xlsx/xform/table/auto-filter-xform.js +4 -4
  176. package/dist/cjs/xlsx/xform/table/custom-filter-xform.js +2 -2
  177. package/dist/cjs/xlsx/xform/table/filter-column-xform.js +9 -9
  178. package/dist/cjs/xlsx/xform/table/filter-xform.js +2 -2
  179. package/dist/cjs/xlsx/xform/table/table-column-xform.js +2 -2
  180. package/dist/cjs/xlsx/xform/table/table-style-info-xform.js +2 -2
  181. package/dist/cjs/xlsx/xform/table/table-xform.js +12 -12
  182. package/dist/cjs/xlsx/xlsx.base.js +742 -0
  183. package/dist/cjs/xlsx/xlsx.browser.js +205 -0
  184. package/dist/cjs/xlsx/xlsx.js +91 -833
  185. package/dist/esm/csv/csv-core.js +694 -0
  186. package/dist/esm/csv/csv-stream.js +638 -0
  187. package/dist/esm/csv/csv.base.js +141 -0
  188. package/dist/esm/csv/csv.browser.js +65 -0
  189. package/dist/esm/csv/csv.js +189 -159
  190. package/dist/esm/doc/workbook.base.js +207 -0
  191. package/dist/esm/doc/workbook.browser.js +59 -0
  192. package/dist/esm/doc/workbook.js +64 -175
  193. package/dist/esm/index.browser.js +33 -1
  194. package/dist/esm/index.js +23 -8
  195. package/dist/esm/local.js +0 -1
  196. package/dist/esm/stream/xlsx/hyperlink-reader.js +1 -1
  197. package/dist/esm/stream/xlsx/workbook-reader.js +7 -4
  198. package/dist/esm/stream/xlsx/workbook-writer.js +37 -23
  199. package/dist/esm/stream/xlsx/worksheet-reader.js +12 -8
  200. package/dist/esm/stream/xlsx/worksheet-writer.js +12 -6
  201. package/dist/esm/utils/browser-buffer.js +67 -0
  202. package/dist/esm/utils/encryptor.browser.js +237 -0
  203. package/dist/esm/utils/stream-buf.browser.js +352 -0
  204. package/dist/esm/utils/utils.base.js +142 -0
  205. package/dist/esm/utils/utils.browser.js +68 -0
  206. package/dist/esm/utils/utils.js +15 -123
  207. package/dist/esm/utils/zip/compress.base.js +80 -0
  208. package/dist/esm/utils/zip/compress.browser.js +76 -0
  209. package/dist/esm/utils/zip/compress.js +16 -164
  210. package/dist/esm/utils/zip/crc32.browser.js +82 -0
  211. package/dist/esm/utils/zip-stream.browser.js +132 -0
  212. package/dist/esm/xlsx/xform/pivot-table/pivot-table-xform.js +2 -3
  213. package/dist/esm/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +2 -3
  214. package/dist/esm/xlsx/xlsx.base.js +739 -0
  215. package/dist/esm/xlsx/xlsx.browser.js +202 -0
  216. package/dist/esm/xlsx/xlsx.js +87 -829
  217. package/dist/types/csv/csv-core.d.ts +207 -0
  218. package/dist/types/csv/csv-stream.d.ts +114 -0
  219. package/dist/types/csv/csv.base.d.ts +61 -0
  220. package/dist/types/csv/csv.browser.d.ts +33 -0
  221. package/dist/types/csv/csv.d.ts +97 -71
  222. package/dist/types/doc/anchor.d.ts +1 -1
  223. package/dist/types/doc/cell.d.ts +7 -7
  224. package/dist/types/doc/column.d.ts +3 -3
  225. package/dist/types/doc/defined-names.d.ts +4 -4
  226. package/dist/types/doc/image.d.ts +2 -2
  227. package/dist/types/doc/modelcontainer.d.ts +1 -1
  228. package/dist/types/doc/pivot-table.d.ts +1 -1
  229. package/dist/types/doc/range.d.ts +1 -1
  230. package/dist/types/doc/row.d.ts +3 -3
  231. package/dist/types/doc/table.d.ts +4 -4
  232. package/dist/types/doc/workbook.base.d.ts +111 -0
  233. package/dist/types/doc/workbook.browser.d.ts +38 -0
  234. package/dist/types/doc/workbook.d.ts +62 -92
  235. package/dist/types/doc/worksheet.d.ts +10 -10
  236. package/dist/types/index.browser.d.ts +19 -5
  237. package/dist/types/index.d.ts +24 -20
  238. package/dist/types/local.d.ts +0 -1
  239. package/dist/types/stream/xlsx/hyperlink-reader.d.ts +11 -11
  240. package/dist/types/stream/xlsx/workbook-reader.d.ts +125 -36
  241. package/dist/types/stream/xlsx/workbook-writer.d.ts +105 -22
  242. package/dist/types/stream/xlsx/worksheet-reader.d.ts +40 -22
  243. package/dist/types/stream/xlsx/worksheet-writer.d.ts +83 -49
  244. package/dist/types/types.d.ts +4 -16
  245. package/dist/types/utils/browser-buffer.d.ts +28 -0
  246. package/dist/types/utils/col-cache.d.ts +1 -1
  247. package/dist/types/utils/encryptor.browser.d.ts +28 -0
  248. package/dist/types/utils/sheet-utils.d.ts +3 -3
  249. package/dist/types/utils/stream-buf.browser.d.ts +41 -0
  250. package/dist/types/utils/unzip/extract.d.ts +6 -6
  251. package/dist/types/utils/unzip/index.d.ts +8 -8
  252. package/dist/types/utils/unzip/parse.d.ts +3 -3
  253. package/dist/types/utils/utils.base.d.ts +29 -0
  254. package/dist/types/utils/utils.browser.d.ts +29 -0
  255. package/dist/types/utils/utils.d.ts +6 -25
  256. package/dist/types/utils/zip/compress.base.d.ts +42 -0
  257. package/dist/types/utils/zip/compress.browser.d.ts +54 -0
  258. package/dist/types/utils/zip/compress.d.ts +13 -45
  259. package/dist/types/utils/zip/crc32.browser.d.ts +52 -0
  260. package/dist/types/utils/zip/index.d.ts +5 -5
  261. package/dist/types/utils/zip/zip-builder.d.ts +1 -1
  262. package/dist/types/utils/zip-stream.browser.d.ts +39 -0
  263. package/dist/types/xlsx/xform/base-xform.d.ts +1 -1
  264. package/dist/types/xlsx/xform/book/defined-name-xform.d.ts +1 -1
  265. package/dist/types/xlsx/xform/book/sheet-xform.d.ts +1 -1
  266. package/dist/types/xlsx/xform/book/workbook-calc-properties-xform.d.ts +1 -1
  267. package/dist/types/xlsx/xform/book/workbook-pivot-cache-xform.d.ts +1 -1
  268. package/dist/types/xlsx/xform/book/workbook-properties-xform.d.ts +1 -1
  269. package/dist/types/xlsx/xform/book/workbook-view-xform.d.ts +1 -1
  270. package/dist/types/xlsx/xform/book/workbook-xform.d.ts +2 -2
  271. package/dist/types/xlsx/xform/comment/comment-xform.d.ts +2 -2
  272. package/dist/types/xlsx/xform/comment/comments-xform.d.ts +2 -2
  273. package/dist/types/xlsx/xform/comment/style/vml-position-xform.d.ts +1 -1
  274. package/dist/types/xlsx/xform/comment/style/vml-protection-xform.d.ts +1 -1
  275. package/dist/types/xlsx/xform/comment/vml-anchor-xform.d.ts +1 -1
  276. package/dist/types/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -1
  277. package/dist/types/xlsx/xform/comment/vml-notes-xform.d.ts +1 -1
  278. package/dist/types/xlsx/xform/comment/vml-shape-xform.d.ts +1 -1
  279. package/dist/types/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -1
  280. package/dist/types/xlsx/xform/composite-xform.d.ts +1 -1
  281. package/dist/types/xlsx/xform/core/app-heading-pairs-xform.d.ts +1 -1
  282. package/dist/types/xlsx/xform/core/app-titles-of-parts-xform.d.ts +1 -1
  283. package/dist/types/xlsx/xform/core/app-xform.d.ts +1 -1
  284. package/dist/types/xlsx/xform/core/content-types-xform.d.ts +1 -1
  285. package/dist/types/xlsx/xform/core/core-xform.d.ts +1 -1
  286. package/dist/types/xlsx/xform/core/relationship-xform.d.ts +1 -1
  287. package/dist/types/xlsx/xform/core/relationships-xform.d.ts +1 -1
  288. package/dist/types/xlsx/xform/drawing/base-cell-anchor-xform.d.ts +1 -1
  289. package/dist/types/xlsx/xform/drawing/blip-fill-xform.d.ts +2 -2
  290. package/dist/types/xlsx/xform/drawing/blip-xform.d.ts +1 -1
  291. package/dist/types/xlsx/xform/drawing/c-nv-pic-pr-xform.d.ts +1 -1
  292. package/dist/types/xlsx/xform/drawing/c-nv-pr-xform.d.ts +1 -1
  293. package/dist/types/xlsx/xform/drawing/cell-position-xform.d.ts +2 -2
  294. package/dist/types/xlsx/xform/drawing/drawing-xform.d.ts +1 -1
  295. package/dist/types/xlsx/xform/drawing/ext-lst-xform.d.ts +1 -1
  296. package/dist/types/xlsx/xform/drawing/ext-xform.d.ts +1 -1
  297. package/dist/types/xlsx/xform/drawing/hlink-click-xform.d.ts +1 -1
  298. package/dist/types/xlsx/xform/drawing/nv-pic-pr-xform.d.ts +1 -1
  299. package/dist/types/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +1 -1
  300. package/dist/types/xlsx/xform/drawing/pic-xform.d.ts +1 -1
  301. package/dist/types/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +1 -1
  302. package/dist/types/xlsx/xform/list-xform.d.ts +1 -1
  303. package/dist/types/xlsx/xform/pivot-table/cache-field-xform.d.ts +1 -1
  304. package/dist/types/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +3 -3
  305. package/dist/types/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +2 -2
  306. package/dist/types/xlsx/xform/pivot-table/pivot-table-xform.d.ts +1 -1
  307. package/dist/types/xlsx/xform/sheet/auto-filter-xform.d.ts +1 -1
  308. package/dist/types/xlsx/xform/sheet/cell-xform.d.ts +1 -1
  309. package/dist/types/xlsx/xform/sheet/cf/cf-rule-xform.d.ts +6 -6
  310. package/dist/types/xlsx/xform/sheet/cf/cfvo-xform.d.ts +1 -1
  311. package/dist/types/xlsx/xform/sheet/cf/color-scale-xform.d.ts +3 -3
  312. package/dist/types/xlsx/xform/sheet/cf/conditional-formatting-xform.d.ts +1 -1
  313. package/dist/types/xlsx/xform/sheet/cf/conditional-formattings-xform.d.ts +2 -2
  314. package/dist/types/xlsx/xform/sheet/cf/databar-xform.d.ts +3 -3
  315. package/dist/types/xlsx/xform/sheet/cf/ext-lst-ref-xform.d.ts +1 -1
  316. package/dist/types/xlsx/xform/sheet/cf/formula-xform.d.ts +1 -1
  317. package/dist/types/xlsx/xform/sheet/cf/icon-set-xform.d.ts +2 -2
  318. package/dist/types/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.d.ts +1 -1
  319. package/dist/types/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.d.ts +3 -3
  320. package/dist/types/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.d.ts +2 -2
  321. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.d.ts +3 -3
  322. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.d.ts +2 -2
  323. package/dist/types/xlsx/xform/sheet/cf-ext/databar-ext-xform.d.ts +3 -3
  324. package/dist/types/xlsx/xform/sheet/cf-ext/f-ext-xform.d.ts +1 -1
  325. package/dist/types/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.d.ts +3 -3
  326. package/dist/types/xlsx/xform/sheet/cf-ext/sqref-ext-xform.d.ts +1 -1
  327. package/dist/types/xlsx/xform/sheet/col-xform.d.ts +1 -1
  328. package/dist/types/xlsx/xform/sheet/data-validations-xform.d.ts +1 -1
  329. package/dist/types/xlsx/xform/sheet/dimension-xform.d.ts +1 -1
  330. package/dist/types/xlsx/xform/sheet/drawing-xform.d.ts +1 -1
  331. package/dist/types/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -1
  332. package/dist/types/xlsx/xform/sheet/header-footer-xform.d.ts +1 -1
  333. package/dist/types/xlsx/xform/sheet/hyperlink-xform.d.ts +1 -1
  334. package/dist/types/xlsx/xform/sheet/merge-cell-xform.d.ts +1 -1
  335. package/dist/types/xlsx/xform/sheet/outline-properties-xform.d.ts +1 -1
  336. package/dist/types/xlsx/xform/sheet/page-breaks-xform.d.ts +1 -1
  337. package/dist/types/xlsx/xform/sheet/page-margins-xform.d.ts +1 -1
  338. package/dist/types/xlsx/xform/sheet/page-setup-properties-xform.d.ts +1 -1
  339. package/dist/types/xlsx/xform/sheet/page-setup-xform.d.ts +1 -1
  340. package/dist/types/xlsx/xform/sheet/picture-xform.d.ts +1 -1
  341. package/dist/types/xlsx/xform/sheet/print-options-xform.d.ts +1 -1
  342. package/dist/types/xlsx/xform/sheet/row-breaks-xform.d.ts +1 -1
  343. package/dist/types/xlsx/xform/sheet/row-xform.d.ts +1 -1
  344. package/dist/types/xlsx/xform/sheet/sheet-format-properties-xform.d.ts +1 -1
  345. package/dist/types/xlsx/xform/sheet/sheet-properties-xform.d.ts +1 -1
  346. package/dist/types/xlsx/xform/sheet/sheet-protection-xform.d.ts +1 -1
  347. package/dist/types/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -1
  348. package/dist/types/xlsx/xform/sheet/table-part-xform.d.ts +1 -1
  349. package/dist/types/xlsx/xform/sheet/worksheet-xform.d.ts +1 -1
  350. package/dist/types/xlsx/xform/simple/boolean-xform.d.ts +1 -1
  351. package/dist/types/xlsx/xform/simple/date-xform.d.ts +1 -1
  352. package/dist/types/xlsx/xform/simple/float-xform.d.ts +1 -1
  353. package/dist/types/xlsx/xform/simple/integer-xform.d.ts +1 -1
  354. package/dist/types/xlsx/xform/simple/string-xform.d.ts +1 -1
  355. package/dist/types/xlsx/xform/static-xform.d.ts +1 -1
  356. package/dist/types/xlsx/xform/strings/phonetic-text-xform.d.ts +1 -1
  357. package/dist/types/xlsx/xform/strings/rich-text-xform.d.ts +3 -3
  358. package/dist/types/xlsx/xform/strings/shared-string-xform.d.ts +1 -1
  359. package/dist/types/xlsx/xform/strings/shared-strings-xform.d.ts +2 -2
  360. package/dist/types/xlsx/xform/strings/text-xform.d.ts +1 -1
  361. package/dist/types/xlsx/xform/style/alignment-xform.d.ts +1 -1
  362. package/dist/types/xlsx/xform/style/border-xform.d.ts +2 -2
  363. package/dist/types/xlsx/xform/style/color-xform.d.ts +1 -1
  364. package/dist/types/xlsx/xform/style/dxf-xform.d.ts +1 -1
  365. package/dist/types/xlsx/xform/style/fill-xform.d.ts +2 -2
  366. package/dist/types/xlsx/xform/style/font-xform.d.ts +1 -1
  367. package/dist/types/xlsx/xform/style/numfmt-xform.d.ts +1 -1
  368. package/dist/types/xlsx/xform/style/protection-xform.d.ts +1 -1
  369. package/dist/types/xlsx/xform/style/style-xform.d.ts +3 -3
  370. package/dist/types/xlsx/xform/style/styles-xform.d.ts +2 -2
  371. package/dist/types/xlsx/xform/style/underline-xform.d.ts +1 -1
  372. package/dist/types/xlsx/xform/table/auto-filter-xform.d.ts +2 -2
  373. package/dist/types/xlsx/xform/table/custom-filter-xform.d.ts +1 -1
  374. package/dist/types/xlsx/xform/table/filter-column-xform.d.ts +2 -2
  375. package/dist/types/xlsx/xform/table/filter-xform.d.ts +1 -1
  376. package/dist/types/xlsx/xform/table/table-column-xform.d.ts +1 -1
  377. package/dist/types/xlsx/xform/table/table-style-info-xform.d.ts +1 -1
  378. package/dist/types/xlsx/xform/table/table-xform.d.ts +1 -1
  379. package/dist/types/xlsx/xlsx.base.d.ts +134 -0
  380. package/dist/types/xlsx/xlsx.browser.d.ts +31 -0
  381. package/dist/types/xlsx/xlsx.d.ts +20 -80
  382. package/package.json +13 -15
@@ -1,53 +1,13 @@
1
+ /**
2
+ * Node.js utility functions
3
+ * Re-exports shared utilities and adds Node.js-specific implementations
4
+ */
1
5
  import fs from "fs";
2
- export function delay(ms) {
3
- return new Promise(resolve => setTimeout(resolve, ms));
4
- }
5
- export function nop() { }
6
- // useful stuff
7
- export const inherits = function (cls, superCtor, statics, prototype) {
8
- cls.super_ = superCtor;
9
- if (!prototype) {
10
- prototype = statics;
11
- statics = null;
12
- }
13
- if (statics) {
14
- Object.keys(statics).forEach(i => {
15
- Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));
16
- });
17
- }
18
- const properties = {
19
- constructor: {
20
- value: cls,
21
- enumerable: false,
22
- writable: false,
23
- configurable: true
24
- }
25
- };
26
- if (prototype) {
27
- Object.keys(prototype).forEach(i => {
28
- properties[i] = Object.getOwnPropertyDescriptor(prototype, i);
29
- });
30
- }
31
- cls.prototype = Object.create(superCtor.prototype, properties);
32
- };
33
- export function dateToExcel(d, date1904) {
34
- return 25569 + d.getTime() / (24 * 3600 * 1000) - (date1904 ? 1462 : 0);
35
- }
36
- export function excelToDate(v, date1904) {
37
- const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);
38
- return new Date(millisecondSinceEpoch);
39
- }
40
- export function parsePath(filepath) {
41
- const last = filepath.lastIndexOf("/");
42
- return {
43
- path: filepath.substring(0, last),
44
- name: filepath.substring(last + 1)
45
- };
46
- }
47
- export function getRelsPath(filepath) {
48
- const path = parsePath(filepath);
49
- return `${path.path}/_rels/${path.name}.rels`;
50
- }
6
+ // Re-export all shared utilities
7
+ export { delay, nop, inherits, dateToExcel, excelToDate, toIsoDateString, parsePath, getRelsPath, xmlDecode, validInt, isDateFmt, parseBoolean, range, toSortedArray, objectFromProps, bufferToString } from "./utils.base.js";
8
+ // =============================================================================
9
+ // XML encoding (Node.js optimized version)
10
+ // =============================================================================
51
11
  // oxlint-disable-next-line no-control-regex -- Control characters are intentionally matched for XML encoding
52
12
  const xmlDecodeRegex = /[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/;
53
13
  export function xmlEncode(text) {
@@ -101,39 +61,9 @@ export function xmlEncode(text) {
101
61
  }
102
62
  return result;
103
63
  }
104
- export function xmlDecode(text) {
105
- return text.replace(/&([a-z]*);/g, c => {
106
- switch (c) {
107
- case "&lt;":
108
- return "<";
109
- case "&gt;":
110
- return ">";
111
- case "&amp;":
112
- return "&";
113
- case "&apos;":
114
- return "'";
115
- case "&quot;":
116
- return '"';
117
- default:
118
- return c;
119
- }
120
- });
121
- }
122
- export function validInt(value) {
123
- const i = parseInt(value, 10);
124
- return !Number.isNaN(i) ? i : 0;
125
- }
126
- export function isDateFmt(fmt) {
127
- if (!fmt) {
128
- return false;
129
- }
130
- // must remove all chars inside quotes and []
131
- fmt = fmt.replace(/\[[^\]]*]/g, "");
132
- fmt = fmt.replace(/"[^"]*"/g, "");
133
- // then check for date formatting chars
134
- const result = fmt.match(/[ymdhMsb]+/) !== null;
135
- return result;
136
- }
64
+ // =============================================================================
65
+ // File system utilities (Node.js only)
66
+ // =============================================================================
137
67
  export function fileExists(path) {
138
68
  return new Promise(resolve => {
139
69
  fs.access(path, fs.constants.F_OK, err => {
@@ -141,36 +71,10 @@ export function fileExists(path) {
141
71
  });
142
72
  });
143
73
  }
144
- export function toIsoDateString(dt) {
145
- return dt.toISOString().substr(0, 10);
146
- }
147
- export function parseBoolean(value) {
148
- return value === true || value === "true" || value === 1 || value === "1";
149
- }
150
- export function* range(start, stop, step = 1) {
151
- const compareOrder = step > 0 ? (a, b) => a < b : (a, b) => a > b;
152
- for (let value = start; compareOrder(value, stop); value += step) {
153
- yield value;
154
- }
155
- }
156
- export function toSortedArray(values) {
157
- const result = Array.from(values);
158
- // Note: per default, `Array.prototype.sort()` converts values
159
- // to strings when comparing. Here, if we have numbers, we use
160
- // numeric sort.
161
- if (result.every(item => Number.isFinite(item))) {
162
- const compareNumbers = (a, b) => a - b;
163
- return result.sort(compareNumbers);
164
- }
165
- return result.sort();
166
- }
167
- export function objectFromProps(props, value = null) {
168
- return props.reduce((result, property) => {
169
- result[property] = value;
170
- return result;
171
- }, {});
172
- }
74
+ // =============================================================================
173
75
  // Legacy export for backward compatibility
76
+ // =============================================================================
77
+ import { nop, inherits, dateToExcel, excelToDate, parsePath, getRelsPath, xmlDecode, validInt, isDateFmt, toIsoDateString, parseBoolean, range, toSortedArray, objectFromProps } from "./utils.base.js";
174
78
  /** @deprecated Import functions directly instead of using the utils object */
175
79
  export const utils = {
176
80
  nop,
@@ -192,15 +96,3 @@ export const utils = {
192
96
  toSortedArray,
193
97
  objectFromProps
194
98
  };
195
- // TextDecoder is available in ES2020+ and all modern browsers/Node.js
196
- const textDecoder = new TextDecoder("utf-8");
197
- /**
198
- * Convert a Buffer or ArrayBuffer to a UTF-8 string
199
- * Works in both Node.js and browser environments
200
- */
201
- export function bufferToString(chunk) {
202
- if (typeof chunk === "string") {
203
- return chunk;
204
- }
205
- return textDecoder.decode(chunk);
206
- }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Base compression utilities using Web Streams API
3
+ * Shared between Node.js and Browser implementations
4
+ *
5
+ * Uses CompressionStream/DecompressionStream API with "deflate-raw" format
6
+ * (raw DEFLATE without zlib header/trailer, required for ZIP files)
7
+ */
8
+ /**
9
+ * Check if CompressionStream is available
10
+ */
11
+ export function hasCompressionStream() {
12
+ return typeof CompressionStream !== "undefined";
13
+ }
14
+ /**
15
+ * Compress using CompressionStream API
16
+ * Uses "deflate-raw" format (required for ZIP files)
17
+ *
18
+ * @param data - Data to compress
19
+ * @returns Compressed data
20
+ */
21
+ export async function compressWithStream(data) {
22
+ const cs = new CompressionStream("deflate-raw");
23
+ const writer = cs.writable.getWriter();
24
+ const reader = cs.readable.getReader();
25
+ // Write data and close
26
+ writer.write(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
27
+ writer.close();
28
+ // Read all compressed chunks
29
+ const chunks = [];
30
+ let totalLength = 0;
31
+ while (true) {
32
+ const { done, value } = await reader.read();
33
+ if (done) {
34
+ break;
35
+ }
36
+ chunks.push(value);
37
+ totalLength += value.length;
38
+ }
39
+ // Combine chunks into single array
40
+ const result = new Uint8Array(totalLength);
41
+ let offset = 0;
42
+ for (const chunk of chunks) {
43
+ result.set(chunk, offset);
44
+ offset += chunk.length;
45
+ }
46
+ return result;
47
+ }
48
+ /**
49
+ * Decompress using DecompressionStream API
50
+ *
51
+ * @param data - Compressed data (deflate-raw format)
52
+ * @returns Decompressed data
53
+ */
54
+ export async function decompressWithStream(data) {
55
+ const ds = new DecompressionStream("deflate-raw");
56
+ const writer = ds.writable.getWriter();
57
+ const reader = ds.readable.getReader();
58
+ // Write data and close
59
+ writer.write(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
60
+ writer.close();
61
+ // Read all decompressed chunks
62
+ const chunks = [];
63
+ let totalLength = 0;
64
+ while (true) {
65
+ const { done, value } = await reader.read();
66
+ if (done) {
67
+ break;
68
+ }
69
+ chunks.push(value);
70
+ totalLength += value.length;
71
+ }
72
+ // Combine chunks into single array
73
+ const result = new Uint8Array(totalLength);
74
+ let offset = 0;
75
+ for (const chunk of chunks) {
76
+ result.set(chunk, offset);
77
+ offset += chunk.length;
78
+ }
79
+ return result;
80
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Browser compression utilities using Web Streams API
3
+ *
4
+ * Uses CompressionStream API (Chrome 80+, Firefox 113+, Safari 16.4+)
5
+ * with "deflate-raw" format (required for ZIP files)
6
+ */
7
+ import { hasCompressionStream, compressWithStream, decompressWithStream } from "./compress.base.js";
8
+ // Re-export shared types and utilities
9
+ export { hasCompressionStream };
10
+ /**
11
+ * Check if native zlib is available (always false in browser)
12
+ */
13
+ export function hasNativeZlib() {
14
+ return false;
15
+ }
16
+ /**
17
+ * Compress data using browser's native CompressionStream
18
+ *
19
+ * @param data - Data to compress
20
+ * @param options - Compression options
21
+ * @returns Compressed data
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * const data = new TextEncoder().encode("Hello, World!");
26
+ * const compressed = await compress(data, { level: 6 });
27
+ * ```
28
+ */
29
+ export async function compress(data, options = {}) {
30
+ const level = options.level ?? 6;
31
+ // Level 0 means no compression
32
+ if (level === 0) {
33
+ return data;
34
+ }
35
+ // Use CompressionStream
36
+ if (typeof CompressionStream !== "undefined") {
37
+ return compressWithStream(data);
38
+ }
39
+ // No compression available - return original data
40
+ console.warn("No native compression available, returning uncompressed data");
41
+ return data;
42
+ }
43
+ /**
44
+ * Compress data synchronously
45
+ * Not available in browser - throws error
46
+ *
47
+ * @param _data - Data to compress
48
+ * @param _options - Compression options
49
+ * @throws Error always - sync compression not available in browser
50
+ */
51
+ export function compressSync(_data, _options = {}) {
52
+ throw new Error("Synchronous compression is not available in browser environment");
53
+ }
54
+ /**
55
+ * Decompress data using browser's native DecompressionStream
56
+ *
57
+ * @param data - Compressed data (deflate-raw format)
58
+ * @returns Decompressed data
59
+ */
60
+ export async function decompress(data) {
61
+ // Use DecompressionStream
62
+ if (typeof DecompressionStream !== "undefined") {
63
+ return decompressWithStream(data);
64
+ }
65
+ throw new Error("No native decompression available in browser");
66
+ }
67
+ /**
68
+ * Decompress data synchronously
69
+ * Not available in browser - throws error
70
+ *
71
+ * @param _data - Compressed data
72
+ * @throws Error always - sync decompression not available in browser
73
+ */
74
+ export function decompressSync(_data) {
75
+ throw new Error("Synchronous decompression is not available in browser environment");
76
+ }
@@ -1,66 +1,20 @@
1
1
  /**
2
- * Native compression utilities using platform APIs
2
+ * Node.js compression utilities using native zlib
3
3
  *
4
- * - Node.js: Uses native zlib module (C++ implementation, fastest)
5
- * - Browser: Uses CompressionStream API (Chrome 80+, Firefox 113+, Safari 16.4+)
6
- *
7
- * Both use "deflate-raw" format which is required for ZIP files
8
- * (raw DEFLATE without zlib header/trailer)
9
- */
10
- // Detect environment
11
- const isNode = typeof process !== "undefined" && process.versions?.node;
12
- // Lazy-loaded zlib module for Node.js
13
- let _zlib = null;
14
- let _zlibLoading = null;
15
- // Auto-initialize zlib in Node.js environment
16
- if (isNode) {
17
- _zlibLoading = import("zlib")
18
- .then(module => {
19
- _zlib = module.default ?? module;
20
- return _zlib;
21
- })
22
- .catch(() => {
23
- _zlib = null;
24
- return null;
25
- });
26
- }
27
- /**
28
- * Get zlib module (Node.js only)
29
- * Returns null if not yet loaded or not in Node.js
30
- */
31
- function getZlib() {
32
- return _zlib;
33
- }
34
- /**
35
- * Ensure zlib is loaded (Node.js only)
36
- * Call this before using sync methods if you need to guarantee availability
4
+ * Uses zlib module (C++ implementation, fastest) with "deflate-raw" format
5
+ * (raw DEFLATE without zlib header/trailer, required for ZIP files)
37
6
  */
38
- export async function ensureZlib() {
39
- if (_zlibLoading) {
40
- return _zlibLoading;
41
- }
42
- return _zlib;
43
- }
7
+ import { deflateRawSync, inflateRawSync } from "zlib";
8
+ // Re-export shared types and utilities
9
+ export { hasCompressionStream } from "./compress.base.js";
44
10
  /**
45
- * Check if native zlib is available (Node.js)
11
+ * Check if native zlib is available (always true in Node.js)
46
12
  */
47
13
  export function hasNativeZlib() {
48
- const zlib = getZlib();
49
- return zlib !== null && typeof zlib.deflateRawSync === "function";
14
+ return true;
50
15
  }
51
16
  /**
52
- * Check if CompressionStream is available (Browser/Node.js 17+)
53
- */
54
- export function hasCompressionStream() {
55
- return typeof CompressionStream !== "undefined";
56
- }
57
- /**
58
- * Compress data using the best available native method
59
- *
60
- * Priority:
61
- * 1. Node.js zlib (if available) - fastest, supports compression levels
62
- * 2. CompressionStream (browser/Node.js 17+) - no level support
63
- * 3. Return uncompressed data (fallback)
17
+ * Compress data using Node.js native zlib
64
18
  *
65
19
  * @param data - Data to compress
66
20
  * @param options - Compression options
@@ -78,143 +32,41 @@ export async function compress(data, options = {}) {
78
32
  if (level === 0) {
79
33
  return data;
80
34
  }
81
- // Ensure zlib is loaded first
82
- const zlib = await ensureZlib();
83
- // Try Node.js zlib first (fastest, supports levels)
84
- if (zlib && typeof zlib.deflateRawSync === "function") {
85
- const result = zlib.deflateRawSync(Buffer.from(data), { level });
86
- return new Uint8Array(result.buffer, result.byteOffset, result.byteLength);
87
- }
88
- // Fall back to CompressionStream (browser/Node.js 17+)
89
- if (typeof CompressionStream !== "undefined") {
90
- return compressWithCompressionStream(data);
91
- }
92
- // No compression available - return original data
93
- console.warn("No native compression available, returning uncompressed data");
94
- return data;
35
+ const result = deflateRawSync(Buffer.from(data), { level });
36
+ return new Uint8Array(result.buffer, result.byteOffset, result.byteLength);
95
37
  }
96
38
  /**
97
39
  * Compress data synchronously using Node.js zlib
98
- * Only available in Node.js environment
99
40
  *
100
41
  * @param data - Data to compress
101
42
  * @param options - Compression options
102
43
  * @returns Compressed data
103
- * @throws Error if not in Node.js environment
104
44
  */
105
45
  export function compressSync(data, options = {}) {
106
46
  const level = options.level ?? 6;
107
47
  if (level === 0) {
108
48
  return data;
109
49
  }
110
- const zlib = getZlib();
111
- if (!zlib || typeof zlib.deflateRawSync !== "function") {
112
- throw new Error("Synchronous compression is only available in Node.js environment");
113
- }
114
- const result = zlib.deflateRawSync(Buffer.from(data), { level });
50
+ const result = deflateRawSync(Buffer.from(data), { level });
115
51
  return new Uint8Array(result.buffer, result.byteOffset, result.byteLength);
116
52
  }
117
53
  /**
118
- * Compress using browser's native CompressionStream
119
- * Uses "deflate-raw" format (required for ZIP files)
120
- *
121
- * Note: CompressionStream does not support compression level configuration
122
- *
123
- * @param data - Data to compress
124
- * @returns Compressed data
125
- */
126
- async function compressWithCompressionStream(data) {
127
- const cs = new CompressionStream("deflate-raw");
128
- const writer = cs.writable.getWriter();
129
- const reader = cs.readable.getReader();
130
- // Write data and close
131
- writer.write(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
132
- writer.close();
133
- // Read all compressed chunks
134
- const chunks = [];
135
- let totalLength = 0;
136
- while (true) {
137
- const { done, value } = await reader.read();
138
- if (done) {
139
- break;
140
- }
141
- chunks.push(value);
142
- totalLength += value.length;
143
- }
144
- // Combine chunks into single array
145
- const result = new Uint8Array(totalLength);
146
- let offset = 0;
147
- for (const chunk of chunks) {
148
- result.set(chunk, offset);
149
- offset += chunk.length;
150
- }
151
- return result;
152
- }
153
- /**
154
- * Decompress data using the best available native method
54
+ * Decompress data using Node.js native zlib
155
55
  *
156
56
  * @param data - Compressed data (deflate-raw format)
157
57
  * @returns Decompressed data
158
58
  */
159
59
  export async function decompress(data) {
160
- // Ensure zlib is loaded first
161
- const zlib = await ensureZlib();
162
- // Try Node.js zlib first
163
- if (zlib && typeof zlib.inflateRawSync === "function") {
164
- const result = zlib.inflateRawSync(Buffer.from(data));
165
- return new Uint8Array(result.buffer, result.byteOffset, result.byteLength);
166
- }
167
- // Fall back to DecompressionStream
168
- if (typeof DecompressionStream !== "undefined") {
169
- return decompressWithDecompressionStream(data);
170
- }
171
- throw new Error("No native decompression available");
60
+ const result = inflateRawSync(Buffer.from(data));
61
+ return new Uint8Array(result.buffer, result.byteOffset, result.byteLength);
172
62
  }
173
63
  /**
174
64
  * Decompress data synchronously using Node.js zlib
175
65
  *
176
66
  * @param data - Compressed data (deflate-raw format)
177
67
  * @returns Decompressed data
178
- * @throws Error if not in Node.js environment
179
68
  */
180
69
  export function decompressSync(data) {
181
- const zlib = getZlib();
182
- if (!zlib || typeof zlib.inflateRawSync !== "function") {
183
- throw new Error("Synchronous decompression is only available in Node.js environment");
184
- }
185
- const result = zlib.inflateRawSync(Buffer.from(data));
70
+ const result = inflateRawSync(Buffer.from(data));
186
71
  return new Uint8Array(result.buffer, result.byteOffset, result.byteLength);
187
72
  }
188
- /**
189
- * Decompress using browser's native DecompressionStream
190
- *
191
- * @param data - Compressed data (deflate-raw format)
192
- * @returns Decompressed data
193
- */
194
- async function decompressWithDecompressionStream(data) {
195
- const ds = new DecompressionStream("deflate-raw");
196
- const writer = ds.writable.getWriter();
197
- const reader = ds.readable.getReader();
198
- // Write data and close
199
- writer.write(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
200
- writer.close();
201
- // Read all decompressed chunks
202
- const chunks = [];
203
- let totalLength = 0;
204
- while (true) {
205
- const { done, value } = await reader.read();
206
- if (done) {
207
- break;
208
- }
209
- chunks.push(value);
210
- totalLength += value.length;
211
- }
212
- // Combine chunks into single array
213
- const result = new Uint8Array(totalLength);
214
- let offset = 0;
215
- for (const chunk of chunks) {
216
- result.set(chunk, offset);
217
- offset += chunk.length;
218
- }
219
- return result;
220
- }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * CRC32 calculation utility for ZIP files (Browser version)
3
+ *
4
+ * Uses lookup table optimization - no Node.js dependencies
5
+ *
6
+ * The polynomial used is the standard CRC-32 IEEE 802.3:
7
+ * x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
8
+ * Represented as 0xEDB88320 in reversed (LSB-first) form
9
+ */
10
+ /**
11
+ * Pre-computed CRC32 lookup table (256 entries)
12
+ * Generated using the standard polynomial 0xEDB88320
13
+ */
14
+ const CRC32_TABLE = /* @__PURE__ */ (() => {
15
+ const table = new Uint32Array(256);
16
+ for (let i = 0; i < 256; i++) {
17
+ let crc = i;
18
+ for (let j = 0; j < 8; j++) {
19
+ crc = crc & 1 ? 0xedb88320 ^ (crc >>> 1) : crc >>> 1;
20
+ }
21
+ table[i] = crc;
22
+ }
23
+ return table;
24
+ })();
25
+ /**
26
+ * Calculate CRC32 checksum for the given data
27
+ *
28
+ * @param data - Input data as Uint8Array
29
+ * @returns CRC32 checksum as unsigned 32-bit integer
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const data = new TextEncoder().encode("Hello, World!");
34
+ * const checksum = crc32(data);
35
+ * console.log(checksum.toString(16)); // "ec4ac3d0"
36
+ * ```
37
+ */
38
+ export function crc32(data) {
39
+ let crc = 0xffffffff;
40
+ for (let i = 0; i < data.length; i++) {
41
+ crc = CRC32_TABLE[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);
42
+ }
43
+ return (crc ^ 0xffffffff) >>> 0;
44
+ }
45
+ /**
46
+ * Ensure CRC32 is ready (no-op in browser, for API compatibility)
47
+ */
48
+ export async function ensureCrc32() {
49
+ // No-op in browser
50
+ }
51
+ /**
52
+ * Calculate CRC32 incrementally (useful for streaming)
53
+ * Call with initial crc of 0xffffffff, then finalize with crc32Finalize
54
+ *
55
+ * @param crc - Current CRC value (start with 0xffffffff)
56
+ * @param data - Input data chunk
57
+ * @returns Updated CRC value (not finalized)
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * let crc = 0xffffffff;
62
+ * crc = crc32Update(crc, chunk1);
63
+ * crc = crc32Update(crc, chunk2);
64
+ * const checksum = crc32Finalize(crc);
65
+ * ```
66
+ */
67
+ export function crc32Update(crc, data) {
68
+ for (let i = 0; i < data.length; i++) {
69
+ crc = CRC32_TABLE[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);
70
+ }
71
+ return crc;
72
+ }
73
+ /**
74
+ * Finalize CRC32 calculation
75
+ * XOR with 0xffffffff and convert to unsigned 32-bit
76
+ *
77
+ * @param crc - CRC value from crc32Update
78
+ * @returns Final CRC32 checksum
79
+ */
80
+ export function crc32Finalize(crc) {
81
+ return (crc ^ 0xffffffff) >>> 0;
82
+ }