@cj-tech-master/excelts 3.0.1 → 3.1.0-canary.20260102043356.6791d4e

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 (1122) hide show
  1. package/LICENSE +2 -1
  2. package/README.md +100 -22
  3. package/README_zh.md +100 -22
  4. package/THIRD_PARTY_NOTICES.md +112 -0
  5. package/dist/LICENSE +2 -1
  6. package/dist/browser/excelts.esm.js +18802 -12770
  7. package/dist/browser/excelts.esm.js.map +1 -1
  8. package/dist/browser/excelts.esm.min.js +39 -25
  9. package/dist/browser/excelts.iife.js +18791 -12754
  10. package/dist/browser/excelts.iife.js.map +1 -1
  11. package/dist/browser/excelts.iife.min.js +39 -25
  12. package/dist/cjs/index.js +19 -21
  13. package/dist/cjs/modules/archive/byte-queue.js +129 -0
  14. package/dist/cjs/modules/archive/compress.base.js +186 -0
  15. package/dist/cjs/modules/archive/compress.browser.js +98 -0
  16. package/dist/cjs/modules/archive/compress.js +127 -0
  17. package/dist/cjs/modules/archive/crc32.base.js +56 -0
  18. package/dist/cjs/modules/archive/crc32.browser.js +39 -0
  19. package/dist/cjs/modules/archive/crc32.js +128 -0
  20. package/dist/cjs/modules/archive/defaults.js +6 -0
  21. package/dist/cjs/modules/archive/deflate-fallback.js +569 -0
  22. package/dist/cjs/modules/archive/extract.js +114 -0
  23. package/dist/cjs/modules/archive/index.base.js +28 -0
  24. package/dist/cjs/modules/archive/index.browser.js +47 -0
  25. package/dist/cjs/modules/archive/index.js +45 -0
  26. package/dist/cjs/modules/archive/parse.base.js +632 -0
  27. package/dist/cjs/modules/archive/parse.browser.js +570 -0
  28. package/dist/cjs/modules/archive/parse.js +103 -0
  29. package/dist/cjs/modules/archive/streaming-compress.base.js +12 -0
  30. package/dist/cjs/modules/archive/streaming-compress.browser.js +301 -0
  31. package/dist/cjs/modules/archive/streaming-compress.js +73 -0
  32. package/dist/cjs/modules/archive/streaming-zip.js +411 -0
  33. package/dist/cjs/modules/archive/utils/binary.js +75 -0
  34. package/dist/cjs/modules/archive/utils/bytes.js +106 -0
  35. package/dist/cjs/modules/archive/utils/parse-buffer.js +59 -0
  36. package/dist/cjs/modules/archive/utils/text.js +39 -0
  37. package/dist/cjs/modules/archive/utils/timestamps.js +56 -0
  38. package/dist/cjs/modules/archive/utils/zip-extra-fields.js +75 -0
  39. package/dist/cjs/modules/archive/utils/zip-extra.js +74 -0
  40. package/dist/cjs/modules/archive/zip-builder.js +297 -0
  41. package/dist/cjs/modules/archive/zip-constants.js +26 -0
  42. package/dist/cjs/modules/archive/zip-entry-info.js +7 -0
  43. package/dist/cjs/modules/archive/zip-entry-metadata.js +29 -0
  44. package/dist/cjs/modules/archive/zip-parser.js +336 -0
  45. package/dist/cjs/modules/archive/zip-records.js +90 -0
  46. package/dist/cjs/modules/csv/csv-core.js +730 -0
  47. package/dist/cjs/modules/csv/csv-number.js +24 -0
  48. package/dist/cjs/modules/csv/csv-stream.js +711 -0
  49. package/dist/cjs/modules/csv/csv.browser.js +276 -0
  50. package/dist/cjs/modules/csv/csv.js +37 -0
  51. package/dist/cjs/modules/excel/anchor.js +100 -0
  52. package/dist/cjs/modules/excel/cell.js +949 -0
  53. package/dist/cjs/modules/excel/column.js +361 -0
  54. package/dist/cjs/modules/excel/data-validations.js +46 -0
  55. package/dist/cjs/modules/excel/defined-names.js +217 -0
  56. package/dist/cjs/modules/excel/image.js +63 -0
  57. package/dist/cjs/modules/excel/note.js +64 -0
  58. package/dist/cjs/modules/excel/pivot-table.js +239 -0
  59. package/dist/cjs/modules/excel/range.js +283 -0
  60. package/dist/cjs/modules/excel/row.js +444 -0
  61. package/dist/cjs/modules/excel/stream/hyperlink-reader.js +87 -0
  62. package/dist/cjs/modules/excel/stream/sheet-comments-writer.js +104 -0
  63. package/dist/cjs/modules/excel/stream/sheet-rels-writer.js +94 -0
  64. package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +447 -0
  65. package/dist/cjs/modules/excel/stream/workbook-reader.js +57 -0
  66. package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +360 -0
  67. package/dist/cjs/modules/excel/stream/workbook-writer.js +58 -0
  68. package/dist/cjs/modules/excel/stream/worksheet-reader.js +370 -0
  69. package/dist/cjs/modules/excel/stream/worksheet-writer.js +616 -0
  70. package/dist/cjs/modules/excel/table.js +408 -0
  71. package/dist/cjs/modules/excel/utils/cell-format.js +819 -0
  72. package/dist/cjs/modules/excel/utils/cell-matrix.js +183 -0
  73. package/dist/cjs/modules/excel/utils/encryptor.browser.js +49 -0
  74. package/dist/cjs/modules/excel/utils/encryptor.js +41 -0
  75. package/dist/cjs/modules/excel/utils/ooxml-paths.js +260 -0
  76. package/dist/cjs/modules/excel/utils/parse-sax.js +1210 -0
  77. package/dist/cjs/modules/excel/utils/shared-formula.js +38 -0
  78. package/dist/cjs/modules/excel/utils/sheet-utils.js +693 -0
  79. package/dist/cjs/modules/excel/utils/stream-buf.js +456 -0
  80. package/dist/cjs/modules/excel/utils/string-buf.js +78 -0
  81. package/dist/cjs/modules/excel/utils/under-dash.js +175 -0
  82. package/dist/cjs/modules/excel/utils/xml-stream.js +182 -0
  83. package/dist/cjs/modules/excel/workbook.js +317 -0
  84. package/dist/cjs/modules/excel/worksheet.js +927 -0
  85. package/dist/cjs/modules/excel/xlsx/xform/base-xform.js +138 -0
  86. package/dist/cjs/modules/excel/xlsx/xform/book/defined-name-xform.js +127 -0
  87. package/dist/cjs/modules/excel/xlsx/xform/book/sheet-xform.js +33 -0
  88. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.js +24 -0
  89. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-pivot-cache-xform.js +27 -0
  90. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-properties-xform.js +27 -0
  91. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-view-xform.js +49 -0
  92. package/dist/cjs/modules/excel/xlsx/xform/book/workbook-xform.js +237 -0
  93. package/dist/cjs/modules/excel/xlsx/xform/comment/comment-xform.js +79 -0
  94. package/dist/cjs/modules/excel/xlsx/xform/comment/comments-xform.js +75 -0
  95. package/dist/cjs/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +37 -0
  96. package/dist/cjs/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +33 -0
  97. package/dist/cjs/modules/excel/xlsx/xform/comment/vml-anchor-xform.js +58 -0
  98. package/dist/cjs/modules/excel/xlsx/xform/comment/vml-client-data-xform.js +85 -0
  99. package/dist/cjs/modules/excel/xlsx/xform/comment/vml-notes-xform.js +99 -0
  100. package/dist/cjs/modules/excel/xlsx/xform/comment/vml-shape-xform.js +86 -0
  101. package/dist/cjs/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +63 -0
  102. package/dist/cjs/modules/excel/xlsx/xform/composite-xform.js +51 -0
  103. package/dist/cjs/modules/excel/xlsx/xform/core/app-heading-pairs-xform.js +27 -0
  104. package/dist/cjs/modules/excel/xlsx/xform/core/app-titles-of-parts-xform.js +24 -0
  105. package/dist/cjs/modules/excel/xlsx/xform/core/app-xform.js +86 -0
  106. package/dist/cjs/modules/excel/xlsx/xform/core/content-types-xform.js +125 -0
  107. package/dist/cjs/modules/excel/xlsx/xform/core/core-xform.js +127 -0
  108. package/dist/cjs/modules/excel/xlsx/xform/core/relationship-xform.js +23 -0
  109. package/dist/cjs/modules/excel/xlsx/xform/core/relationships-xform.js +65 -0
  110. package/dist/cjs/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +47 -0
  111. package/dist/cjs/modules/excel/xlsx/xform/drawing/blip-fill-xform.js +60 -0
  112. package/dist/cjs/modules/excel/xlsx/xform/drawing/blip-xform.js +43 -0
  113. package/dist/cjs/modules/excel/xlsx/xform/drawing/c-nv-pic-pr-xform.js +35 -0
  114. package/dist/cjs/modules/excel/xlsx/xform/drawing/c-nv-pr-xform.js +62 -0
  115. package/dist/cjs/modules/excel/xlsx/xform/drawing/cell-position-xform.js +71 -0
  116. package/dist/cjs/modules/excel/xlsx/xform/drawing/drawing-xform.js +99 -0
  117. package/dist/cjs/modules/excel/xlsx/xform/drawing/ext-lst-xform.js +40 -0
  118. package/dist/cjs/modules/excel/xlsx/xform/drawing/ext-xform.js +37 -0
  119. package/dist/cjs/modules/excel/xlsx/xform/drawing/hlink-click-xform.js +42 -0
  120. package/dist/cjs/modules/excel/xlsx/xform/drawing/nv-pic-pr-xform.js +59 -0
  121. package/dist/cjs/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +55 -0
  122. package/dist/cjs/modules/excel/xlsx/xform/drawing/pic-xform.js +67 -0
  123. package/dist/cjs/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +54 -0
  124. package/dist/cjs/modules/excel/xlsx/xform/list-xform.js +92 -0
  125. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +131 -0
  126. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/cache-field.js +81 -0
  127. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +182 -0
  128. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +237 -0
  129. package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +627 -0
  130. package/dist/cjs/modules/excel/xlsx/xform/sheet/auto-filter-xform.js +37 -0
  131. package/dist/cjs/modules/excel/xlsx/xform/sheet/cell-xform.js +463 -0
  132. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +262 -0
  133. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/cfvo-xform.js +25 -0
  134. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/color-scale-xform.js +38 -0
  135. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/conditional-formatting-xform.js +40 -0
  136. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +77 -0
  137. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/databar-xform.js +42 -0
  138. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +70 -0
  139. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/formula-xform.js +22 -0
  140. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/icon-set-xform.js +40 -0
  141. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +25 -0
  142. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +83 -0
  143. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +38 -0
  144. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +51 -0
  145. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +43 -0
  146. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +72 -0
  147. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/f-ext-xform.js +22 -0
  148. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +63 -0
  149. package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +22 -0
  150. package/dist/cjs/modules/excel/xlsx/xform/sheet/col-breaks-xform.js +38 -0
  151. package/dist/cjs/modules/excel/xlsx/xform/sheet/col-xform.js +78 -0
  152. package/dist/cjs/modules/excel/xlsx/xform/sheet/data-validations-xform.js +272 -0
  153. package/dist/cjs/modules/excel/xlsx/xform/sheet/dimension-xform.js +26 -0
  154. package/dist/cjs/modules/excel/xlsx/xform/sheet/drawing-xform.js +30 -0
  155. package/dist/cjs/modules/excel/xlsx/xform/sheet/ext-lst-xform.js +69 -0
  156. package/dist/cjs/modules/excel/xlsx/xform/sheet/header-footer-xform.js +127 -0
  157. package/dist/cjs/modules/excel/xlsx/xform/sheet/hyperlink-xform.js +50 -0
  158. package/dist/cjs/modules/excel/xlsx/xform/sheet/merge-cell-xform.js +24 -0
  159. package/dist/cjs/modules/excel/xlsx/xform/sheet/merges.js +53 -0
  160. package/dist/cjs/modules/excel/xlsx/xform/sheet/outline-properties-xform.js +39 -0
  161. package/dist/cjs/modules/excel/xlsx/xform/sheet/page-breaks-xform.js +36 -0
  162. package/dist/cjs/modules/excel/xlsx/xform/sheet/page-margins-xform.js +45 -0
  163. package/dist/cjs/modules/excel/xlsx/xform/sheet/page-setup-properties-xform.js +32 -0
  164. package/dist/cjs/modules/excel/xlsx/xform/sheet/page-setup-xform.js +99 -0
  165. package/dist/cjs/modules/excel/xlsx/xform/sheet/picture-xform.js +30 -0
  166. package/dist/cjs/modules/excel/xlsx/xform/sheet/print-options-xform.js +44 -0
  167. package/dist/cjs/modules/excel/xlsx/xform/sheet/row-breaks-xform.js +32 -0
  168. package/dist/cjs/modules/excel/xlsx/xform/sheet/row-xform.js +155 -0
  169. package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +52 -0
  170. package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-properties-xform.js +85 -0
  171. package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-protection-xform.js +83 -0
  172. package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +196 -0
  173. package/dist/cjs/modules/excel/xlsx/xform/sheet/table-part-xform.js +30 -0
  174. package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +521 -0
  175. package/dist/cjs/modules/excel/xlsx/xform/simple/boolean-xform.js +27 -0
  176. package/dist/cjs/modules/excel/xlsx/xform/simple/date-xform.js +68 -0
  177. package/dist/cjs/modules/excel/xlsx/xform/simple/float-xform.js +50 -0
  178. package/dist/cjs/modules/excel/xlsx/xform/simple/integer-xform.js +55 -0
  179. package/dist/cjs/modules/excel/xlsx/xform/simple/string-xform.js +50 -0
  180. package/dist/cjs/modules/excel/xlsx/xform/static-xform.js +58 -0
  181. package/dist/cjs/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +89 -0
  182. package/dist/cjs/modules/excel/xlsx/xform/strings/rich-text-xform.js +80 -0
  183. package/dist/cjs/modules/excel/xlsx/xform/strings/shared-string-xform.js +93 -0
  184. package/dist/cjs/modules/excel/xlsx/xform/strings/shared-strings-xform.js +112 -0
  185. package/dist/cjs/modules/excel/xlsx/xform/strings/text-xform.js +39 -0
  186. package/dist/cjs/modules/excel/xlsx/xform/style/alignment-xform.js +155 -0
  187. package/dist/cjs/modules/excel/xlsx/xform/style/border-xform.js +191 -0
  188. package/dist/cjs/modules/excel/xlsx/xform/style/color-xform.js +64 -0
  189. package/dist/cjs/modules/excel/xlsx/xform/style/dxf-xform.js +95 -0
  190. package/dist/cjs/modules/excel/xlsx/xform/style/fill-xform.js +315 -0
  191. package/dist/cjs/modules/excel/xlsx/xform/style/font-xform.js +103 -0
  192. package/dist/cjs/modules/excel/xlsx/xform/style/numfmt-xform.js +53 -0
  193. package/dist/cjs/modules/excel/xlsx/xform/style/protection-xform.js +52 -0
  194. package/dist/cjs/modules/excel/xlsx/xform/style/style-xform.js +111 -0
  195. package/dist/cjs/modules/excel/xlsx/xform/style/styles-xform.js +487 -0
  196. package/dist/cjs/modules/excel/xlsx/xform/style/underline-xform.js +41 -0
  197. package/dist/cjs/modules/excel/xlsx/xform/table/auto-filter-xform.js +73 -0
  198. package/dist/cjs/modules/excel/xlsx/xform/table/custom-filter-xform.js +34 -0
  199. package/dist/cjs/modules/excel/xlsx/xform/table/filter-column-xform.js +90 -0
  200. package/dist/cjs/modules/excel/xlsx/xform/table/filter-xform.js +32 -0
  201. package/dist/cjs/modules/excel/xlsx/xform/table/table-column-xform.js +44 -0
  202. package/dist/cjs/modules/excel/xlsx/xform/table/table-style-info-xform.js +47 -0
  203. package/dist/cjs/modules/excel/xlsx/xform/table/table-xform.js +129 -0
  204. package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +1155 -0
  205. package/dist/cjs/modules/excel/xlsx/xlsx.js +245 -0
  206. package/dist/cjs/modules/stream/base-transform.js +164 -0
  207. package/dist/cjs/modules/stream/buffered-stream.js +283 -0
  208. package/dist/cjs/modules/stream/chunked-builder.js +170 -0
  209. package/dist/cjs/modules/stream/event-emitter.js +243 -0
  210. package/dist/cjs/modules/stream/index.browser.js +97 -0
  211. package/dist/cjs/modules/stream/index.js +124 -0
  212. package/dist/cjs/modules/stream/pull-stream.js +208 -0
  213. package/dist/cjs/modules/stream/shared.js +168 -0
  214. package/dist/cjs/modules/stream/streams.browser.js +3318 -0
  215. package/dist/cjs/modules/stream/streams.js +988 -0
  216. package/dist/cjs/modules/stream/types.js +8 -0
  217. package/dist/cjs/modules/stream/utils.js +96 -0
  218. package/dist/cjs/utils/browser.js +55 -0
  219. package/dist/cjs/utils/env.js +22 -0
  220. package/dist/cjs/utils/utils.base.js +139 -2
  221. package/dist/cjs/utils/utils.browser.js +6 -59
  222. package/dist/cjs/utils/utils.js +13 -89
  223. package/dist/cjs/utils/uuid.js +58 -0
  224. package/dist/esm/index.browser.js +26 -17
  225. package/dist/esm/index.js +18 -19
  226. package/dist/esm/modules/archive/byte-queue.js +125 -0
  227. package/dist/esm/modules/archive/compress.base.js +173 -0
  228. package/dist/esm/modules/archive/compress.browser.js +93 -0
  229. package/dist/esm/modules/archive/compress.js +86 -0
  230. package/dist/esm/modules/archive/crc32.base.js +51 -0
  231. package/dist/esm/modules/archive/crc32.browser.js +32 -0
  232. package/dist/esm/modules/archive/crc32.js +97 -0
  233. package/dist/esm/modules/archive/defaults.js +3 -0
  234. package/dist/esm/modules/archive/deflate-fallback.js +564 -0
  235. package/dist/esm/modules/archive/index.base.js +13 -0
  236. package/dist/esm/modules/archive/index.browser.js +17 -0
  237. package/dist/esm/modules/archive/index.js +15 -0
  238. package/dist/esm/modules/archive/parse.base.js +610 -0
  239. package/dist/esm/modules/archive/parse.browser.js +564 -0
  240. package/dist/esm/modules/archive/parse.js +94 -0
  241. package/dist/esm/modules/archive/streaming-compress.base.js +9 -0
  242. package/dist/esm/modules/archive/streaming-compress.browser.js +296 -0
  243. package/dist/esm/modules/archive/streaming-compress.js +68 -0
  244. package/dist/esm/modules/archive/streaming-zip.js +407 -0
  245. package/dist/esm/modules/archive/utils/binary.js +69 -0
  246. package/dist/esm/modules/archive/utils/bytes.js +101 -0
  247. package/dist/esm/modules/archive/utils/parse-buffer.js +55 -0
  248. package/dist/esm/modules/archive/utils/text.js +33 -0
  249. package/dist/esm/modules/archive/utils/timestamps.js +48 -0
  250. package/dist/esm/modules/archive/utils/zip-extra-fields.js +72 -0
  251. package/dist/esm/modules/archive/utils/zip-extra.js +68 -0
  252. package/dist/esm/modules/archive/zip-builder.js +292 -0
  253. package/dist/esm/modules/archive/zip-constants.js +23 -0
  254. package/dist/esm/modules/archive/zip-entry-info.js +6 -0
  255. package/dist/esm/modules/archive/zip-entry-metadata.js +24 -0
  256. package/dist/esm/modules/archive/zip-parser.js +332 -0
  257. package/dist/esm/modules/archive/zip-records.js +84 -0
  258. package/dist/esm/modules/csv/csv-core.js +723 -0
  259. package/dist/esm/modules/csv/csv-number.js +20 -0
  260. package/dist/esm/modules/csv/csv-stream.js +703 -0
  261. package/dist/esm/modules/csv/csv.browser.js +265 -0
  262. package/dist/esm/modules/csv/csv.js +29 -0
  263. package/dist/esm/modules/excel/anchor.js +97 -0
  264. package/dist/esm/modules/excel/cell.js +946 -0
  265. package/dist/esm/modules/excel/column.js +358 -0
  266. package/dist/esm/modules/excel/data-validations.js +43 -0
  267. package/dist/esm/modules/excel/defined-names.js +214 -0
  268. package/dist/esm/modules/excel/image.js +60 -0
  269. package/dist/esm/modules/excel/note.js +61 -0
  270. package/dist/esm/modules/excel/pivot-table.js +237 -0
  271. package/dist/esm/modules/excel/range.js +280 -0
  272. package/dist/esm/modules/excel/row.js +441 -0
  273. package/dist/esm/modules/excel/stream/hyperlink-reader.js +84 -0
  274. package/dist/esm/modules/excel/stream/sheet-comments-writer.js +101 -0
  275. package/dist/esm/modules/excel/stream/sheet-rels-writer.js +91 -0
  276. package/dist/esm/modules/excel/stream/workbook-reader.browser.js +443 -0
  277. package/dist/esm/modules/excel/stream/workbook-reader.js +50 -0
  278. package/dist/esm/modules/excel/stream/workbook-writer.browser.js +356 -0
  279. package/dist/esm/modules/excel/stream/workbook-writer.js +52 -0
  280. package/dist/esm/modules/excel/stream/worksheet-reader.js +367 -0
  281. package/dist/esm/modules/excel/stream/worksheet-writer.js +613 -0
  282. package/dist/esm/modules/excel/table.js +405 -0
  283. package/dist/esm/modules/excel/utils/cell-format.js +814 -0
  284. package/dist/esm/modules/excel/utils/encryptor.browser.js +46 -0
  285. package/dist/esm/modules/excel/utils/encryptor.js +35 -0
  286. package/dist/esm/modules/excel/utils/ooxml-paths.js +209 -0
  287. package/dist/esm/modules/excel/utils/parse-sax.js +1206 -0
  288. package/dist/esm/modules/excel/utils/sheet-utils.js +674 -0
  289. package/dist/esm/modules/excel/utils/stream-buf.js +453 -0
  290. package/dist/esm/modules/excel/utils/string-buf.js +75 -0
  291. package/dist/esm/modules/excel/utils/under-dash.js +166 -0
  292. package/dist/esm/modules/excel/utils/xml-stream.js +179 -0
  293. package/dist/esm/modules/excel/workbook.js +314 -0
  294. package/dist/esm/modules/excel/worksheet.js +924 -0
  295. package/dist/esm/modules/excel/xlsx/xform/base-xform.js +135 -0
  296. package/dist/esm/modules/excel/xlsx/xform/book/sheet-xform.js +30 -0
  297. package/dist/esm/modules/excel/xlsx/xform/core/content-types-xform.js +122 -0
  298. package/dist/esm/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +128 -0
  299. package/dist/esm/modules/excel/xlsx/xform/pivot-table/cache-field.js +78 -0
  300. package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +234 -0
  301. package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +624 -0
  302. package/dist/esm/modules/excel/xlsx/xform/sheet/cell-xform.js +460 -0
  303. package/dist/esm/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +259 -0
  304. package/dist/esm/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +80 -0
  305. package/dist/esm/modules/excel/xlsx/xform/sheet/col-xform.js +75 -0
  306. package/dist/esm/modules/excel/xlsx/xform/sheet/data-validations-xform.js +269 -0
  307. package/dist/esm/modules/excel/xlsx/xform/sheet/merges.js +50 -0
  308. package/dist/esm/modules/excel/xlsx/xform/sheet/row-xform.js +152 -0
  309. package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +518 -0
  310. package/dist/esm/modules/excel/xlsx/xform/static-xform.js +55 -0
  311. package/dist/esm/modules/excel/xlsx/xform/style/alignment-xform.js +152 -0
  312. package/dist/esm/modules/excel/xlsx/xform/style/border-xform.js +188 -0
  313. package/dist/esm/modules/excel/xlsx/xform/style/styles-xform.js +484 -0
  314. package/dist/esm/modules/excel/xlsx/xform/table/filter-column-xform.js +87 -0
  315. package/dist/esm/modules/excel/xlsx/xlsx.browser.js +1152 -0
  316. package/dist/esm/modules/excel/xlsx/xlsx.js +239 -0
  317. package/dist/esm/modules/stream/base-transform.js +160 -0
  318. package/dist/esm/modules/stream/buffered-stream.js +277 -0
  319. package/dist/esm/modules/stream/chunked-builder.js +165 -0
  320. package/dist/esm/modules/stream/event-emitter.js +239 -0
  321. package/dist/esm/modules/stream/index.browser.js +25 -0
  322. package/dist/esm/modules/stream/index.js +52 -0
  323. package/dist/esm/modules/stream/pull-stream.js +204 -0
  324. package/dist/esm/modules/stream/shared.js +156 -0
  325. package/dist/esm/modules/stream/streams.browser.js +3267 -0
  326. package/dist/esm/modules/stream/streams.js +940 -0
  327. package/dist/esm/modules/stream/types.js +7 -0
  328. package/dist/esm/modules/stream/utils.js +85 -0
  329. package/dist/esm/utils/browser.js +49 -0
  330. package/dist/esm/utils/env.js +18 -0
  331. package/dist/esm/utils/utils.base.js +135 -2
  332. package/dist/esm/utils/utils.browser.js +1 -57
  333. package/dist/esm/utils/utils.js +8 -87
  334. package/dist/esm/utils/uuid.js +55 -0
  335. package/dist/types/index.browser.d.ts +21 -15
  336. package/dist/types/index.d.ts +23 -24
  337. package/dist/types/modules/archive/byte-queue.d.ts +18 -0
  338. package/dist/types/modules/archive/compress.base.d.ts +98 -0
  339. package/dist/types/modules/archive/compress.browser.d.ts +57 -0
  340. package/dist/types/modules/archive/compress.d.ts +44 -0
  341. package/dist/types/modules/archive/crc32.base.d.ts +25 -0
  342. package/dist/types/modules/archive/crc32.browser.d.ts +30 -0
  343. package/dist/types/modules/archive/crc32.d.ts +59 -0
  344. package/dist/types/modules/archive/defaults.d.ts +4 -0
  345. package/dist/types/modules/archive/extract.d.ts +94 -0
  346. package/dist/types/modules/archive/index.base.d.ts +11 -0
  347. package/dist/types/modules/archive/index.browser.d.ts +11 -0
  348. package/dist/types/modules/archive/index.d.ts +11 -0
  349. package/dist/types/modules/archive/parse.base.d.ts +198 -0
  350. package/dist/types/modules/archive/parse.browser.d.ts +22 -0
  351. package/dist/types/modules/archive/parse.d.ts +16 -0
  352. package/dist/types/modules/archive/streaming-compress.base.d.ts +36 -0
  353. package/dist/types/modules/archive/streaming-compress.browser.d.ts +26 -0
  354. package/dist/types/modules/archive/streaming-compress.d.ts +22 -0
  355. package/dist/types/modules/archive/streaming-zip.d.ts +120 -0
  356. package/dist/types/modules/archive/utils/binary.d.ts +24 -0
  357. package/dist/types/modules/archive/utils/bytes.d.ts +7 -0
  358. package/dist/types/modules/archive/utils/parse-buffer.d.ts +18 -0
  359. package/dist/types/modules/archive/utils/text.d.ts +20 -0
  360. package/dist/types/modules/archive/utils/timestamps.d.ts +28 -0
  361. package/dist/types/modules/archive/utils/zip-extra-fields.d.ts +19 -0
  362. package/dist/types/modules/archive/utils/zip-extra.d.ts +18 -0
  363. package/dist/types/modules/archive/zip-builder.d.ts +117 -0
  364. package/dist/types/modules/archive/zip-constants.d.ts +18 -0
  365. package/dist/types/modules/archive/zip-entry-info.d.ts +29 -0
  366. package/dist/types/modules/archive/zip-entry-metadata.d.ts +23 -0
  367. package/dist/types/modules/archive/zip-parser.d.ts +62 -0
  368. package/dist/types/modules/archive/zip-records.d.ts +43 -0
  369. package/dist/types/modules/csv/csv-core.d.ts +215 -0
  370. package/dist/types/modules/csv/csv-number.d.ts +3 -0
  371. package/dist/types/modules/csv/csv-stream.d.ts +121 -0
  372. package/dist/types/modules/csv/csv.browser.d.ts +60 -0
  373. package/dist/types/modules/csv/csv.d.ts +14 -0
  374. package/dist/types/modules/excel/anchor.d.ts +33 -0
  375. package/dist/types/modules/excel/cell.d.ts +138 -0
  376. package/dist/types/modules/excel/column.d.ts +122 -0
  377. package/dist/types/modules/excel/defined-names.d.ts +37 -0
  378. package/dist/types/modules/excel/image.d.ts +64 -0
  379. package/dist/types/modules/excel/pivot-table.d.ts +152 -0
  380. package/dist/types/modules/excel/range.d.ts +62 -0
  381. package/dist/types/modules/excel/row.d.ts +127 -0
  382. package/dist/types/modules/excel/stream/hyperlink-reader.d.ts +33 -0
  383. package/dist/types/modules/excel/stream/workbook-reader.browser.d.ts +169 -0
  384. package/dist/types/modules/excel/stream/workbook-reader.d.ts +24 -0
  385. package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +147 -0
  386. package/dist/types/modules/excel/stream/workbook-writer.d.ts +31 -0
  387. package/dist/types/modules/excel/stream/worksheet-reader.d.ts +61 -0
  388. package/dist/types/modules/excel/stream/worksheet-writer.d.ts +140 -0
  389. package/dist/types/modules/excel/table.d.ts +81 -0
  390. package/dist/types/modules/excel/utils/col-cache.d.ts +36 -0
  391. package/dist/types/modules/excel/utils/encryptor.browser.d.ts +19 -0
  392. package/dist/types/modules/excel/utils/encryptor.d.ts +9 -0
  393. package/dist/types/modules/excel/utils/iterate-stream.d.ts +14 -0
  394. package/dist/types/modules/excel/utils/ooxml-paths.d.ts +64 -0
  395. package/dist/types/modules/excel/utils/sheet-utils.d.ts +190 -0
  396. package/dist/types/modules/excel/utils/stream-buf.d.ts +126 -0
  397. package/dist/types/modules/excel/utils/string-buf.d.ts +29 -0
  398. package/dist/types/modules/excel/workbook.d.ts +195 -0
  399. package/dist/types/modules/excel/worksheet.d.ts +333 -0
  400. package/dist/types/modules/excel/xlsx/xform/base-xform.d.ts +33 -0
  401. package/dist/types/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +17 -0
  402. package/dist/types/modules/excel/xlsx/xform/book/sheet-xform.d.ts +14 -0
  403. package/dist/types/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.d.ts +11 -0
  404. package/dist/types/modules/excel/xlsx/xform/book/workbook-pivot-cache-xform.d.ts +12 -0
  405. package/dist/types/modules/excel/xlsx/xform/book/workbook-properties-xform.d.ts +11 -0
  406. package/dist/types/modules/excel/xlsx/xform/book/workbook-view-xform.d.ts +17 -0
  407. package/dist/types/modules/excel/xlsx/xform/book/workbook-xform.d.ts +23 -0
  408. package/dist/types/modules/excel/xlsx/xform/comment/comment-xform.d.ts +28 -0
  409. package/dist/types/modules/excel/xlsx/xform/comment/comments-xform.d.ts +21 -0
  410. package/dist/types/modules/excel/xlsx/xform/comment/style/vml-position-xform.d.ts +16 -0
  411. package/dist/types/modules/excel/xlsx/xform/comment/style/vml-protection-xform.d.ts +14 -0
  412. package/dist/types/modules/excel/xlsx/xform/comment/vml-anchor-xform.d.ts +27 -0
  413. package/dist/types/modules/excel/xlsx/xform/comment/vml-client-data-xform.d.ts +35 -0
  414. package/dist/types/modules/excel/xlsx/xform/comment/vml-notes-xform.d.ts +24 -0
  415. package/dist/types/modules/excel/xlsx/xform/comment/vml-shape-xform.d.ts +25 -0
  416. package/dist/types/modules/excel/xlsx/xform/comment/vml-textbox-xform.d.ts +23 -0
  417. package/dist/types/modules/excel/xlsx/xform/composite-xform.d.ts +11 -0
  418. package/dist/types/modules/excel/xlsx/xform/core/app-heading-pairs-xform.d.ts +8 -0
  419. package/dist/types/modules/excel/xlsx/xform/core/app-titles-of-parts-xform.d.ts +8 -0
  420. package/dist/types/modules/excel/xlsx/xform/core/app-xform.d.ts +26 -0
  421. package/dist/types/modules/excel/xlsx/xform/core/content-types-xform.d.ts +11 -0
  422. package/dist/types/modules/excel/xlsx/xform/core/core-xform.d.ts +42 -0
  423. package/dist/types/modules/excel/xlsx/xform/core/relationship-xform.d.ts +14 -0
  424. package/dist/types/modules/excel/xlsx/xform/core/relationships-xform.d.ts +14 -0
  425. package/dist/types/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.d.ts +13 -0
  426. package/dist/types/modules/excel/xlsx/xform/drawing/blip-fill-xform.d.ts +16 -0
  427. package/dist/types/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +14 -0
  428. package/dist/types/modules/excel/xlsx/xform/drawing/c-nv-pic-pr-xform.d.ts +9 -0
  429. package/dist/types/modules/excel/xlsx/xform/drawing/c-nv-pr-xform.d.ts +18 -0
  430. package/dist/types/modules/excel/xlsx/xform/drawing/cell-position-xform.d.ts +24 -0
  431. package/dist/types/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +24 -0
  432. package/dist/types/modules/excel/xlsx/xform/drawing/ext-lst-xform.d.ts +9 -0
  433. package/dist/types/modules/excel/xlsx/xform/drawing/ext-xform.d.ts +20 -0
  434. package/dist/types/modules/excel/xlsx/xform/drawing/hlink-click-xform.d.ts +11 -0
  435. package/dist/types/modules/excel/xlsx/xform/drawing/nv-pic-pr-xform.d.ts +15 -0
  436. package/dist/types/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +20 -0
  437. package/dist/types/modules/excel/xlsx/xform/drawing/pic-xform.d.ts +22 -0
  438. package/dist/types/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +20 -0
  439. package/dist/types/modules/excel/xlsx/xform/list-xform.d.ts +32 -0
  440. package/dist/types/modules/excel/xlsx/xform/pivot-table/cache-field-xform.d.ts +42 -0
  441. package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +60 -0
  442. package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +73 -0
  443. package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +119 -0
  444. package/dist/types/modules/excel/xlsx/xform/sheet/auto-filter-xform.d.ts +8 -0
  445. package/dist/types/modules/excel/xlsx/xform/sheet/cell-xform.d.ts +17 -0
  446. package/dist/types/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.d.ts +41 -0
  447. package/dist/types/modules/excel/xlsx/xform/sheet/cf/cfvo-xform.d.ts +8 -0
  448. package/dist/types/modules/excel/xlsx/xform/sheet/cf/color-scale-xform.d.ts +13 -0
  449. package/dist/types/modules/excel/xlsx/xform/sheet/cf/conditional-formatting-xform.d.ts +9 -0
  450. package/dist/types/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.d.ts +16 -0
  451. package/dist/types/modules/excel/xlsx/xform/sheet/cf/databar-xform.d.ts +13 -0
  452. package/dist/types/modules/excel/xlsx/xform/sheet/cf/ext-lst-ref-xform.d.ts +9 -0
  453. package/dist/types/modules/excel/xlsx/xform/sheet/cf/formula-xform.d.ts +9 -0
  454. package/dist/types/modules/excel/xlsx/xform/sheet/cf/icon-set-xform.d.ts +11 -0
  455. package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.d.ts +10 -0
  456. package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.d.ts +23 -0
  457. package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.d.ts +13 -0
  458. package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.d.ts +16 -0
  459. package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.d.ts +13 -0
  460. package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/databar-ext-xform.d.ts +29 -0
  461. package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/f-ext-xform.d.ts +9 -0
  462. package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.d.ts +20 -0
  463. package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/sqref-ext-xform.d.ts +9 -0
  464. package/dist/types/modules/excel/xlsx/xform/sheet/col-breaks-xform.d.ts +16 -0
  465. package/dist/types/modules/excel/xlsx/xform/sheet/col-xform.d.ts +22 -0
  466. package/dist/types/modules/excel/xlsx/xform/sheet/data-validations-xform.d.ts +12 -0
  467. package/dist/types/modules/excel/xlsx/xform/sheet/dimension-xform.d.ts +10 -0
  468. package/dist/types/modules/excel/xlsx/xform/sheet/drawing-xform.d.ts +12 -0
  469. package/dist/types/modules/excel/xlsx/xform/sheet/ext-lst-xform.d.ts +16 -0
  470. package/dist/types/modules/excel/xlsx/xform/sheet/header-footer-xform.d.ts +20 -0
  471. package/dist/types/modules/excel/xlsx/xform/sheet/hyperlink-xform.d.ts +16 -0
  472. package/dist/types/modules/excel/xlsx/xform/sheet/merge-cell-xform.d.ts +9 -0
  473. package/dist/types/modules/excel/xlsx/xform/sheet/outline-properties-xform.d.ts +13 -0
  474. package/dist/types/modules/excel/xlsx/xform/sheet/page-breaks-xform.d.ts +14 -0
  475. package/dist/types/modules/excel/xlsx/xform/sheet/page-margins-xform.d.ts +17 -0
  476. package/dist/types/modules/excel/xlsx/xform/sheet/page-setup-properties-xform.d.ts +12 -0
  477. package/dist/types/modules/excel/xlsx/xform/sheet/page-setup-xform.d.ts +27 -0
  478. package/dist/types/modules/excel/xlsx/xform/sheet/picture-xform.d.ts +12 -0
  479. package/dist/types/modules/excel/xlsx/xform/sheet/print-options-xform.d.ts +15 -0
  480. package/dist/types/modules/excel/xlsx/xform/sheet/row-breaks-xform.d.ts +10 -0
  481. package/dist/types/modules/excel/xlsx/xform/sheet/row-xform.d.ts +37 -0
  482. package/dist/types/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.d.ts +16 -0
  483. package/dist/types/modules/excel/xlsx/xform/sheet/sheet-properties-xform.d.ts +19 -0
  484. package/dist/types/modules/excel/xlsx/xform/sheet/sheet-protection-xform.d.ts +31 -0
  485. package/dist/types/modules/excel/xlsx/xform/sheet/sheet-view-xform.d.ts +32 -0
  486. package/dist/types/modules/excel/xlsx/xform/sheet/table-part-xform.d.ts +12 -0
  487. package/dist/types/modules/excel/xlsx/xform/sheet/worksheet-xform.d.ts +21 -0
  488. package/dist/types/modules/excel/xlsx/xform/simple/boolean-xform.d.ts +15 -0
  489. package/dist/types/modules/excel/xlsx/xform/simple/date-xform.d.ts +22 -0
  490. package/dist/types/modules/excel/xlsx/xform/simple/float-xform.d.ts +18 -0
  491. package/dist/types/modules/excel/xlsx/xform/simple/integer-xform.d.ts +20 -0
  492. package/dist/types/modules/excel/xlsx/xform/simple/string-xform.d.ts +18 -0
  493. package/dist/types/modules/excel/xlsx/xform/static-xform.d.ts +17 -0
  494. package/dist/types/modules/excel/xlsx/xform/strings/phonetic-text-xform.d.ts +20 -0
  495. package/dist/types/modules/excel/xlsx/xform/strings/rich-text-xform.d.ts +25 -0
  496. package/dist/types/modules/excel/xlsx/xform/strings/shared-string-xform.d.ts +17 -0
  497. package/dist/types/modules/excel/xlsx/xform/strings/shared-strings-xform.d.ts +27 -0
  498. package/dist/types/modules/excel/xlsx/xform/strings/text-xform.d.ts +10 -0
  499. package/dist/types/modules/excel/xlsx/xform/style/alignment-xform.d.ts +18 -0
  500. package/dist/types/modules/excel/xlsx/xform/style/border-xform.d.ts +49 -0
  501. package/dist/types/modules/excel/xlsx/xform/style/color-xform.d.ts +17 -0
  502. package/dist/types/modules/excel/xlsx/xform/style/dxf-xform.d.ts +23 -0
  503. package/dist/types/modules/excel/xlsx/xform/style/fill-xform.d.ts +85 -0
  504. package/dist/types/modules/excel/xlsx/xform/style/font-xform.d.ts +35 -0
  505. package/dist/types/modules/excel/xlsx/xform/style/numfmt-xform.d.ts +18 -0
  506. package/dist/types/modules/excel/xlsx/xform/style/protection-xform.d.ts +13 -0
  507. package/dist/types/modules/excel/xlsx/xform/style/style-xform.d.ts +30 -0
  508. package/dist/types/modules/excel/xlsx/xform/style/styles-xform.d.ts +46 -0
  509. package/dist/types/modules/excel/xlsx/xform/style/underline-xform.d.ts +14 -0
  510. package/dist/types/modules/excel/xlsx/xform/table/auto-filter-xform.d.ts +21 -0
  511. package/dist/types/modules/excel/xlsx/xform/table/custom-filter-xform.d.ts +15 -0
  512. package/dist/types/modules/excel/xlsx/xform/table/filter-column-xform.d.ts +24 -0
  513. package/dist/types/modules/excel/xlsx/xform/table/filter-xform.d.ts +14 -0
  514. package/dist/types/modules/excel/xlsx/xform/table/table-column-xform.d.ts +21 -0
  515. package/dist/types/modules/excel/xlsx/xform/table/table-style-info-xform.d.ts +18 -0
  516. package/dist/types/modules/excel/xlsx/xform/table/table-xform.d.ts +33 -0
  517. package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +208 -0
  518. package/dist/types/modules/excel/xlsx/xlsx.d.ts +24 -0
  519. package/dist/types/modules/stream/base-transform.d.ts +68 -0
  520. package/dist/types/modules/stream/buffered-stream.d.ts +94 -0
  521. package/dist/types/modules/stream/chunked-builder.d.ts +97 -0
  522. package/dist/types/modules/stream/event-emitter.d.ts +30 -0
  523. package/dist/types/modules/stream/index.browser.d.ts +22 -0
  524. package/dist/types/modules/stream/index.d.ts +49 -0
  525. package/dist/types/modules/stream/pull-stream.d.ts +67 -0
  526. package/dist/types/modules/stream/shared.d.ts +54 -0
  527. package/dist/types/modules/stream/streams.browser.d.ts +936 -0
  528. package/dist/types/modules/stream/streams.d.ts +282 -0
  529. package/dist/types/modules/stream/types.d.ts +238 -0
  530. package/dist/types/modules/stream/utils.d.ts +24 -0
  531. package/dist/types/utils/browser.d.ts +9 -0
  532. package/dist/types/utils/env.d.ts +14 -0
  533. package/dist/types/utils/utils.base.d.ts +21 -1
  534. package/dist/types/utils/utils.browser.d.ts +1 -24
  535. package/dist/types/utils/utils.d.ts +1 -24
  536. package/dist/types/utils/uuid.d.ts +11 -0
  537. package/package.json +16 -22
  538. package/dist/cjs/csv/csv-core.js +0 -701
  539. package/dist/cjs/csv/csv-stream.js +0 -646
  540. package/dist/cjs/csv/csv.base.js +0 -137
  541. package/dist/cjs/csv/csv.browser.js +0 -68
  542. package/dist/cjs/csv/csv.js +0 -249
  543. package/dist/cjs/doc/anchor.js +0 -100
  544. package/dist/cjs/doc/cell.js +0 -949
  545. package/dist/cjs/doc/column.js +0 -354
  546. package/dist/cjs/doc/data-validations.js +0 -46
  547. package/dist/cjs/doc/defined-names.js +0 -217
  548. package/dist/cjs/doc/image.js +0 -63
  549. package/dist/cjs/doc/modelcontainer.js +0 -16
  550. package/dist/cjs/doc/note.js +0 -64
  551. package/dist/cjs/doc/pivot-table.js +0 -239
  552. package/dist/cjs/doc/range.js +0 -283
  553. package/dist/cjs/doc/row.js +0 -421
  554. package/dist/cjs/doc/table.js +0 -408
  555. package/dist/cjs/doc/workbook.base.js +0 -211
  556. package/dist/cjs/doc/workbook.browser.js +0 -62
  557. package/dist/cjs/doc/workbook.js +0 -96
  558. package/dist/cjs/doc/worksheet.js +0 -931
  559. package/dist/cjs/local.js +0 -1
  560. package/dist/cjs/stream/xlsx/hyperlink-reader.js +0 -82
  561. package/dist/cjs/stream/xlsx/sheet-comments-writer.js +0 -103
  562. package/dist/cjs/stream/xlsx/sheet-rels-writer.js +0 -93
  563. package/dist/cjs/stream/xlsx/workbook-reader.js +0 -359
  564. package/dist/cjs/stream/xlsx/workbook-writer.js +0 -387
  565. package/dist/cjs/stream/xlsx/worksheet-reader.js +0 -351
  566. package/dist/cjs/stream/xlsx/worksheet-writer.js +0 -605
  567. package/dist/cjs/utils/browser-buffer.js +0 -75
  568. package/dist/cjs/utils/cell-format.js +0 -819
  569. package/dist/cjs/utils/cell-matrix.js +0 -183
  570. package/dist/cjs/utils/encryptor.browser.js +0 -240
  571. package/dist/cjs/utils/encryptor.js +0 -55
  572. package/dist/cjs/utils/parse-sax.js +0 -1209
  573. package/dist/cjs/utils/shared-formula.js +0 -38
  574. package/dist/cjs/utils/sheet-utils.js +0 -727
  575. package/dist/cjs/utils/stream-buf.browser.js +0 -355
  576. package/dist/cjs/utils/stream-buf.js +0 -347
  577. package/dist/cjs/utils/string-buf.js +0 -68
  578. package/dist/cjs/utils/under-dash.js +0 -180
  579. package/dist/cjs/utils/unzip/buffer-stream.js +0 -27
  580. package/dist/cjs/utils/unzip/extract.js +0 -114
  581. package/dist/cjs/utils/unzip/index.js +0 -45
  582. package/dist/cjs/utils/unzip/noop-stream.js +0 -20
  583. package/dist/cjs/utils/unzip/parse-buffer.js +0 -60
  584. package/dist/cjs/utils/unzip/parse-datetime.js +0 -23
  585. package/dist/cjs/utils/unzip/parse-extra-field.js +0 -52
  586. package/dist/cjs/utils/unzip/parse.js +0 -340
  587. package/dist/cjs/utils/unzip/pull-stream.js +0 -145
  588. package/dist/cjs/utils/unzip/zip-parser.js +0 -466
  589. package/dist/cjs/utils/xml-stream.js +0 -171
  590. package/dist/cjs/utils/zip/compress.base.js +0 -88
  591. package/dist/cjs/utils/zip/compress.browser.js +0 -127
  592. package/dist/cjs/utils/zip/compress.js +0 -81
  593. package/dist/cjs/utils/zip/crc32.browser.js +0 -88
  594. package/dist/cjs/utils/zip/crc32.js +0 -154
  595. package/dist/cjs/utils/zip/deflate-fallback.js +0 -575
  596. package/dist/cjs/utils/zip/index.js +0 -70
  597. package/dist/cjs/utils/zip/streaming-zip.js +0 -264
  598. package/dist/cjs/utils/zip/zip-builder.js +0 -378
  599. package/dist/cjs/utils/zip-stream.browser.js +0 -135
  600. package/dist/cjs/utils/zip-stream.js +0 -114
  601. package/dist/cjs/xlsx/xform/base-xform.js +0 -126
  602. package/dist/cjs/xlsx/xform/book/defined-name-xform.js +0 -127
  603. package/dist/cjs/xlsx/xform/book/sheet-xform.js +0 -33
  604. package/dist/cjs/xlsx/xform/book/workbook-calc-properties-xform.js +0 -24
  605. package/dist/cjs/xlsx/xform/book/workbook-pivot-cache-xform.js +0 -27
  606. package/dist/cjs/xlsx/xform/book/workbook-properties-xform.js +0 -27
  607. package/dist/cjs/xlsx/xform/book/workbook-view-xform.js +0 -49
  608. package/dist/cjs/xlsx/xform/book/workbook-xform.js +0 -237
  609. package/dist/cjs/xlsx/xform/comment/comment-xform.js +0 -79
  610. package/dist/cjs/xlsx/xform/comment/comments-xform.js +0 -75
  611. package/dist/cjs/xlsx/xform/comment/style/vml-position-xform.js +0 -37
  612. package/dist/cjs/xlsx/xform/comment/style/vml-protection-xform.js +0 -33
  613. package/dist/cjs/xlsx/xform/comment/vml-anchor-xform.js +0 -58
  614. package/dist/cjs/xlsx/xform/comment/vml-client-data-xform.js +0 -85
  615. package/dist/cjs/xlsx/xform/comment/vml-notes-xform.js +0 -99
  616. package/dist/cjs/xlsx/xform/comment/vml-shape-xform.js +0 -86
  617. package/dist/cjs/xlsx/xform/comment/vml-textbox-xform.js +0 -63
  618. package/dist/cjs/xlsx/xform/composite-xform.js +0 -51
  619. package/dist/cjs/xlsx/xform/core/app-heading-pairs-xform.js +0 -27
  620. package/dist/cjs/xlsx/xform/core/app-titles-of-parts-xform.js +0 -24
  621. package/dist/cjs/xlsx/xform/core/app-xform.js +0 -86
  622. package/dist/cjs/xlsx/xform/core/content-types-xform.js +0 -131
  623. package/dist/cjs/xlsx/xform/core/core-xform.js +0 -127
  624. package/dist/cjs/xlsx/xform/core/relationship-xform.js +0 -23
  625. package/dist/cjs/xlsx/xform/core/relationships-xform.js +0 -65
  626. package/dist/cjs/xlsx/xform/drawing/base-cell-anchor-xform.js +0 -47
  627. package/dist/cjs/xlsx/xform/drawing/blip-fill-xform.js +0 -60
  628. package/dist/cjs/xlsx/xform/drawing/blip-xform.js +0 -43
  629. package/dist/cjs/xlsx/xform/drawing/c-nv-pic-pr-xform.js +0 -35
  630. package/dist/cjs/xlsx/xform/drawing/c-nv-pr-xform.js +0 -62
  631. package/dist/cjs/xlsx/xform/drawing/cell-position-xform.js +0 -71
  632. package/dist/cjs/xlsx/xform/drawing/drawing-xform.js +0 -99
  633. package/dist/cjs/xlsx/xform/drawing/ext-lst-xform.js +0 -40
  634. package/dist/cjs/xlsx/xform/drawing/ext-xform.js +0 -37
  635. package/dist/cjs/xlsx/xform/drawing/hlink-click-xform.js +0 -42
  636. package/dist/cjs/xlsx/xform/drawing/nv-pic-pr-xform.js +0 -59
  637. package/dist/cjs/xlsx/xform/drawing/one-cell-anchor-xform.js +0 -55
  638. package/dist/cjs/xlsx/xform/drawing/pic-xform.js +0 -67
  639. package/dist/cjs/xlsx/xform/drawing/two-cell-anchor-xform.js +0 -54
  640. package/dist/cjs/xlsx/xform/list-xform.js +0 -92
  641. package/dist/cjs/xlsx/xform/pivot-table/cache-field-xform.js +0 -131
  642. package/dist/cjs/xlsx/xform/pivot-table/cache-field.js +0 -81
  643. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +0 -182
  644. package/dist/cjs/xlsx/xform/pivot-table/pivot-cache-records-xform.js +0 -237
  645. package/dist/cjs/xlsx/xform/pivot-table/pivot-table-xform.js +0 -627
  646. package/dist/cjs/xlsx/xform/sheet/auto-filter-xform.js +0 -37
  647. package/dist/cjs/xlsx/xform/sheet/cell-xform.js +0 -463
  648. package/dist/cjs/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -262
  649. package/dist/cjs/xlsx/xform/sheet/cf/cfvo-xform.js +0 -25
  650. package/dist/cjs/xlsx/xform/sheet/cf/color-scale-xform.js +0 -38
  651. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formatting-xform.js +0 -40
  652. package/dist/cjs/xlsx/xform/sheet/cf/conditional-formattings-xform.js +0 -77
  653. package/dist/cjs/xlsx/xform/sheet/cf/databar-xform.js +0 -42
  654. package/dist/cjs/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +0 -70
  655. package/dist/cjs/xlsx/xform/sheet/cf/formula-xform.js +0 -22
  656. package/dist/cjs/xlsx/xform/sheet/cf/icon-set-xform.js +0 -40
  657. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -25
  658. package/dist/cjs/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -82
  659. package/dist/cjs/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -38
  660. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -51
  661. package/dist/cjs/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -43
  662. package/dist/cjs/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +0 -72
  663. package/dist/cjs/xlsx/xform/sheet/cf-ext/f-ext-xform.js +0 -22
  664. package/dist/cjs/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -63
  665. package/dist/cjs/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +0 -22
  666. package/dist/cjs/xlsx/xform/sheet/col-breaks-xform.js +0 -38
  667. package/dist/cjs/xlsx/xform/sheet/col-xform.js +0 -78
  668. package/dist/cjs/xlsx/xform/sheet/data-validations-xform.js +0 -285
  669. package/dist/cjs/xlsx/xform/sheet/dimension-xform.js +0 -26
  670. package/dist/cjs/xlsx/xform/sheet/drawing-xform.js +0 -30
  671. package/dist/cjs/xlsx/xform/sheet/ext-lst-xform.js +0 -69
  672. package/dist/cjs/xlsx/xform/sheet/header-footer-xform.js +0 -127
  673. package/dist/cjs/xlsx/xform/sheet/hyperlink-xform.js +0 -50
  674. package/dist/cjs/xlsx/xform/sheet/merge-cell-xform.js +0 -24
  675. package/dist/cjs/xlsx/xform/sheet/merges.js +0 -53
  676. package/dist/cjs/xlsx/xform/sheet/outline-properties-xform.js +0 -39
  677. package/dist/cjs/xlsx/xform/sheet/page-breaks-xform.js +0 -36
  678. package/dist/cjs/xlsx/xform/sheet/page-margins-xform.js +0 -45
  679. package/dist/cjs/xlsx/xform/sheet/page-setup-properties-xform.js +0 -32
  680. package/dist/cjs/xlsx/xform/sheet/page-setup-xform.js +0 -99
  681. package/dist/cjs/xlsx/xform/sheet/picture-xform.js +0 -30
  682. package/dist/cjs/xlsx/xform/sheet/print-options-xform.js +0 -44
  683. package/dist/cjs/xlsx/xform/sheet/row-breaks-xform.js +0 -32
  684. package/dist/cjs/xlsx/xform/sheet/row-xform.js +0 -155
  685. package/dist/cjs/xlsx/xform/sheet/sheet-format-properties-xform.js +0 -52
  686. package/dist/cjs/xlsx/xform/sheet/sheet-properties-xform.js +0 -85
  687. package/dist/cjs/xlsx/xform/sheet/sheet-protection-xform.js +0 -83
  688. package/dist/cjs/xlsx/xform/sheet/sheet-view-xform.js +0 -196
  689. package/dist/cjs/xlsx/xform/sheet/table-part-xform.js +0 -30
  690. package/dist/cjs/xlsx/xform/sheet/worksheet-xform.js +0 -520
  691. package/dist/cjs/xlsx/xform/simple/boolean-xform.js +0 -27
  692. package/dist/cjs/xlsx/xform/simple/date-xform.js +0 -68
  693. package/dist/cjs/xlsx/xform/simple/float-xform.js +0 -50
  694. package/dist/cjs/xlsx/xform/simple/integer-xform.js +0 -55
  695. package/dist/cjs/xlsx/xform/simple/string-xform.js +0 -50
  696. package/dist/cjs/xlsx/xform/static-xform.js +0 -58
  697. package/dist/cjs/xlsx/xform/strings/phonetic-text-xform.js +0 -89
  698. package/dist/cjs/xlsx/xform/strings/rich-text-xform.js +0 -80
  699. package/dist/cjs/xlsx/xform/strings/shared-string-xform.js +0 -93
  700. package/dist/cjs/xlsx/xform/strings/shared-strings-xform.js +0 -112
  701. package/dist/cjs/xlsx/xform/strings/text-xform.js +0 -39
  702. package/dist/cjs/xlsx/xform/style/alignment-xform.js +0 -155
  703. package/dist/cjs/xlsx/xform/style/border-xform.js +0 -191
  704. package/dist/cjs/xlsx/xform/style/color-xform.js +0 -64
  705. package/dist/cjs/xlsx/xform/style/dxf-xform.js +0 -95
  706. package/dist/cjs/xlsx/xform/style/fill-xform.js +0 -315
  707. package/dist/cjs/xlsx/xform/style/font-xform.js +0 -103
  708. package/dist/cjs/xlsx/xform/style/numfmt-xform.js +0 -53
  709. package/dist/cjs/xlsx/xform/style/protection-xform.js +0 -52
  710. package/dist/cjs/xlsx/xform/style/style-xform.js +0 -111
  711. package/dist/cjs/xlsx/xform/style/styles-xform.js +0 -487
  712. package/dist/cjs/xlsx/xform/style/underline-xform.js +0 -41
  713. package/dist/cjs/xlsx/xform/table/auto-filter-xform.js +0 -73
  714. package/dist/cjs/xlsx/xform/table/custom-filter-xform.js +0 -34
  715. package/dist/cjs/xlsx/xform/table/filter-column-xform.js +0 -91
  716. package/dist/cjs/xlsx/xform/table/filter-xform.js +0 -32
  717. package/dist/cjs/xlsx/xform/table/table-column-xform.js +0 -44
  718. package/dist/cjs/xlsx/xform/table/table-style-info-xform.js +0 -47
  719. package/dist/cjs/xlsx/xform/table/table-xform.js +0 -129
  720. package/dist/cjs/xlsx/xlsx.base.js +0 -742
  721. package/dist/cjs/xlsx/xlsx.browser.js +0 -162
  722. package/dist/cjs/xlsx/xlsx.js +0 -220
  723. package/dist/esm/csv/csv-core.js +0 -694
  724. package/dist/esm/csv/csv-stream.js +0 -638
  725. package/dist/esm/csv/csv.base.js +0 -127
  726. package/dist/esm/csv/csv.browser.js +0 -65
  727. package/dist/esm/csv/csv.js +0 -209
  728. package/dist/esm/doc/anchor.js +0 -97
  729. package/dist/esm/doc/cell.js +0 -946
  730. package/dist/esm/doc/column.js +0 -351
  731. package/dist/esm/doc/data-validations.js +0 -43
  732. package/dist/esm/doc/defined-names.js +0 -214
  733. package/dist/esm/doc/image.js +0 -60
  734. package/dist/esm/doc/modelcontainer.js +0 -13
  735. package/dist/esm/doc/note.js +0 -61
  736. package/dist/esm/doc/pivot-table.js +0 -237
  737. package/dist/esm/doc/range.js +0 -280
  738. package/dist/esm/doc/row.js +0 -418
  739. package/dist/esm/doc/table.js +0 -405
  740. package/dist/esm/doc/workbook.base.js +0 -207
  741. package/dist/esm/doc/workbook.browser.js +0 -59
  742. package/dist/esm/doc/workbook.js +0 -93
  743. package/dist/esm/doc/worksheet.js +0 -928
  744. package/dist/esm/local.js +0 -1
  745. package/dist/esm/stream/xlsx/hyperlink-reader.js +0 -79
  746. package/dist/esm/stream/xlsx/sheet-comments-writer.js +0 -100
  747. package/dist/esm/stream/xlsx/sheet-rels-writer.js +0 -90
  748. package/dist/esm/stream/xlsx/workbook-reader.js +0 -352
  749. package/dist/esm/stream/xlsx/workbook-writer.js +0 -381
  750. package/dist/esm/stream/xlsx/worksheet-reader.js +0 -348
  751. package/dist/esm/stream/xlsx/worksheet-writer.js +0 -602
  752. package/dist/esm/utils/browser-buffer.js +0 -67
  753. package/dist/esm/utils/cell-format.js +0 -814
  754. package/dist/esm/utils/encryptor.browser.js +0 -237
  755. package/dist/esm/utils/encryptor.js +0 -49
  756. package/dist/esm/utils/parse-sax.js +0 -1205
  757. package/dist/esm/utils/sheet-utils.js +0 -707
  758. package/dist/esm/utils/stream-buf.browser.js +0 -352
  759. package/dist/esm/utils/stream-buf.js +0 -344
  760. package/dist/esm/utils/string-buf.js +0 -65
  761. package/dist/esm/utils/under-dash.js +0 -171
  762. package/dist/esm/utils/unzip/buffer-stream.js +0 -24
  763. package/dist/esm/utils/unzip/index.js +0 -29
  764. package/dist/esm/utils/unzip/noop-stream.js +0 -16
  765. package/dist/esm/utils/unzip/parse-buffer.js +0 -57
  766. package/dist/esm/utils/unzip/parse-datetime.js +0 -20
  767. package/dist/esm/utils/unzip/parse-extra-field.js +0 -49
  768. package/dist/esm/utils/unzip/parse.js +0 -332
  769. package/dist/esm/utils/unzip/pull-stream.js +0 -141
  770. package/dist/esm/utils/unzip/zip-parser.js +0 -459
  771. package/dist/esm/utils/xml-stream.js +0 -168
  772. package/dist/esm/utils/zip/compress.base.js +0 -83
  773. package/dist/esm/utils/zip/compress.browser.js +0 -121
  774. package/dist/esm/utils/zip/compress.js +0 -72
  775. package/dist/esm/utils/zip/crc32.browser.js +0 -82
  776. package/dist/esm/utils/zip/crc32.js +0 -116
  777. package/dist/esm/utils/zip/deflate-fallback.js +0 -570
  778. package/dist/esm/utils/zip/index.js +0 -55
  779. package/dist/esm/utils/zip/streaming-zip.js +0 -259
  780. package/dist/esm/utils/zip/zip-builder.js +0 -372
  781. package/dist/esm/utils/zip-stream.browser.js +0 -132
  782. package/dist/esm/utils/zip-stream.js +0 -109
  783. package/dist/esm/xlsx/xform/base-xform.js +0 -123
  784. package/dist/esm/xlsx/xform/book/sheet-xform.js +0 -30
  785. package/dist/esm/xlsx/xform/core/content-types-xform.js +0 -128
  786. package/dist/esm/xlsx/xform/pivot-table/cache-field-xform.js +0 -128
  787. package/dist/esm/xlsx/xform/pivot-table/cache-field.js +0 -78
  788. package/dist/esm/xlsx/xform/pivot-table/pivot-cache-records-xform.js +0 -234
  789. package/dist/esm/xlsx/xform/pivot-table/pivot-table-xform.js +0 -624
  790. package/dist/esm/xlsx/xform/sheet/cell-xform.js +0 -460
  791. package/dist/esm/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -259
  792. package/dist/esm/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -79
  793. package/dist/esm/xlsx/xform/sheet/col-xform.js +0 -75
  794. package/dist/esm/xlsx/xform/sheet/data-validations-xform.js +0 -282
  795. package/dist/esm/xlsx/xform/sheet/merges.js +0 -50
  796. package/dist/esm/xlsx/xform/sheet/row-xform.js +0 -152
  797. package/dist/esm/xlsx/xform/sheet/worksheet-xform.js +0 -517
  798. package/dist/esm/xlsx/xform/static-xform.js +0 -55
  799. package/dist/esm/xlsx/xform/style/alignment-xform.js +0 -152
  800. package/dist/esm/xlsx/xform/style/border-xform.js +0 -188
  801. package/dist/esm/xlsx/xform/style/styles-xform.js +0 -484
  802. package/dist/esm/xlsx/xform/table/filter-column-xform.js +0 -88
  803. package/dist/esm/xlsx/xlsx.base.js +0 -739
  804. package/dist/esm/xlsx/xlsx.browser.js +0 -159
  805. package/dist/esm/xlsx/xlsx.js +0 -214
  806. package/dist/types/csv/csv-core.d.ts +0 -201
  807. package/dist/types/csv/csv-stream.d.ts +0 -114
  808. package/dist/types/csv/csv.base.d.ts +0 -62
  809. package/dist/types/csv/csv.browser.d.ts +0 -33
  810. package/dist/types/csv/csv.d.ts +0 -105
  811. package/dist/types/doc/anchor.d.ts +0 -33
  812. package/dist/types/doc/cell.d.ts +0 -139
  813. package/dist/types/doc/column.d.ts +0 -121
  814. package/dist/types/doc/defined-names.d.ts +0 -37
  815. package/dist/types/doc/image.d.ts +0 -64
  816. package/dist/types/doc/modelcontainer.d.ts +0 -8
  817. package/dist/types/doc/pivot-table.d.ts +0 -152
  818. package/dist/types/doc/range.d.ts +0 -62
  819. package/dist/types/doc/row.d.ts +0 -114
  820. package/dist/types/doc/table.d.ts +0 -81
  821. package/dist/types/doc/workbook.base.d.ts +0 -111
  822. package/dist/types/doc/workbook.browser.d.ts +0 -38
  823. package/dist/types/doc/workbook.d.ts +0 -79
  824. package/dist/types/doc/worksheet.d.ts +0 -333
  825. package/dist/types/local.d.ts +0 -0
  826. package/dist/types/stream/xlsx/hyperlink-reader.d.ts +0 -27
  827. package/dist/types/stream/xlsx/workbook-reader.d.ts +0 -139
  828. package/dist/types/stream/xlsx/workbook-writer.d.ts +0 -139
  829. package/dist/types/stream/xlsx/worksheet-reader.d.ts +0 -55
  830. package/dist/types/stream/xlsx/worksheet-writer.d.ts +0 -139
  831. package/dist/types/utils/browser-buffer.d.ts +0 -28
  832. package/dist/types/utils/col-cache.d.ts +0 -36
  833. package/dist/types/utils/encryptor.browser.d.ts +0 -28
  834. package/dist/types/utils/encryptor.d.ts +0 -23
  835. package/dist/types/utils/iterate-stream.d.ts +0 -10
  836. package/dist/types/utils/sheet-utils.d.ts +0 -209
  837. package/dist/types/utils/stream-buf.browser.d.ts +0 -41
  838. package/dist/types/utils/stream-buf.d.ts +0 -2
  839. package/dist/types/utils/string-buf.d.ts +0 -20
  840. package/dist/types/utils/unzip/buffer-stream.d.ts +0 -9
  841. package/dist/types/utils/unzip/extract.d.ts +0 -94
  842. package/dist/types/utils/unzip/index.d.ts +0 -27
  843. package/dist/types/utils/unzip/noop-stream.d.ts +0 -13
  844. package/dist/types/utils/unzip/parse-buffer.d.ts +0 -24
  845. package/dist/types/utils/unzip/parse-datetime.d.ts +0 -12
  846. package/dist/types/utils/unzip/parse-extra-field.d.ts +0 -18
  847. package/dist/types/utils/unzip/parse.d.ts +0 -70
  848. package/dist/types/utils/unzip/pull-stream.d.ts +0 -24
  849. package/dist/types/utils/unzip/zip-parser.d.ts +0 -97
  850. package/dist/types/utils/zip/compress.base.d.ts +0 -45
  851. package/dist/types/utils/zip/compress.browser.d.ts +0 -63
  852. package/dist/types/utils/zip/compress.d.ts +0 -51
  853. package/dist/types/utils/zip/crc32.browser.d.ts +0 -52
  854. package/dist/types/utils/zip/crc32.d.ts +0 -55
  855. package/dist/types/utils/zip/index.d.ts +0 -52
  856. package/dist/types/utils/zip/streaming-zip.d.ts +0 -96
  857. package/dist/types/utils/zip/zip-builder.d.ts +0 -110
  858. package/dist/types/utils/zip-stream.browser.d.ts +0 -39
  859. package/dist/types/utils/zip-stream.d.ts +0 -33
  860. package/dist/types/xlsx/xform/base-xform.d.ts +0 -33
  861. package/dist/types/xlsx/xform/book/defined-name-xform.d.ts +0 -17
  862. package/dist/types/xlsx/xform/book/sheet-xform.d.ts +0 -14
  863. package/dist/types/xlsx/xform/book/workbook-calc-properties-xform.d.ts +0 -11
  864. package/dist/types/xlsx/xform/book/workbook-pivot-cache-xform.d.ts +0 -12
  865. package/dist/types/xlsx/xform/book/workbook-properties-xform.d.ts +0 -11
  866. package/dist/types/xlsx/xform/book/workbook-view-xform.d.ts +0 -17
  867. package/dist/types/xlsx/xform/book/workbook-xform.d.ts +0 -23
  868. package/dist/types/xlsx/xform/comment/comment-xform.d.ts +0 -28
  869. package/dist/types/xlsx/xform/comment/comments-xform.d.ts +0 -21
  870. package/dist/types/xlsx/xform/comment/style/vml-position-xform.d.ts +0 -16
  871. package/dist/types/xlsx/xform/comment/style/vml-protection-xform.d.ts +0 -14
  872. package/dist/types/xlsx/xform/comment/vml-anchor-xform.d.ts +0 -27
  873. package/dist/types/xlsx/xform/comment/vml-client-data-xform.d.ts +0 -35
  874. package/dist/types/xlsx/xform/comment/vml-notes-xform.d.ts +0 -24
  875. package/dist/types/xlsx/xform/comment/vml-shape-xform.d.ts +0 -25
  876. package/dist/types/xlsx/xform/comment/vml-textbox-xform.d.ts +0 -23
  877. package/dist/types/xlsx/xform/composite-xform.d.ts +0 -11
  878. package/dist/types/xlsx/xform/core/app-heading-pairs-xform.d.ts +0 -8
  879. package/dist/types/xlsx/xform/core/app-titles-of-parts-xform.d.ts +0 -8
  880. package/dist/types/xlsx/xform/core/app-xform.d.ts +0 -26
  881. package/dist/types/xlsx/xform/core/content-types-xform.d.ts +0 -11
  882. package/dist/types/xlsx/xform/core/core-xform.d.ts +0 -42
  883. package/dist/types/xlsx/xform/core/relationship-xform.d.ts +0 -14
  884. package/dist/types/xlsx/xform/core/relationships-xform.d.ts +0 -14
  885. package/dist/types/xlsx/xform/drawing/base-cell-anchor-xform.d.ts +0 -13
  886. package/dist/types/xlsx/xform/drawing/blip-fill-xform.d.ts +0 -16
  887. package/dist/types/xlsx/xform/drawing/blip-xform.d.ts +0 -14
  888. package/dist/types/xlsx/xform/drawing/c-nv-pic-pr-xform.d.ts +0 -9
  889. package/dist/types/xlsx/xform/drawing/c-nv-pr-xform.d.ts +0 -18
  890. package/dist/types/xlsx/xform/drawing/cell-position-xform.d.ts +0 -24
  891. package/dist/types/xlsx/xform/drawing/drawing-xform.d.ts +0 -24
  892. package/dist/types/xlsx/xform/drawing/ext-lst-xform.d.ts +0 -9
  893. package/dist/types/xlsx/xform/drawing/ext-xform.d.ts +0 -20
  894. package/dist/types/xlsx/xform/drawing/hlink-click-xform.d.ts +0 -11
  895. package/dist/types/xlsx/xform/drawing/nv-pic-pr-xform.d.ts +0 -15
  896. package/dist/types/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +0 -20
  897. package/dist/types/xlsx/xform/drawing/pic-xform.d.ts +0 -22
  898. package/dist/types/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +0 -20
  899. package/dist/types/xlsx/xform/list-xform.d.ts +0 -32
  900. package/dist/types/xlsx/xform/pivot-table/cache-field-xform.d.ts +0 -42
  901. package/dist/types/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +0 -60
  902. package/dist/types/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +0 -73
  903. package/dist/types/xlsx/xform/pivot-table/pivot-table-xform.d.ts +0 -119
  904. package/dist/types/xlsx/xform/sheet/auto-filter-xform.d.ts +0 -8
  905. package/dist/types/xlsx/xform/sheet/cell-xform.d.ts +0 -17
  906. package/dist/types/xlsx/xform/sheet/cf/cf-rule-xform.d.ts +0 -41
  907. package/dist/types/xlsx/xform/sheet/cf/cfvo-xform.d.ts +0 -8
  908. package/dist/types/xlsx/xform/sheet/cf/color-scale-xform.d.ts +0 -13
  909. package/dist/types/xlsx/xform/sheet/cf/conditional-formatting-xform.d.ts +0 -9
  910. package/dist/types/xlsx/xform/sheet/cf/conditional-formattings-xform.d.ts +0 -16
  911. package/dist/types/xlsx/xform/sheet/cf/databar-xform.d.ts +0 -13
  912. package/dist/types/xlsx/xform/sheet/cf/ext-lst-ref-xform.d.ts +0 -9
  913. package/dist/types/xlsx/xform/sheet/cf/formula-xform.d.ts +0 -9
  914. package/dist/types/xlsx/xform/sheet/cf/icon-set-xform.d.ts +0 -11
  915. package/dist/types/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.d.ts +0 -10
  916. package/dist/types/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.d.ts +0 -23
  917. package/dist/types/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.d.ts +0 -13
  918. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.d.ts +0 -16
  919. package/dist/types/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.d.ts +0 -13
  920. package/dist/types/xlsx/xform/sheet/cf-ext/databar-ext-xform.d.ts +0 -29
  921. package/dist/types/xlsx/xform/sheet/cf-ext/f-ext-xform.d.ts +0 -9
  922. package/dist/types/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.d.ts +0 -20
  923. package/dist/types/xlsx/xform/sheet/cf-ext/sqref-ext-xform.d.ts +0 -9
  924. package/dist/types/xlsx/xform/sheet/col-breaks-xform.d.ts +0 -16
  925. package/dist/types/xlsx/xform/sheet/col-xform.d.ts +0 -22
  926. package/dist/types/xlsx/xform/sheet/data-validations-xform.d.ts +0 -12
  927. package/dist/types/xlsx/xform/sheet/dimension-xform.d.ts +0 -10
  928. package/dist/types/xlsx/xform/sheet/drawing-xform.d.ts +0 -12
  929. package/dist/types/xlsx/xform/sheet/ext-lst-xform.d.ts +0 -16
  930. package/dist/types/xlsx/xform/sheet/header-footer-xform.d.ts +0 -20
  931. package/dist/types/xlsx/xform/sheet/hyperlink-xform.d.ts +0 -16
  932. package/dist/types/xlsx/xform/sheet/merge-cell-xform.d.ts +0 -9
  933. package/dist/types/xlsx/xform/sheet/outline-properties-xform.d.ts +0 -13
  934. package/dist/types/xlsx/xform/sheet/page-breaks-xform.d.ts +0 -14
  935. package/dist/types/xlsx/xform/sheet/page-margins-xform.d.ts +0 -17
  936. package/dist/types/xlsx/xform/sheet/page-setup-properties-xform.d.ts +0 -12
  937. package/dist/types/xlsx/xform/sheet/page-setup-xform.d.ts +0 -27
  938. package/dist/types/xlsx/xform/sheet/picture-xform.d.ts +0 -12
  939. package/dist/types/xlsx/xform/sheet/print-options-xform.d.ts +0 -15
  940. package/dist/types/xlsx/xform/sheet/row-breaks-xform.d.ts +0 -10
  941. package/dist/types/xlsx/xform/sheet/row-xform.d.ts +0 -37
  942. package/dist/types/xlsx/xform/sheet/sheet-format-properties-xform.d.ts +0 -16
  943. package/dist/types/xlsx/xform/sheet/sheet-properties-xform.d.ts +0 -19
  944. package/dist/types/xlsx/xform/sheet/sheet-protection-xform.d.ts +0 -31
  945. package/dist/types/xlsx/xform/sheet/sheet-view-xform.d.ts +0 -32
  946. package/dist/types/xlsx/xform/sheet/table-part-xform.d.ts +0 -12
  947. package/dist/types/xlsx/xform/sheet/worksheet-xform.d.ts +0 -21
  948. package/dist/types/xlsx/xform/simple/boolean-xform.d.ts +0 -15
  949. package/dist/types/xlsx/xform/simple/date-xform.d.ts +0 -22
  950. package/dist/types/xlsx/xform/simple/float-xform.d.ts +0 -18
  951. package/dist/types/xlsx/xform/simple/integer-xform.d.ts +0 -20
  952. package/dist/types/xlsx/xform/simple/string-xform.d.ts +0 -18
  953. package/dist/types/xlsx/xform/static-xform.d.ts +0 -17
  954. package/dist/types/xlsx/xform/strings/phonetic-text-xform.d.ts +0 -20
  955. package/dist/types/xlsx/xform/strings/rich-text-xform.d.ts +0 -25
  956. package/dist/types/xlsx/xform/strings/shared-string-xform.d.ts +0 -17
  957. package/dist/types/xlsx/xform/strings/shared-strings-xform.d.ts +0 -27
  958. package/dist/types/xlsx/xform/strings/text-xform.d.ts +0 -10
  959. package/dist/types/xlsx/xform/style/alignment-xform.d.ts +0 -18
  960. package/dist/types/xlsx/xform/style/border-xform.d.ts +0 -49
  961. package/dist/types/xlsx/xform/style/color-xform.d.ts +0 -17
  962. package/dist/types/xlsx/xform/style/dxf-xform.d.ts +0 -23
  963. package/dist/types/xlsx/xform/style/fill-xform.d.ts +0 -85
  964. package/dist/types/xlsx/xform/style/font-xform.d.ts +0 -35
  965. package/dist/types/xlsx/xform/style/numfmt-xform.d.ts +0 -18
  966. package/dist/types/xlsx/xform/style/protection-xform.d.ts +0 -13
  967. package/dist/types/xlsx/xform/style/style-xform.d.ts +0 -30
  968. package/dist/types/xlsx/xform/style/styles-xform.d.ts +0 -46
  969. package/dist/types/xlsx/xform/style/underline-xform.d.ts +0 -14
  970. package/dist/types/xlsx/xform/table/auto-filter-xform.d.ts +0 -21
  971. package/dist/types/xlsx/xform/table/custom-filter-xform.d.ts +0 -15
  972. package/dist/types/xlsx/xform/table/filter-column-xform.d.ts +0 -24
  973. package/dist/types/xlsx/xform/table/filter-xform.d.ts +0 -14
  974. package/dist/types/xlsx/xform/table/table-column-xform.d.ts +0 -21
  975. package/dist/types/xlsx/xform/table/table-style-info-xform.d.ts +0 -18
  976. package/dist/types/xlsx/xform/table/table-xform.d.ts +0 -33
  977. package/dist/types/xlsx/xlsx.base.d.ts +0 -134
  978. package/dist/types/xlsx/xlsx.browser.d.ts +0 -31
  979. package/dist/types/xlsx/xlsx.d.ts +0 -26
  980. /package/dist/cjs/{doc → modules/excel}/enums.js +0 -0
  981. /package/dist/cjs/{types.js → modules/excel/types.js} +0 -0
  982. /package/dist/cjs/{utils → modules/excel/utils}/col-cache.js +0 -0
  983. /package/dist/cjs/{utils → modules/excel/utils}/copy-style.js +0 -0
  984. /package/dist/cjs/{utils → modules/excel/utils}/iterate-stream.js +0 -0
  985. /package/dist/cjs/{utils → modules/excel/utils}/shared-strings.js +0 -0
  986. /package/dist/cjs/{xlsx → modules/excel/xlsx}/defaultnumformats.js +0 -0
  987. /package/dist/cjs/{xlsx → modules/excel/xlsx}/rel-type.js +0 -0
  988. /package/dist/cjs/{xlsx → modules/excel/xlsx}/xform/drawing/sp-pr.js +0 -0
  989. /package/dist/cjs/{xlsx → modules/excel/xlsx}/xml/theme1.js +0 -0
  990. /package/dist/esm/{utils/unzip → modules/archive}/extract.js +0 -0
  991. /package/dist/esm/{doc → modules/excel}/enums.js +0 -0
  992. /package/dist/esm/{types.js → modules/excel/types.js} +0 -0
  993. /package/dist/esm/{utils → modules/excel/utils}/cell-matrix.js +0 -0
  994. /package/dist/esm/{utils → modules/excel/utils}/col-cache.js +0 -0
  995. /package/dist/esm/{utils → modules/excel/utils}/copy-style.js +0 -0
  996. /package/dist/esm/{utils → modules/excel/utils}/iterate-stream.js +0 -0
  997. /package/dist/esm/{utils → modules/excel/utils}/shared-formula.js +0 -0
  998. /package/dist/esm/{utils → modules/excel/utils}/shared-strings.js +0 -0
  999. /package/dist/esm/{xlsx → modules/excel/xlsx}/defaultnumformats.js +0 -0
  1000. /package/dist/esm/{xlsx → modules/excel/xlsx}/rel-type.js +0 -0
  1001. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/book/defined-name-xform.js +0 -0
  1002. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/book/workbook-calc-properties-xform.js +0 -0
  1003. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/book/workbook-pivot-cache-xform.js +0 -0
  1004. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/book/workbook-properties-xform.js +0 -0
  1005. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/book/workbook-view-xform.js +0 -0
  1006. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/book/workbook-xform.js +0 -0
  1007. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/comment/comment-xform.js +0 -0
  1008. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/comment/comments-xform.js +0 -0
  1009. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/comment/style/vml-position-xform.js +0 -0
  1010. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/comment/style/vml-protection-xform.js +0 -0
  1011. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/comment/vml-anchor-xform.js +0 -0
  1012. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/comment/vml-client-data-xform.js +0 -0
  1013. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/comment/vml-notes-xform.js +0 -0
  1014. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/comment/vml-shape-xform.js +0 -0
  1015. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/comment/vml-textbox-xform.js +0 -0
  1016. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/composite-xform.js +0 -0
  1017. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/core/app-heading-pairs-xform.js +0 -0
  1018. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/core/app-titles-of-parts-xform.js +0 -0
  1019. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/core/app-xform.js +0 -0
  1020. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/core/core-xform.js +0 -0
  1021. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/core/relationship-xform.js +0 -0
  1022. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/core/relationships-xform.js +0 -0
  1023. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/base-cell-anchor-xform.js +0 -0
  1024. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/blip-fill-xform.js +0 -0
  1025. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/blip-xform.js +0 -0
  1026. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/c-nv-pic-pr-xform.js +0 -0
  1027. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/c-nv-pr-xform.js +0 -0
  1028. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/cell-position-xform.js +0 -0
  1029. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/drawing-xform.js +0 -0
  1030. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/ext-lst-xform.js +0 -0
  1031. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/ext-xform.js +0 -0
  1032. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/hlink-click-xform.js +0 -0
  1033. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/nv-pic-pr-xform.js +0 -0
  1034. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/one-cell-anchor-xform.js +0 -0
  1035. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/pic-xform.js +0 -0
  1036. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/sp-pr.js +0 -0
  1037. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/drawing/two-cell-anchor-xform.js +0 -0
  1038. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/list-xform.js +0 -0
  1039. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/pivot-table/pivot-cache-definition-xform.js +0 -0
  1040. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/auto-filter-xform.js +0 -0
  1041. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf/cfvo-xform.js +0 -0
  1042. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf/color-scale-xform.js +0 -0
  1043. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf/conditional-formatting-xform.js +0 -0
  1044. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf/conditional-formattings-xform.js +0 -0
  1045. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf/databar-xform.js +0 -0
  1046. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf/ext-lst-ref-xform.js +0 -0
  1047. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf/formula-xform.js +0 -0
  1048. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf/icon-set-xform.js +0 -0
  1049. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -0
  1050. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -0
  1051. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -0
  1052. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -0
  1053. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf-ext/databar-ext-xform.js +0 -0
  1054. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf-ext/f-ext-xform.js +0 -0
  1055. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -0
  1056. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/cf-ext/sqref-ext-xform.js +0 -0
  1057. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/col-breaks-xform.js +0 -0
  1058. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/dimension-xform.js +0 -0
  1059. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/drawing-xform.js +0 -0
  1060. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/ext-lst-xform.js +0 -0
  1061. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/header-footer-xform.js +0 -0
  1062. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/hyperlink-xform.js +0 -0
  1063. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/merge-cell-xform.js +0 -0
  1064. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/outline-properties-xform.js +0 -0
  1065. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/page-breaks-xform.js +0 -0
  1066. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/page-margins-xform.js +0 -0
  1067. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/page-setup-properties-xform.js +0 -0
  1068. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/page-setup-xform.js +0 -0
  1069. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/picture-xform.js +0 -0
  1070. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/print-options-xform.js +0 -0
  1071. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/row-breaks-xform.js +0 -0
  1072. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/sheet-format-properties-xform.js +0 -0
  1073. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/sheet-properties-xform.js +0 -0
  1074. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/sheet-protection-xform.js +0 -0
  1075. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/sheet-view-xform.js +0 -0
  1076. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/sheet/table-part-xform.js +0 -0
  1077. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/simple/boolean-xform.js +0 -0
  1078. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/simple/date-xform.js +0 -0
  1079. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/simple/float-xform.js +0 -0
  1080. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/simple/integer-xform.js +0 -0
  1081. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/simple/string-xform.js +0 -0
  1082. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/strings/phonetic-text-xform.js +0 -0
  1083. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/strings/rich-text-xform.js +0 -0
  1084. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/strings/shared-string-xform.js +0 -0
  1085. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/strings/shared-strings-xform.js +0 -0
  1086. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/strings/text-xform.js +0 -0
  1087. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/style/color-xform.js +0 -0
  1088. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/style/dxf-xform.js +0 -0
  1089. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/style/fill-xform.js +0 -0
  1090. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/style/font-xform.js +0 -0
  1091. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/style/numfmt-xform.js +0 -0
  1092. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/style/protection-xform.js +0 -0
  1093. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/style/style-xform.js +0 -0
  1094. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/style/underline-xform.js +0 -0
  1095. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/table/auto-filter-xform.js +0 -0
  1096. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/table/custom-filter-xform.js +0 -0
  1097. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/table/filter-xform.js +0 -0
  1098. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/table/table-column-xform.js +0 -0
  1099. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/table/table-style-info-xform.js +0 -0
  1100. /package/dist/esm/{xlsx → modules/excel/xlsx}/xform/table/table-xform.js +0 -0
  1101. /package/dist/esm/{xlsx → modules/excel/xlsx}/xml/theme1.js +0 -0
  1102. /package/dist/types/{utils/zip → modules/archive}/deflate-fallback.d.ts +0 -0
  1103. /package/dist/types/{doc → modules/excel}/data-validations.d.ts +0 -0
  1104. /package/dist/types/{doc → modules/excel}/enums.d.ts +0 -0
  1105. /package/dist/types/{doc → modules/excel}/note.d.ts +0 -0
  1106. /package/dist/types/{stream/xlsx → modules/excel/stream}/sheet-comments-writer.d.ts +0 -0
  1107. /package/dist/types/{stream/xlsx → modules/excel/stream}/sheet-rels-writer.d.ts +0 -0
  1108. /package/dist/types/{types.d.ts → modules/excel/types.d.ts} +0 -0
  1109. /package/dist/types/{utils → modules/excel/utils}/cell-format.d.ts +0 -0
  1110. /package/dist/types/{utils → modules/excel/utils}/cell-matrix.d.ts +0 -0
  1111. /package/dist/types/{utils → modules/excel/utils}/copy-style.d.ts +0 -0
  1112. /package/dist/types/{utils → modules/excel/utils}/parse-sax.d.ts +0 -0
  1113. /package/dist/types/{utils → modules/excel/utils}/shared-formula.d.ts +0 -0
  1114. /package/dist/types/{utils → modules/excel/utils}/shared-strings.d.ts +0 -0
  1115. /package/dist/types/{utils → modules/excel/utils}/under-dash.d.ts +0 -0
  1116. /package/dist/types/{utils → modules/excel/utils}/xml-stream.d.ts +0 -0
  1117. /package/dist/types/{xlsx → modules/excel/xlsx}/defaultnumformats.d.ts +0 -0
  1118. /package/dist/types/{xlsx → modules/excel/xlsx}/rel-type.d.ts +0 -0
  1119. /package/dist/types/{xlsx → modules/excel/xlsx}/xform/drawing/sp-pr.d.ts +0 -0
  1120. /package/dist/types/{xlsx → modules/excel/xlsx}/xform/pivot-table/cache-field.d.ts +0 -0
  1121. /package/dist/types/{xlsx → modules/excel/xlsx}/xform/sheet/merges.d.ts +0 -0
  1122. /package/dist/types/{xlsx → modules/excel/xlsx}/xml/theme1.d.ts +0 -0
