@cj-tech-master/excelts 3.0.1 → 3.1.0-canary.20260102041828.82ed571

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