@cj-tech-master/excelts 4.2.1-canary.20260111102127.f808a37 → 4.2.1

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 (232) hide show
  1. package/THIRD_PARTY_NOTICES.md +31 -0
  2. package/dist/browser/index.browser.d.ts +0 -1
  3. package/dist/browser/index.browser.js +0 -12
  4. package/dist/browser/modules/archive/byte-queue.d.ts +18 -0
  5. package/dist/browser/modules/archive/byte-queue.js +125 -0
  6. package/dist/browser/modules/archive/{compression/compress.base.js → compress.base.js} +1 -1
  7. package/dist/browser/modules/archive/{compression/compress.browser.d.ts → compress.browser.d.ts} +8 -2
  8. package/dist/{esm/modules/archive/compression → browser/modules/archive}/compress.browser.js +11 -3
  9. package/dist/browser/modules/archive/{compression/compress.d.ts → compress.d.ts} +2 -2
  10. package/dist/{esm/modules/archive/compression → browser/modules/archive}/compress.js +1 -1
  11. package/dist/browser/modules/archive/{compression/crc32.browser.d.ts → crc32.browser.d.ts} +1 -1
  12. package/dist/browser/modules/archive/{compression/crc32.d.ts → crc32.d.ts} +1 -1
  13. package/dist/browser/modules/archive/{compression/crc32.js → crc32.js} +1 -1
  14. package/dist/browser/modules/archive/defaults.d.ts +0 -1
  15. package/dist/browser/modules/archive/defaults.js +3 -6
  16. package/dist/browser/modules/archive/{compression/deflate-fallback.js → deflate-fallback.js} +1 -1
  17. package/dist/browser/modules/archive/{unzip/extract.d.ts → extract.d.ts} +2 -2
  18. package/dist/browser/modules/archive/index.base.d.ts +4 -4
  19. package/dist/browser/modules/archive/index.base.js +6 -3
  20. package/dist/browser/modules/archive/index.browser.d.ts +4 -3
  21. package/dist/browser/modules/archive/index.browser.js +7 -3
  22. package/dist/browser/modules/archive/index.d.ts +4 -3
  23. package/dist/browser/modules/archive/index.js +5 -3
  24. package/dist/browser/modules/archive/{unzip/stream.base.d.ts → parse.base.d.ts} +2 -36
  25. package/dist/browser/modules/archive/parse.base.js +644 -0
  26. package/dist/browser/modules/archive/{unzip/stream.browser.d.ts → parse.browser.d.ts} +1 -1
  27. package/dist/{esm/modules/archive/unzip/stream.browser.js → browser/modules/archive/parse.browser.js} +110 -371
  28. package/dist/browser/modules/archive/{unzip/stream.d.ts → parse.d.ts} +2 -2
  29. package/dist/{esm/modules/archive/unzip/stream.js → browser/modules/archive/parse.js} +5 -6
  30. package/dist/browser/modules/archive/{compression/streaming-compress.browser.d.ts → streaming-compress.browser.d.ts} +2 -2
  31. package/dist/browser/modules/archive/{compression/streaming-compress.browser.js → streaming-compress.browser.js} +3 -3
  32. package/dist/browser/modules/archive/{compression/streaming-compress.d.ts → streaming-compress.d.ts} +2 -2
  33. package/dist/browser/modules/archive/{compression/streaming-compress.js → streaming-compress.js} +2 -2
  34. package/dist/browser/modules/archive/{zip/stream.d.ts → streaming-zip.d.ts} +5 -28
  35. package/dist/{esm/modules/archive/zip/stream.js → browser/modules/archive/streaming-zip.js} +48 -192
  36. package/dist/browser/modules/archive/utils/bytes.js +16 -16
  37. package/dist/browser/modules/archive/utils/parse-buffer.js +23 -21
  38. package/dist/browser/modules/archive/utils/timestamps.js +1 -62
  39. package/dist/browser/modules/archive/utils/zip-extra-fields.d.ts +1 -1
  40. package/dist/browser/modules/archive/utils/zip-extra-fields.js +14 -26
  41. package/dist/browser/modules/archive/utils/zip-extra.d.ts +18 -0
  42. package/dist/browser/modules/archive/utils/zip-extra.js +68 -0
  43. package/dist/browser/modules/archive/zip-builder.d.ts +117 -0
  44. package/dist/browser/modules/archive/zip-builder.js +292 -0
  45. package/dist/browser/modules/archive/zip-constants.d.ts +18 -0
  46. package/dist/browser/modules/archive/zip-constants.js +23 -0
  47. package/dist/{esm/modules/archive/zip → browser/modules/archive}/zip-entry-metadata.js +3 -3
  48. package/dist/{types/modules/archive/unzip → browser/modules/archive}/zip-parser.d.ts +1 -1
  49. package/dist/{esm/modules/archive/unzip → browser/modules/archive}/zip-parser.js +24 -38
  50. package/dist/browser/modules/archive/{zip-spec/zip-records.d.ts → zip-records.d.ts} +0 -20
  51. package/dist/browser/modules/archive/zip-records.js +84 -0
  52. package/dist/browser/modules/excel/stream/workbook-reader.browser.js +1 -1
  53. package/dist/browser/modules/excel/stream/workbook-writer.browser.d.ts +1 -1
  54. package/dist/browser/modules/excel/stream/workbook-writer.browser.js +1 -1
  55. package/dist/browser/modules/excel/xlsx/xlsx.browser.js +6 -3
  56. package/dist/browser/modules/excel/xlsx/xlsx.js +1 -1
  57. package/dist/browser/modules/stream/streams.browser.d.ts +30 -28
  58. package/dist/browser/modules/stream/streams.browser.js +710 -830
  59. package/dist/browser/modules/stream/streams.js +58 -140
  60. package/dist/cjs/modules/archive/byte-queue.js +129 -0
  61. package/dist/cjs/modules/archive/{compression/compress.base.js → compress.base.js} +1 -1
  62. package/dist/cjs/modules/archive/{compression/compress.browser.js → compress.browser.js} +11 -3
  63. package/dist/cjs/modules/archive/{compression/compress.js → compress.js} +1 -1
  64. package/dist/cjs/modules/archive/{compression/crc32.js → crc32.js} +1 -1
  65. package/dist/cjs/modules/archive/defaults.js +4 -7
  66. package/dist/cjs/modules/archive/{compression/deflate-fallback.js → deflate-fallback.js} +1 -1
  67. package/dist/cjs/modules/archive/index.base.js +19 -9
  68. package/dist/cjs/modules/archive/index.browser.js +10 -4
  69. package/dist/cjs/modules/archive/index.js +8 -4
  70. package/dist/cjs/modules/archive/parse.base.js +666 -0
  71. package/dist/cjs/modules/archive/{unzip/stream.browser.js → parse.browser.js} +111 -372
  72. package/dist/cjs/modules/archive/{unzip/stream.js → parse.js} +8 -9
  73. package/dist/cjs/modules/archive/{compression/streaming-compress.browser.js → streaming-compress.browser.js} +3 -3
  74. package/dist/cjs/modules/archive/{compression/streaming-compress.js → streaming-compress.js} +2 -2
  75. package/dist/cjs/modules/archive/{zip/stream.js → streaming-zip.js} +50 -194
  76. package/dist/cjs/modules/archive/utils/bytes.js +16 -16
  77. package/dist/cjs/modules/archive/utils/parse-buffer.js +23 -21
  78. package/dist/cjs/modules/archive/utils/timestamps.js +3 -64
  79. package/dist/cjs/modules/archive/utils/zip-extra-fields.js +14 -26
  80. package/dist/cjs/modules/archive/utils/zip-extra.js +74 -0
  81. package/dist/cjs/modules/archive/zip-builder.js +297 -0
  82. package/dist/cjs/modules/archive/zip-constants.js +26 -0
  83. package/dist/cjs/modules/archive/{zip/zip-entry-metadata.js → zip-entry-metadata.js} +5 -5
  84. package/dist/cjs/modules/archive/{unzip/zip-parser.js → zip-parser.js} +33 -47
  85. package/dist/cjs/modules/archive/zip-records.js +90 -0
  86. package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +2 -2
  87. package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +4 -4
  88. package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +9 -6
  89. package/dist/cjs/modules/excel/xlsx/xlsx.js +2 -2
  90. package/dist/cjs/modules/stream/streams.browser.js +710 -830
  91. package/dist/cjs/modules/stream/streams.js +58 -140
  92. package/dist/esm/index.browser.js +0 -12
  93. package/dist/esm/modules/archive/byte-queue.js +125 -0
  94. package/dist/esm/modules/archive/{compression/compress.base.js → compress.base.js} +1 -1
  95. package/dist/{browser/modules/archive/compression → esm/modules/archive}/compress.browser.js +11 -3
  96. package/dist/{browser/modules/archive/compression → esm/modules/archive}/compress.js +1 -1
  97. package/dist/esm/modules/archive/{compression/crc32.js → crc32.js} +1 -1
  98. package/dist/esm/modules/archive/defaults.js +3 -6
  99. package/dist/esm/modules/archive/{compression/deflate-fallback.js → deflate-fallback.js} +1 -1
  100. package/dist/esm/modules/archive/index.base.js +6 -3
  101. package/dist/esm/modules/archive/index.browser.js +7 -3
  102. package/dist/esm/modules/archive/index.js +5 -3
  103. package/dist/esm/modules/archive/parse.base.js +644 -0
  104. package/dist/{browser/modules/archive/unzip/stream.browser.js → esm/modules/archive/parse.browser.js} +110 -371
  105. package/dist/{browser/modules/archive/unzip/stream.js → esm/modules/archive/parse.js} +5 -6
  106. package/dist/esm/modules/archive/{compression/streaming-compress.browser.js → streaming-compress.browser.js} +3 -3
  107. package/dist/esm/modules/archive/{compression/streaming-compress.js → streaming-compress.js} +2 -2
  108. package/dist/{browser/modules/archive/zip/stream.js → esm/modules/archive/streaming-zip.js} +48 -192
  109. package/dist/esm/modules/archive/utils/bytes.js +16 -16
  110. package/dist/esm/modules/archive/utils/parse-buffer.js +23 -21
  111. package/dist/esm/modules/archive/utils/timestamps.js +1 -62
  112. package/dist/esm/modules/archive/utils/zip-extra-fields.js +14 -26
  113. package/dist/esm/modules/archive/utils/zip-extra.js +68 -0
  114. package/dist/esm/modules/archive/zip-builder.js +292 -0
  115. package/dist/esm/modules/archive/zip-constants.js +23 -0
  116. package/dist/{browser/modules/archive/zip → esm/modules/archive}/zip-entry-metadata.js +3 -3
  117. package/dist/{browser/modules/archive/unzip → esm/modules/archive}/zip-parser.js +24 -38
  118. package/dist/esm/modules/archive/zip-records.js +84 -0
  119. package/dist/esm/modules/excel/stream/workbook-reader.browser.js +1 -1
  120. package/dist/esm/modules/excel/stream/workbook-writer.browser.js +1 -1
  121. package/dist/esm/modules/excel/xlsx/xlsx.browser.js +6 -3
  122. package/dist/esm/modules/excel/xlsx/xlsx.js +1 -1
  123. package/dist/esm/modules/stream/streams.browser.js +710 -830
  124. package/dist/esm/modules/stream/streams.js +58 -140
  125. package/dist/iife/THIRD_PARTY_NOTICES.md +31 -0
  126. package/dist/iife/excelts.iife.js +4425 -6215
  127. package/dist/iife/excelts.iife.js.map +1 -1
  128. package/dist/iife/excelts.iife.min.js +31 -103
  129. package/dist/types/index.browser.d.ts +0 -1
  130. package/dist/types/modules/archive/byte-queue.d.ts +18 -0
  131. package/dist/types/modules/archive/{compression/compress.browser.d.ts → compress.browser.d.ts} +8 -2
  132. package/dist/types/modules/archive/defaults.d.ts +0 -1
  133. package/dist/types/modules/archive/index.base.d.ts +4 -4
  134. package/dist/types/modules/archive/index.browser.d.ts +4 -3
  135. package/dist/types/modules/archive/index.d.ts +4 -3
  136. package/dist/types/modules/archive/{unzip/stream.base.d.ts → parse.base.d.ts} +4 -38
  137. package/dist/types/modules/archive/{unzip/stream.browser.d.ts → parse.browser.d.ts} +2 -2
  138. package/dist/types/modules/archive/{unzip/stream.d.ts → parse.d.ts} +3 -3
  139. package/dist/types/modules/archive/{compression/streaming-compress.browser.d.ts → streaming-compress.browser.d.ts} +1 -1
  140. package/dist/types/modules/archive/{zip/stream.d.ts → streaming-zip.d.ts} +6 -29
  141. package/dist/types/modules/archive/utils/zip-extra-fields.d.ts +1 -1
  142. package/dist/types/modules/archive/utils/zip-extra.d.ts +18 -0
  143. package/dist/types/modules/archive/zip-builder.d.ts +117 -0
  144. package/dist/types/modules/archive/zip-constants.d.ts +18 -0
  145. package/dist/types/modules/archive/{zip/zip-entry-metadata.d.ts → zip-entry-metadata.d.ts} +1 -1
  146. package/dist/{browser/modules/archive/unzip → types/modules/archive}/zip-parser.d.ts +1 -1
  147. package/dist/types/modules/archive/{zip-spec/zip-records.d.ts → zip-records.d.ts} +0 -20
  148. package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +1 -1
  149. package/dist/types/modules/stream/streams.browser.d.ts +30 -28
  150. package/package.json +1 -5
  151. package/dist/browser/modules/archive/internal/byte-queue.d.ts +0 -33
  152. package/dist/browser/modules/archive/internal/byte-queue.js +0 -407
  153. package/dist/browser/modules/archive/io/archive-sink.d.ts +0 -9
  154. package/dist/browser/modules/archive/io/archive-sink.js +0 -77
  155. package/dist/browser/modules/archive/io/archive-source.d.ts +0 -8
  156. package/dist/browser/modules/archive/io/archive-source.js +0 -107
  157. package/dist/browser/modules/archive/unzip/index.d.ts +0 -40
  158. package/dist/browser/modules/archive/unzip/index.js +0 -164
  159. package/dist/browser/modules/archive/unzip/stream.base.js +0 -1022
  160. package/dist/browser/modules/archive/utils/async-queue.d.ts +0 -7
  161. package/dist/browser/modules/archive/utils/async-queue.js +0 -103
  162. package/dist/browser/modules/archive/utils/compressibility.d.ts +0 -10
  163. package/dist/browser/modules/archive/utils/compressibility.js +0 -57
  164. package/dist/browser/modules/archive/utils/pattern-scanner.d.ts +0 -21
  165. package/dist/browser/modules/archive/utils/pattern-scanner.js +0 -27
  166. package/dist/browser/modules/archive/zip/index.d.ts +0 -42
  167. package/dist/browser/modules/archive/zip/index.js +0 -157
  168. package/dist/browser/modules/archive/zip/zip-bytes.d.ts +0 -73
  169. package/dist/browser/modules/archive/zip/zip-bytes.js +0 -239
  170. package/dist/browser/modules/archive/zip-spec/zip-records.js +0 -126
  171. package/dist/cjs/modules/archive/internal/byte-queue.js +0 -411
  172. package/dist/cjs/modules/archive/io/archive-sink.js +0 -82
  173. package/dist/cjs/modules/archive/io/archive-source.js +0 -114
  174. package/dist/cjs/modules/archive/unzip/index.js +0 -170
  175. package/dist/cjs/modules/archive/unzip/stream.base.js +0 -1044
  176. package/dist/cjs/modules/archive/utils/async-queue.js +0 -106
  177. package/dist/cjs/modules/archive/utils/compressibility.js +0 -60
  178. package/dist/cjs/modules/archive/utils/pattern-scanner.js +0 -31
  179. package/dist/cjs/modules/archive/zip/index.js +0 -162
  180. package/dist/cjs/modules/archive/zip/zip-bytes.js +0 -242
  181. package/dist/cjs/modules/archive/zip-spec/zip-records.js +0 -136
  182. package/dist/esm/modules/archive/internal/byte-queue.js +0 -407
  183. package/dist/esm/modules/archive/io/archive-sink.js +0 -77
  184. package/dist/esm/modules/archive/io/archive-source.js +0 -107
  185. package/dist/esm/modules/archive/unzip/index.js +0 -164
  186. package/dist/esm/modules/archive/unzip/stream.base.js +0 -1022
  187. package/dist/esm/modules/archive/utils/async-queue.js +0 -103
  188. package/dist/esm/modules/archive/utils/compressibility.js +0 -57
  189. package/dist/esm/modules/archive/utils/pattern-scanner.js +0 -27
  190. package/dist/esm/modules/archive/zip/index.js +0 -157
  191. package/dist/esm/modules/archive/zip/zip-bytes.js +0 -239
  192. package/dist/esm/modules/archive/zip-spec/zip-records.js +0 -126
  193. package/dist/types/modules/archive/internal/byte-queue.d.ts +0 -33
  194. package/dist/types/modules/archive/io/archive-sink.d.ts +0 -9
  195. package/dist/types/modules/archive/io/archive-source.d.ts +0 -8
  196. package/dist/types/modules/archive/unzip/index.d.ts +0 -40
  197. package/dist/types/modules/archive/utils/async-queue.d.ts +0 -7
  198. package/dist/types/modules/archive/utils/compressibility.d.ts +0 -10
  199. package/dist/types/modules/archive/utils/pattern-scanner.d.ts +0 -21
  200. package/dist/types/modules/archive/zip/index.d.ts +0 -42
  201. package/dist/types/modules/archive/zip/zip-bytes.d.ts +0 -73
  202. /package/dist/browser/modules/archive/{compression/compress.base.d.ts → compress.base.d.ts} +0 -0
  203. /package/dist/browser/modules/archive/{compression/crc32.base.d.ts → crc32.base.d.ts} +0 -0
  204. /package/dist/browser/modules/archive/{compression/crc32.base.js → crc32.base.js} +0 -0
  205. /package/dist/browser/modules/archive/{compression/crc32.browser.js → crc32.browser.js} +0 -0
  206. /package/dist/browser/modules/archive/{compression/deflate-fallback.d.ts → deflate-fallback.d.ts} +0 -0
  207. /package/dist/browser/modules/archive/{unzip/extract.js → extract.js} +0 -0
  208. /package/dist/browser/modules/archive/{compression/streaming-compress.base.d.ts → streaming-compress.base.d.ts} +0 -0
  209. /package/dist/browser/modules/archive/{compression/streaming-compress.base.js → streaming-compress.base.js} +0 -0
  210. /package/dist/browser/modules/archive/{zip-spec/zip-entry-info.d.ts → zip-entry-info.d.ts} +0 -0
  211. /package/dist/browser/modules/archive/{zip-spec/zip-entry-info.js → zip-entry-info.js} +0 -0
  212. /package/dist/browser/modules/archive/{zip/zip-entry-metadata.d.ts → zip-entry-metadata.d.ts} +0 -0
  213. /package/dist/cjs/modules/archive/{compression/crc32.base.js → crc32.base.js} +0 -0
  214. /package/dist/cjs/modules/archive/{compression/crc32.browser.js → crc32.browser.js} +0 -0
  215. /package/dist/cjs/modules/archive/{unzip/extract.js → extract.js} +0 -0
  216. /package/dist/cjs/modules/archive/{compression/streaming-compress.base.js → streaming-compress.base.js} +0 -0
  217. /package/dist/cjs/modules/archive/{zip-spec/zip-entry-info.js → zip-entry-info.js} +0 -0
  218. /package/dist/esm/modules/archive/{compression/crc32.base.js → crc32.base.js} +0 -0
  219. /package/dist/esm/modules/archive/{compression/crc32.browser.js → crc32.browser.js} +0 -0
  220. /package/dist/esm/modules/archive/{unzip/extract.js → extract.js} +0 -0
  221. /package/dist/esm/modules/archive/{compression/streaming-compress.base.js → streaming-compress.base.js} +0 -0
  222. /package/dist/esm/modules/archive/{zip-spec/zip-entry-info.js → zip-entry-info.js} +0 -0
  223. /package/dist/types/modules/archive/{compression/compress.base.d.ts → compress.base.d.ts} +0 -0
  224. /package/dist/types/modules/archive/{compression/compress.d.ts → compress.d.ts} +0 -0
  225. /package/dist/types/modules/archive/{compression/crc32.base.d.ts → crc32.base.d.ts} +0 -0
  226. /package/dist/types/modules/archive/{compression/crc32.browser.d.ts → crc32.browser.d.ts} +0 -0
  227. /package/dist/types/modules/archive/{compression/crc32.d.ts → crc32.d.ts} +0 -0
  228. /package/dist/types/modules/archive/{compression/deflate-fallback.d.ts → deflate-fallback.d.ts} +0 -0
  229. /package/dist/types/modules/archive/{unzip/extract.d.ts → extract.d.ts} +0 -0
  230. /package/dist/types/modules/archive/{compression/streaming-compress.base.d.ts → streaming-compress.base.d.ts} +0 -0
  231. /package/dist/types/modules/archive/{compression/streaming-compress.d.ts → streaming-compress.d.ts} +0 -0
  232. /package/dist/types/modules/archive/{zip-spec/zip-entry-info.d.ts → zip-entry-info.d.ts} +0 -0