@@ -0,0 +1,3267 @@
1
+ /**
2
+ * Native Stream Implementation - Browser
3
+ *
4
+ * Uses Web Streams API (ReadableStream, WritableStream, TransformStream)
5
+ * for true native streaming in browsers.
6
+ *
7
+ * Supported browsers:
8
+ * - Chrome >= 89
9
+ * - Firefox >= 102
10
+ * - Safari >= 14.1
11
+ * - Edge >= 89
12
+ */
13
+ import { EventEmitter } from "./event-emitter.js";
14
+ import { PullStream as StandalonePullStream } from "./pull-stream.js";
15
+ import { BufferedStream as StandaloneBufferedStream, StringChunk as StandaloneStringChunk, BufferChunk as StandaloneBufferChunk } from "./buffered-stream.js";
16
+ import { concatUint8Arrays, getTextDecoder, textDecoder } from "./shared.js";
17
+ // =============================================================================
18
+ // Readable Stream Wrapper
19
+ // =============================================================================
20
+ /**
21
+ * A wrapper around Web ReadableStream that provides Node.js-like API
22
+ */
23
+ export class Readable extends EventEmitter {
24
+ constructor(options) {
25
+ super();
26
+ this._reader = null;
27
+ this._buffer = [];
28
+ this._bufferIndex = 0;
29
+ this._unshiftBuffer = [];
30
+ this._bufferSize = 0;
31
+ this._reading = false;
32
+ this._ended = false;
33
+ this._destroyed = false;
34
+ this._errored = null;
35
+ this._closed = false;
36
+ this._paused = true;
37
+ this._flowing = false;
38
+ this._pipeTo = [];
39
+ this._pipeListeners = new Map();
40
+ this._encoding = null;
41
+ this._decoder = null;
42
+ this._didRead = false;
43
+ this._aborted = false;
44
+ // Whether this stream uses push() mode (true) or Web Stream mode (false)
45
+ this._pushMode = false;
46
+ // Whether this stream was created from an external Web Stream (true) or is controllable (false)
47
+ this._webStreamMode = false;
48
+ this.objectMode = options?.objectMode ?? false;
49
+ this.readableHighWaterMark = options?.highWaterMark ?? 16384;
50
+ this.autoDestroy = options?.autoDestroy ?? true;
51
+ this.emitClose = options?.emitClose ?? true;
52
+ // Store user-provided read function
53
+ if (options?.read) {
54
+ this._read = options.read.bind(this);
55
+ this._pushMode = true; // User will call push()
56
+ }
57
+ if (options?.stream) {
58
+ this._stream = options.stream;
59
+ this._webStreamMode = true; // Created from external Web Stream
60
+ }
61
+ else {
62
+ // Create a controllable stream
63
+ let controller;
64
+ this._stream = new ReadableStream({
65
+ start: ctrl => {
66
+ controller = ctrl;
67
+ },
68
+ pull: async () => {
69
+ // Signal that more data can be pushed
70
+ this.emit("drain");
71
+ },
72
+ cancel: reason => {
73
+ this._ended = true;
74
+ this._aborted = true;
75
+ if (this.emitClose) {
76
+ this.emit("close");
77
+ }
78
+ }
79
+ });
80
+ // Expose controller for push/end
81
+ this._controller = controller;
82
+ }
83
+ }
84
+ /**
85
+ * Create a Readable from an iterable (static factory method)
86
+ */
87
+ static from(iterable, options) {
88
+ const readable = new Readable({ ...options, objectMode: options?.objectMode ?? true });
89
+ (async () => {
90
+ try {
91
+ for await (const chunk of iterable) {
92
+ if (!readable.push(chunk)) {
93
+ // Backpressure
94
+ await new Promise(resolve => setTimeout(resolve, 0));
95
+ }
96
+ }
97
+ readable.push(null);
98
+ }
99
+ catch (err) {
100
+ readable.destroy(err);
101
+ }
102
+ })();
103
+ return readable;
104
+ }
105
+ /**
106
+ * Check if a stream has been disturbed (read from)
107
+ */
108
+ static isDisturbed(stream) {
109
+ return stream._didRead || stream._ended || stream._destroyed;
110
+ }
111
+ /**
112
+ * Convert a Web ReadableStream to Node.js Readable
113
+ */
114
+ static fromWeb(webStream, options) {
115
+ return new Readable({ ...options, stream: webStream });
116
+ }
117
+ /**
118
+ * Convert a Node.js Readable to Web ReadableStream
119
+ */
120
+ static toWeb(nodeStream) {
121
+ return nodeStream.webStream;
122
+ }
123
+ /**
124
+ * Push data to the stream (when using controllable stream)
125
+ */
126
+ push(chunk) {
127
+ if (this._destroyed) {
128
+ return false;
129
+ }
130
+ // Mark as push mode when push() is called
131
+ this._pushMode = true;
132
+ const controller = this._controller;
133
+ if (chunk === null) {
134
+ // Prevent duplicate end handling
135
+ if (this._ended) {
136
+ return false;
137
+ }
138
+ this._ended = true;
139
+ if (controller) {
140
+ try {
141
+ controller.close();
142
+ }
143
+ catch {
144
+ // Controller may already be closed
145
+ }
146
+ }
147
+ this.emit("end");
148
+ // Note: Don't call destroy() here, let the stream be consumed naturally
149
+ // The reader will return done:true when it finishes reading
150
+ return false;
151
+ }
152
+ if (this._flowing) {
153
+ // In flowing mode, emit data directly without buffering or enqueueing
154
+ // const chunkStr = chunk instanceof Uint8Array ? new TextDecoder().decode(chunk.slice(0, 50)) : String(chunk).slice(0, 50);
155
+ // console.log(`[Readable#${this._id}.push FLOWING] emit data size:${(chunk as any).length || (chunk as any).byteLength} start:"${chunkStr}"`);
156
+ this.emit("data", chunk);
157
+ // Check if stream was paused during emit (backpressure from consumer)
158
+ if (!this._flowing) {
159
+ return false;
160
+ }
161
+ // After emitting data, call _read again if available (Node.js behavior)
162
+ if (this._read && !this._ended) {
163
+ queueMicrotask(() => {
164
+ if (this._flowing && !this._ended && !this._destroyed) {
165
+ this._read(this.readableHighWaterMark);
166
+ }
167
+ });
168
+ }
169
+ // In flowing mode, return true (no backpressure since data is immediately consumed)
170
+ return true;
171
+ }
172
+ else {
173
+ // In paused mode, buffer for later
174
+ const wasEmpty = this._bufferedLength() === 0;
175
+ // const chunkStrBuf = chunk instanceof Uint8Array ? new TextDecoder().decode((chunk as Uint8Array).slice(0, 50)) : String(chunk).slice(0, 50);
176
+ // console.log(`[Readable#${this._id}.push PAUSED->BUFFER] buffer len:${this._buffer.length}->${this._buffer.length + 1} start:"${chunkStrBuf}"`);
177
+ this._buffer.push(chunk);
178
+ if (!this.objectMode) {
179
+ this._bufferSize += this._getChunkSize(chunk);
180
+ }
181
+ // NOTE: Do NOT enqueue to Web Stream controller here!
182
+ // In push mode, _buffer is the only source of data for data events.
183
+ // Web Stream is only used for async iteration when not in push mode.
184
+ // Enqueueing here would cause data duplication when _startReading is also running.
185
+ // Emit readable event when buffer goes from empty to having data
186
+ if (wasEmpty) {
187
+ queueMicrotask(() => this.emit("readable"));
188
+ }
189
+ // Return false if buffer exceeds high water mark (backpressure signal)
190
+ // Fast path for object mode - just count items
191
+ if (this.objectMode) {
192
+ return this._bufferedLength() < this.readableHighWaterMark;
193
+ }
194
+ // For binary mode, use tracked buffer size (O(1))
195
+ return this._bufferSize < this.readableHighWaterMark;
196
+ }
197
+ }
198
+ /**
199
+ * Put a chunk back at the front of the buffer
200
+ * Note: unshift is allowed even after end, as it's used to put back already read data
201
+ */
202
+ unshift(chunk) {
203
+ if (this._destroyed) {
204
+ return;
205
+ }
206
+ this._bufferUnshift(chunk);
207
+ if (!this.objectMode) {
208
+ this._bufferSize += this._getChunkSize(chunk);
209
+ }
210
+ }
211
+ /**
212
+ * Read data from the stream
213
+ */
214
+ read(size) {
215
+ this._didRead = true;
216
+ if (this._bufferedLength() > 0) {
217
+ if (this.objectMode || size === undefined) {
218
+ const chunk = this._bufferShift();
219
+ if (!this.objectMode) {
220
+ this._bufferSize -= this._getChunkSize(chunk);
221
+ }
222
+ return this._applyEncoding(chunk);
223
+ }
224
+ // For binary mode, handle size
225
+ const chunk = this._bufferShift();
226
+ if (!this.objectMode) {
227
+ this._bufferSize -= this._getChunkSize(chunk);
228
+ }
229
+ return this._applyEncoding(chunk);
230
+ }
231
+ return null;
232
+ }
233
+ _bufferedLength() {
234
+ return this._unshiftBuffer.length + (this._buffer.length - this._bufferIndex);
235
+ }
236
+ _bufferPeek() {
237
+ const unshiftLen = this._unshiftBuffer.length;
238
+ if (unshiftLen > 0) {
239
+ return this._unshiftBuffer[unshiftLen - 1];
240
+ }
241
+ return this._bufferIndex < this._buffer.length ? this._buffer[this._bufferIndex] : null;
242
+ }
243
+ _bufferShift() {
244
+ if (this._unshiftBuffer.length > 0) {
245
+ return this._unshiftBuffer.pop();
246
+ }
247
+ const chunk = this._buffer[this._bufferIndex++];
248
+ // Fast reset when emptied
249
+ if (this._bufferIndex === this._buffer.length) {
250
+ this._buffer.length = 0;
251
+ this._bufferIndex = 0;
252
+ return chunk;
253
+ }
254
+ // Occasionally compact to avoid unbounded growth of the unused prefix
255
+ if (this._bufferIndex > 1024 && this._bufferIndex * 2 > this._buffer.length) {
256
+ this._buffer = this._buffer.slice(this._bufferIndex);
257
+ this._bufferIndex = 0;
258
+ }
259
+ return chunk;
260
+ }
261
+ _bufferUnshift(chunk) {
262
+ if (this._bufferIndex === 0) {
263
+ // Avoid O(n) Array.unshift() by using a small front stack.
264
+ // Semantics: last unshifted chunk is returned first.
265
+ this._unshiftBuffer.push(chunk);
266
+ return;
267
+ }
268
+ this._bufferIndex--;
269
+ this._buffer[this._bufferIndex] = chunk;
270
+ }
271
+ _getChunkSize(chunk) {
272
+ // Keep semantics aligned with previous implementation:
273
+ // - Uint8Array counts by byteLength
274
+ // - other types count as 1
275
+ return chunk instanceof Uint8Array ? chunk.byteLength : 1;
276
+ }
277
+ /**
278
+ * Set encoding for string output
279
+ */
280
+ setEncoding(encoding) {
281
+ this._encoding = encoding;
282
+ // Fast path: reuse cached utf-8 decoder; otherwise lazy-create on first decode.
283
+ if (encoding === "utf-8" || encoding === "utf8") {
284
+ this._decoder = textDecoder;
285
+ }
286
+ else {
287
+ this._decoder = null;
288
+ }
289
+ return this;
290
+ }
291
+ _applyEncoding(chunk) {
292
+ if (this._encoding && chunk instanceof Uint8Array) {
293
+ // Use cached decoder instances (module-level for utf-8, cached per encoding otherwise).
294
+ if (!this._decoder) {
295
+ this._decoder = getTextDecoder(this._encoding);
296
+ }
297
+ return this._decoder.decode(chunk);
298
+ }
299
+ return chunk;
300
+ }
301
+ /**
302
+ * Wrap an old-style stream
303
+ */
304
+ wrap(stream) {
305
+ stream.on("data", (chunk) => {
306
+ if (!this.push(chunk)) {
307
+ stream.pause();
308
+ }
309
+ });
310
+ stream.on("end", () => this.push(null));
311
+ stream.on("error", (err) => this.destroy(err));
312
+ stream.on("close", () => this.destroy());
313
+ return this;
314
+ }
315
+ /**
316
+ * Pause the stream
317
+ */
318
+ pause() {
319
+ this._paused = true;
320
+ this._flowing = false;
321
+ return this;
322
+ }
323
+ /**
324
+ * Resume the stream
325
+ */
326
+ resume() {
327
+ this._paused = false;
328
+ this._flowing = true;
329
+ // Emit any buffered data first
330
+ while (this._bufferedLength() > 0 && this._flowing) {
331
+ const chunk = this._bufferShift();
332
+ if (!this.objectMode) {
333
+ this._bufferSize -= this._getChunkSize(chunk);
334
+ }
335
+ this.emit("data", chunk);
336
+ }
337
+ // If already ended, emit end event
338
+ if (this._ended && this._bufferedLength() === 0) {
339
+ this.emit("end");
340
+ }
341
+ else if (this._read) {
342
+ // Call user-provided read function asynchronously
343
+ // This allows multiple pipe() calls to register before data flows
344
+ queueMicrotask(() => {
345
+ if (this._flowing && !this._ended && !this._destroyed) {
346
+ this._read(this.readableHighWaterMark);
347
+ }
348
+ });
349
+ }
350
+ else if (this._webStreamMode && !this._pushMode) {
351
+ // Only start reading from underlying Web Stream if:
352
+ // 1. Stream was created from external Web Stream (_webStreamMode)
353
+ // 2. Not in push mode (no one called push() yet)
354
+ this._startReading();
355
+ }
356
+ return this;
357
+ }
358
+ /**
359
+ * Override on() to automatically resume when 'data' listener is added
360
+ * This matches Node.js behavior where adding a 'data' listener puts
361
+ * the stream into flowing mode.
362
+ */
363
+ on(event, listener) {
364
+ super.on(event, listener);
365
+ // When a 'data' listener is added, switch to flowing mode
366
+ if (event === "data") {
367
+ this.resume();
368
+ }
369
+ return this;
370
+ }
371
+ /**
372
+ * Check if paused
373
+ */
374
+ isPaused() {
375
+ return this._paused;
376
+ }
377
+ /**
378
+ * Pipe to a writable stream, transform stream, or duplex stream
379
+ */
380
+ pipe(destination) {
381
+ // IMPORTANT:
382
+ // Do not rely on `instanceof` here.
383
+ // In bundled/minified builds, multiple copies of this module can exist,
384
+ // causing `instanceof Transform/Writable/Duplex` to fail even when the object
385
+ // is a valid destination.
386
+ const dest = destination;
387
+ // Get the actual writable target.
388
+ // Prefer internal `_writable` (Transform/Duplex wrappers), else treat the destination as writable-like.
389
+ const candidate = dest?._writable ?? dest;
390
+ const hasWrite = typeof candidate?.write === "function";
391
+ const hasEnd = typeof candidate?.end === "function";
392
+ const hasOn = typeof candidate?.on === "function";
393
+ const hasOnce = typeof candidate?.once === "function";
394
+ const hasOff = typeof candidate?.off === "function";
395
+ if (!hasWrite || !hasEnd || (!hasOnce && !hasOn) || (!hasOff && !candidate?.removeListener)) {
396
+ throw new Error("Readable.pipe: invalid destination");
397
+ }
398
+ const target = candidate;
399
+ this._pipeTo.push(target);
400
+ // Create listeners that we can later remove
401
+ const dataListener = (chunk) => {
402
+ const canWrite = target.write(chunk);
403
+ if (!canWrite) {
404
+ this.pause();
405
+ if (typeof target.once === "function") {
406
+ target.once("drain", () => this.resume());
407
+ }
408
+ else {
409
+ const resumeOnce = () => {
410
+ if (typeof target.off === "function") {
411
+ target.off("drain", resumeOnce);
412
+ }
413
+ else if (typeof target.removeListener === "function") {
414
+ target.removeListener("drain", resumeOnce);
415
+ }
416
+ this.resume();
417
+ };
418
+ target.on("drain", resumeOnce);
419
+ }
420
+ }
421
+ };
422
+ const endListener = () => {
423
+ target.end();
424
+ };
425
+ const errorListener = (err) => {
426
+ if (typeof target.destroy === "function") {
427
+ target.destroy(err);
428
+ }
429
+ else {
430
+ // Best-effort: forward error to the destination if it supports events.
431
+ target.emit?.("error", err);
432
+ }
433
+ };
434
+ // Store listeners for later removal in unpipe
435
+ this._pipeListeners.set(target, {
436
+ data: dataListener,
437
+ end: endListener,
438
+ error: errorListener
439
+ });
440
+ this.on("data", dataListener);
441
+ this.once("end", endListener);
442
+ this.once("error", errorListener);
443
+ this.resume();
444
+ return destination;
445
+ }
446
+ /**
447
+ * Unpipe from destination
448
+ */
449
+ unpipe(destination) {
450
+ if (destination) {
451
+ const idx = this._pipeTo.indexOf(destination);
452
+ if (idx !== -1) {
453
+ this._pipeTo.splice(idx, 1);
454
+ }
455
+ // Remove the listeners
456
+ const listeners = this._pipeListeners.get(destination);
457
+ if (listeners) {
458
+ this.off("data", listeners.data);
459
+ this.off("end", listeners.end);
460
+ this.off("error", listeners.error);
461
+ this._pipeListeners.delete(destination);
462
+ }
463
+ }
464
+ else {
465
+ // Unpipe all
466
+ for (const target of this._pipeTo) {
467
+ const listeners = this._pipeListeners.get(target);
468
+ if (listeners) {
469
+ this.off("data", listeners.data);
470
+ this.off("end", listeners.end);
471
+ this.off("error", listeners.error);
472
+ this._pipeListeners.delete(target);
473
+ }
474
+ }
475
+ this._pipeTo = [];
476
+ }
477
+ // Pause the stream after unpipe
478
+ this.pause();
479
+ return this;
480
+ }
481
+ /**
482
+ * Destroy the stream
483
+ */
484
+ destroy(error) {
485
+ if (this._destroyed) {
486
+ return this;
487
+ }
488
+ this._destroyed = true;
489
+ this._ended = true;
490
+ if (error) {
491
+ this._errored = error;
492
+ this.emit("error", error);
493
+ }
494
+ if (this._reader) {
495
+ this._reader.cancel().catch(() => { });
496
+ }
497
+ this._closed = true;
498
+ this.emit("close");
499
+ return this;
500
+ }
501
+ /**
502
+ * Get the underlying Web ReadableStream
503
+ */
504
+ get webStream() {
505
+ return this._stream;
506
+ }
507
+ get readable() {
508
+ return !this._destroyed && !this._ended;
509
+ }
510
+ get readableEnded() {
511
+ return this._ended;
512
+ }
513
+ get readableLength() {
514
+ return this._bufferedLength();
515
+ }
516
+ /** Whether the stream has been destroyed */
517
+ get destroyed() {
518
+ return this._destroyed;
519
+ }
520
+ /** The error that destroyed the stream, or null */
521
+ get errored() {
522
+ return this._errored;
523
+ }
524
+ /** Whether the stream has been closed */
525
+ get closed() {
526
+ return this._closed;
527
+ }
528
+ /** Whether the stream is in flowing mode */
529
+ get readableFlowing() {
530
+ if (!this._paused && !this._ended) {
531
+ return this._flowing;
532
+ }
533
+ return this._flowing ? true : null;
534
+ }
535
+ /** Whether the stream was aborted */
536
+ get readableAborted() {
537
+ return this._aborted;
538
+ }
539
+ /** Whether read() has ever been called */
540
+ get readableDidRead() {
541
+ return this._didRead;
542
+ }
543
+ /** Current encoding or null */
544
+ get readableEncoding() {
545
+ return this._encoding;
546
+ }
547
+ /** Returns array of objects containing info about buffered data */
548
+ get readableObjectMode() {
549
+ return this.objectMode;
550
+ }
551
+ /**
552
+ * Get the internal buffer state (for debugging)
553
+ * Returns array of objects with length and chunk info
554
+ */
555
+ get readableBuffer() {
556
+ return {
557
+ length: this._bufferedLength(),
558
+ head: this._bufferPeek()
559
+ };
560
+ }
561
+ async _startReading() {
562
+ if (this._reading || this._destroyed || !this._flowing) {
563
+ return;
564
+ }
565
+ this._reading = true;
566
+ try {
567
+ if (!this._reader) {
568
+ this._reader = this._stream.getReader();
569
+ }
570
+ while (this._flowing && !this._destroyed && !this._pushMode) {
571
+ const { done, value } = await this._reader.read();
572
+ // Check _pushMode again after async read - if push() was called, stop reading
573
+ if (this._pushMode) {
574
+ break;
575
+ }
576
+ if (done) {
577
+ this._ended = true;
578
+ this.emit("end");
579
+ break;
580
+ }
581
+ if (value !== undefined) {
582
+ // In flowing mode, emit data directly without buffering
583
+ // Only buffer if not flowing (paused mode)
584
+ if (this._flowing) {
585
+ this.emit("data", value);
586
+ }
587
+ else {
588
+ this._buffer.push(value);
589
+ if (!this.objectMode) {
590
+ this._bufferSize += this._getChunkSize(value);
591
+ }
592
+ }
593
+ }
594
+ }
595
+ }
596
+ catch (err) {
597
+ this.emit("error", err);
598
+ }
599
+ finally {
600
+ this._reading = false;
601
+ }
602
+ }
603
+ /**
604
+ * Async iterator support
605
+ * Uses Web Stream reader for non-push mode, event-based for push mode
606
+ */
607
+ async *[Symbol.asyncIterator]() {
608
+ // First yield any buffered data
609
+ while (this._bufferedLength() > 0) {
610
+ const chunk = this._bufferShift();
611
+ if (!this.objectMode) {
612
+ this._bufferSize -= this._getChunkSize(chunk);
613
+ }
614
+ yield chunk;
615
+ }
616
+ // If already ended, we're done
617
+ if (this._ended) {
618
+ return;
619
+ }
620
+ // For controllable streams (not created from external Web Stream),
621
+ // use event-based iteration since data comes from push() calls
622
+ if (!this._webStreamMode) {
623
+ // Create a promise-based queue for incoming data
624
+ const dataQueue = [];
625
+ let resolveNext = null;
626
+ let rejectNext = null;
627
+ let done = false;
628
+ let streamError = null;
629
+ let dataQueueIndex = 0;
630
+ const dataHandler = (chunk) => {
631
+ if (resolveNext) {
632
+ resolveNext(chunk);
633
+ resolveNext = null;
634
+ rejectNext = null;
635
+ }
636
+ else {
637
+ dataQueue.push(chunk);
638
+ }
639
+ };
640
+ const endHandler = () => {
641
+ done = true;
642
+ if (resolveNext) {
643
+ resolveNext(null);
644
+ resolveNext = null;
645
+ rejectNext = null;
646
+ }
647
+ };
648
+ const errorHandler = (err) => {
649
+ done = true;
650
+ streamError = err;
651
+ if (rejectNext) {
652
+ rejectNext(err);
653
+ resolveNext = null;
654
+ rejectNext = null;
655
+ }
656
+ };
657
+ const closeHandler = () => {
658
+ // If stream closed without end event (e.g., after destroy()),
659
+ // treat it as done
660
+ done = true;
661
+ if (resolveNext) {
662
+ resolveNext(null);
663
+ resolveNext = null;
664
+ rejectNext = null;
665
+ }
666
+ };
667
+ this.on("data", dataHandler);
668
+ this.on("end", endHandler);
669
+ this.on("error", errorHandler);
670
+ this.on("close", closeHandler);
671
+ try {
672
+ // Enter flowing mode
673
+ this.resume();
674
+ while (!done || dataQueueIndex < dataQueue.length) {
675
+ // Check for error before processing
676
+ if (streamError) {
677
+ throw streamError;
678
+ }
679
+ if (dataQueueIndex < dataQueue.length) {
680
+ const chunk = dataQueue[dataQueueIndex++];
681
+ if (dataQueueIndex >= 1024 && dataQueueIndex * 2 >= dataQueue.length) {
682
+ dataQueue.splice(0, dataQueueIndex);
683
+ dataQueueIndex = 0;
684
+ }
685
+ yield chunk;
686
+ }
687
+ else if (!done) {
688
+ const chunk = await new Promise((resolve, reject) => {
689
+ resolveNext = resolve;
690
+ rejectNext = reject;
691
+ });
692
+ if (chunk !== null) {
693
+ yield chunk;
694
+ }
695
+ }
696
+ }
697
+ // Check for error after loop
698
+ if (streamError) {
699
+ throw streamError;
700
+ }
701
+ }
702
+ finally {
703
+ this.off("data", dataHandler);
704
+ this.off("end", endHandler);
705
+ this.off("error", errorHandler);
706
+ this.off("close", closeHandler);
707
+ }
708
+ return;
709
+ }
710
+ // For Web Stream mode, use the underlying reader
711
+ if (!this._reader) {
712
+ this._reader = this._stream.getReader();
713
+ }
714
+ try {
715
+ while (true) {
716
+ const { done, value } = await this._reader.read();
717
+ if (done) {
718
+ break;
719
+ }
720
+ yield value;
721
+ }
722
+ }
723
+ finally {
724
+ this._reader.releaseLock();
725
+ }
726
+ }
727
+ /**
728
+ * Explicit iterator method (same as Symbol.asyncIterator)
729
+ */
730
+ iterator(options) {
731
+ const destroyOnReturn = options?.destroyOnReturn ?? true;
732
+ const iterator = this[Symbol.asyncIterator]();
733
+ if (!destroyOnReturn) {
734
+ return iterator;
735
+ }
736
+ // Wrap to handle early return
737
+ return {
738
+ next: async () => {
739
+ return iterator.next();
740
+ },
741
+ return: async (value) => {
742
+ this.destroy();
743
+ return { done: true, value };
744
+ },
745
+ [Symbol.asyncIterator]() {
746
+ return this;
747
+ }
748
+ };
749
+ }
750
+ // =========================================================================
751
+ // Async Iterator Helper Methods (Node.js 16.6+)
752
+ // =========================================================================
753
+ /**
754
+ * Map each chunk through an async function
755
+ */
756
+ async *map(fn, options) {
757
+ const signal = options?.signal;
758
+ for await (const chunk of this) {
759
+ if (signal?.aborted) {
760
+ throw new Error("AbortError");
761
+ }
762
+ yield await fn(chunk, { signal });
763
+ }
764
+ }
765
+ /**
766
+ * Filter chunks through an async predicate
767
+ */
768
+ async *filter(fn, options) {
769
+ const signal = options?.signal;
770
+ for await (const chunk of this) {
771
+ if (signal?.aborted) {
772
+ throw new Error("AbortError");
773
+ }
774
+ if (await fn(chunk, { signal })) {
775
+ yield chunk;
776
+ }
777
+ }
778
+ }
779
+ /**
780
+ * FlatMap each chunk
781
+ */
782
+ async *flatMap(fn, options) {
783
+ const signal = options?.signal;
784
+ for await (const chunk of this) {
785
+ if (signal?.aborted) {
786
+ throw new Error("AbortError");
787
+ }
788
+ const result = await fn(chunk, { signal });
789
+ for await (const item of result) {
790
+ yield item;
791
+ }
792
+ }
793
+ }
794
+ /**
795
+ * Take the first n chunks
796
+ */
797
+ async *take(limit, options) {
798
+ const signal = options?.signal;
799
+ let count = 0;
800
+ for await (const chunk of this) {
801
+ if (signal?.aborted) {
802
+ throw new Error("AbortError");
803
+ }
804
+ if (count >= limit) {
805
+ break;
806
+ }
807
+ yield chunk;
808
+ count++;
809
+ }
810
+ }
811
+ /**
812
+ * Drop the first n chunks
813
+ */
814
+ async *drop(limit, options) {
815
+ const signal = options?.signal;
816
+ let count = 0;
817
+ for await (const chunk of this) {
818
+ if (signal?.aborted) {
819
+ throw new Error("AbortError");
820
+ }
821
+ if (count >= limit) {
822
+ yield chunk;
823
+ }
824
+ count++;
825
+ }
826
+ }
827
+ async reduce(fn, initial, options) {
828
+ const signal = options?.signal;
829
+ let accumulator = initial;
830
+ let first = true;
831
+ for await (const chunk of this) {
832
+ if (signal?.aborted) {
833
+ throw new Error("AbortError");
834
+ }
835
+ if (first && accumulator === undefined) {
836
+ accumulator = chunk;
837
+ first = false;
838
+ }
839
+ else {
840
+ accumulator = await fn(accumulator, chunk, { signal });
841
+ }
842
+ }
843
+ if (accumulator === undefined) {
844
+ throw new TypeError("Reduce of empty stream with no initial value");
845
+ }
846
+ return accumulator;
847
+ }
848
+ /**
849
+ * Check if every chunk passes a predicate
850
+ */
851
+ async every(fn, options) {
852
+ const signal = options?.signal;
853
+ for await (const chunk of this) {
854
+ if (signal?.aborted) {
855
+ throw new Error("AbortError");
856
+ }
857
+ if (!(await fn(chunk, { signal }))) {
858
+ return false;
859
+ }
860
+ }
861
+ return true;
862
+ }
863
+ /**
864
+ * Check if some chunk passes a predicate
865
+ */
866
+ async some(fn, options) {
867
+ const signal = options?.signal;
868
+ for await (const chunk of this) {
869
+ if (signal?.aborted) {
870
+ throw new Error("AbortError");
871
+ }
872
+ if (await fn(chunk, { signal })) {
873
+ return true;
874
+ }
875
+ }
876
+ return false;
877
+ }
878
+ /**
879
+ * Find first chunk that passes predicate
880
+ */
881
+ async find(fn, options) {
882
+ const signal = options?.signal;
883
+ for await (const chunk of this) {
884
+ if (signal?.aborted) {
885
+ throw new Error("AbortError");
886
+ }
887
+ if (await fn(chunk, { signal })) {
888
+ return chunk;
889
+ }
890
+ }
891
+ return undefined;
892
+ }
893
+ /**
894
+ * Execute function for each chunk (like forEach)
895
+ */
896
+ async forEach(fn, options) {
897
+ const signal = options?.signal;
898
+ for await (const chunk of this) {
899
+ if (signal?.aborted) {
900
+ throw new Error("AbortError");
901
+ }
902
+ await fn(chunk, { signal });
903
+ }
904
+ }
905
+ /**
906
+ * Collect all chunks into an array
907
+ */
908
+ async toArray(options) {
909
+ const signal = options?.signal;
910
+ const result = [];
911
+ for await (const chunk of this) {
912
+ if (signal?.aborted) {
913
+ throw new Error("AbortError");
914
+ }
915
+ result.push(chunk);
916
+ }
917
+ return result;
918
+ }
919
+ /**
920
+ * Yield [index, value] pairs
921
+ */
922
+ async *asIndexedPairs(options) {
923
+ const signal = options?.signal;
924
+ let index = 0;
925
+ for await (const chunk of this) {
926
+ if (signal?.aborted) {
927
+ throw new Error("AbortError");
928
+ }
929
+ yield [index++, chunk];
930
+ }
931
+ }
932
+ compose(stream) {
933
+ if (typeof stream === "function") {
934
+ // It's an async generator function
935
+ const output = stream(this);
936
+ return Readable.from(output);
937
+ }
938
+ // It's a Duplex stream
939
+ this.pipe(stream);
940
+ return stream;
941
+ }
942
+ }
943
+ // =============================================================================
944
+ // Writable Stream Wrapper
945
+ // =============================================================================
946
+ /**
947
+ * A wrapper around Web WritableStream that provides Node.js-like API
948
+ */
949
+ export class Writable extends EventEmitter {
950
+ constructor(options) {
951
+ super();
952
+ this._writer = null;
953
+ this._ended = false;
954
+ this._finished = false;
955
+ this._destroyed = false;
956
+ this._errored = null;
957
+ this._closed = false;
958
+ this._pendingWrites = 0;
959
+ this._writableLength = 0;
960
+ this._corked = 0;
961
+ this._corkedChunks = [];
962
+ this._defaultEncoding = "utf8";
963
+ this._aborted = false;
964
+ this.objectMode = options?.objectMode ?? false;
965
+ this.writableHighWaterMark = options?.highWaterMark ?? 16384;
966
+ this.autoDestroy = options?.autoDestroy ?? true;
967
+ this.emitClose = options?.emitClose ?? true;
968
+ this._defaultEncoding = options?.defaultEncoding ?? "utf8";
969
+ // Store user-provided write function
970
+ if (options?.write) {
971
+ this._writeFunc = options.write.bind(this);
972
+ }
973
+ // Store user-provided final function
974
+ if (options?.final) {
975
+ this._finalFunc = options.final.bind(this);
976
+ }
977
+ if (options?.stream) {
978
+ this._stream = options.stream;
979
+ }
980
+ else {
981
+ // Create bound references to instance properties/methods for use in WritableStream callbacks
982
+ const getWriteFunc = () => this._writeFunc;
983
+ const getFinalFunc = () => this._finalFunc;
984
+ const getDefaultEncoding = () => this._defaultEncoding;
985
+ const setFinished = (value) => {
986
+ this._finished = value;
987
+ };
988
+ const setAborted = (value) => {
989
+ this._aborted = value;
990
+ };
991
+ const emitEvent = this.emit.bind(this);
992
+ const getEmitClose = () => this.emitClose;
993
+ const callWrite = (chunk) => this._write?.(chunk);
994
+ this._stream = new WritableStream({
995
+ write: async (chunk) => {
996
+ // Use user-provided write function or default behavior
997
+ const writeFunc = getWriteFunc();
998
+ if (writeFunc) {
999
+ await new Promise((resolve, reject) => {
1000
+ writeFunc(chunk, getDefaultEncoding(), err => {
1001
+ if (err) {
1002
+ reject(err);
1003
+ }
1004
+ else {
1005
+ resolve();
1006
+ }
1007
+ });
1008
+ });
1009
+ }
1010
+ else {
1011
+ // Override this in subclasses
1012
+ callWrite(chunk);
1013
+ }
1014
+ },
1015
+ close: async () => {
1016
+ // Call final function if provided
1017
+ const finalFunc = getFinalFunc();
1018
+ if (finalFunc) {
1019
+ await new Promise((resolve, reject) => {
1020
+ finalFunc(err => {
1021
+ if (err) {
1022
+ reject(err);
1023
+ }
1024
+ else {
1025
+ resolve();
1026
+ }
1027
+ });
1028
+ });
1029
+ }
1030
+ setFinished(true);
1031
+ emitEvent("finish");
1032
+ if (getEmitClose()) {
1033
+ emitEvent("close");
1034
+ }
1035
+ },
1036
+ abort: reason => {
1037
+ setAborted(true);
1038
+ emitEvent("error", reason);
1039
+ }
1040
+ });
1041
+ }
1042
+ }
1043
+ /**
1044
+ * Set default encoding for string writes
1045
+ */
1046
+ setDefaultEncoding(encoding) {
1047
+ this._defaultEncoding = encoding;
1048
+ return this;
1049
+ }
1050
+ /**
1051
+ * Buffer writes until uncork() is called
1052
+ */
1053
+ cork() {
1054
+ this._corked++;
1055
+ }
1056
+ /**
1057
+ * Flush buffered writes from cork()
1058
+ */
1059
+ uncork() {
1060
+ if (this._corked > 0) {
1061
+ this._corked--;
1062
+ }
1063
+ if (this._corked === 0) {
1064
+ // Flush all corked chunks
1065
+ const chunks = this._corkedChunks;
1066
+ this._corkedChunks = [];
1067
+ for (const { chunk, callback } of chunks) {
1068
+ this._doWrite(chunk, callback);
1069
+ }
1070
+ }
1071
+ }
1072
+ write(chunk, encodingOrCallback, callback) {
1073
+ if (this._destroyed || this._ended) {
1074
+ const err = new Error("Cannot write after stream destroyed/ended");
1075
+ const cb = typeof encodingOrCallback === "function" ? encodingOrCallback : callback;
1076
+ cb?.(err);
1077
+ return false;
1078
+ }
1079
+ const cb = typeof encodingOrCallback === "function" ? encodingOrCallback : callback;
1080
+ // If corked, buffer the write
1081
+ if (this._corked > 0) {
1082
+ this._corkedChunks.push({ chunk, callback: cb });
1083
+ const chunkSize = this._getChunkSize(chunk);
1084
+ this._writableLength += chunkSize;
1085
+ return this._writableLength < this.writableHighWaterMark;
1086
+ }
1087
+ return this._doWrite(chunk, cb);
1088
+ }
1089
+ _doWrite(chunk, callback) {
1090
+ // Track pending writes for writableLength
1091
+ const chunkSize = this._getChunkSize(chunk);
1092
+ this._pendingWrites++;
1093
+ this._writableLength += chunkSize;
1094
+ this._getWriter()
1095
+ .write(chunk)
1096
+ .then(() => {
1097
+ this._pendingWrites--;
1098
+ this._writableLength -= chunkSize;
1099
+ this.emit("drain");
1100
+ callback?.(null);
1101
+ })
1102
+ .catch(err => {
1103
+ this._pendingWrites--;
1104
+ this._writableLength -= chunkSize;
1105
+ this.emit("error", err);
1106
+ callback?.(err);
1107
+ });
1108
+ // Return false if we've exceeded high water mark (for backpressure)
1109
+ return this._writableLength < this.writableHighWaterMark;
1110
+ }
1111
+ _getChunkSize(chunk) {
1112
+ if (this.objectMode) {
1113
+ return 1;
1114
+ }
1115
+ if (chunk instanceof Uint8Array) {
1116
+ return chunk.byteLength;
1117
+ }
1118
+ if (typeof chunk === "string") {
1119
+ return chunk.length;
1120
+ }
1121
+ return 0;
1122
+ }
1123
+ end(chunkOrCallback, encodingOrCallback, callback) {
1124
+ if (this._ended) {
1125
+ return this;
1126
+ }
1127
+ this._ended = true;
1128
+ const chunk = typeof chunkOrCallback !== "function" ? chunkOrCallback : undefined;
1129
+ const cb = typeof chunkOrCallback === "function"
1130
+ ? chunkOrCallback
1131
+ : typeof encodingOrCallback === "function"
1132
+ ? encodingOrCallback
1133
+ : callback;
1134
+ const finish = async () => {
1135
+ try {
1136
+ if (chunk !== undefined) {
1137
+ await this._getWriter().write(chunk);
1138
+ }
1139
+ await this._getWriter().close();
1140
+ this._finished = true;
1141
+ this.emit("finish");
1142
+ if (cb) {
1143
+ cb();
1144
+ }
1145
+ }
1146
+ catch (err) {
1147
+ this.emit("error", err);
1148
+ }
1149
+ };
1150
+ finish();
1151
+ return this;
1152
+ }
1153
+ /**
1154
+ * Destroy the stream
1155
+ */
1156
+ destroy(error) {
1157
+ if (this._destroyed) {
1158
+ return this;
1159
+ }
1160
+ this._destroyed = true;
1161
+ this._ended = true;
1162
+ if (error) {
1163
+ this._errored = error;
1164
+ this.emit("error", error);
1165
+ }
1166
+ if (this._writer) {
1167
+ this._writer.abort(error).catch(() => { });
1168
+ }
1169
+ this._closed = true;
1170
+ this.emit("close");
1171
+ return this;
1172
+ }
1173
+ /**
1174
+ * Get the underlying Web WritableStream
1175
+ */
1176
+ get webStream() {
1177
+ return this._stream;
1178
+ }
1179
+ get writable() {
1180
+ return !this._destroyed && !this._ended;
1181
+ }
1182
+ get writableEnded() {
1183
+ return this._ended;
1184
+ }
1185
+ get writableFinished() {
1186
+ return this._finished;
1187
+ }
1188
+ get writableLength() {
1189
+ return this._writableLength;
1190
+ }
1191
+ /** Whether the stream has been destroyed */
1192
+ get destroyed() {
1193
+ return this._destroyed;
1194
+ }
1195
+ /** The error that destroyed the stream, or null */
1196
+ get errored() {
1197
+ return this._errored;
1198
+ }
1199
+ /** Whether the stream has been closed */
1200
+ get closed() {
1201
+ return this._closed;
1202
+ }
1203
+ /** Whether the stream needs drain (writableLength exceeds high water mark) */
1204
+ get writableNeedDrain() {
1205
+ return this._writableLength >= this.writableHighWaterMark;
1206
+ }
1207
+ /** How many times cork() has been called without uncork() */
1208
+ get writableCorked() {
1209
+ return this._corked;
1210
+ }
1211
+ /** Whether the stream was aborted */
1212
+ get writableAborted() {
1213
+ return this._aborted;
1214
+ }
1215
+ /** Whether the stream is in object mode */
1216
+ get writableObjectMode() {
1217
+ return this.objectMode;
1218
+ }
1219
+ /** Get default encoding */
1220
+ get defaultEncoding() {
1221
+ return this._defaultEncoding;
1222
+ }
1223
+ /**
1224
+ * Get the internal buffer state (for debugging)
1225
+ * Returns array of objects with length and chunk info
1226
+ */
1227
+ get writableBuffer() {
1228
+ return {
1229
+ length: this._corkedChunks.length,
1230
+ head: this._corkedChunks.length > 0 ? this._corkedChunks[0].chunk : null
1231
+ };
1232
+ }
1233
+ /**
1234
+ * Write multiple chunks at once (batch write).
1235
+ * Override in subclass to implement custom batch write logic.
1236
+ */
1237
+ _writev(chunks, callback) {
1238
+ // Default implementation: write each chunk individually
1239
+ let i = 0;
1240
+ const writeNext = () => {
1241
+ if (i >= chunks.length) {
1242
+ callback(null);
1243
+ return;
1244
+ }
1245
+ const { chunk } = chunks[i++];
1246
+ this._doWrite(chunk, err => {
1247
+ if (err) {
1248
+ callback(err);
1249
+ return;
1250
+ }
1251
+ // Continue to next chunk
1252
+ writeNext();
1253
+ });
1254
+ };
1255
+ writeNext();
1256
+ }
1257
+ /**
1258
+ * Batch write multiple chunks
1259
+ */
1260
+ writev(chunks, callback) {
1261
+ if (this._destroyed || this._ended) {
1262
+ const err = new Error("Cannot write after stream destroyed/ended");
1263
+ callback?.(err);
1264
+ return false;
1265
+ }
1266
+ this._writev(chunks, callback ?? (() => { }));
1267
+ // Return backpressure indicator
1268
+ return this._writableLength < this.writableHighWaterMark;
1269
+ }
1270
+ _getWriter() {
1271
+ if (!this._writer) {
1272
+ this._writer = this._stream.getWriter();
1273
+ }
1274
+ return this._writer;
1275
+ }
1276
+ // =========================================================================
1277
+ // Static Methods (Node.js compatibility)
1278
+ // =========================================================================
1279
+ /**
1280
+ * Convert a Web WritableStream to Node.js Writable
1281
+ */
1282
+ static fromWeb(webStream, options) {
1283
+ return new Writable({ ...options, stream: webStream });
1284
+ }
1285
+ /**
1286
+ * Convert a Node.js Writable to Web WritableStream
1287
+ */
1288
+ static toWeb(nodeStream) {
1289
+ return nodeStream.webStream;
1290
+ }
1291
+ }
1292
+ // =============================================================================
1293
+ // Cross-environment stream normalization
1294
+ // =============================================================================
1295
+ /**
1296
+ * Normalize a user-provided writable into this module's Writable.
1297
+ * Keeps Web/Node branching at the stream-module boundary.
1298
+ */
1299
+ export function normalizeWritable(stream) {
1300
+ if (stream instanceof Writable) {
1301
+ return stream;
1302
+ }
1303
+ // Web WritableStream
1304
+ if (stream?.getWriter) {
1305
+ return new Writable({ stream: stream });
1306
+ }
1307
+ // Already a Node-like writable (e.g. StreamBuf)
1308
+ return stream;
1309
+ }
1310
+ // =============================================================================
1311
+ // Transform Stream Wrapper
1312
+ // =============================================================================
1313
+ /**
1314
+ * A wrapper around Web TransformStream that provides Node.js-like API
1315
+ */
1316
+ export class Transform extends EventEmitter {
1317
+ /**
1318
+ * Push data to the readable side (Node.js compatibility)
1319
+ * Can be called from within transform callback
1320
+ */
1321
+ push(chunk) {
1322
+ if (chunk === null) {
1323
+ return false;
1324
+ }
1325
+ if (this._transformController) {
1326
+ // If we're in a transform callback, enqueue directly
1327
+ this._transformController.enqueue(chunk);
1328
+ }
1329
+ else {
1330
+ // Otherwise buffer for later
1331
+ this._pushBuffer.push(chunk);
1332
+ }
1333
+ return true;
1334
+ }
1335
+ constructor(options) {
1336
+ super();
1337
+ this._ended = false;
1338
+ this._destroyed = false;
1339
+ this._errored = false;
1340
+ // Buffer for Node.js style push() calls during transform
1341
+ this._pushBuffer = [];
1342
+ // Controller for enqueueing pushed data (set during transform execution)
1343
+ this._transformController = null;
1344
+ // Buffer for writes that occur after end() but before writable is closed
1345
+ this._pendingEndWrites = [];
1346
+ // Whether end() has been called but writable not yet closed
1347
+ this._endPending = false;
1348
+ // Track if we've already set up data forwarding
1349
+ this._dataForwardingSetup = false;
1350
+ /** @internal - whether we have a data event consumer */
1351
+ this._hasDataConsumer = false;
1352
+ /** @internal - whether we're auto-consuming the readable */
1353
+ this._readableConsuming = false;
1354
+ /** @internal - buffer for auto-consumed data */
1355
+ this._autoConsumedBuffer = [];
1356
+ this._autoConsumedBufferIndex = 0;
1357
+ /** @internal - whether auto-consume has ended */
1358
+ this._autoConsumeEnded = false;
1359
+ /** @internal - promise that resolves when auto-consume finishes */
1360
+ this._autoConsumePromise = null;
1361
+ this.objectMode = options?.objectMode ?? false;
1362
+ const userTransform = options?.transform;
1363
+ const userFlush = options?.flush;
1364
+ // Determine if transform function is Node.js style (has 3 params) or simple style
1365
+ const isNodeStyleTransform = userTransform && userTransform.length >= 3;
1366
+ const isNodeStyleFlush = userFlush && userFlush.length >= 1;
1367
+ // Create bound references for use in TransformStream callbacks
1368
+ const setController = (ctrl) => {
1369
+ this._transformController = ctrl;
1370
+ };
1371
+ const emitEvent = (event, ...args) => {
1372
+ if (event === "error") {
1373
+ // Only emit error once to prevent duplicate events
1374
+ if (this._errored) {
1375
+ return false;
1376
+ }
1377
+ this._errored = true;
1378
+ // Also destroy the writable to prevent further writes
1379
+ this._writable.destroy(args[0]);
1380
+ }
1381
+ return this.emit(event, ...args);
1382
+ };
1383
+ const getInstance = () => this;
1384
+ // Check if subclass overrides _transform (for Node.js compatibility)
1385
+ // We need to check this at runtime since the subclass constructor runs after super()
1386
+ const hasSubclassTransform = () => {
1387
+ // If userTransform was provided in options, use that
1388
+ if (userTransform) {
1389
+ return false;
1390
+ }
1391
+ // Check if _transform is overridden (not the base class no-op)
1392
+ const proto = Object.getPrototypeOf(this);
1393
+ return proto._transform !== Transform.prototype._transform;
1394
+ };
1395
+ const hasSubclassFlush = () => {
1396
+ if (userFlush) {
1397
+ return false;
1398
+ }
1399
+ const proto = Object.getPrototypeOf(this);
1400
+ return proto._flush !== Transform.prototype._flush;
1401
+ };
1402
+ this._stream = new TransformStream({
1403
+ transform: async (chunk, controller) => {
1404
+ // Skip processing if already errored
1405
+ if (this._errored) {
1406
+ return;
1407
+ }
1408
+ try {
1409
+ // Set controller for push() to use
1410
+ setController(controller);
1411
+ // Check for subclass _transform override first
1412
+ if (hasSubclassTransform()) {
1413
+ // Call subclass _transform method (Node.js style)
1414
+ await new Promise((resolve, reject) => {
1415
+ this._transform(chunk, "utf8", (err, data) => {
1416
+ if (err) {
1417
+ reject(err);
1418
+ }
1419
+ else {
1420
+ if (data !== undefined) {
1421
+ controller.enqueue(data);
1422
+ }
1423
+ resolve();
1424
+ }
1425
+ });
1426
+ });
1427
+ }
1428
+ else if (userTransform) {
1429
+ if (isNodeStyleTransform) {
1430
+ // Node.js style: transform(chunk, encoding, callback)
1431
+ await new Promise((resolve, reject) => {
1432
+ userTransform.call(getInstance(), chunk, "utf8", (err, data) => {
1433
+ if (err) {
1434
+ reject(err);
1435
+ }
1436
+ else {
1437
+ // If data provided via callback, enqueue it
1438
+ if (data !== undefined) {
1439
+ controller.enqueue(data);
1440
+ }
1441
+ resolve();
1442
+ }
1443
+ });
1444
+ });
1445
+ }
1446
+ else {
1447
+ // Simple style: transform(chunk) => result
1448
+ const result = await userTransform(chunk);
1449
+ if (result !== undefined) {
1450
+ controller.enqueue(result);
1451
+ }
1452
+ }
1453
+ }
1454
+ else {
1455
+ // Default: pass through
1456
+ controller.enqueue(chunk);
1457
+ }
1458
+ }
1459
+ catch (err) {
1460
+ controller.error(err);
1461
+ emitEvent("error", err);
1462
+ }
1463
+ finally {
1464
+ setController(null);
1465
+ }
1466
+ },
1467
+ flush: async (controller) => {
1468
+ try {
1469
+ setController(controller);
1470
+ // Check for subclass _flush override first
1471
+ if (hasSubclassFlush()) {
1472
+ await new Promise((resolve, reject) => {
1473
+ this._flush((err, data) => {
1474
+ if (err) {
1475
+ reject(err);
1476
+ }
1477
+ else {
1478
+ if (data !== undefined) {
1479
+ controller.enqueue(data);
1480
+ }
1481
+ resolve();
1482
+ }
1483
+ });
1484
+ });
1485
+ }
1486
+ else if (userFlush) {
1487
+ if (isNodeStyleFlush) {
1488
+ // Node.js style: flush(callback)
1489
+ await new Promise((resolve, reject) => {
1490
+ userFlush.call(getInstance(), (err, data) => {
1491
+ if (err) {
1492
+ reject(err);
1493
+ }
1494
+ else {
1495
+ if (data !== undefined) {
1496
+ controller.enqueue(data);
1497
+ }
1498
+ resolve();
1499
+ }
1500
+ });
1501
+ });
1502
+ }
1503
+ else {
1504
+ // Simple style: flush() => result
1505
+ const result = await userFlush();
1506
+ if (result !== undefined && result !== null) {
1507
+ controller.enqueue(result);
1508
+ }
1509
+ }
1510
+ }
1511
+ // No flush defined - nothing to do
1512
+ }
1513
+ catch (err) {
1514
+ controller.error(err);
1515
+ emitEvent("error", err);
1516
+ }
1517
+ finally {
1518
+ setController(null);
1519
+ }
1520
+ }
1521
+ });
1522
+ this._readable = new Readable({
1523
+ stream: this._stream.readable,
1524
+ objectMode: this.objectMode
1525
+ });
1526
+ this._writable = new Writable({
1527
+ stream: this._stream.writable,
1528
+ objectMode: this.objectMode
1529
+ });
1530
+ // Forward non-data events (data forwarding is lazy to avoid premature flowing)
1531
+ this._readable.on("end", () => this.emit("end"));
1532
+ // Only forward errors if not already errored (to prevent duplicate events)
1533
+ this._readable.on("error", err => {
1534
+ if (!this._errored) {
1535
+ this._errored = true;
1536
+ this.emit("error", err);
1537
+ }
1538
+ });
1539
+ this._writable.on("finish", () => this.emit("finish"));
1540
+ this._writable.on("drain", () => this.emit("drain"));
1541
+ // Only forward errors if not already errored (to prevent duplicate events)
1542
+ this._writable.on("error", err => {
1543
+ if (!this._errored) {
1544
+ this._errored = true;
1545
+ this.emit("error", err);
1546
+ }
1547
+ });
1548
+ }
1549
+ /**
1550
+ * Override on to start flowing when data listener is added
1551
+ */
1552
+ on(event, listener) {
1553
+ // Set up data forwarding when first external data listener is added
1554
+ if (event === "data" && !this._dataForwardingSetup) {
1555
+ this._dataForwardingSetup = true;
1556
+ this._readable.on("data", data => this.emit("data", data));
1557
+ }
1558
+ super.on(event, listener);
1559
+ // When data listener is added, mark as having consumer
1560
+ // and start the readable in flowing mode
1561
+ if (event === "data") {
1562
+ this._hasDataConsumer = true;
1563
+ this._readable.resume();
1564
+ }
1565
+ return this;
1566
+ }
1567
+ write(chunk, encodingOrCallback, callback) {
1568
+ const cb = typeof encodingOrCallback === "function" ? encodingOrCallback : callback;
1569
+ if (this._destroyed || this._errored) {
1570
+ const err = new Error(this._errored ? "Cannot write after stream errored" : "Cannot write after stream destroyed");
1571
+ queueMicrotask(() => this.emit("error", err));
1572
+ cb?.(err);
1573
+ return false;
1574
+ }
1575
+ // Ensure readable is being consumed to allow transform to execute
1576
+ // This matches Node.js behavior where transform executes immediately on write
1577
+ // Only auto-consume if no explicit consumer (data listener or pipe)
1578
+ if (!this._readableConsuming && !this._hasDataConsumer) {
1579
+ this._readableConsuming = true;
1580
+ this._startAutoConsume();
1581
+ }
1582
+ // If end() was called but writable not yet closed, buffer the write
1583
+ // This allows writes during data event handlers to be processed
1584
+ if (this._endPending) {
1585
+ this._pendingEndWrites.push({ chunk, callback: cb });
1586
+ return true;
1587
+ }
1588
+ return this._writable.write(chunk, cb);
1589
+ }
1590
+ /** @internal - auto-consume readable to allow transform to execute */
1591
+ _startAutoConsume() {
1592
+ this._autoConsumePromise = (async () => {
1593
+ try {
1594
+ for await (const chunk of this._readable) {
1595
+ // Buffer the data for later retrieval
1596
+ this._autoConsumedBuffer.push(chunk);
1597
+ // Also emit data event for listeners
1598
+ this.emit("data", chunk);
1599
+ }
1600
+ this._autoConsumeEnded = true;
1601
+ this.emit("end");
1602
+ }
1603
+ catch (err) {
1604
+ this.emit("error", err);
1605
+ }
1606
+ })();
1607
+ }
1608
+ end(chunkOrCallback, encodingOrCallback, callback) {
1609
+ if (this._ended) {
1610
+ return this;
1611
+ }
1612
+ this._ended = true;
1613
+ this._endPending = true;
1614
+ const chunk = typeof chunkOrCallback === "function" ? undefined : chunkOrCallback;
1615
+ const cb = typeof chunkOrCallback === "function"
1616
+ ? chunkOrCallback
1617
+ : typeof encodingOrCallback === "function"
1618
+ ? encodingOrCallback
1619
+ : callback;
1620
+ if (cb) {
1621
+ this.once("finish", cb);
1622
+ }
1623
+ if (chunk !== undefined) {
1624
+ this._writable.write(chunk);
1625
+ }
1626
+ // Use setTimeout(0) instead of queueMicrotask to ensure all transform
1627
+ // processing and data events complete before we close the writable.
1628
+ // Microtasks run before the TransformStream processes data.
1629
+ setTimeout(() => {
1630
+ // Process any writes that occurred during data events
1631
+ for (const { chunk: pendingChunk, callback } of this._pendingEndWrites) {
1632
+ this._writable.write(pendingChunk, callback);
1633
+ }
1634
+ this._pendingEndWrites = [];
1635
+ this._endPending = false;
1636
+ this._writable.end();
1637
+ }, 0);
1638
+ return this;
1639
+ }
1640
+ /**
1641
+ * Read from the transform stream
1642
+ */
1643
+ read(size) {
1644
+ return this._readable.read(size);
1645
+ }
1646
+ /**
1647
+ * Pipe to another stream (writable, transform, or duplex)
1648
+ */
1649
+ pipe(destination) {
1650
+ // Mark as having consumer to prevent auto-consume conflict
1651
+ this._hasDataConsumer = true;
1652
+ return this._readable.pipe(destination);
1653
+ }
1654
+ /**
1655
+ * Unpipe from destination
1656
+ */
1657
+ unpipe(destination) {
1658
+ this._readable.unpipe(destination);
1659
+ return this;
1660
+ }
1661
+ /**
1662
+ * Check if paused
1663
+ */
1664
+ isPaused() {
1665
+ return this._readable.isPaused();
1666
+ }
1667
+ /**
1668
+ * Resume reading from the readable side
1669
+ */
1670
+ resume() {
1671
+ this._readable.resume();
1672
+ return this;
1673
+ }
1674
+ /**
1675
+ * Pause reading from the readable side
1676
+ */
1677
+ pause() {
1678
+ this._readable.pause();
1679
+ return this;
1680
+ }
1681
+ /**
1682
+ * Destroy the stream
1683
+ */
1684
+ destroy(error) {
1685
+ if (this._destroyed) {
1686
+ return;
1687
+ }
1688
+ this._destroyed = true;
1689
+ this._readable.destroy(error);
1690
+ this._writable.destroy(error);
1691
+ queueMicrotask(() => this.emit("close"));
1692
+ }
1693
+ /**
1694
+ * Get the underlying Web TransformStream
1695
+ */
1696
+ get webStream() {
1697
+ return this._stream;
1698
+ }
1699
+ get readable() {
1700
+ return this._readable.readable;
1701
+ }
1702
+ get writable() {
1703
+ return this._writable.writable;
1704
+ }
1705
+ get readableEnded() {
1706
+ return this._readable.readableEnded;
1707
+ }
1708
+ get writableEnded() {
1709
+ return this._writable.writableEnded;
1710
+ }
1711
+ get writableFinished() {
1712
+ return this._writable.writableFinished;
1713
+ }
1714
+ get readableLength() {
1715
+ return this._readable.readableLength;
1716
+ }
1717
+ get writableLength() {
1718
+ return this._writable.writableLength;
1719
+ }
1720
+ get readableHighWaterMark() {
1721
+ return this._readable.readableHighWaterMark;
1722
+ }
1723
+ get writableHighWaterMark() {
1724
+ return this._writable.writableHighWaterMark;
1725
+ }
1726
+ get readableObjectMode() {
1727
+ return this._readable.readableObjectMode ?? this._readable.objectMode;
1728
+ }
1729
+ get readableFlowing() {
1730
+ return this._readable.readableFlowing;
1731
+ }
1732
+ get destroyed() {
1733
+ return this._destroyed;
1734
+ }
1735
+ /**
1736
+ * Async iterator support
1737
+ */
1738
+ async *[Symbol.asyncIterator]() {
1739
+ // If auto-consume is running, wait for it to finish and use its buffer
1740
+ if (this._autoConsumePromise) {
1741
+ await this._autoConsumePromise;
1742
+ // Yield all buffered data
1743
+ while (this._autoConsumedBufferIndex < this._autoConsumedBuffer.length) {
1744
+ yield this._autoConsumedBuffer[this._autoConsumedBufferIndex++];
1745
+ }
1746
+ // Reset when drained to avoid prefix growth
1747
+ this._autoConsumedBuffer.length = 0;
1748
+ this._autoConsumedBufferIndex = 0;
1749
+ return;
1750
+ }
1751
+ // Otherwise delegate to readable's iterator
1752
+ yield* this._readable[Symbol.asyncIterator]();
1753
+ }
1754
+ // =========================================================================
1755
+ // Static Methods (Node.js compatibility)
1756
+ // =========================================================================
1757
+ /**
1758
+ * Convert a Web TransformStream to Node.js Transform
1759
+ */
1760
+ static fromWeb(webStream, options) {
1761
+ const transform = new Transform(options);
1762
+ // Connect the web stream - set the internal _stream property
1763
+ transform._stream = webStream;
1764
+ // Replace internal streams with the ones from the web stream
1765
+ const newReadable = Readable.fromWeb(webStream.readable, { objectMode: options?.objectMode });
1766
+ const newWritable = Writable.fromWeb(webStream.writable, { objectMode: options?.objectMode });
1767
+ // Remove old event listeners before replacing
1768
+ transform._readable.removeAllListeners();
1769
+ transform._writable.removeAllListeners();
1770
+ transform._readable = newReadable;
1771
+ transform._writable = newWritable;
1772
+ // Re-connect event forwarding
1773
+ newReadable.on("data", (data) => transform.emit("data", data));
1774
+ newReadable.on("end", () => transform.emit("end"));
1775
+ newReadable.on("error", (err) => transform.emit("error", err));
1776
+ newWritable.on("finish", () => transform.emit("finish"));
1777
+ newWritable.on("drain", () => transform.emit("drain"));
1778
+ newWritable.on("error", (err) => transform.emit("error", err));
1779
+ return transform;
1780
+ }
1781
+ /**
1782
+ * Convert a Node.js Transform to Web TransformStream
1783
+ */
1784
+ static toWeb(nodeStream) {
1785
+ return nodeStream.webStream;
1786
+ }
1787
+ // =========================================================================
1788
+ // Base Class Methods (for subclass override detection)
1789
+ // =========================================================================
1790
+ /**
1791
+ * Base transform method - can be overridden by subclasses.
1792
+ * Default behavior: pass through chunk unchanged.
1793
+ */
1794
+ _transform(chunk, encoding, callback) {
1795
+ // Default: pass through unchanged
1796
+ callback(null, chunk);
1797
+ }
1798
+ /**
1799
+ * Base flush method - can be overridden by subclasses.
1800
+ * Called when the stream ends to allow final processing.
1801
+ */
1802
+ _flush(callback) {
1803
+ // Default: no-op
1804
+ callback();
1805
+ }
1806
+ }
1807
+ // =============================================================================
1808
+ // Duplex Stream
1809
+ // =============================================================================
1810
+ /**
1811
+ * A duplex stream that combines readable and writable
1812
+ */
1813
+ export class Duplex extends EventEmitter {
1814
+ /**
1815
+ * Create a Duplex stream from various sources
1816
+ */
1817
+ static from(source) {
1818
+ // If it's already a Duplex, return as-is
1819
+ if (source instanceof Duplex) {
1820
+ return source;
1821
+ }
1822
+ const forwardReadableToDuplex = (readable, duplex) => {
1823
+ const sink = new Writable({
1824
+ objectMode: duplex.readableObjectMode,
1825
+ write(chunk, _encoding, callback) {
1826
+ duplex.push(chunk);
1827
+ callback();
1828
+ },
1829
+ final(callback) {
1830
+ duplex.push(null);
1831
+ callback();
1832
+ }
1833
+ });
1834
+ readable.on("error", err => duplex.emit("error", err));
1835
+ readable.pipe(sink);
1836
+ };
1837
+ // If it has readable and/or writable properties
1838
+ if (typeof source === "object" &&
1839
+ source !== null &&
1840
+ "readable" in source &&
1841
+ "writable" in source) {
1842
+ const duplex = new Duplex();
1843
+ const pair = source;
1844
+ if (pair.readable) {
1845
+ forwardReadableToDuplex(pair.readable, duplex);
1846
+ }
1847
+ if (pair.writable) {
1848
+ return new Duplex({
1849
+ objectMode: duplex.writableObjectMode,
1850
+ write(chunk, encoding, callback) {
1851
+ pair.writable.write(chunk, encoding, callback);
1852
+ },
1853
+ final(callback) {
1854
+ pair.writable.end(callback);
1855
+ }
1856
+ });
1857
+ }
1858
+ return duplex;
1859
+ }
1860
+ // If it's an iterable
1861
+ if (typeof source === "object" &&
1862
+ source !== null &&
1863
+ (Symbol.asyncIterator in source || Symbol.iterator in source)) {
1864
+ const readable = Readable.from(source);
1865
+ const duplex = new Duplex();
1866
+ forwardReadableToDuplex(readable, duplex);
1867
+ return duplex;
1868
+ }
1869
+ // If it's a Readable
1870
+ if (source instanceof Readable) {
1871
+ const duplex = new Duplex();
1872
+ forwardReadableToDuplex(source, duplex);
1873
+ return duplex;
1874
+ }
1875
+ // If it's a Writable
1876
+ if (source instanceof Writable) {
1877
+ return new Duplex({
1878
+ objectMode: true,
1879
+ write(chunk, encoding, callback) {
1880
+ source.write(chunk, encoding, callback);
1881
+ },
1882
+ final(callback) {
1883
+ source.end(callback);
1884
+ }
1885
+ });
1886
+ }
1887
+ throw new Error("Duplex.from: unsupported source type");
1888
+ }
1889
+ /**
1890
+ * Create a Duplex from a Web ReadableWritablePair
1891
+ */
1892
+ static fromWeb(pair, options) {
1893
+ const duplex = new Duplex(options);
1894
+ // Replace internal streams
1895
+ duplex._readable = new Readable({ stream: pair.readable });
1896
+ duplex._writable = new Writable({ stream: pair.writable });
1897
+ return duplex;
1898
+ }
1899
+ /**
1900
+ * Convert a Node.js Duplex to Web ReadableWritablePair
1901
+ */
1902
+ static toWeb(duplex) {
1903
+ return {
1904
+ readable: duplex._readable.webStream,
1905
+ writable: duplex._writable.webStream
1906
+ };
1907
+ }
1908
+ constructor(options) {
1909
+ super();
1910
+ // Track if we've already set up data forwarding
1911
+ this._dataForwardingSetup = false;
1912
+ this.allowHalfOpen = options?.allowHalfOpen ?? true;
1913
+ // Support shorthand objectMode option
1914
+ const objectMode = options?.objectMode ?? false;
1915
+ this.readableObjectMode = options?.readableObjectMode ?? objectMode;
1916
+ this.writableObjectMode = options?.writableObjectMode ?? objectMode;
1917
+ this._readable = new Readable({
1918
+ highWaterMark: options?.readableHighWaterMark,
1919
+ objectMode: this.readableObjectMode,
1920
+ read: options?.read?.bind(this)
1921
+ });
1922
+ this._writable = new Writable({
1923
+ highWaterMark: options?.writableHighWaterMark,
1924
+ objectMode: this.writableObjectMode,
1925
+ write: options?.write?.bind(this),
1926
+ final: options?.final?.bind(this)
1927
+ });
1928
+ // Forward non-data events (data forwarding is lazy to avoid premature flowing)
1929
+ this._readable.on("end", () => {
1930
+ this.emit("end");
1931
+ // If not allowHalfOpen, end the writable side too
1932
+ if (!this.allowHalfOpen) {
1933
+ this._writable.end();
1934
+ }
1935
+ });
1936
+ this._readable.on("error", err => this.emit("error", err));
1937
+ this._writable.on("finish", () => this.emit("finish"));
1938
+ this._writable.on("drain", () => this.emit("drain"));
1939
+ this._writable.on("close", () => {
1940
+ // If not allowHalfOpen, destroy the readable side too
1941
+ if (!this.allowHalfOpen && !this._readable.destroyed) {
1942
+ this._readable.destroy();
1943
+ }
1944
+ });
1945
+ }
1946
+ /**
1947
+ * Override on() to set up data forwarding lazily
1948
+ */
1949
+ on(event, listener) {
1950
+ // Set up data forwarding when first external data listener is added
1951
+ if (event === "data" && !this._dataForwardingSetup) {
1952
+ this._dataForwardingSetup = true;
1953
+ this._readable.on("data", chunk => this.emit("data", chunk));
1954
+ }
1955
+ return super.on(event, listener);
1956
+ }
1957
+ /**
1958
+ * Push data to readable side
1959
+ */
1960
+ push(chunk) {
1961
+ return this._readable.push(chunk);
1962
+ }
1963
+ /**
1964
+ * Put a chunk back at the front of the buffer (readable side)
1965
+ */
1966
+ unshift(chunk) {
1967
+ this._readable.unshift(chunk);
1968
+ }
1969
+ /**
1970
+ * Read from readable side
1971
+ */
1972
+ read(size) {
1973
+ return this._readable.read(size);
1974
+ }
1975
+ write(chunk, encodingOrCallback, callback) {
1976
+ const cb = typeof encodingOrCallback === "function" ? encodingOrCallback : callback;
1977
+ return this._writable.write(chunk, cb);
1978
+ }
1979
+ end(chunkOrCallback, encodingOrCallback, callback) {
1980
+ const chunk = typeof chunkOrCallback === "function" ? undefined : chunkOrCallback;
1981
+ const cb = typeof chunkOrCallback === "function"
1982
+ ? chunkOrCallback
1983
+ : typeof encodingOrCallback === "function"
1984
+ ? encodingOrCallback
1985
+ : callback;
1986
+ if (cb) {
1987
+ this.once("finish", cb);
1988
+ }
1989
+ if (chunk !== undefined) {
1990
+ this._writable.write(chunk);
1991
+ }
1992
+ this._writable.end();
1993
+ return this;
1994
+ }
1995
+ /**
1996
+ * Cork the writable side
1997
+ */
1998
+ cork() {
1999
+ this._writable.cork();
2000
+ }
2001
+ /**
2002
+ * Uncork the writable side
2003
+ */
2004
+ uncork() {
2005
+ this._writable.uncork();
2006
+ }
2007
+ /**
2008
+ * Set encoding for readable side
2009
+ */
2010
+ setEncoding(encoding) {
2011
+ this._readable.setEncoding(encoding);
2012
+ return this;
2013
+ }
2014
+ /**
2015
+ * Set default encoding for writable side
2016
+ */
2017
+ setDefaultEncoding(encoding) {
2018
+ this._writable.setDefaultEncoding(encoding);
2019
+ return this;
2020
+ }
2021
+ /**
2022
+ * Pipe readable side to destination
2023
+ */
2024
+ pipe(destination) {
2025
+ if (destination instanceof Transform) {
2026
+ this._readable.pipe(destination._writable);
2027
+ return destination;
2028
+ }
2029
+ this._readable.pipe(destination);
2030
+ return destination;
2031
+ }
2032
+ /**
2033
+ * Unpipe from destination
2034
+ */
2035
+ unpipe(destination) {
2036
+ this._readable.unpipe(destination);
2037
+ return this;
2038
+ }
2039
+ /**
2040
+ * Pause the readable side
2041
+ */
2042
+ pause() {
2043
+ this._readable.pause();
2044
+ return this;
2045
+ }
2046
+ /**
2047
+ * Resume the readable side
2048
+ */
2049
+ resume() {
2050
+ this._readable.resume();
2051
+ return this;
2052
+ }
2053
+ /**
2054
+ * Check if paused
2055
+ */
2056
+ isPaused() {
2057
+ return this._readable.isPaused();
2058
+ }
2059
+ /**
2060
+ * Destroy both sides
2061
+ */
2062
+ destroy(error) {
2063
+ this._readable.destroy(error);
2064
+ this._writable.destroy(error);
2065
+ return this;
2066
+ }
2067
+ get readable() {
2068
+ return this._readable.readable;
2069
+ }
2070
+ get writable() {
2071
+ return this._writable.writable;
2072
+ }
2073
+ get readableEnded() {
2074
+ return this._readable.readableEnded;
2075
+ }
2076
+ get writableEnded() {
2077
+ return this._writable.writableEnded;
2078
+ }
2079
+ get writableFinished() {
2080
+ return this._writable.writableFinished;
2081
+ }
2082
+ get readableLength() {
2083
+ return this._readable.readableLength;
2084
+ }
2085
+ get writableLength() {
2086
+ return this._writable.writableLength;
2087
+ }
2088
+ get readableHighWaterMark() {
2089
+ return this._readable.readableHighWaterMark;
2090
+ }
2091
+ get writableHighWaterMark() {
2092
+ return this._writable.writableHighWaterMark;
2093
+ }
2094
+ get destroyed() {
2095
+ return this._readable.destroyed && this._writable.destroyed;
2096
+ }
2097
+ get writableCorked() {
2098
+ return this._writable.writableCorked;
2099
+ }
2100
+ get writableNeedDrain() {
2101
+ return this._writable.writableNeedDrain;
2102
+ }
2103
+ /**
2104
+ * Async iterator support
2105
+ */
2106
+ [Symbol.asyncIterator]() {
2107
+ return this._readable[Symbol.asyncIterator]();
2108
+ }
2109
+ }
2110
+ // =============================================================================
2111
+ // PassThrough Stream
2112
+ // =============================================================================
2113
+ /**
2114
+ * A passthrough stream that passes data through unchanged
2115
+ */
2116
+ export class PassThrough extends Transform {
2117
+ constructor(options) {
2118
+ super({
2119
+ ...options,
2120
+ transform: chunk => chunk
2121
+ });
2122
+ }
2123
+ }
2124
+ // =============================================================================
2125
+ // Collector Stream
2126
+ // =============================================================================
2127
+ /**
2128
+ * A writable stream that collects all chunks
2129
+ */
2130
+ export class Collector extends Writable {
2131
+ constructor(options) {
2132
+ const collectedChunks = [];
2133
+ super({
2134
+ ...options,
2135
+ stream: new WritableStream({
2136
+ write: chunk => {
2137
+ collectedChunks.push(chunk);
2138
+ },
2139
+ close: () => {
2140
+ // Finished
2141
+ }
2142
+ })
2143
+ });
2144
+ this.chunks = [];
2145
+ this.chunks = collectedChunks;
2146
+ }
2147
+ write(chunk, encodingOrCallback, callback) {
2148
+ if (this.writableEnded || this.writableFinished) {
2149
+ const err = new Error("write after end");
2150
+ this.emit("error", err);
2151
+ return false;
2152
+ }
2153
+ const cb = typeof encodingOrCallback === "function" ? encodingOrCallback : callback;
2154
+ // Synchronously push to chunks
2155
+ this.chunks.push(chunk);
2156
+ cb?.(null);
2157
+ return true;
2158
+ }
2159
+ /**
2160
+ * Get all collected data as a single Uint8Array (for binary mode)
2161
+ */
2162
+ toUint8Array() {
2163
+ const chunks = this.chunks;
2164
+ const len = chunks.length;
2165
+ if (len === 0) {
2166
+ return new Uint8Array(0);
2167
+ }
2168
+ if (len === 1 && chunks[0] instanceof Uint8Array) {
2169
+ return chunks[0];
2170
+ }
2171
+ // If chunks are Uint8Arrays, concatenate them
2172
+ if (chunks[0] instanceof Uint8Array) {
2173
+ return concatUint8Arrays(chunks);
2174
+ }
2175
+ throw new Error("Collector contains non-binary data");
2176
+ }
2177
+ /**
2178
+ * Get all collected data as a string
2179
+ */
2180
+ toString() {
2181
+ const chunks = this.chunks;
2182
+ const len = chunks.length;
2183
+ if (len === 0) {
2184
+ return "";
2185
+ }
2186
+ const first = chunks[0];
2187
+ if (typeof first === "string") {
2188
+ if (len === 1) {
2189
+ return first;
2190
+ }
2191
+ return chunks.join("");
2192
+ }
2193
+ return textDecoder.decode(this.toUint8Array());
2194
+ }
2195
+ get isFinished() {
2196
+ // Use inherited writable property
2197
+ return this.writableFinished;
2198
+ }
2199
+ }
2200
+ // =============================================================================
2201
+ // PullStream / BufferedStream / DataChunk helpers
2202
+ // =============================================================================
2203
+ export class PullStream extends StandalonePullStream {
2204
+ // Keep constructor signature aligned with streams.browser.ts public API
2205
+ constructor(options) {
2206
+ super(options);
2207
+ }
2208
+ }
2209
+ export class StringChunk extends StandaloneStringChunk {
2210
+ }
2211
+ export class BufferChunk extends StandaloneBufferChunk {
2212
+ }
2213
+ export class BufferedStream extends StandaloneBufferedStream {
2214
+ constructor(options) {
2215
+ super(options);
2216
+ }
2217
+ }
2218
+ // =============================================================================
2219
+ // Stream Creation Functions
2220
+ // =============================================================================
2221
+ /**
2222
+ * Create a readable stream with custom read implementation
2223
+ */
2224
+ export function createReadable(options) {
2225
+ const readable = new Readable(options);
2226
+ // Override read behavior if provided
2227
+ if (options?.read) {
2228
+ const originalRead = readable.read.bind(readable);
2229
+ readable.read = function (size) {
2230
+ options.read(size ?? 16384);
2231
+ return originalRead(size);
2232
+ };
2233
+ }
2234
+ return readable;
2235
+ }
2236
+ /**
2237
+ * Create a readable stream from an async iterable
2238
+ */
2239
+ export function createReadableFromAsyncIterable(iterable, options) {
2240
+ const readable = new Readable({ ...options, objectMode: options?.objectMode ?? true });
2241
+ (async () => {
2242
+ try {
2243
+ for await (const chunk of iterable) {
2244
+ if (!readable.push(chunk)) {
2245
+ // Backpressure - wait a bit
2246
+ await new Promise(resolve => setTimeout(resolve, 0));
2247
+ }
2248
+ }
2249
+ readable.push(null);
2250
+ }
2251
+ catch (err) {
2252
+ readable.destroy(err);
2253
+ }
2254
+ })();
2255
+ return readable;
2256
+ }
2257
+ /**
2258
+ * Create a readable stream from an array
2259
+ */
2260
+ export function createReadableFromArray(data, options) {
2261
+ let index = 0;
2262
+ const readable = new Readable({
2263
+ ...options,
2264
+ objectMode: options?.objectMode ?? true,
2265
+ read() {
2266
+ // Push data when read is called
2267
+ while (index < data.length) {
2268
+ if (!this.push(data[index++])) {
2269
+ // Backpressure - wait for next read
2270
+ return;
2271
+ }
2272
+ }
2273
+ // All data pushed, end the stream
2274
+ this.push(null);
2275
+ }
2276
+ });
2277
+ return readable;
2278
+ }
2279
+ /**
2280
+ * Create a writable stream with custom write implementation
2281
+ */
2282
+ export function createWritable(options) {
2283
+ // Create a custom WritableStream with user's handlers
2284
+ const stream = new WritableStream({
2285
+ write: async (chunk) => {
2286
+ if (options?.write) {
2287
+ return new Promise((resolve, reject) => {
2288
+ options.write(chunk, "utf8", err => {
2289
+ if (err) {
2290
+ reject(err);
2291
+ }
2292
+ else {
2293
+ resolve();
2294
+ }
2295
+ });
2296
+ });
2297
+ }
2298
+ },
2299
+ close: async () => {
2300
+ if (options?.final) {
2301
+ return new Promise((resolve, reject) => {
2302
+ options.final(err => {
2303
+ if (err) {
2304
+ reject(err);
2305
+ }
2306
+ else {
2307
+ resolve();
2308
+ }
2309
+ });
2310
+ });
2311
+ }
2312
+ }
2313
+ });
2314
+ return new Writable({ ...options, stream });
2315
+ }
2316
+ /**
2317
+ * Create a transform stream from a transform function
2318
+ */
2319
+ export function createTransform(transformFn, options) {
2320
+ return new Transform({
2321
+ ...options,
2322
+ transform: transformFn,
2323
+ flush: options?.flush
2324
+ });
2325
+ }
2326
+ /**
2327
+ * Create a collector stream
2328
+ */
2329
+ export function createCollector(options) {
2330
+ return new Collector(options);
2331
+ }
2332
+ /**
2333
+ * Create a passthrough stream
2334
+ */
2335
+ export function createPassThrough(options) {
2336
+ return new PassThrough(options);
2337
+ }
2338
+ /**
2339
+ * Create a pull stream
2340
+ */
2341
+ export function createPullStream(options) {
2342
+ return new PullStream(options);
2343
+ }
2344
+ /**
2345
+ * Create a buffered stream
2346
+ */
2347
+ export function createBufferedStream(options) {
2348
+ return new BufferedStream(options);
2349
+ }
2350
+ const isReadableStream = (value) => !!value && typeof value === "object" && typeof value.getReader === "function";
2351
+ const isAsyncIterable = (value) => {
2352
+ if (!value || (typeof value !== "object" && typeof value !== "function")) {
2353
+ return false;
2354
+ }
2355
+ return typeof value[Symbol.asyncIterator] === "function";
2356
+ };
2357
+ const isWritableStream = (value) => !!value && typeof value === "object" && typeof value.getWriter === "function";
2358
+ const isTransformStream = (value) => !!value &&
2359
+ typeof value === "object" &&
2360
+ !!value.readable &&
2361
+ !!value.writable &&
2362
+ isReadableStream(value.readable) &&
2363
+ isWritableStream(value.writable);
2364
+ const isPipelineOptions = (value) => {
2365
+ if (!value || typeof value !== "object") {
2366
+ return false;
2367
+ }
2368
+ // IMPORTANT:
2369
+ // Do NOT use `"end" in obj` here because streams have `.end()` and would be
2370
+ // misclassified as options, breaking argument parsing and potentially hanging.
2371
+ if (typeof value.pipe === "function" ||
2372
+ typeof value.write === "function" ||
2373
+ typeof value.end === "function" ||
2374
+ typeof value.getReader === "function" ||
2375
+ typeof value.getWriter === "function") {
2376
+ return false;
2377
+ }
2378
+ return (Object.prototype.hasOwnProperty.call(value, "signal") ||
2379
+ Object.prototype.hasOwnProperty.call(value, "end"));
2380
+ };
2381
+ const toBrowserPipelineStream = (stream) => {
2382
+ if (stream instanceof Readable ||
2383
+ stream instanceof Writable ||
2384
+ stream instanceof Transform ||
2385
+ stream instanceof Duplex) {
2386
+ return stream;
2387
+ }
2388
+ if (isTransformStream(stream)) {
2389
+ return Transform.fromWeb(stream);
2390
+ }
2391
+ if (isReadableStream(stream)) {
2392
+ return Readable.fromWeb(stream);
2393
+ }
2394
+ if (isWritableStream(stream)) {
2395
+ return Writable.fromWeb(stream);
2396
+ }
2397
+ return stream;
2398
+ };
2399
+ /**
2400
+ * Pipeline streams together with proper error handling and cleanup.
2401
+ * Supports both callback and promise-based usage like Node.js.
2402
+ *
2403
+ * @example
2404
+ * // Promise usage
2405
+ * await pipeline(source, transform, destination);
2406
+ *
2407
+ * @example
2408
+ * // With options
2409
+ * await pipeline(source, transform, destination, { signal: controller.signal });
2410
+ *
2411
+ * @example
2412
+ * // Callback usage
2413
+ * pipeline(source, transform, destination, (err) => {
2414
+ * if (err) console.error('Pipeline failed', err);
2415
+ * });
2416
+ */
2417
+ export function pipeline(...args) {
2418
+ // Parse arguments
2419
+ let streams;
2420
+ let options = {};
2421
+ let callback;
2422
+ const lastArg = args[args.length - 1];
2423
+ if (typeof lastArg === "function") {
2424
+ // Callback style: pipeline(s1, s2, s3, callback)
2425
+ callback = lastArg;
2426
+ streams = args.slice(0, -1);
2427
+ }
2428
+ else if (isPipelineOptions(lastArg)) {
2429
+ // Options style: pipeline(s1, s2, s3, { signal })
2430
+ options = lastArg;
2431
+ streams = args.slice(0, -1);
2432
+ }
2433
+ else {
2434
+ // No callback or options: pipeline(s1, s2, s3)
2435
+ streams = args;
2436
+ }
2437
+ const promise = new Promise((resolve, reject) => {
2438
+ if (streams.length < 2) {
2439
+ const err = new Error("Pipeline requires at least 2 streams");
2440
+ reject(err);
2441
+ return;
2442
+ }
2443
+ const normalized = streams.map(toBrowserPipelineStream);
2444
+ const source = normalized[0];
2445
+ const destination = normalized[normalized.length - 1];
2446
+ const transforms = normalized.slice(1, -1);
2447
+ let completed = false;
2448
+ const allStreams = [source, ...transforms, destination];
2449
+ const cleanup = (error) => {
2450
+ if (completed) {
2451
+ return;
2452
+ }
2453
+ completed = true;
2454
+ // Destroy all streams on error
2455
+ if (error) {
2456
+ for (const stream of allStreams) {
2457
+ if (typeof stream.destroy === "function") {
2458
+ stream.destroy(error);
2459
+ }
2460
+ }
2461
+ reject(error);
2462
+ }
2463
+ else {
2464
+ resolve();
2465
+ }
2466
+ };
2467
+ // Handle abort signal
2468
+ if (options.signal) {
2469
+ if (options.signal.aborted) {
2470
+ cleanup(new Error("Pipeline aborted"));
2471
+ return;
2472
+ }
2473
+ options.signal.addEventListener("abort", () => {
2474
+ cleanup(new Error("Pipeline aborted"));
2475
+ });
2476
+ }
2477
+ // Chain the streams
2478
+ let current = source;
2479
+ for (const transform of transforms) {
2480
+ current.pipe(transform);
2481
+ current = transform;
2482
+ }
2483
+ // Pipe to destination
2484
+ if (options.end !== false) {
2485
+ current.pipe(destination);
2486
+ }
2487
+ else {
2488
+ // Don't end destination
2489
+ current.on("data", chunk => destination.write(chunk));
2490
+ }
2491
+ // Handle completion
2492
+ destination.on("finish", () => cleanup());
2493
+ // Handle errors on all streams
2494
+ for (const stream of allStreams) {
2495
+ stream.on("error", (err) => cleanup(err));
2496
+ }
2497
+ });
2498
+ // If callback provided, use it
2499
+ if (callback) {
2500
+ promise.then(() => callback(null)).catch(err => callback(err));
2501
+ }
2502
+ return promise;
2503
+ }
2504
+ /**
2505
+ * Wait for a stream to finish, close, or error.
2506
+ * Node.js compatible with support for options and callbacks.
2507
+ *
2508
+ * @example
2509
+ * // Promise usage
2510
+ * await finished(stream);
2511
+ *
2512
+ * @example
2513
+ * // With options
2514
+ * await finished(stream, { readable: false }); // Only wait for writable side
2515
+ *
2516
+ * @example
2517
+ * // Callback usage
2518
+ * finished(stream, (err) => {
2519
+ * if (err) console.error('Stream error', err);
2520
+ * });
2521
+ */
2522
+ export function finished(stream, optionsOrCallback, callback) {
2523
+ let options = {};
2524
+ let cb;
2525
+ if (typeof optionsOrCallback === "function") {
2526
+ cb = optionsOrCallback;
2527
+ }
2528
+ else if (optionsOrCallback) {
2529
+ options = optionsOrCallback;
2530
+ cb = callback;
2531
+ }
2532
+ const promise = new Promise((resolve, reject) => {
2533
+ const normalizedStream = toBrowserPipelineStream(stream);
2534
+ let resolved = false;
2535
+ const done = (err) => {
2536
+ if (resolved) {
2537
+ return;
2538
+ }
2539
+ resolved = true;
2540
+ if (err && !options.error) {
2541
+ reject(err);
2542
+ }
2543
+ else {
2544
+ resolve();
2545
+ }
2546
+ };
2547
+ // Handle abort signal
2548
+ if (options.signal) {
2549
+ if (options.signal.aborted) {
2550
+ done(new Error("Aborted"));
2551
+ return;
2552
+ }
2553
+ options.signal.addEventListener("abort", () => {
2554
+ done(new Error("Aborted"));
2555
+ });
2556
+ }
2557
+ const checkReadable = options.readable !== false;
2558
+ const checkWritable = options.writable !== false;
2559
+ // Already finished?
2560
+ if (checkReadable && normalizedStream.readableEnded) {
2561
+ done();
2562
+ return;
2563
+ }
2564
+ if (checkWritable && normalizedStream.writableFinished) {
2565
+ done();
2566
+ return;
2567
+ }
2568
+ // Listen for events
2569
+ if (checkWritable) {
2570
+ normalizedStream.on("finish", () => done());
2571
+ }
2572
+ if (checkReadable) {
2573
+ normalizedStream.on("end", () => done());
2574
+ }
2575
+ normalizedStream.on("error", (err) => done(err));
2576
+ normalizedStream.on("close", () => done());
2577
+ });
2578
+ // If callback provided, use it
2579
+ if (cb) {
2580
+ promise.then(() => cb(null)).catch(err => cb(err));
2581
+ }
2582
+ return promise;
2583
+ }
2584
+ // =============================================================================
2585
+ // Utility Functions
2586
+ // =============================================================================
2587
+ /**
2588
+ * Convert a stream to a promise that resolves when finished
2589
+ */
2590
+ export async function streamToPromise(stream) {
2591
+ return finished(stream);
2592
+ }
2593
+ /**
2594
+ * Collect all data from a readable stream into a Uint8Array
2595
+ * (Browser equivalent of Node.js streamToBuffer)
2596
+ */
2597
+ export async function streamToUint8Array(stream) {
2598
+ let iterable;
2599
+ if (isReadableStream(stream)) {
2600
+ iterable = Readable.fromWeb(stream);
2601
+ }
2602
+ else if (isAsyncIterable(stream)) {
2603
+ iterable = stream;
2604
+ }
2605
+ else {
2606
+ throw new Error("streamToUint8Array: unsupported stream type");
2607
+ }
2608
+ const chunks = [];
2609
+ let totalLength = 0;
2610
+ for await (const chunk of iterable) {
2611
+ chunks.push(chunk);
2612
+ totalLength += chunk.length;
2613
+ }
2614
+ // Fast paths
2615
+ const len = chunks.length;
2616
+ if (len === 0) {
2617
+ return new Uint8Array(0);
2618
+ }
2619
+ if (len === 1) {
2620
+ return chunks[0];
2621
+ }
2622
+ // Use precalculated total length
2623
+ const result = new Uint8Array(totalLength);
2624
+ let offset = 0;
2625
+ for (let i = 0; i < len; i++) {
2626
+ result.set(chunks[i], offset);
2627
+ offset += chunks[i].length;
2628
+ }
2629
+ return result;
2630
+ }
2631
+ /**
2632
+ * Alias for streamToUint8Array (Node.js compatibility)
2633
+ */
2634
+ export const streamToBuffer = streamToUint8Array;
2635
+ /**
2636
+ * Collect all data from a readable stream into a string
2637
+ */
2638
+ export async function streamToString(stream, encoding) {
2639
+ const buffer = await streamToUint8Array(stream);
2640
+ return getTextDecoder(encoding).decode(buffer);
2641
+ }
2642
+ /**
2643
+ * Drain a stream (consume all data without processing)
2644
+ */
2645
+ export async function drainStream(stream) {
2646
+ let iterable;
2647
+ if (isReadableStream(stream)) {
2648
+ iterable = Readable.fromWeb(stream);
2649
+ }
2650
+ else if (isAsyncIterable(stream)) {
2651
+ iterable = stream;
2652
+ }
2653
+ else {
2654
+ throw new Error("drainStream: unsupported stream type");
2655
+ }
2656
+ for await (const _chunk of iterable) {
2657
+ // Consume data
2658
+ }
2659
+ }
2660
+ /**
2661
+ * Copy from a readable stream to a writable stream
2662
+ */
2663
+ export async function copyStream(source, destination) {
2664
+ return pipeline(source, destination);
2665
+ }
2666
+ // =============================================================================
2667
+ // Type Guards
2668
+ // =============================================================================
2669
+ /**
2670
+ * Check if an object is a transform stream
2671
+ */
2672
+ export function isTransform(obj) {
2673
+ if (obj == null) {
2674
+ return false;
2675
+ }
2676
+ if (obj instanceof Transform) {
2677
+ return true;
2678
+ }
2679
+ const o = obj;
2680
+ return (typeof o.read === "function" &&
2681
+ typeof o.pipe === "function" &&
2682
+ typeof o.write === "function" &&
2683
+ typeof o.end === "function" &&
2684
+ typeof o._transform === "function");
2685
+ }
2686
+ /**
2687
+ * Check if an object is a duplex stream
2688
+ * Note: In Node.js, Transform extends Duplex, so Transform is also a Duplex
2689
+ */
2690
+ export function isDuplex(obj) {
2691
+ if (obj == null) {
2692
+ return false;
2693
+ }
2694
+ if (obj instanceof Duplex || obj instanceof Transform) {
2695
+ return true;
2696
+ }
2697
+ const o = obj;
2698
+ return (typeof o.read === "function" &&
2699
+ typeof o.pipe === "function" &&
2700
+ typeof o.write === "function" &&
2701
+ typeof o.end === "function");
2702
+ }
2703
+ /**
2704
+ * Check if an object is any kind of stream
2705
+ */
2706
+ export function isStream(obj) {
2707
+ if (obj == null) {
2708
+ return false;
2709
+ }
2710
+ if (obj instanceof Readable || obj instanceof Writable) {
2711
+ return true;
2712
+ }
2713
+ const o = obj;
2714
+ return ((typeof o.read === "function" && typeof o.pipe === "function") ||
2715
+ (typeof o.write === "function" && typeof o.end === "function"));
2716
+ }
2717
+ // =============================================================================
2718
+ // Additional Utility Functions (Node.js Compatibility)
2719
+ // =============================================================================
2720
+ /**
2721
+ * Add abort signal handling to any stream
2722
+ */
2723
+ export function addAbortSignal(signal, stream) {
2724
+ if (signal.aborted) {
2725
+ stream.destroy(new Error("Aborted"));
2726
+ return stream;
2727
+ }
2728
+ const onAbort = () => {
2729
+ stream.destroy(new Error("Aborted"));
2730
+ };
2731
+ signal.addEventListener("abort", onAbort, { once: true });
2732
+ // Clean up when stream is destroyed
2733
+ stream.on("close", () => {
2734
+ signal.removeEventListener("abort", onAbort);
2735
+ });
2736
+ return stream;
2737
+ }
2738
+ /**
2739
+ * Create a duplex stream from a pair of readable and writable streams
2740
+ */
2741
+ export function createDuplex(options) {
2742
+ const readableObjectMode = options?.readableObjectMode ?? options?.objectMode;
2743
+ const writableObjectMode = options?.writableObjectMode ?? options?.objectMode;
2744
+ const duplex = new Duplex({
2745
+ allowHalfOpen: options?.allowHalfOpen,
2746
+ readableHighWaterMark: options?.readableHighWaterMark,
2747
+ writableHighWaterMark: options?.writableHighWaterMark,
2748
+ readableObjectMode,
2749
+ writableObjectMode
2750
+ });
2751
+ // If custom readable/writable provided, pipe them
2752
+ if (options?.readable) {
2753
+ const readable = options.readable;
2754
+ readable.on?.("data", (chunk) => duplex.push(chunk));
2755
+ readable.on?.("end", () => duplex.push(null));
2756
+ readable.on?.("error", (err) => duplex.destroy(err));
2757
+ }
2758
+ if (options?.writable) {
2759
+ const writable = options.writable;
2760
+ duplex.on("data", (chunk) => writable.write?.(chunk));
2761
+ duplex.on("finish", () => writable.end?.());
2762
+ }
2763
+ // If custom read/write/final provided, override methods
2764
+ if (options?.write) {
2765
+ const _originalWrite = duplex.write.bind(duplex); // Keep bound reference for potential future use
2766
+ duplex.write = function (chunk, encodingOrCallback, callback) {
2767
+ const encoding = typeof encodingOrCallback === "string" ? encodingOrCallback : "utf8";
2768
+ const cb = typeof encodingOrCallback === "function" ? encodingOrCallback : (callback ?? (() => { }));
2769
+ options.write.call(duplex, chunk, encoding, cb);
2770
+ return true;
2771
+ };
2772
+ }
2773
+ if (options?.final) {
2774
+ const originalEnd = duplex.end.bind(duplex);
2775
+ duplex.end = function (chunkOrCallback, encodingOrCallback, callback) {
2776
+ const cb = typeof chunkOrCallback === "function"
2777
+ ? chunkOrCallback
2778
+ : typeof encodingOrCallback === "function"
2779
+ ? encodingOrCallback
2780
+ : (callback ?? (() => { }));
2781
+ if (chunkOrCallback !== undefined && typeof chunkOrCallback !== "function") {
2782
+ duplex.write(chunkOrCallback);
2783
+ }
2784
+ // Call custom final handler
2785
+ options.final.call(duplex, (err) => {
2786
+ if (err) {
2787
+ duplex.emit("error", err);
2788
+ }
2789
+ else {
2790
+ duplex.emit("finish");
2791
+ }
2792
+ // Call original end to properly close writable side
2793
+ originalEnd();
2794
+ cb();
2795
+ });
2796
+ return duplex;
2797
+ };
2798
+ }
2799
+ if (options?.destroy) {
2800
+ const originalDestroy = duplex.destroy.bind(duplex);
2801
+ duplex.destroy = function (error) {
2802
+ options.destroy.call(duplex, error ?? null, (err) => {
2803
+ if (err) {
2804
+ duplex.emit("error", err);
2805
+ originalDestroy(err);
2806
+ }
2807
+ else {
2808
+ originalDestroy(error);
2809
+ }
2810
+ });
2811
+ return duplex;
2812
+ };
2813
+ }
2814
+ return duplex;
2815
+ }
2816
+ /**
2817
+ * Create a readable stream from a generator function
2818
+ */
2819
+ export function createReadableFromGenerator(generator, options) {
2820
+ const readable = new Readable({ ...options, objectMode: options?.objectMode ?? true });
2821
+ (async () => {
2822
+ try {
2823
+ for await (const chunk of generator()) {
2824
+ if (!readable.push(chunk)) {
2825
+ // Backpressure
2826
+ await new Promise(resolve => setTimeout(resolve, 0));
2827
+ }
2828
+ }
2829
+ readable.push(null);
2830
+ }
2831
+ catch (err) {
2832
+ readable.destroy(err);
2833
+ }
2834
+ })();
2835
+ return readable;
2836
+ }
2837
+ /**
2838
+ * Create a readable stream from a Promise
2839
+ */
2840
+ export function createReadableFromPromise(promise, options) {
2841
+ const readable = new Readable({ ...options, objectMode: options?.objectMode ?? true });
2842
+ promise
2843
+ .then(value => {
2844
+ readable.push(value);
2845
+ readable.push(null);
2846
+ })
2847
+ .catch(err => {
2848
+ readable.destroy(err);
2849
+ });
2850
+ return readable;
2851
+ }
2852
+ /**
2853
+ * Compose multiple transform streams into one
2854
+ * Data flows through each transform in sequence
2855
+ */
2856
+ export function compose(...transforms) {
2857
+ const len = transforms.length;
2858
+ if (len === 0) {
2859
+ return new Transform({
2860
+ objectMode: true,
2861
+ transform: chunk => chunk
2862
+ });
2863
+ }
2864
+ const isNativeTransform = (stream) => stream instanceof Transform;
2865
+ if (len === 1 && isNativeTransform(transforms[0])) {
2866
+ return transforms[0];
2867
+ }
2868
+ // Chain the transforms: first → second → ... → last
2869
+ const first = transforms[0];
2870
+ const last = transforms[len - 1];
2871
+ // Pipe all transforms together
2872
+ for (let i = 0; i < len - 1; i++) {
2873
+ transforms[i].pipe(transforms[i + 1]);
2874
+ }
2875
+ class ComposedTransform extends Transform {
2876
+ constructor() {
2877
+ super(...arguments);
2878
+ this._dataForwarding = false;
2879
+ this._endForwarding = false;
2880
+ }
2881
+ on(event, listener) {
2882
+ if (event === "data" && !this._dataForwarding) {
2883
+ this._dataForwarding = true;
2884
+ last.on("data", (chunk) => this.emit("data", chunk));
2885
+ }
2886
+ if (event === "end" && !this._endForwarding) {
2887
+ this._endForwarding = true;
2888
+ last.on("end", () => this.emit("end"));
2889
+ }
2890
+ return super.on(event, listener);
2891
+ }
2892
+ write(chunk, encodingOrCallback, callback) {
2893
+ if (typeof encodingOrCallback === "function") {
2894
+ return first.write(chunk, encodingOrCallback);
2895
+ }
2896
+ return first.write(chunk, encodingOrCallback, callback);
2897
+ }
2898
+ end(chunkOrCallback, encodingOrCallback, callback) {
2899
+ if (typeof chunkOrCallback === "function") {
2900
+ first.end(chunkOrCallback);
2901
+ return this;
2902
+ }
2903
+ if (typeof encodingOrCallback === "function") {
2904
+ first.end(chunkOrCallback, encodingOrCallback);
2905
+ return this;
2906
+ }
2907
+ first.end(chunkOrCallback, encodingOrCallback, callback);
2908
+ return this;
2909
+ }
2910
+ pipe(destination) {
2911
+ return last.pipe(destination);
2912
+ }
2913
+ destroy(error) {
2914
+ for (const t of transforms) {
2915
+ t.destroy(error);
2916
+ }
2917
+ super.destroy(error);
2918
+ }
2919
+ read(size) {
2920
+ return typeof last.read === "function" ? last.read(size) : null;
2921
+ }
2922
+ async *[Symbol.asyncIterator]() {
2923
+ const it = last?.[Symbol.asyncIterator]?.();
2924
+ if (it) {
2925
+ for await (const chunk of it) {
2926
+ yield chunk;
2927
+ }
2928
+ return;
2929
+ }
2930
+ yield* super[Symbol.asyncIterator]();
2931
+ }
2932
+ }
2933
+ const composed = new ComposedTransform({
2934
+ objectMode: first?.objectMode ?? true,
2935
+ transform: chunk => chunk
2936
+ });
2937
+ // Forward errors from any transform
2938
+ for (const t of transforms) {
2939
+ t.on("error", (err) => {
2940
+ composed.emit("error", err);
2941
+ });
2942
+ }
2943
+ // Reflect underlying readability/writability like the previous duck-typed wrapper
2944
+ Object.defineProperty(composed, "readable", {
2945
+ get: () => last.readable
2946
+ });
2947
+ Object.defineProperty(composed, "writable", {
2948
+ get: () => first.writable
2949
+ });
2950
+ return composed;
2951
+ }
2952
+ /**
2953
+ * Wait for multiple streams to finish
2954
+ */
2955
+ export async function finishedAll(streams) {
2956
+ const len = streams.length;
2957
+ if (len === 0) {
2958
+ return;
2959
+ }
2960
+ if (len === 1) {
2961
+ await finished(streams[0]);
2962
+ return;
2963
+ }
2964
+ // Pre-allocate promise array
2965
+ const promises = new Array(len);
2966
+ for (let i = 0; i < len; i++) {
2967
+ promises[i] = finished(streams[i]);
2968
+ }
2969
+ await Promise.all(promises);
2970
+ }
2971
+ // Reusable empty push callback for createEmptyReadable
2972
+ const pushNull = (readable) => {
2973
+ readable.push(null);
2974
+ };
2975
+ /**
2976
+ * Create a readable stream that emits nothing and immediately ends
2977
+ */
2978
+ export function createEmptyReadable(options) {
2979
+ const readable = new Readable(options);
2980
+ queueMicrotask(() => pushNull(readable));
2981
+ return readable;
2982
+ }
2983
+ // Reusable null write handler
2984
+ const nullWriteHandler = {
2985
+ write: () => {
2986
+ // Discard
2987
+ }
2988
+ };
2989
+ /**
2990
+ * Create a writable stream that discards all data (like /dev/null)
2991
+ */
2992
+ export function createNullWritable(options) {
2993
+ return new Writable({
2994
+ ...options,
2995
+ stream: new WritableStream(nullWriteHandler)
2996
+ });
2997
+ }
2998
+ /**
2999
+ * Promisified version of once for events
3000
+ */
3001
+ export function once(emitter, event, options) {
3002
+ return new Promise((resolve, reject) => {
3003
+ let onAbort;
3004
+ let resolved = false;
3005
+ const cleanup = () => {
3006
+ if (resolved) {
3007
+ return;
3008
+ }
3009
+ resolved = true;
3010
+ emitter.off(event, onEvent);
3011
+ emitter.off("error", onError);
3012
+ if (onAbort && options?.signal) {
3013
+ options.signal.removeEventListener("abort", onAbort);
3014
+ }
3015
+ };
3016
+ const onEvent = (...args) => {
3017
+ cleanup();
3018
+ resolve(args);
3019
+ };
3020
+ const onError = (err) => {
3021
+ cleanup();
3022
+ reject(err);
3023
+ };
3024
+ emitter.once(event, onEvent);
3025
+ emitter.once("error", onError);
3026
+ if (options?.signal) {
3027
+ if (options.signal.aborted) {
3028
+ cleanup();
3029
+ reject(new Error("Aborted"));
3030
+ return;
3031
+ }
3032
+ onAbort = () => {
3033
+ cleanup();
3034
+ reject(new Error("Aborted"));
3035
+ };
3036
+ options.signal.addEventListener("abort", onAbort);
3037
+ }
3038
+ });
3039
+ }
3040
+ /**
3041
+ * Convert a callback-based stream operation to a promise
3042
+ */
3043
+ export function promisify(fn) {
3044
+ return new Promise((resolve, reject) => {
3045
+ fn((error, result) => {
3046
+ if (error) {
3047
+ reject(error);
3048
+ }
3049
+ else {
3050
+ resolve(result);
3051
+ }
3052
+ });
3053
+ });
3054
+ }
3055
+ // =============================================================================
3056
+ // Default High Water Mark Management
3057
+ // =============================================================================
3058
+ let _defaultHighWaterMark = 16384; // 16KB default
3059
+ let _defaultHighWaterMarkObjectMode = 16; // 16 objects default
3060
+ /**
3061
+ * Get the default high water mark for streams
3062
+ */
3063
+ export function getDefaultHighWaterMark(objectMode) {
3064
+ return objectMode ? _defaultHighWaterMarkObjectMode : _defaultHighWaterMark;
3065
+ }
3066
+ /**
3067
+ * Set the default high water mark for streams
3068
+ */
3069
+ export function setDefaultHighWaterMark(objectMode, value) {
3070
+ if (objectMode) {
3071
+ _defaultHighWaterMarkObjectMode = value;
3072
+ }
3073
+ else {
3074
+ _defaultHighWaterMark = value;
3075
+ }
3076
+ }
3077
+ // =============================================================================
3078
+ // Stream State Inspection Functions
3079
+ // =============================================================================
3080
+ /**
3081
+ * Check if a stream has been destroyed
3082
+ */
3083
+ export function isDestroyed(stream) {
3084
+ return !!stream?.destroyed;
3085
+ }
3086
+ /**
3087
+ * Check if a readable stream has been disturbed (read from)
3088
+ */
3089
+ export function isDisturbed(stream) {
3090
+ if (stream instanceof Readable) {
3091
+ return Readable.isDisturbed(stream);
3092
+ }
3093
+ if (stream instanceof Duplex) {
3094
+ return Readable.isDisturbed(stream._readable);
3095
+ }
3096
+ const s = stream;
3097
+ return (s?.readableDidRead === true ||
3098
+ s?._didRead === true ||
3099
+ s?._ended === true ||
3100
+ s?._destroyed === true);
3101
+ }
3102
+ /**
3103
+ * Check if a stream has an error
3104
+ */
3105
+ export function isErrored(stream) {
3106
+ const err = stream?.errored;
3107
+ return err !== null && err !== undefined;
3108
+ }
3109
+ /**
3110
+ * Check if a stream is readable
3111
+ */
3112
+ export function isReadable(stream) {
3113
+ if (stream == null) {
3114
+ return false;
3115
+ }
3116
+ if (stream instanceof Readable || stream instanceof Transform) {
3117
+ return true;
3118
+ }
3119
+ if (stream instanceof Duplex) {
3120
+ return stream._readable instanceof Readable;
3121
+ }
3122
+ const o = stream;
3123
+ return typeof o.read === "function" && typeof o.pipe === "function";
3124
+ }
3125
+ /**
3126
+ * Check if a stream is writable
3127
+ */
3128
+ export function isWritable(stream) {
3129
+ if (stream == null) {
3130
+ return false;
3131
+ }
3132
+ if (stream instanceof Writable || stream instanceof Transform) {
3133
+ return true;
3134
+ }
3135
+ if (stream instanceof Duplex) {
3136
+ return stream._writable instanceof Writable;
3137
+ }
3138
+ const o = stream;
3139
+ return typeof o.write === "function" && typeof o.end === "function";
3140
+ }
3141
+ // =============================================================================
3142
+ // Duplex Pair
3143
+ // =============================================================================
3144
+ /**
3145
+ * Create a pair of connected Duplex streams
3146
+ * Data written to one stream can be read from the other
3147
+ */
3148
+ export function duplexPair(options) {
3149
+ const stream1 = new Duplex(options);
3150
+ const stream2 = new Duplex(options);
3151
+ // Override write to push to the other stream's readable
3152
+ stream1.write = function (chunk) {
3153
+ // Push to stream2's readable side
3154
+ stream2.push(chunk);
3155
+ return true;
3156
+ };
3157
+ stream2.write = function (chunk) {
3158
+ // Push to stream1's readable side
3159
+ stream1.push(chunk);
3160
+ return true;
3161
+ };
3162
+ // Override end to signal EOF to the other stream
3163
+ const originalEnd1 = stream1.end.bind(stream1);
3164
+ const originalEnd2 = stream2.end.bind(stream2);
3165
+ stream1.end = function (chunk) {
3166
+ if (chunk !== undefined && typeof chunk !== "function") {
3167
+ stream2.push(chunk);
3168
+ }
3169
+ stream2.push(null);
3170
+ return originalEnd1(typeof chunk === "function" ? chunk : undefined);
3171
+ };
3172
+ stream2.end = function (chunk) {
3173
+ if (chunk !== undefined && typeof chunk !== "function") {
3174
+ stream1.push(chunk);
3175
+ }
3176
+ stream1.push(null);
3177
+ return originalEnd2(typeof chunk === "function" ? chunk : undefined);
3178
+ };
3179
+ return [stream1, stream2];
3180
+ }
3181
+ // =============================================================================
3182
+ // Stream Consumers (like stream.consumers in Node.js)
3183
+ // =============================================================================
3184
+ // Helper function to collect stream chunks with total length tracking
3185
+ async function collectStreamChunks(stream) {
3186
+ const chunks = [];
3187
+ let totalLength = 0;
3188
+ let iterable;
3189
+ if (isReadableStream(stream)) {
3190
+ iterable = Readable.fromWeb(stream);
3191
+ }
3192
+ else if (isAsyncIterable(stream)) {
3193
+ iterable = stream;
3194
+ }
3195
+ else {
3196
+ throw new Error("collectStreamChunks: unsupported stream type");
3197
+ }
3198
+ for await (const chunk of iterable) {
3199
+ chunks.push(chunk);
3200
+ totalLength += chunk.length;
3201
+ }
3202
+ return { chunks, totalLength };
3203
+ }
3204
+ // Helper to concatenate with known length (faster)
3205
+ function concatWithLength(chunks, totalLength) {
3206
+ const len = chunks.length;
3207
+ if (len === 0) {
3208
+ return new Uint8Array(0);
3209
+ }
3210
+ if (len === 1) {
3211
+ return chunks[0];
3212
+ }
3213
+ const result = new Uint8Array(totalLength);
3214
+ let offset = 0;
3215
+ for (let i = 0; i < len; i++) {
3216
+ result.set(chunks[i], offset);
3217
+ offset += chunks[i].length;
3218
+ }
3219
+ return result;
3220
+ }
3221
+ export const consumers = {
3222
+ /**
3223
+ * Consume entire stream as ArrayBuffer
3224
+ */
3225
+ async arrayBuffer(stream) {
3226
+ const { chunks, totalLength } = await collectStreamChunks(stream);
3227
+ const combined = concatWithLength(chunks, totalLength);
3228
+ return combined.buffer.slice(combined.byteOffset, combined.byteOffset + combined.byteLength);
3229
+ },
3230
+ /**
3231
+ * Consume entire stream as Blob
3232
+ */
3233
+ async blob(stream, options) {
3234
+ const { chunks } = await collectStreamChunks(stream);
3235
+ return new Blob(chunks, options);
3236
+ },
3237
+ /**
3238
+ * Consume entire stream as Buffer (Uint8Array in browser)
3239
+ */
3240
+ async buffer(stream) {
3241
+ const { chunks, totalLength } = await collectStreamChunks(stream);
3242
+ return concatWithLength(chunks, totalLength);
3243
+ },
3244
+ /**
3245
+ * Consume entire stream as JSON
3246
+ */
3247
+ async json(stream) {
3248
+ const text = await consumers.text(stream);
3249
+ return JSON.parse(text);
3250
+ },
3251
+ /**
3252
+ * Consume entire stream as text
3253
+ */
3254
+ async text(stream, encoding) {
3255
+ const { chunks, totalLength } = await collectStreamChunks(stream);
3256
+ const combined = concatWithLength(chunks, totalLength);
3257
+ const decoder = encoding ? getTextDecoder(encoding) : textDecoder;
3258
+ return decoder.decode(combined);
3259
+ }
3260
+ };
3261
+ // =============================================================================
3262
+ // Promises API (like stream/promises in Node.js)
3263
+ // =============================================================================
3264
+ export const promises = {
3265
+ pipeline,
3266
+ finished
3267
+ };