@zip.js/zip.js 2.6.23 → 2.6.24

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 (140) hide show
  1. package/.eslintrc.json +0 -0
  2. package/README.md +36 -0
  3. package/cli-deno/mc-zip.js +0 -0
  4. package/dist/README.md +0 -0
  5. package/dist/z-worker-fflate.js +1 -1
  6. package/dist/z-worker-pako.js +1 -1
  7. package/dist/z-worker.js +1 -1
  8. package/dist/zip-fs-full.js +105 -85
  9. package/dist/zip-fs-full.min.js +1 -1
  10. package/dist/zip-fs.js +105 -85
  11. package/dist/zip-fs.min.js +1 -1
  12. package/dist/zip-full.js +104 -83
  13. package/dist/zip-full.min.js +1 -1
  14. package/dist/zip-no-worker-deflate.min.js +1 -1
  15. package/dist/zip-no-worker-inflate.min.js +1 -1
  16. package/dist/zip-no-worker.min.js +1 -1
  17. package/dist/zip.js +104 -83
  18. package/dist/zip.min.js +1 -1
  19. package/index-fflate.js +0 -0
  20. package/index.d.ts +6 -0
  21. package/index.js +0 -0
  22. package/lib/core/codec-interface.js +3 -2
  23. package/lib/core/codec-pool-worker.js +56 -23
  24. package/lib/core/codec-pool.js +3 -2
  25. package/lib/core/configuration.js +14 -24
  26. package/lib/core/constants.js +0 -0
  27. package/lib/core/io.js +8 -18
  28. package/lib/core/streams/aes-crypto-stream.js +0 -0
  29. package/lib/core/streams/codec-stream.js +0 -0
  30. package/lib/core/streams/codecs/crc32.js +0 -0
  31. package/lib/core/streams/codecs/deflate.js +0 -0
  32. package/lib/core/streams/codecs/inflate.js +0 -0
  33. package/lib/core/streams/codecs/sjcl.js +0 -0
  34. package/lib/core/streams/common-crypto.js +0 -0
  35. package/lib/core/streams/crc32-stream.js +0 -0
  36. package/lib/core/streams/zip-crypto-stream.js +0 -0
  37. package/lib/core/streams/zip-entry-stream.js +0 -0
  38. package/lib/core/util/cp437-decode.js +0 -0
  39. package/lib/core/util/decode-text.js +0 -0
  40. package/lib/core/util/default-mime-type.js +0 -0
  41. package/lib/core/util/encode-text.js +0 -0
  42. package/lib/core/util/mime-type.js +0 -0
  43. package/lib/core/util/stream-codec-shim.js +0 -0
  44. package/lib/core/z-worker-core.js +12 -5
  45. package/lib/core/zip-entry.js +0 -0
  46. package/lib/core/zip-fs-core.js +1 -2
  47. package/lib/core/zip-reader.js +11 -6
  48. package/lib/core/zip-writer.js +8 -7
  49. package/lib/z-worker-bootstrap-fflate.js +0 -0
  50. package/lib/z-worker-bootstrap-pako.js +0 -0
  51. package/lib/z-worker-fflate.js +0 -0
  52. package/lib/z-worker-inline-template-base64.js +0 -0
  53. package/lib/z-worker-inline-template.js +0 -0
  54. package/lib/z-worker-inline.js +1 -1
  55. package/lib/z-worker.js +0 -0
  56. package/lib/zip-fflate-shim.js +0 -0
  57. package/lib/zip-fs.js +0 -0
  58. package/lib/zip-full-fflate.js +0 -0
  59. package/lib/zip-full.js +0 -0
  60. package/lib/zip-no-worker-deflate.js +0 -0
  61. package/lib/zip-no-worker-fflate-deflate.js +0 -0
  62. package/lib/zip-no-worker-fflate-inflate.js +0 -0
  63. package/lib/zip-no-worker-fflate.js +0 -0
  64. package/lib/zip-no-worker-inflate.js +0 -0
  65. package/lib/zip-no-worker.js +0 -0
  66. package/lib/zip.js +0 -0
  67. package/package.json +4 -4
  68. package/rollup-fflate.config.dev.js +0 -0
  69. package/rollup-fflate.config.js +0 -0
  70. package/rollup.config.dev.js +0 -0
  71. package/rollup.config.js +1 -1
  72. package/tests/all/loader.html +0 -0
  73. package/tests/all/test-abort-signal-read.js +0 -0
  74. package/tests/all/test-abort-signal-write.js +0 -0
  75. package/tests/all/test-array.js +0 -0
  76. package/tests/all/test-base64.js +0 -0
  77. package/tests/all/test-blob.js +0 -0
  78. package/tests/all/test-codecs-interoperability.js +0 -0
  79. package/tests/all/test-crc.js +0 -0
  80. package/tests/all/test-crypto.js +0 -0
  81. package/tests/all/test-custom-io.js +0 -0
  82. package/tests/all/test-data-descriptor-signature.js +0 -0
  83. package/tests/all/test-data-descriptor.js +0 -0
  84. package/tests/all/test-duplicated-filename.js +0 -0
  85. package/tests/all/test-empty.js +0 -0
  86. package/tests/all/test-extended-timestamp.js +0 -0
  87. package/tests/all/test-extra-field.js +0 -0
  88. package/tests/all/test-fflate-no-worker.js +0 -0
  89. package/tests/all/test-fflate.js +0 -0
  90. package/tests/all/test-fs-base64.js +0 -0
  91. package/tests/all/test-fs-export-options.js +0 -0
  92. package/tests/all/test-fs-http-import.js +0 -0
  93. package/tests/all/test-fs-http-reader.js +0 -0
  94. package/tests/all/test-fs-replace.js +0 -0
  95. package/tests/all/test-fs-streams.js +0 -0
  96. package/tests/all/test-fs-text.js +0 -0
  97. package/tests/all/test-fs-unzip-store.js +0 -0
  98. package/tests/all/test-fs.js +0 -0
  99. package/tests/all/test-http-crypto.js +0 -0
  100. package/tests/all/test-http-range.js +0 -0
  101. package/tests/all/test-http-zip64.js +0 -0
  102. package/tests/all/test-invalid-crc.js +0 -0
  103. package/tests/all/test-multiple-writers.js +0 -0
  104. package/tests/all/test-no-worker.js +0 -0
  105. package/tests/all/test-pako-no-worker.js +0 -0
  106. package/tests/all/test-pako.js +0 -0
  107. package/tests/all/test-parallel-reads.js +0 -0
  108. package/tests/all/test-parallel-writes-auto-buffered.js +0 -0
  109. package/tests/all/test-parallel-writes-ordered.js +0 -0
  110. package/tests/all/test-parallel-writes.js +0 -0
  111. package/tests/all/test-readable-stream.js +0 -0
  112. package/tests/all/test-readable-zip-stream.js +0 -0
  113. package/tests/all/test-safe-closing.js +0 -0
  114. package/tests/all/test-store.js +0 -0
  115. package/tests/all/test-sw-worker.js +0 -0
  116. package/tests/all/test-sw.js +0 -0
  117. package/tests/all/test-worker-timeout.js +0 -0
  118. package/tests/all/test-wrapped.js +0 -0
  119. package/tests/all/test-writable-stream.js +0 -0
  120. package/tests/all/test-zip64-auto.js +0 -0
  121. package/tests/all/test-zip64-crypto.js +0 -0
  122. package/tests/all/test-zip64.js +0 -0
  123. package/tests/all/test-zipcrypto.js +0 -0
  124. package/tests/data/lorem-encrypted.zip +0 -0
  125. package/tests/data/lorem-invalid-crc.zip +0 -0
  126. package/tests/data/lorem-store.zip +0 -0
  127. package/tests/data/lorem-zip64.zip +0 -0
  128. package/tests/data/lorem.txt +0 -0
  129. package/tests/data/lorem.zip +0 -0
  130. package/tests/deno-runner.js +0 -0
  131. package/tests/index.html +0 -0
  132. package/tests/node-runner.js +0 -0
  133. package/tests/tests-data.js +0 -0
  134. package/tests/vendor/fflate-es2019.min.js +0 -0
  135. package/tests/vendor/fflate.min.js +0 -0
  136. package/tests/vendor/pako.min.js +0 -0
  137. package/tests/vendor/pako_deflate.min.js +0 -0
  138. package/tests/vendor/pako_inflate.min.js +0 -0
  139. package/tests/web-runner.js +0 -0
  140. package/tsconfig.json +0 -0