@@ -10,13 +10,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.Parse = void 0;
11
11
  exports.createParseClass = createParseClass;
12
12
  exports.createParse = createParse;
13
- const _stream_1 = require("../../stream/index.js");
14
- const stream_base_1 = require("./stream.base.js");
15
- const pattern_scanner_1 = require("../utils/pattern-scanner.js");
16
- const deflate_fallback_1 = require("../compression/deflate-fallback.js");
17
- const byte_queue_1 = require("../internal/byte-queue.js");
18
- const compress_base_1 = require("../compression/compress.base.js");
19
- const DEFAULT_UNZIP_STREAM_HIGH_WATER_MARK = 256 * 1024;
13
+ const _stream_1 = require("../stream/index.js");
14
+ const binary_1 = require("./utils/binary.js");
15
+ const bytes_1 = require("./utils/bytes.js");
16
+ const parse_base_1 = require("./parse.base.js");
17
+ const deflate_fallback_1 = require("./deflate-fallback.js");
18
+ const byte_queue_1 = require("./byte-queue.js");
19
+ const zip_constants_1 = require("./zip-constants.js");
20
+ const compress_base_1 = require("./compress.base.js");
20
21
  // =============================================================================
21
22
  // Browser InflateRaw using DecompressionStream
22
23
  // =============================================================================
