@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,570 @@
1
+ /**
2
+ * Pure JavaScript DEFLATE implementation for browsers without CompressionStream support
3
+ *
4
+ * This fallback supports:
5
+ * - Decompression: Full DEFLATE decompression (RFC 1951)
6
+ * - Compression: STORE mode only (no compression, but valid DEFLATE format)
7
+ *
8
+ * Used automatically when CompressionStream with "deflate-raw" is unavailable:
9
+ * - Firefox < 113
10
+ * - Safari < 16.4
11
+ * - Chrome < 103
12
+ */
13
+ // ============================================================================
14
+ // DEFLATE Decompression (Full implementation)
15
+ // ============================================================================
16
+ // Fixed Huffman code lengths for literals/lengths (RFC 1951)
17
+ const FIXED_LITERAL_LENGTHS = new Uint8Array(288);
18
+ for (let i = 0; i <= 143; i++) {
19
+ FIXED_LITERAL_LENGTHS[i] = 8;
20
+ }
21
+ for (let i = 144; i <= 255; i++) {
22
+ FIXED_LITERAL_LENGTHS[i] = 9;
23
+ }
24
+ for (let i = 256; i <= 279; i++) {
25
+ FIXED_LITERAL_LENGTHS[i] = 7;
26
+ }
27
+ for (let i = 280; i <= 287; i++) {
28
+ FIXED_LITERAL_LENGTHS[i] = 8;
29
+ }
30
+ // Fixed Huffman code lengths for distances
31
+ const FIXED_DISTANCE_LENGTHS = new Uint8Array(32).fill(5);
32
+ // Length base values and extra bits (codes 257-285)
33
+ const LENGTH_BASE = [
34
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131,
35
+ 163, 195, 227, 258
36
+ ];
37
+ const LENGTH_EXTRA = [
38
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0
39
+ ];
40
+ // Distance base values and extra bits (codes 0-29)
41
+ const DISTANCE_BASE = [
42
+ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049,
43
+ 3073, 4097, 6145, 8193, 12289, 16385, 24577
44
+ ];
45
+ const DISTANCE_EXTRA = [
46
+ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13
47
+ ];
48
+ // Code length order for dynamic Huffman tables
49
+ const CODE_LENGTH_ORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
50
+ /**
51
+ * Build Huffman tree from code lengths
52
+ */
53
+ function buildHuffmanTree(lengths, maxSymbol) {
54
+ // Count codes of each length
55
+ const blCount = new Uint16Array(16);
56
+ for (let i = 0; i < maxSymbol; i++) {
57
+ if (lengths[i] > 0) {
58
+ blCount[lengths[i]]++;
59
+ }
60
+ }
61
+ // Find first code value for each length
62
+ const nextCode = new Uint16Array(16);
63
+ let code = 0;
64
+ for (let bits = 1; bits <= 15; bits++) {
65
+ code = (code + blCount[bits - 1]) << 1;
66
+ nextCode[bits] = code;
67
+ }
68
+ // Build tree
69
+ const root = {};
70
+ for (let symbol = 0; symbol < maxSymbol; symbol++) {
71
+ const len = lengths[symbol];
72
+ if (len === 0) {
73
+ continue;
74
+ }
75
+ code = nextCode[len]++;
76
+ let node = root;
77
+ for (let bit = len - 1; bit >= 0; bit--) {
78
+ const b = (code >> bit) & 1;
79
+ if (b === 0) {
80
+ if (!node.left) {
81
+ node.left = {};
82
+ }
83
+ node = node.left;
84
+ }
85
+ else {
86
+ if (!node.right) {
87
+ node.right = {};
88
+ }
89
+ node = node.right;
90
+ }
91
+ }
92
+ node.symbol = symbol;
93
+ }
94
+ return root;
95
+ }
96
+ /**
97
+ * Bit reader for DEFLATE streams
98
+ */
99
+ class BitReader {
100
+ constructor(data) {
101
+ this.data = data;
102
+ this.pos = 0;
103
+ this.bitBuf = 0;
104
+ this.bitCount = 0;
105
+ }
106
+ /**
107
+ * Read n bits (LSB first)
108
+ */
109
+ readBits(n) {
110
+ while (this.bitCount < n) {
111
+ if (this.pos >= this.data.length) {
112
+ throw new Error("Unexpected end of DEFLATE data");
113
+ }
114
+ this.bitBuf |= this.data[this.pos++] << this.bitCount;
115
+ this.bitCount += 8;
116
+ }
117
+ const result = this.bitBuf & ((1 << n) - 1);
118
+ this.bitBuf >>= n;
119
+ this.bitCount -= n;
120
+ return result;
121
+ }
122
+ /**
123
+ * Decode a symbol using Huffman tree
124
+ */
125
+ decodeSymbol(tree) {
126
+ let node = tree;
127
+ while (node.symbol === undefined) {
128
+ const bit = this.readBits(1);
129
+ node = bit === 0 ? node.left : node.right;
130
+ if (!node) {
131
+ throw new Error("Invalid Huffman code");
132
+ }
133
+ }
134
+ return node.symbol;
135
+ }
136
+ /**
137
+ * Align to byte boundary
138
+ */
139
+ alignToByte() {
140
+ this.bitBuf = 0;
141
+ this.bitCount = 0;
142
+ }
143
+ /**
144
+ * Read a byte directly (must be aligned)
145
+ */
146
+ readByte() {
147
+ if (this.pos >= this.data.length) {
148
+ throw new Error("Unexpected end of data");
149
+ }
150
+ return this.data[this.pos++];
151
+ }
152
+ /**
153
+ * Read 16-bit little-endian value (must be aligned)
154
+ */
155
+ readUint16() {
156
+ return this.readByte() | (this.readByte() << 8);
157
+ }
158
+ }
159
+ /**
160
+ * Decompress DEFLATE data (raw format, no zlib header)
161
+ *
162
+ * @param data - Compressed data in deflate-raw format
163
+ * @returns Decompressed data
164
+ */
165
+ export function inflateRaw(data) {
166
+ const reader = new BitReader(data);
167
+ const output = [];
168
+ let isFinal = false;
169
+ while (!isFinal) {
170
+ isFinal = reader.readBits(1) === 1;
171
+ const blockType = reader.readBits(2);
172
+ if (blockType === 0) {
173
+ // Stored block (no compression)
174
+ reader.alignToByte();
175
+ const len = reader.readUint16();
176
+ const nlen = reader.readUint16();
177
+ if ((len ^ nlen) !== 0xffff) {
178
+ throw new Error("Invalid stored block length");
179
+ }
180
+ for (let i = 0; i < len; i++) {
181
+ output.push(reader.readByte());
182
+ }
183
+ }
184
+ else if (blockType === 1 || blockType === 2) {
185
+ // Compressed block
186
+ let literalTree;
187
+ let distanceTree;
188
+ if (blockType === 1) {
189
+ // Fixed Huffman codes
190
+ literalTree = buildHuffmanTree(FIXED_LITERAL_LENGTHS, 288);
191
+ distanceTree = buildHuffmanTree(FIXED_DISTANCE_LENGTHS, 32);
192
+ }
193
+ else {
194
+ // Dynamic Huffman codes
195
+ const hlit = reader.readBits(5) + 257;
196
+ const hdist = reader.readBits(5) + 1;
197
+ const hclen = reader.readBits(4) + 4;
198
+ // Read code length code lengths
199
+ const codeLengthLengths = new Uint8Array(19);
200
+ for (let i = 0; i < hclen; i++) {
201
+ codeLengthLengths[CODE_LENGTH_ORDER[i]] = reader.readBits(3);
202
+ }
203
+ const codeLengthTree = buildHuffmanTree(codeLengthLengths, 19);
204
+ // Decode literal/length and distance code lengths
205
+ const allLengths = new Uint8Array(hlit + hdist);
206
+ let i = 0;
207
+ while (i < hlit + hdist) {
208
+ const symbol = reader.decodeSymbol(codeLengthTree);
209
+ if (symbol < 16) {
210
+ allLengths[i++] = symbol;
211
+ }
212
+ else if (symbol === 16) {
213
+ // Copy previous length 3-6 times
214
+ const repeat = reader.readBits(2) + 3;
215
+ const prev = allLengths[i - 1];
216
+ for (let j = 0; j < repeat; j++) {
217
+ allLengths[i++] = prev;
218
+ }
219
+ }
220
+ else if (symbol === 17) {
221
+ // Repeat 0 for 3-10 times
222
+ const repeat = reader.readBits(3) + 3;
223
+ for (let j = 0; j < repeat; j++) {
224
+ allLengths[i++] = 0;
225
+ }
226
+ }
227
+ else if (symbol === 18) {
228
+ // Repeat 0 for 11-138 times
229
+ const repeat = reader.readBits(7) + 11;
230
+ for (let j = 0; j < repeat; j++) {
231
+ allLengths[i++] = 0;
232
+ }
233
+ }
234
+ }
235
+ literalTree = buildHuffmanTree(allLengths.subarray(0, hlit), hlit);
236
+ distanceTree = buildHuffmanTree(allLengths.subarray(hlit), hdist);
237
+ }
238
+ // Decode compressed data
239
+ while (true) {
240
+ const symbol = reader.decodeSymbol(literalTree);
241
+ if (symbol < 256) {
242
+ // Literal byte
243
+ output.push(symbol);
244
+ }
245
+ else if (symbol === 256) {
246
+ // End of block
247
+ break;
248
+ }
249
+ else {
250
+ // Length/distance pair
251
+ const lengthCode = symbol - 257;
252
+ const length = LENGTH_BASE[lengthCode] + reader.readBits(LENGTH_EXTRA[lengthCode]);
253
+ const distCode = reader.decodeSymbol(distanceTree);
254
+ const distance = DISTANCE_BASE[distCode] + reader.readBits(DISTANCE_EXTRA[distCode]);
255
+ // Copy from output buffer
256
+ const start = output.length - distance;
257
+ for (let i = 0; i < length; i++) {
258
+ output.push(output[start + i]);
259
+ }
260
+ }
261
+ }
262
+ }
263
+ else {
264
+ throw new Error("Invalid DEFLATE block type: " + blockType);
265
+ }
266
+ }
267
+ return new Uint8Array(output);
268
+ }
269
+ // ============================================================================
270
+ // DEFLATE Compression (STORE mode only - no actual compression)
271
+ // ============================================================================
272
+ /**
273
+ * Compress data using DEFLATE STORE mode (no compression)
274
+ *
275
+ * This creates valid DEFLATE data but without actual compression.
276
+ * Files will be larger but this works on all browsers.
277
+ *
278
+ * @param data - Data to "compress"
279
+ * @returns DEFLATE-formatted data (stored, not compressed)
280
+ */
281
+ export function deflateRawStore(data) {
282
+ // Maximum stored block size is 65535 bytes
283
+ const MAX_BLOCK_SIZE = 65535;
284
+ const numBlocks = Math.ceil(data.length / MAX_BLOCK_SIZE) || 1;
285
+ // Calculate output size: 5 bytes header per block + data
286
+ const outputSize = numBlocks * 5 + data.length;
287
+ const output = new Uint8Array(outputSize);
288
+ let outPos = 0;
289
+ let inPos = 0;
290
+ for (let block = 0; block < numBlocks; block++) {
291
+ const isLast = block === numBlocks - 1;
292
+ const blockSize = Math.min(MAX_BLOCK_SIZE, data.length - inPos);
293
+ // Block header: BFINAL (1 bit) + BTYPE=00 (2 bits) = stored block
294
+ // Then align to byte boundary (5 bits padding)
295
+ output[outPos++] = isLast ? 0x01 : 0x00;
296
+ // LEN (16-bit little-endian)
297
+ output[outPos++] = blockSize & 0xff;
298
+ output[outPos++] = (blockSize >> 8) & 0xff;
299
+ // NLEN (one's complement of LEN)
300
+ output[outPos++] = ~blockSize & 0xff;
301
+ output[outPos++] = (~blockSize >> 8) & 0xff;
302
+ // Data
303
+ output.set(data.subarray(inPos, inPos + blockSize), outPos);
304
+ outPos += blockSize;
305
+ inPos += blockSize;
306
+ }
307
+ return output.subarray(0, outPos);
308
+ }
309
+ // ============================================================================
310
+ // LZ77 + Huffman Compression (Basic implementation)
311
+ // ============================================================================
312
+ /**
313
+ * Compress data using DEFLATE with fixed Huffman codes
314
+ *
315
+ * This provides real compression using LZ77 + fixed Huffman codes.
316
+ * Not as efficient as full DEFLATE but much better than STORE mode.
317
+ *
318
+ * @param data - Data to compress
319
+ * @returns Compressed data in deflate-raw format
320
+ */
321
+ export function deflateRawCompressed(data) {
322
+ if (data.length === 0) {
323
+ // Empty input: single final block with just end-of-block symbol
324
+ return new Uint8Array([0x03, 0x00]);
325
+ }
326
+ // For small data, use STORE mode
327
+ if (data.length < 100) {
328
+ return deflateRawStore(data);
329
+ }
330
+ const output = new BitWriter();
331
+ // Write final block header with fixed Huffman (BFINAL=1, BTYPE=01)
332
+ output.writeBits(1, 1); // BFINAL
333
+ output.writeBits(1, 2); // BTYPE = 01 (fixed Huffman)
334
+ // LZ77 compression with hash table
335
+ const hashTable = new Map();
336
+ let pos = 0;
337
+ while (pos < data.length) {
338
+ // Try to find a match
339
+ let bestLen = 0;
340
+ let bestDist = 0;
341
+ if (pos + 2 < data.length) {
342
+ const hash = (data[pos] << 16) | (data[pos + 1] << 8) | data[pos + 2];
343
+ const matchPos = hashTable.get(hash);
344
+ if (matchPos !== undefined && pos - matchPos <= 32768) {
345
+ const dist = pos - matchPos;
346
+ let len = 0;
347
+ const maxLen = Math.min(258, data.length - pos);
348
+ while (len < maxLen && data[matchPos + len] === data[pos + len]) {
349
+ len++;
350
+ }
351
+ if (len >= 3) {
352
+ bestLen = len;
353
+ bestDist = dist;
354
+ }
355
+ }
356
+ // Update hash table
357
+ hashTable.set(hash, pos);
358
+ }
359
+ if (bestLen >= 3) {
360
+ // Write length/distance pair
361
+ writeLengthCode(output, bestLen);
362
+ writeDistanceCode(output, bestDist);
363
+ pos += bestLen;
364
+ }
365
+ else {
366
+ // Write literal
367
+ writeLiteralCode(output, data[pos]);
368
+ pos++;
369
+ }
370
+ }
371
+ // Write end-of-block symbol (256)
372
+ writeLiteralCode(output, 256);
373
+ return output.finish();
374
+ }
375
+ /**
376
+ * Bit writer for DEFLATE output
377
+ */
378
+ class BitWriter {
379
+ constructor() {
380
+ this.chunks = [];
381
+ this.buffer = [];
382
+ this.bitBuf = 0;
383
+ this.bitCount = 0;
384
+ }
385
+ writeBits(value, count) {
386
+ this.bitBuf |= value << this.bitCount;
387
+ this.bitCount += count;
388
+ while (this.bitCount >= 8) {
389
+ this.buffer.push(this.bitBuf & 0xff);
390
+ this.bitBuf >>= 8;
391
+ this.bitCount -= 8;
392
+ if (this.buffer.length >= 65536) {
393
+ this.chunks.push(new Uint8Array(this.buffer));
394
+ this.buffer = [];
395
+ }
396
+ }
397
+ }
398
+ writeBitsReverse(value, count) {
399
+ // Write bits in reverse order (MSB first, used for Huffman codes)
400
+ let reversed = 0;
401
+ for (let i = 0; i < count; i++) {
402
+ reversed = (reversed << 1) | ((value >> i) & 1);
403
+ }
404
+ this.writeBits(reversed, count);
405
+ }
406
+ finish() {
407
+ // Flush remaining bits
408
+ if (this.bitCount > 0) {
409
+ this.buffer.push(this.bitBuf & 0xff);
410
+ }
411
+ if (this.chunks.length === 0) {
412
+ return new Uint8Array(this.buffer);
413
+ }
414
+ this.chunks.push(new Uint8Array(this.buffer));
415
+ const totalLength = this.chunks.reduce((sum, chunk) => sum + chunk.length, 0);
416
+ const result = new Uint8Array(totalLength);
417
+ let offset = 0;
418
+ for (const chunk of this.chunks) {
419
+ result.set(chunk, offset);
420
+ offset += chunk.length;
421
+ }
422
+ return result;
423
+ }
424
+ }
425
+ // Fixed Huffman code tables
426
+ const LITERAL_CODES = [];
427
+ const LITERAL_LENGTHS_TABLE = [];
428
+ // Build fixed literal/length Huffman codes
429
+ for (let i = 0; i <= 287; i++) {
430
+ let code;
431
+ let len;
432
+ if (i <= 143) {
433
+ // 00110000 - 10111111 (8 bits)
434
+ code = 0x30 + i;
435
+ len = 8;
436
+ }
437
+ else if (i <= 255) {
438
+ // 110010000 - 111111111 (9 bits)
439
+ code = 0x190 + (i - 144);
440
+ len = 9;
441
+ }
442
+ else if (i <= 279) {
443
+ // 0000000 - 0010111 (7 bits)
444
+ code = i - 256;
445
+ len = 7;
446
+ }
447
+ else {
448
+ // 11000000 - 11000111 (8 bits)
449
+ code = 0xc0 + (i - 280);
450
+ len = 8;
451
+ }
452
+ LITERAL_CODES[i] = [code, len];
453
+ LITERAL_LENGTHS_TABLE[i] = len;
454
+ }
455
+ /**
456
+ * Write a literal or end-of-block symbol using fixed Huffman codes
457
+ */
458
+ function writeLiteralCode(output, symbol) {
459
+ const [code, len] = LITERAL_CODES[symbol];
460
+ output.writeBitsReverse(code, len);
461
+ }
462
+ /**
463
+ * Write a length code (257-285)
464
+ */
465
+ function writeLengthCode(output, length) {
466
+ let code;
467
+ let extraBits;
468
+ let extraValue;
469
+ if (length <= 10) {
470
+ code = 257 + length - 3;
471
+ extraBits = 0;
472
+ extraValue = 0;
473
+ }
474
+ else if (length <= 18) {
475
+ const base = length - 11;
476
+ code = 265 + Math.floor(base / 2);
477
+ extraBits = 1;
478
+ extraValue = base % 2;
479
+ }
480
+ else if (length <= 34) {
481
+ const base = length - 19;
482
+ code = 269 + Math.floor(base / 4);
483
+ extraBits = 2;
484
+ extraValue = base % 4;
485
+ }
486
+ else if (length <= 66) {
487
+ const base = length - 35;
488
+ code = 273 + Math.floor(base / 8);
489
+ extraBits = 3;
490
+ extraValue = base % 8;
491
+ }
492
+ else if (length <= 130) {
493
+ const base = length - 67;
494
+ code = 277 + Math.floor(base / 16);
495
+ extraBits = 4;
496
+ extraValue = base % 16;
497
+ }
498
+ else if (length <= 257) {
499
+ const base = length - 131;
500
+ code = 281 + Math.floor(base / 32);
501
+ extraBits = 5;
502
+ extraValue = base % 32;
503
+ }
504
+ else {
505
+ code = 285;
506
+ extraBits = 0;
507
+ extraValue = 0;
508
+ }
509
+ writeLiteralCode(output, code);
510
+ if (extraBits > 0) {
511
+ output.writeBits(extraValue, extraBits);
512
+ }
513
+ }
514
+ /**
515
+ * Write a distance code
516
+ */
517
+ function writeDistanceCode(output, distance) {
518
+ // Distance code table from RFC 1951
519
+ // Each entry: [maxDistance, code, extraBits]
520
+ const DIST_TABLE = [
521
+ [1, 0, 0],
522
+ [2, 1, 0],
523
+ [3, 2, 0],
524
+ [4, 3, 0],
525
+ [6, 4, 1],
526
+ [8, 5, 1],
527
+ [12, 6, 2],
528
+ [16, 7, 2],
529
+ [24, 8, 3],
530
+ [32, 9, 3],
531
+ [48, 10, 4],
532
+ [64, 11, 4],
533
+ [96, 12, 5],
534
+ [128, 13, 5],
535
+ [192, 14, 6],
536
+ [256, 15, 6],
537
+ [384, 16, 7],
538
+ [512, 17, 7],
539
+ [768, 18, 8],
540
+ [1024, 19, 8],
541
+ [1536, 20, 9],
542
+ [2048, 21, 9],
543
+ [3072, 22, 10],
544
+ [4096, 23, 10],
545
+ [6144, 24, 11],
546
+ [8192, 25, 11],
547
+ [12288, 26, 12],
548
+ [16384, 27, 12],
549
+ [24576, 28, 13],
550
+ [32768, 29, 13]
551
+ ];
552
+ // Find the appropriate distance code
553
+ let code = 0;
554
+ let extraBits = 0;
555
+ let baseDistance = 1;
556
+ for (const [maxDist, c, extra] of DIST_TABLE) {
557
+ if (distance <= maxDist) {
558
+ code = c;
559
+ extraBits = extra;
560
+ break;
561
+ }
562
+ baseDistance = maxDist + 1;
563
+ }
564
+ const extraValue = distance - baseDistance;
565
+ // Distance codes use 5-bit fixed code (reversed for Huffman)
566
+ output.writeBitsReverse(code, 5);
567
+ if (extraBits > 0) {
568
+ output.writeBits(extraValue, extraBits);
569
+ }
570
+ }