@@ -40,6 +40,7 @@ import {
40
40
 
41
41
  let workersSupported;
42
42
  let classicWorkersSupported = true;
43
+ let transferStreamsSupported = true;
43
44
 
44
45
  export {
45
46
  CodecWorker
@@ -49,7 +50,7 @@ class CodecWorker {
49
50
 
50
51
  constructor(workerData, stream, workerOptions, onTaskFinished) {
51
52
  const { readable, writable } = stream;
52
- const { options, config, streamOptions, webWorker, scripts, codecConstructor } = workerOptions;
53
+ const { options, config, streamOptions, webWorker, transferStreams, scripts, codecConstructor } = workerOptions;
53
54
  Object.assign(workerData, {
54
55
  busy: true,
55
56
  codecConstructor,
@@ -57,6 +58,7 @@ class CodecWorker {
57
58
  writable,
58
59
  options: Object.assign({}, options),
59
60
  scripts,
61
+ transferStreams,
60
62
  terminate() {
61
63
  if (workerData.worker && !workerData.busy) {
62
64
  workerData.worker.terminate();
@@ -72,17 +74,17 @@ class CodecWorker {
72
74
  let chunkOffset = 0;
73
75
  const transformer = {};
74
76
  if (onstart) {
75
- transformer.start = () => callHandler(onstart, size());
77
+ transformer.start = () => callHandler(onstart, size);
76
78
  }
77
79
  transformer.transform = async (chunk, controller) => {
78
80
  chunkOffset += chunk.length;
79
81
  if (onprogress) {
80
- await callHandler(onprogress, chunkOffset, size());
82
+ await callHandler(onprogress, chunkOffset, size);
81
83
  }
82
84
  controller.enqueue(chunk);
83
85
  };
84
86
  transformer.flush = () => {
85
- readable.size = () => chunkOffset;
87
+ readable.size = chunkOffset;
86
88
  if (onend) {
87
89
  callHandler(onend, chunkOffset);
88
90
  }
@@ -120,10 +122,8 @@ function createWorkerInterface(workerData, config) {
120
122
 
121
123
  function createWebWorkerInterface(workerData, { baseURL, chunkSize }) {
122
124
  const workerOptions = { type: "module" };
123
- const { readable, writable } = workerData;
124
125
  Object.assign(workerData, {
125
- reader: readable.getReader(),
126
- writer: writable.getWriter(),
126
+ streams: {},
127
127
  result: new Promise((resolve, reject) => {
128
128
  workerData.resolveResult = resolve;
129
129
  workerData.rejectResult = reject;
@@ -143,15 +143,32 @@ function createWebWorkerInterface(workerData, { baseURL, chunkSize }) {
143
143
  workerData.worker.addEventListener(MESSAGE_EVENT_TYPE, onMessage, false);
144
144
  workerData.interface = {
145
145
  run() {
146
- const { options } = workerData;
146
+ const { readable, writable, options } = workerData;
147
147
  const scripts = workerData.scripts.slice(1);
148
- sendMessage({ type: MESSAGE_START, scripts, options, config: { chunkSize } });
148
+ const message = { type: MESSAGE_START, scripts, options, config: { chunkSize } };
149
+ if (workerData.transferStreams && transferStreamsSupported) {
150
+ const streamsTransferred = sendMessage({ ...message, readable, writable });
151
+ if (!streamsTransferred) {
152
+ transferStreamsSupported = false;
153
+ initStreams(readable, writable);
154
+ }
155
+ } else {
156
+ sendMessage(message);
157
+ initStreams(readable, writable);
158
+ }
149
159
  return workerData.result;
150
160
  }
151
161
  };
152
162
  }
153
163
  return workerData.interface;
154
164
 
165
+ function initStreams(readable, writable) {
166
+ Object.assign(workerData.streams, {
167
+ reader: readable.getReader(),
168
+ writer: writable.getWriter()
169
+ });
170
+ }
171
+
155
172
  function getWorker(options) {
156
173
  let url, scriptUrl;
157
174
  url = workerData.scripts[0];
@@ -169,23 +186,37 @@ function createWebWorkerInterface(workerData, { baseURL, chunkSize }) {
169
186
  function sendMessage(message) {
170
187
  const { worker, writer, onTaskFinished } = workerData;
171
188
  try {
172
- let { data } = message;
189
+ let { data, readable, writable } = message;
190
+ const transferrables = [];
173
191
  if (data) {
192
+ const { buffer, length } = data;
193
+ if (length != buffer.byteLength) {
194
+ data = new Uint8Array(data);
195
+ }
196
+ message.data = data.buffer;
197
+ transferrables.push(message.data);
198
+ }
199
+ if (readable) {
200
+ transferrables.push(readable);
201
+ }
202
+ if (writable) {
203
+ transferrables.push(writable);
204
+ }
205
+ if (transferrables.length) {
174
206
  try {
175
- const { buffer, length } = data;
176
- if (length != buffer.byteLength) {
177
- data = new Uint8Array(data);
178
- }
179
- message.data = data.buffer;
180
- worker.postMessage(message, [message.data]);
181
- } catch (_error) {
207
+ worker.postMessage(message, transferrables);
208
+ return true;
209
+ } catch (error) {
210
+ message.readable = message.writable = null;
182
211
  worker.postMessage(message);
183
212
  }
184
213
  } else {
185
214
  worker.postMessage(message);
186
215
  }
187
216
  } catch (error) {
188
- writer.releaseLock();
217
+ if (writer) {
218
+ writer.releaseLock();
219
+ }
189
220
  onTaskFinished();
190
221
  throw error;
191
222
  }
@@ -193,14 +224,15 @@ function createWebWorkerInterface(workerData, { baseURL, chunkSize }) {
193
224
 
194
225
  async function onMessage(event) {
195
226
  const message = event.data;
196
- const { reader, writer, resolveResult, rejectResult, onTaskFinished } = workerData;
227
+ const { resolveResult, rejectResult, onTaskFinished } = workerData;
228
+ const { reader, writer } = workerData.streams;
197
229
  const { type, data, messageId, result } = message;
198
230
  const reponseError = message.error;
199
231
  try {
200
232
  if (reponseError) {
201
- const { message, stack } = reponseError;
233
+ const { message, stack, code, name } = reponseError;
202
234
  const error = new Error(message);
203
- error.stack = stack;
235
+ Object.assign(error, { stack, code, name });
204
236
  close(error);
205
237
  } else {
206
238
  if (type == MESSAGE_PULL) {
@@ -209,7 +241,6 @@ function createWebWorkerInterface(workerData, { baseURL, chunkSize }) {
209
241
  }
210
242
  if (type == MESSAGE_DATA) {
211
243
  await writer.ready;
212
- workerData.writable.size += data.byteLength;
213
244
  await writer.write(new Uint8Array(data));
214
245
  sendMessage({ type: MESSAGE_ACK_DATA, messageId });
215
246
  }
@@ -227,7 +258,9 @@ function createWebWorkerInterface(workerData, { baseURL, chunkSize }) {
227
258
  } else {
228
259
  resolveResult(result);
229
260
  }
230
- writer.releaseLock();
261
+ if (writer) {
262
+ writer.releaseLock();
263
+ }
231
264
  onTaskFinished();
232
265
  }
233
266
  }
@@ -52,9 +52,10 @@ let indexWorker = 0;
52
52
 
53
53
  async function runWorker(stream, workerOptions) {
54
54
  const { options, config } = workerOptions;
55
- const streamCopy = !options.compressed && !options.signed && !options.encrypted;
56
- const { useWebWorkers, useCompressionStream, codecType } = options;
55
+ const { transferStreams, useWebWorkers, useCompressionStream, codecType, compressed, signed, encrypted } = options;
57
56
  const { workerScripts } = config;
57
+ workerOptions.transferStreams = transferStreams || transferStreams === undefined;
58
+ const streamCopy = !compressed && !signed && !encrypted && !workerOptions.transferStreams;
58
59
  workerOptions.webWorker = !streamCopy && (useWebWorkers || (useWebWorkers === undefined && config.useWebWorkers));
59
60
  workerOptions.scripts = workerOptions.webWorker && workerScripts ? workerScripts[codecType] : [];
60
61
  options.useCompressionStream = useCompressionStream === undefined ? config.useCompressionStream : useCompressionStream;
@@ -66,30 +66,14 @@ function configure(configuration) {
66
66
  Inflate,
67
67
  workerScripts
68
68
  } = configuration;
69
- if (baseURL !== UNDEFINED_TYPE) {
70
- config.baseURL = baseURL;
71
- }
72
- if (chunkSize !== UNDEFINED_TYPE) {
73
- config.chunkSize = chunkSize;
74
- }
75
- if (maxWorkers !== UNDEFINED_TYPE) {
76
- config.maxWorkers = maxWorkers;
77
- }
78
- if (terminateWorkerTimeout !== UNDEFINED_TYPE) {
79
- config.terminateWorkerTimeout = terminateWorkerTimeout;
80
- }
81
- if (useCompressionStream !== UNDEFINED_TYPE) {
82
- config.useCompressionStream = useCompressionStream;
83
- }
84
- if (useWebWorkers !== UNDEFINED_TYPE) {
85
- config.useWebWorkers = useWebWorkers;
86
- }
87
- if (Deflate !== UNDEFINED_TYPE) {
88
- config.Deflate = Deflate;
89
- }
90
- if (Inflate !== UNDEFINED_TYPE) {
91
- config.Inflate = Inflate;
92
- }
69
+ setIfDefined("baseURL", baseURL);
70
+ setIfDefined("chunkSize", chunkSize);
71
+ setIfDefined("maxWorkers", maxWorkers);
72
+ setIfDefined("terminateWorkerTimeout", terminateWorkerTimeout);
73
+ setIfDefined("useCompressionStream", useCompressionStream);
74
+ setIfDefined("useWebWorkers", useWebWorkers);
75
+ setIfDefined("Deflate", Deflate);
76
+ setIfDefined("Inflate", Inflate);
93
77
  if (workerScripts !== UNDEFINED_TYPE) {
94
78
  const { deflate, inflate } = workerScripts;
95
79
  if (deflate || inflate) {
@@ -111,3 +95,9 @@ function configure(configuration) {
111
95
  }
112
96
  }
113
97
  }
98
+
99
+ function setIfDefined(propertyName, propertyValue) {
100
+ if (propertyValue !== UNDEFINED_TYPE) {
101
+ config[propertyName] = propertyValue;
102
+ }
103
+ }
File without changes
package/lib/core/io.js CHANGED
@@ -66,8 +66,8 @@ class Reader extends Stream {
66
66
  async pull(controller) {
67
67
  const { offset = 0, size } = readable;
68
68
  const { chunkOffset } = this;
69
- controller.enqueue(await reader.readUint8Array(offset + chunkOffset, Math.min(chunkSize, size() - chunkOffset)));
70
- if (chunkOffset + chunkSize > size()) {
69
+ controller.enqueue(await reader.readUint8Array(offset + chunkOffset, Math.min(chunkSize, size - chunkOffset)));
70
+ if (chunkOffset + chunkSize > size) {
71
71
  controller.close();
72
72
  } else {
73
73
  this.chunkOffset += chunkSize;
@@ -224,26 +224,16 @@ class BlobWriter extends Stream {
224
224
  constructor(contentType) {
225
225
  super();
226
226
  const writer = this;
227
- writer.contentType = contentType;
228
- writer.transformStream = new TransformStream();
229
- Object.defineProperty(writer, "writable", {
230
- get() {
231
- return writer.transformStream.writable;
232
- }
233
- });
234
- }
235
-
236
- init() {
237
- super.init();
238
- const writer = this;
239
- const {
240
- transformStream,
241
- contentType
242
- } = writer;
227
+ const transformStream = new TransformStream();
243
228
  const headers = [];
244
229
  if (contentType) {
245
230
  headers.push(["content-type", contentType]);
246
231
  }
232
+ Object.defineProperty(writer, "writable", {
233
+ get() {
234
+ return transformStream.writable;
235
+ }
236
+ });
247
237
  writer.blob = new Response(transformStream.readable, { headers }).blob();
248
238
  }
249
239
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -63,7 +63,7 @@ addEventListener(MESSAGE_EVENT_TYPE, async event => {
63
63
  resolve();
64
64
  }
65
65
  } catch (error) {
66
- postMessage({ error: { message: error.message, stack: error.stack } });
66
+ sendErrorMessage(error);
67
67
  }
68
68
  });
69
69
 
@@ -84,7 +84,7 @@ async function init(message) {
84
84
  codecConstructor = self.Inflate;
85
85
  }
86
86
  const strategy = { highWaterMark: 1, size: () => config.chunkSize };
87
- const readable = new ReadableStream({
87
+ const readable = message.readable || new ReadableStream({
88
88
  async pull(controller) {
89
89
  let result = new Promise(resolve => pendingPullMessages.set(messageId, resolve));
90
90
  sendMessage({ type: MESSAGE_PULL, messageId });
@@ -96,7 +96,7 @@ async function init(message) {
96
96
  }
97
97
  }
98
98
  }, strategy);
99
- const writable = new WritableStream({
99
+ const writable = message.writable || new WritableStream({
100
100
  async write(data) {
101
101
  let resolveAckData;
102
102
  const ackData = new Promise(resolve => resolveAckData = resolve);
@@ -108,10 +108,12 @@ async function init(message) {
108
108
  }, strategy);
109
109
  codec = new Codec(codecConstructor, readable, writable, options, config);
110
110
  const result = await codec.run();
111
+ if (message.writable && !options.preventClose) {
112
+ await message.writable.close();
113
+ }
111
114
  sendMessage({ type: MESSAGE_CLOSE, result });
112
115
  } catch (error) {
113
- const { message, stack } = error;
114
- postMessage({ error: { message, stack } });
116
+ sendErrorMessage(error);
115
117
  }
116
118
  }
117
119
 
@@ -132,4 +134,9 @@ function sendMessage(message) {
132
134
  } else {
133
135
  postMessage(message);
134
136
  }
137
+ }
138
+
139
+ function sendErrorMessage(error) {
140
+ const { message, stack, code, name } = error;
141
+ postMessage({ error: { message, stack, code, name } });
135
142
  }
File without changes
@@ -122,9 +122,8 @@ class ZipFileEntry extends ZipEntry {
122
122
  } else {
123
123
  const reader = zipEntry.reader = new zipEntry.Reader(zipEntry.data, options);
124
124
  await Promise.all([initStream(reader), initStream(writer, zipEntry.data.uncompressedSize)]);
125
- zipEntry.uncompressedSize = reader.size;
126
125
  const readable = reader.readable;
127
- readable.size = () => reader.size;
126
+ readable.size = zipEntry.uncompressedSize = reader.size;
128
127
  await readable.pipeTo(writer.writable);
129
128
  return writer.getData ? writer.getData() : writer.writable;
130
129
  }
@@ -317,13 +317,13 @@ class ZipEntry {
317
317
  }
318
318
  }
319
319
  const dataOffset = offset + 30 + localDirectory.filenameLength + localDirectory.extraFieldLength;
320
- const size = () => compressedSize;
321
320
  const readable = reader.readable;
322
321
  readable.offset = dataOffset;
323
- readable.size = size;
322
+ const size = readable.size = compressedSize;
324
323
  const { writable } = writer;
325
324
  writable.size = 0;
326
325
  const signal = getOptionValue(zipEntry, options, "signal");
326
+ const preventClose = getOptionValue(zipEntry, options, "preventClose");
327
327
  await initStream(writer, uncompressedSize);
328
328
  const { onstart, onprogress, onend } = options;
329
329
  const workerOptions = {
@@ -338,16 +338,21 @@ class ZipEntry {
338
338
  compressed: compressionMethod != 0,
339
339
  encrypted,
340
340
  useWebWorkers: getOptionValue(zipEntry, options, "useWebWorkers"),
341
- useCompressionStream: getOptionValue(zipEntry, options, "useCompressionStream")
341
+ useCompressionStream: getOptionValue(zipEntry, options, "useCompressionStream"),
342
+ transferStreams: getOptionValue(zipEntry, options, "transferStreams"),
343
+ preventClose
342
344
  },
343
345
  config,
344
346
  streamOptions: { signal, size, onstart, onprogress, onend },
345
347
  codecConstructor: config.Inflate
346
348
  };
347
- await runWorker({ readable, writable }, workerOptions);
348
- const preventClose = getOptionValue(zipEntry, options, "preventClose");
349
+ writable.size += (await runWorker({ readable, writable }, workerOptions)).size;
349
350
  if (!preventClose) {
350
- await writable.getWriter().close();
351
+ try {
352
+ await writable.close();
353
+ } catch (_error) {
354
+ // ignored
355
+ }
351
356
  }
352
357
  return writer.getData ? writer.getData() : writable;
353
358
  }
@@ -495,9 +495,8 @@ async function createFileEntry(reader, writer, pendingFileEntry, entryInfo, conf
495
495
  if (reader) {
496
496
  reader.chunkSize = getChunkSize(config);
497
497
  await writeData(writable, localHeaderArray);
498
- const size = () => reader.size;
499
498
  const readable = reader.readable;
500
- readable.size = size;
499
+ const size = readable.size = reader.size;
501
500
  const workerOptions = {
502
501
  options: {
503
502
  codecType: CODEC_DEFLATE,
@@ -510,16 +509,18 @@ async function createFileEntry(reader, writer, pendingFileEntry, entryInfo, conf
510
509
  compressed,
511
510
  encrypted,
512
511
  useWebWorkers,
513
- useCompressionStream
512
+ useCompressionStream,
513
+ transferStreams: false
514
514
  },
515
515
  config,
516
516
  streamOptions: { signal, size, onstart, onprogress, onend },
517
517
  codecConstructor: config.Deflate
518
518
  };
519
- const previousSize = writable.size;
520
- signature = (await runWorker({ readable, writable }, workerOptions)).signature;
521
- uncompressedSize = reader.size = readable.size();
522
- compressedSize = writable.size - previousSize;
519
+ const result = await runWorker({ readable, writable }, workerOptions);
520
+ writable.size += result.size;
521
+ signature = result.signature;
522
+ uncompressedSize = reader.size = readable.size;
523
+ compressedSize = result.size;
523
524
  } else {
524
525
  await writeData(writable, localHeaderArray);
525
526
  }
File without changes
File without changes
File without changes
File without changes
File without changes