@@ -33,9 +34,6 @@ class BrowserInflateRaw extends _stream_1.Duplex {
33
34
  // Pass write handler to Duplex so pipe() calls our write method
34
35
  // Also pass final handler to close the DecompressionStream when _writable ends
35
36
  super({
36
- // Keep the internal buffer bounded; this stream is used in tight parse loops.
37
- writableHighWaterMark: 512 * 1024,
38
- readableHighWaterMark: 512 * 1024,
39
37
  write: (chunk, _encoding, callback) => {
40
38
  this._doWrite(chunk, callback);
41
39
  },
@@ -144,6 +142,47 @@ class BrowserInflateRaw extends _stream_1.Duplex {
144
142
  this.push(null);
145
143
  }
146
144
  }
145
+ // Override write to feed data into DecompressionStream
146
+ write(chunk, encodingOrCallback, callback) {
147
+ // Handle overload
148
+ let cb;
149
+ if (typeof encodingOrCallback === "function") {
150
+ cb = encodingOrCallback;
151
+ }
152
+ else {
153
+ cb = callback;
154
+ }
155
+ this._doWrite(chunk, cb);
156
+ return true;
157
+ }
158
+ // Override end to close the DecompressionStream writer
159
+ end(chunkOrCallback, encodingOrCallback, callback) {
160
+ // Handle overloads
161
+ let chunk;
162
+ let cb;
163
+ if (typeof chunkOrCallback === "function") {
164
+ cb = chunkOrCallback;
165
+ }
166
+ else if (chunkOrCallback !== undefined) {
167
+ chunk = chunkOrCallback;
168
+ if (typeof encodingOrCallback === "function") {
169
+ cb = encodingOrCallback;
170
+ }
171
+ else {
172
+ cb = callback;
173
+ }
174
+ }
175
+ // Write final chunk if provided
176
+ if (chunk) {
177
+ this.write(chunk, () => {
178
+ this._closeWriter(cb);
179
+ });
180
+ }
181
+ else {
182
+ this._closeWriter(cb);
183
+ }
184
+ return this;
185
+ }
147
186
  _closeWriter(callback) {
148
187
  if (this.writeClosed) {
149
188
  this._readingDonePromise.then(() => {
@@ -171,6 +210,7 @@ class BrowserInflateRaw extends _stream_1.Duplex {
171
210
  if (callback) {
172
211
  callback();
173
212
  }
213
+ this.emit("finish");
174
214
  });
175
215
  });
176
216
  }
@@ -183,225 +223,6 @@ class BrowserInflateRaw extends _stream_1.Duplex {
183
223
  }
184
224
  }
185
225
  // =============================================================================
186
- // Worker-based InflateRaw (optional)
187
- // =============================================================================
188
- let _inflateWorkerUrl = null;
189
- function getInflateWorkerUrl(customUrl) {
190
- if (typeof customUrl === "string" && customUrl.length > 0) {
191
- return customUrl;
192
- }
193
- if (_inflateWorkerUrl) {
194
- return _inflateWorkerUrl;
195
- }
196
- // Inline worker to avoid bundler-specific worker loaders.
197
- // It streams deflate-raw through DecompressionStream and posts decompressed chunks back.
198
- const code = `
199
- let ds;
200
- let writer;
201
- let reader;
202
- let junkError = false;
203
- let pendingWrites = 0;
204
-
205
- function isJunkErrorMessage(msg) {
206
- return typeof msg === 'string' && (msg.includes('Junk') || msg.includes('junk'));
207
- }
208
-
209
- async function ensureStarted() {
210
- if (ds) return;
211
- ds = new DecompressionStream('deflate-raw');
212
- writer = ds.writable.getWriter();
213
- reader = ds.readable.getReader();
214
-
215
- (async () => {
216
- try {
217
- while (true) {
218
- const r = await reader.read();
219
- if (r.done) break;
220
- const chunk = r.value;
221
- postMessage({ t: 'data', chunk }, [chunk.buffer]);
222
- }
223
- postMessage({ t: 'end' });
224
- } catch (e) {
225
- const msg = e && e.message ? e.message : String(e);
226
- if (isJunkErrorMessage(msg)) {
227
- junkError = true;
228
- postMessage({ t: 'end' });
229
- } else {
230
- postMessage({ t: 'error', message: msg });
231
- }
232
- }
233
- })();
234
- }
235
-
236
- onmessage = async (ev) => {
237
- const msg = ev.data;
238
- try {
239
- await ensureStarted();
240
- if (msg.t === 'write') {
241
- if (junkError) {
242
- postMessage({ t: 'ack', id: msg.id });
243
- return;
244
- }
245
- pendingWrites++;
246
- await writer.write(msg.chunk);
247
- pendingWrites--;
248
- postMessage({ t: 'ack', id: msg.id });
249
- return;
250
- }
251
- if (msg.t === 'close') {
252
- // Wait for in-flight writes to finish (best-effort).
253
- while (pendingWrites > 0) {
254
- await new Promise(r => setTimeout(r, 0));
255
- }
256
- try { await writer.close(); } catch (_) {}
257
- postMessage({ t: 'closed' });
258
- return;
259
- }
260
- if (msg.t === 'abort') {
261
- try { await writer.abort(); } catch (_) {}
262
- postMessage({ t: 'aborted' });
263
- return;
264
- }
265
- } catch (e) {
266
- const m = e && e.message ? e.message : String(e);
267
- postMessage({ t: 'error', message: m, id: msg && msg.id });
268
- }
269
- };
270
- `;
271
- const blob = new Blob([code], { type: "text/javascript" });
272
- _inflateWorkerUrl = URL.createObjectURL(blob);
273
- return _inflateWorkerUrl;
274
- }
275
- class WorkerInflateRaw extends _stream_1.Duplex {
276
- constructor(workerUrl) {
277
- super({
278
- write: (chunk, _encoding, callback) => {
279
- this._doWrite(chunk, callback);
280
- },
281
- final: (callback) => {
282
- this._doClose(callback);
283
- }
284
- });
285
- this._nextId = 1;
286
- this._pendingAcks = new Map();
287
- this._closed = false;
288
- this._junkError = false;
289
- this._terminated = false;
290
- const url = getInflateWorkerUrl(workerUrl);
291
- this.worker = new Worker(url);
292
- this.worker.onmessage = (ev) => {
293
- const msg = ev.data;
294
- if (!msg || typeof msg.t !== "string") {
295
- return;
296
- }
297
- if (msg.t === "data") {
298
- const chunk = msg.chunk;
299
- this.push(chunk);
300
- return;
301
- }
302
- if (msg.t === "end") {
303
- this.push(null);
304
- this._terminateWorker();
305
- return;
306
- }
307
- if (msg.t === "aborted") {
308
- this._terminateWorker();
309
- return;
310
- }
311
- if (msg.t === "ack") {
312
- const id = msg.id;
313
- const cb = this._pendingAcks.get(id);
314
- if (cb) {
315
- this._pendingAcks.delete(id);
316
- cb();
317
- }
318
- return;
319
- }
320
- if (msg.t === "error") {
321
- const message = typeof msg.message === "string" ? msg.message : "Worker inflate error";
322
- if (message.includes("Junk") || message.includes("junk")) {
323
- this._junkError = true;
324
- // Treat as end-of-stream.
325
- this.push(null);
326
- this._terminateWorker();
327
- // Resolve any pending writes.
328
- for (const cb of this._pendingAcks.values()) {
329
- cb();
330
- }
331
- this._pendingAcks.clear();
332
- return;
333
- }
334
- const err = new Error(message);
335
- // Fail any pending writes.
336
- for (const cb of this._pendingAcks.values()) {
337
- cb(err);
338
- }
339
- this._pendingAcks.clear();
340
- this.emit("error", err);
341
- this._terminateWorker();
342
- return;
343
- }
344
- };
345
- this.worker.onerror = (e) => {
346
- const err = new Error(e.message || "Worker error");
347
- for (const cb of this._pendingAcks.values()) {
348
- cb(err);
349
- }
350
- this._pendingAcks.clear();
351
- this.emit("error", err);
352
- this._terminateWorker();
353
- };
354
- }
355
- _terminateWorker() {
356
- if (this._terminated) {
357
- return;
358
- }
359
- this._terminated = true;
360
- try {
361
- this.worker.terminate();
362
- }
363
- catch {
364
- // ignore
365
- }
366
- }
367
- _doWrite(chunk, callback) {
368
- if (this._closed || this._junkError) {
369
- callback();
370
- return;
371
- }
372
- const id = this._nextId++;
373
- this._pendingAcks.set(id, callback);
374
- // Transfer the underlying ArrayBuffer to reduce copies.
375
- // If chunk is a view into a larger buffer, slice to avoid transferring unrelated bytes.
376
- const transferable = chunk.byteOffset === 0 && chunk.byteLength === chunk.buffer.byteLength
377
- ? chunk
378
- : chunk.slice();
379
- this.worker.postMessage({ t: "write", id, chunk: transferable }, [transferable.buffer]);
380
- }
381
- _doClose(callback) {
382
- if (this._closed) {
383
- callback();
384
- return;
385
- }
386
- this._closed = true;
387
- this.worker.postMessage({ t: "close" });
388
- callback();
389
- }
390
- destroy(error) {
391
- if (!this._closed) {
392
- this._closed = true;
393
- try {
394
- this.worker.postMessage({ t: "abort" });
395
- }
396
- catch {
397
- // ignore
398
- }
399
- }
400
- this._terminateWorker();
401
- return super.destroy(error);
402
- }
403
- }
404
- // =============================================================================
405
226
  // Fallback InflateRaw for browsers without DecompressionStream
406
227
  // =============================================================================
407
228
  /**
@@ -461,7 +282,7 @@ function createInflateRaw() {
461
282
  // =============================================================================
462
283
  // Utilities
463
284
  // =============================================================================
464
- const dataDescriptorSignature = stream_base_1.DATA_DESCRIPTOR_SIGNATURE_BYTES;
285
+ const dataDescriptorSignature = (0, binary_1.writeUint32LE)(zip_constants_1.DATA_DESCRIPTOR_SIG);
465
286
  function createParseClass(createInflateRawFn) {
466
287
  /**
467
288
  * ZIP Stream Parser for browsers.
@@ -475,11 +296,11 @@ function createParseClass(createInflateRawFn) {
475
296
  super({
476
297
  objectMode: true,
477
298
  write: (chunk, _encoding, callback) => {
478
- this._handleWrite(chunk, callback);
299
+ this._handleWrite(chunk);
300
+ callback();
479
301
  },
480
302
  final: (callback) => {
481
303
  this.finished = true;
482
- this._maybeReleaseWriteCallback();
483
304
  this._wakeUp();
484
305
  this.emit("data-available");
485
306
  this.emit("chunk", false);
@@ -491,12 +312,6 @@ function createParseClass(createInflateRawFn) {
491
312
  this._driverState = {};
492
313
  this._parsingDone = Promise.resolve();
493
314
  this._opts = opts;
494
- // Default values are intentionally conservative to avoid memory spikes
495
- // when parsing large archives under slow consumers.
496
- const hi = Math.max(64 * 1024, opts.inputHighWaterMarkBytes ?? 2 * 1024 * 1024);
497
- const lo = Math.max(32 * 1024, opts.inputLowWaterMarkBytes ?? Math.floor(hi / 4));
498
- this._inputHighWaterMarkBytes = hi;
499
- this._inputLowWaterMarkBytes = Math.min(lo, hi);
500
315
  const io = {
501
316
  pull: (length) => this.pull(length),
502
317
  pullUntil: (pattern, includeEof) => this.pullUntil(pattern, includeEof),
@@ -524,12 +339,6 @@ function createParseClass(createInflateRawFn) {
524
339
  },
525
340
  emitError: (err) => {
526
341
  this.__emittedError = err;
527
- // Ensure upstream writers don't hang waiting for a deferred write callback.
528
- if (this._writeCb) {
529
- const cb = this._writeCb;
530
- this._writeCb = undefined;
531
- cb(err);
532
- }
533
342
  this.emit("error", err);
534
343
  },
535
344
  emitClose: () => {
@@ -540,22 +349,7 @@ function createParseClass(createInflateRawFn) {
540
349
  // NOTE: We intentionally do NOT pass inflateRawSync to runParseLoop in browser.
541
350
  // Browser's native DecompressionStream is faster than our pure-JS fallback,
542
351
  // so we always use the streaming path for decompression in browsers.
543
- const inflateFactory = () => {
544
- if (this._opts.useWorkerInflate && typeof Worker !== "undefined") {
545
- // Worker path requires DecompressionStream support.
546
- if ((0, compress_base_1.hasDeflateRawDecompressionStream)()) {
547
- try {
548
- return new WorkerInflateRaw(this._opts.workerInflateUrl);
549
- }
550
- catch {
551
- // If Worker construction fails (e.g. CSP/CORS), fall back.
552
- return createInflateRawFn();
553
- }
554
- }
555
- }
556
- return createInflateRawFn();
557
- };
558
- this._parsingDone = (0, stream_base_1.runParseLoop)(this._opts, io, emitter, inflateFactory, this._driverState
352
+ this._parsingDone = (0, parse_base_1.runParseLoop)(this._opts, io, emitter, () => createInflateRawFn(), this._driverState
559
353
  // No inflateRawSync - always use streaming DecompressionStream in browser
560
354
  );
561
355
  this._parsingDone.catch((e) => {
@@ -567,16 +361,8 @@ function createParseClass(createInflateRawFn) {
567
361
  });
568
362
  });
569
363
  }
570
- _handleWrite(chunk, callback) {
364
+ _handleWrite(chunk) {
571
365
  this._buffer.append(chunk);
572
- // Apply writable backpressure by deferring the callback when the input buffer is large.
573
- // The callback will be released once the parser drains the buffer.
574
- if (this._buffer.length >= this._inputHighWaterMarkBytes) {
575
- this._writeCb = callback;
576
- }
577
- else {
578
- callback();
579
- }
580
366
  this._wakeUp();
581
367
  this.emit("data-available");
582
368
  this.emit("chunk");
@@ -587,6 +373,13 @@ function createParseClass(createInflateRawFn) {
587
373
  set buffer(value) {
588
374
  this._buffer.reset(value);
589
375
  }
376
+ _maybeReleaseWriteCallback() {
377
+ if (typeof this.cb === "function") {
378
+ const callback = this.cb;
379
+ this.cb = undefined;
380
+ callback();
381
+ }
382
+ }
590
383
  _wakeUp() {
591
384
  if (this._pendingResolve) {
592
385
  const resolve = this._pendingResolve;
@@ -594,17 +387,6 @@ function createParseClass(createInflateRawFn) {
594
387
  resolve();
595
388
  }
596
389
  }
597
- _maybeReleaseWriteCallback() {
598
- if (!this._writeCb) {
599
- return;
600
- }
601
- if (this._buffer.length > this._inputLowWaterMarkBytes) {
602
- return;
603
- }
604
- const cb = this._writeCb;
605
- this._writeCb = undefined;
606
- cb();
607
- }
608
390
  _waitForData() {
609
391
  return new Promise(resolve => {
610
392
  this._pendingResolve = resolve;
@@ -618,76 +400,60 @@ function createParseClass(createInflateRawFn) {
618
400
  if (this.finished) {
619
401
  if (this._buffer.length > 0) {
620
402
  const data = this._buffer.read(this._buffer.length);
621
- this._maybeReleaseWriteCallback();
622
403
  return data;
623
404
  }
624
405
  throw new Error("FILE_ENDED");
625
406
  }
626
407
  await this._waitForData();
627
408
  }
628
- const out = this._buffer.read(length);
629
- this._maybeReleaseWriteCallback();
630
- return out;
409
+ return this._buffer.read(length);
631
410
  }
632
411
  async _pullUntilInternal(pattern, includeEof = false) {
633
412
  const chunks = [];
634
- const scanner = new pattern_scanner_1.PatternScanner(pattern);
413
+ let searchFrom = 0;
414
+ const overlap = Math.max(0, pattern.length - 1);
635
415
  while (true) {
636
- const bufLen = this._buffer.length;
637
- const match = scanner.find(this._buffer);
416
+ const view = this._buffer.view();
417
+ const match = (0, bytes_1.indexOfUint8ArrayPattern)(view, pattern, searchFrom);
638
418
  if (match !== -1) {
639
419
  this.match = match;
640
420
  const toRead = match + (includeEof ? pattern.length : 0);
641
421
  if (toRead > 0) {
642
422
  chunks.push(this._buffer.read(toRead));
643
- this._maybeReleaseWriteCallback();
644
423
  }
645
- return chunks.length === 1 ? chunks[0] : (0, _stream_1.concatUint8Arrays)(chunks);
424
+ return (0, _stream_1.concatUint8Arrays)(chunks);
646
425
  }
647
426
  // No match yet. Avoid rescanning bytes that can't start a match.
648
- scanner.onNoMatch(bufLen);
427
+ searchFrom = Math.max(searchFrom, Math.max(0, view.length - overlap));
649
428
  if (this.finished) {
650
429
  throw new Error("FILE_ENDED");
651
430
  }
652
431
  const safeLen = Math.max(0, this._buffer.length - pattern.length);
653
432
  if (safeLen > 0) {
654
433
  chunks.push(this._buffer.read(safeLen));
655
- scanner.onConsume(safeLen);
656
- this._maybeReleaseWriteCallback();
434
+ searchFrom = Math.max(0, searchFrom - safeLen);
657
435
  }
658
436
  await this._waitForData();
659
437
  }
660
438
  }
661
439
  _streamFixedLength(length) {
662
- const output = new _stream_1.PassThrough({ highWaterMark: DEFAULT_UNZIP_STREAM_HIGH_WATER_MARK });
440
+ const output = new _stream_1.PassThrough();
663
441
  let remaining = length;
664
442
  let done = false;
665
- let waitingDrain = false;
666
443
  const pull = () => {
667
444
  if (done) {
668
445
  return;
669
446
  }
670
- if (waitingDrain) {
671
- return;
672
- }
673
447
  while (remaining > 0 && this._buffer.length > 0) {
674
448
  const toRead = Math.min(remaining, this._buffer.length);
675
449
  const chunk = this._buffer.read(toRead);
676
450
  remaining -= toRead;
677
- const ok = output.write(chunk);
678
- this._maybeReleaseWriteCallback();
679
- if (!ok) {
680
- waitingDrain = true;
681
- output.once("drain", () => {
682
- waitingDrain = false;
683
- pull();
684
- });
685
- return;
686
- }
451
+ output.write(chunk);
687
452
  }
688
453
  if (remaining === 0) {
689
454
  done = true;
690
455
  this.removeListener("data-available", pull);
456
+ this._maybeReleaseWriteCallback();
691
457
  output.end();
692
458
  }
693
459
  else if (this.finished) {
@@ -701,69 +467,42 @@ function createParseClass(createInflateRawFn) {
701
467
  return output;
702
468
  }
703
469
  _streamUntilPattern(pattern, includeEof = false) {
704
- const output = new _stream_1.PassThrough({ highWaterMark: DEFAULT_UNZIP_STREAM_HIGH_WATER_MARK });
470
+ const output = new _stream_1.PassThrough();
705
471
  let done = false;
706
- const patternLen = pattern.length;
707
- const scanner = new pattern_scanner_1.PatternScanner(pattern);
708
- let waitingDrain = false;
472
+ let searchFrom = 0;
473
+ const overlap = Math.max(0, pattern.length - 1);
709
474
  const pull = () => {
710
- if (done || waitingDrain) {
475
+ if (done) {
711
476
  return;
712
477
  }
713
- while (true) {
714
- if (this._buffer.length <= 0) {
715
- break;
716
- }
717
- const bufLen = this._buffer.length;
718
- const match = scanner.find(this._buffer);
719
- if (match !== -1) {
720
- this.match = match;
721
- const endIndex = includeEof ? match + patternLen : match;
722
- if (endIndex > 0) {
723
- const ok = output.write(this._buffer.read(endIndex));
724
- scanner.onConsume(endIndex);
725
- this._maybeReleaseWriteCallback();
726
- if (!ok) {
727
- waitingDrain = true;
728
- output.once("drain", () => {
729
- waitingDrain = false;
730
- pull();
731
- });
732
- return;
733
- }
734
- }
735
- done = true;
736
- this.removeListener("data-available", pull);
737
- output.end();
738
- return;
739
- }
740
- // No match yet. Avoid rescanning bytes that can't start a match.
741
- scanner.onNoMatch(bufLen);
742
- if (this.finished) {
743
- done = true;
744
- this.removeListener("data-available", pull);
745
- output.destroy(new Error("FILE_ENDED"));
746
- return;
747
- }
748
- const safeLen = bufLen - patternLen;
749
- if (safeLen <= 0) {
750
- // Keep enough bytes to detect a split signature.
751
- if (this._buffer.length <= patternLen) {
752
- this._maybeReleaseWriteCallback();
753
- }
754
- break;
478
+ const view = this._buffer.view();
479
+ const match = (0, bytes_1.indexOfUint8ArrayPattern)(view, pattern, searchFrom);
480
+ if (match !== -1) {
481
+ this.match = match;
482
+ const endIndex = includeEof ? match + pattern.length : match;
483
+ if (endIndex > 0) {
484
+ output.write(this._buffer.read(endIndex));
755
485
  }
756
- const ok = output.write(this._buffer.read(safeLen));
757
- scanner.onConsume(safeLen);
486
+ done = true;
487
+ this.removeListener("data-available", pull);
488
+ this._maybeReleaseWriteCallback();
489
+ output.end();
490
+ return;
491
+ }
492
+ // No match yet. Avoid rescanning bytes that can't start a match.
493
+ searchFrom = Math.max(searchFrom, Math.max(0, view.length - overlap));
494
+ if (this.finished) {
495
+ done = true;
496
+ this.removeListener("data-available", pull);
497
+ this._maybeReleaseWriteCallback();
498
+ output.destroy(new Error("FILE_ENDED"));
499
+ return;
500
+ }
501
+ const safeLen = Math.max(0, this._buffer.length - pattern.length);
502
+ if (safeLen > 0) {
503
+ output.write(this._buffer.read(safeLen));
504
+ searchFrom = Math.max(0, searchFrom - safeLen);
758
505
  this._maybeReleaseWriteCallback();
759
- if (!ok) {
760
- waitingDrain = true;
761
- output.once("drain", () => {
762
- waitingDrain = false;
763
- pull();
764
- });
765
- return;
766
- }
767
506
  }
768
507
  };
769
508
  this.on("data-available", pull);
@@ -786,7 +525,11 @@ function createParseClass(createInflateRawFn) {
786
525
  return Promise.reject(new Error("FILE_ENDED"));
787
526
  }
788
527
  if (this._buffer.length >= eof) {
789
- return Promise.resolve(this._buffer.read(eof));
528
+ const data = this._buffer.read(eof);
529
+ if (this._buffer.length === 0) {
530
+ this._maybeReleaseWriteCallback();
531
+ }
532
+ return Promise.resolve(data);
790
533
  }
791
534
  return this._pullInternal(eof);
792
535
  }
@@ -800,20 +543,16 @@ function createParseClass(createInflateRawFn) {
800
543
  return this.pull(pattern, includeEof);
801
544
  }
802
545
  _streamUntilDataDescriptor() {
803
- return (0, stream_base_1.streamUntilValidatedDataDescriptor)({
546
+ return (0, parse_base_1.streamUntilValidatedDataDescriptor)({
804
547
  source: {
548
+ getView: () => this._buffer.view(),
805
549
  getLength: () => this._buffer.length,
806
550
  read: (length) => this._buffer.read(length),
807
- peekChunks: (length) => this._buffer.peekChunks(length),
808
- discard: (length) => this._buffer.discard(length),
809
- indexOfPattern: (pattern, startIndex) => this._buffer.indexOfPattern(pattern, startIndex),
810
- peekUint32LE: (offset) => this._buffer.peekUint32LE(offset),
811
551
  isFinished: () => this.finished,
812
552
  onDataAvailable: (cb) => {
813
553
  this.on("data-available", cb);
814
554
  return () => this.removeListener("data-available", cb);
815
- },
816
- maybeReleaseWriteCallback: () => this._maybeReleaseWriteCallback()
555
+ }
817
556
  },
818
557
  dataDescriptorSignature
819
558
  });