@zip.js/zip.js 2.6.17 → 2.6.20
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.
- package/.eslintrc.json +0 -0
- package/README.md +0 -0
- package/cli-deno/mc-zip.js +0 -0
- package/dist/README.md +0 -0
- package/dist/z-worker-fflate.js +1 -1
- package/dist/z-worker-pako.js +1 -1
- package/dist/z-worker.js +1 -1
- package/dist/zip-fs-full.js +56 -36
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +56 -36
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +51 -36
- package/dist/zip-full.min.js +1 -1
- package/dist/zip-no-worker-deflate.min.js +1 -1
- package/dist/zip-no-worker-inflate.min.js +1 -1
- package/dist/zip-no-worker.min.js +1 -1
- package/dist/zip.js +51 -36
- package/dist/zip.min.js +1 -1
- package/index-fflate.js +0 -0
- package/index.d.ts +11 -18
- package/index.js +0 -0
- package/lib/core/codec-interface.js +14 -1
- package/lib/core/codec-pool-worker.js +3 -0
- package/lib/core/codec-pool.js +0 -0
- package/lib/core/configuration.js +0 -0
- package/lib/core/constants.js +0 -0
- package/lib/core/io.js +10 -13
- package/lib/core/streams/aes-crypto-stream.js +0 -0
- package/lib/core/streams/codec-stream.js +0 -0
- package/lib/core/streams/codecs/crc32.js +0 -0
- package/lib/core/streams/codecs/deflate.js +0 -0
- package/lib/core/streams/codecs/inflate.js +0 -0
- package/lib/core/streams/codecs/sjcl.js +0 -0
- package/lib/core/streams/common-crypto.js +0 -0
- package/lib/core/streams/crc32-stream.js +0 -0
- package/lib/core/streams/zip-crypto-stream.js +0 -0
- package/lib/core/streams/zip-entry-stream.js +1 -9
- package/lib/core/util/cp437-decode.js +0 -0
- package/lib/core/util/decode-text.js +0 -0
- package/lib/core/util/default-mime-type.js +0 -0
- package/lib/core/util/encode-text.js +0 -0
- package/lib/core/util/mime-type.js +0 -0
- package/lib/core/util/stream-codec-shim.js +0 -0
- package/lib/core/z-worker-core.js +18 -7
- package/lib/core/zip-entry.js +0 -0
- package/lib/core/zip-fs-core.js +5 -0
- package/lib/core/zip-reader.js +1 -0
- package/lib/core/zip-writer.js +24 -12
- package/lib/z-worker-bootstrap-fflate.js +0 -0
- package/lib/z-worker-bootstrap-pako.js +0 -0
- package/lib/z-worker-fflate.js +0 -0
- package/lib/z-worker-inline-template-base64.js +0 -0
- package/lib/z-worker-inline-template.js +0 -0
- package/lib/z-worker-inline.js +1 -1
- package/lib/z-worker.js +0 -0
- package/lib/zip-fflate-shim.js +0 -0
- package/lib/zip-fs.js +0 -0
- package/lib/zip-full-fflate.js +0 -0
- package/lib/zip-full.js +0 -0
- package/lib/zip-no-worker-deflate.js +0 -0
- package/lib/zip-no-worker-fflate-deflate.js +0 -0
- package/lib/zip-no-worker-fflate-inflate.js +0 -0
- package/lib/zip-no-worker-fflate.js +0 -0
- package/lib/zip-no-worker-inflate.js +0 -0
- package/lib/zip-no-worker.js +0 -0
- package/lib/zip.js +0 -0
- package/package.json +1 -1
- package/rollup-fflate.config.dev.js +0 -0
- package/rollup-fflate.config.js +0 -0
- package/rollup.config.dev.js +0 -0
- package/rollup.config.js +0 -0
- package/tests/all/loader.html +0 -0
- package/tests/all/test-abort-signal-read.js +0 -0
- package/tests/all/test-abort-signal-write.js +0 -0
- package/tests/all/test-array.js +0 -0
- package/tests/all/test-base64.js +0 -0
- package/tests/all/test-blob.js +0 -0
- package/tests/all/test-codecs-interoperability.js +0 -0
- package/tests/all/test-crc.js +0 -0
- package/tests/all/test-crypto.js +0 -0
- package/tests/all/test-custom-io.js +0 -1
- package/tests/all/test-data-descriptor-signature.js +0 -0
- package/tests/all/test-data-descriptor.js +0 -0
- package/tests/all/test-duplicated-filename.js +0 -0
- package/tests/all/test-empty.js +0 -0
- package/tests/all/test-extended-timestamp.js +0 -0
- package/tests/all/test-extra-field.js +0 -0
- package/tests/all/test-fflate-no-worker.js +0 -0
- package/tests/all/test-fflate.js +0 -0
- package/tests/all/test-fs-base64.js +0 -0
- package/tests/all/test-fs-export-options.js +0 -0
- package/tests/all/test-fs-http-import.js +0 -0
- package/tests/all/test-fs-http-reader.js +0 -0
- package/tests/all/test-fs-replace.js +0 -0
- package/tests/all/test-fs-streams.js +0 -0
- package/tests/all/test-fs-text.js +0 -0
- package/tests/all/test-fs-unzip-store.js +0 -0
- package/tests/all/test-fs.js +0 -0
- package/tests/all/test-http-crypto.js +0 -0
- package/tests/all/test-http-range.js +0 -0
- package/tests/all/test-http-zip64.js +0 -0
- package/tests/all/test-invalid-crc.js +0 -0
- package/tests/all/test-multiple-writers.js +0 -0
- package/tests/all/test-no-worker.js +0 -0
- package/tests/all/test-pako-no-worker.js +0 -0
- package/tests/all/test-pako.js +0 -0
- package/tests/all/test-parallel-reads.js +0 -0
- package/tests/all/test-parallel-writes-auto-buffered.js +0 -0
- package/tests/all/test-parallel-writes-ordered.js +0 -0
- package/tests/all/test-parallel-writes.js +0 -0
- package/tests/all/test-readable-stream.js +0 -0
- package/tests/all/test-readable-zip-stream.js +0 -0
- package/tests/all/test-safe-closing.js +0 -0
- package/tests/all/test-store.js +0 -0
- package/tests/all/test-sw-worker.js +0 -0
- package/tests/all/test-sw.js +0 -0
- package/tests/all/test-worker-timeout.js +0 -0
- package/tests/all/test-wrapped.js +2 -2
- package/tests/all/test-writable-stream.js +0 -0
- package/tests/all/test-zip64-auto.js +3 -2
- package/tests/all/test-zip64-crypto.js +0 -0
- package/tests/all/test-zip64.js +0 -0
- package/tests/all/test-zipcrypto.js +0 -0
- package/tests/data/lorem-encrypted.zip +0 -0
- package/tests/data/lorem-invalid-crc.zip +0 -0
- package/tests/data/lorem-store.zip +0 -0
- package/tests/data/lorem-zip64.zip +0 -0
- package/tests/data/lorem.txt +0 -0
- package/tests/data/lorem.zip +0 -0
- package/tests/deno-runner.js +0 -0
- package/tests/index.html +0 -0
- package/tests/node-runner.js +0 -0
- package/tests/tests-data.js +0 -0
- package/tests/vendor/fflate-es2019.min.js +0 -0
- package/tests/vendor/fflate.min.js +0 -0
- package/tests/vendor/pako.min.js +0 -0
- package/tests/vendor/pako_deflate.min.js +0 -0
- package/tests/vendor/pako_inflate.min.js +0 -0
- package/tests/web-runner.js +0 -0
- package/tsconfig.json +0 -0
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
29
|
// deno-lint-ignore-file no-this-alias
|
|
30
|
+
/* global TransformStream */
|
|
30
31
|
|
|
31
32
|
import {
|
|
32
33
|
InflateStream,
|
|
@@ -41,6 +42,7 @@ const MESSAGE_EVENT_TYPE = "message";
|
|
|
41
42
|
const MESSAGE_START = "start";
|
|
42
43
|
const MESSAGE_PULL = "pull";
|
|
43
44
|
const MESSAGE_DATA = "data";
|
|
45
|
+
const MESSAGE_ACK_DATA = "ack";
|
|
44
46
|
const MESSAGE_CLOSE = "close";
|
|
45
47
|
|
|
46
48
|
export {
|
|
@@ -53,6 +55,7 @@ export {
|
|
|
53
55
|
MESSAGE_START,
|
|
54
56
|
MESSAGE_PULL,
|
|
55
57
|
MESSAGE_DATA,
|
|
58
|
+
MESSAGE_ACK_DATA,
|
|
56
59
|
MESSAGE_CLOSE
|
|
57
60
|
};
|
|
58
61
|
|
|
@@ -68,7 +71,17 @@ class Codec {
|
|
|
68
71
|
|
|
69
72
|
async function run(StreamConstructor) {
|
|
70
73
|
const stream = new StreamConstructor(codecConstructor, options, config);
|
|
71
|
-
await readable
|
|
74
|
+
await readable
|
|
75
|
+
.pipeThrough(stream)
|
|
76
|
+
.pipeThrough(new TransformStream({
|
|
77
|
+
transform(chunk, controller) {
|
|
78
|
+
if (chunk && chunk.length) {
|
|
79
|
+
writable.size += chunk.length;
|
|
80
|
+
controller.enqueue(chunk);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}))
|
|
84
|
+
.pipeTo(writable, { preventClose: true, preventAbort: true });
|
|
72
85
|
const { size, signature } = stream;
|
|
73
86
|
return { size, signature };
|
|
74
87
|
}
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
MESSAGE_START,
|
|
35
35
|
MESSAGE_PULL,
|
|
36
36
|
MESSAGE_DATA,
|
|
37
|
+
MESSAGE_ACK_DATA,
|
|
37
38
|
MESSAGE_CLOSE
|
|
38
39
|
} from "./codec-interface.js";
|
|
39
40
|
|
|
@@ -208,7 +209,9 @@ function createWebWorkerInterface(workerData, { baseURL, chunkSize }) {
|
|
|
208
209
|
}
|
|
209
210
|
if (type == MESSAGE_DATA) {
|
|
210
211
|
await writer.ready;
|
|
212
|
+
workerData.writable.size += data.byteLength;
|
|
211
213
|
await writer.write(new Uint8Array(data));
|
|
214
|
+
sendMessage({ type: MESSAGE_ACK_DATA, messageId });
|
|
212
215
|
}
|
|
213
216
|
if (type == MESSAGE_CLOSE) {
|
|
214
217
|
close(null, result);
|
package/lib/core/codec-pool.js
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/core/constants.js
CHANGED
|
File without changes
|
package/lib/core/io.js
CHANGED
|
@@ -78,7 +78,7 @@ class Reader extends Stream {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
class
|
|
81
|
+
class Writer extends Stream {
|
|
82
82
|
|
|
83
83
|
constructor() {
|
|
84
84
|
super();
|
|
@@ -88,18 +88,15 @@ class WriterStream extends Stream {
|
|
|
88
88
|
return writer.writeUint8Array(chunk);
|
|
89
89
|
}
|
|
90
90
|
});
|
|
91
|
-
Object.defineProperty(
|
|
91
|
+
Object.defineProperty(writer, "writable", {
|
|
92
92
|
get() {
|
|
93
93
|
return writable;
|
|
94
94
|
}
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
class Writer extends WriterStream {
|
|
100
97
|
|
|
101
|
-
writeUint8Array(
|
|
102
|
-
|
|
98
|
+
writeUint8Array() {
|
|
99
|
+
// abstract
|
|
103
100
|
}
|
|
104
101
|
}
|
|
105
102
|
|
|
@@ -131,7 +128,6 @@ class TextWriter extends Writer {
|
|
|
131
128
|
}
|
|
132
129
|
|
|
133
130
|
writeUint8Array(array) {
|
|
134
|
-
super.writeUint8Array(array);
|
|
135
131
|
this.blob = new Blob([this.blob, array.buffer], { type: CONTENT_TYPE_TEXT_PLAIN });
|
|
136
132
|
}
|
|
137
133
|
|
|
@@ -186,7 +182,6 @@ class Data64URIWriter extends Writer {
|
|
|
186
182
|
}
|
|
187
183
|
|
|
188
184
|
writeUint8Array(array) {
|
|
189
|
-
super.writeUint8Array(array);
|
|
190
185
|
const writer = this;
|
|
191
186
|
let indexArray = 0;
|
|
192
187
|
let dataString = writer.pending;
|
|
@@ -483,18 +478,20 @@ class Uint8ArrayWriter extends Writer {
|
|
|
483
478
|
|
|
484
479
|
init(initSize = 0) {
|
|
485
480
|
super.init();
|
|
486
|
-
|
|
481
|
+
const writer = this;
|
|
482
|
+
writer.offset = 0;
|
|
483
|
+
writer.array = new Uint8Array(initSize);
|
|
487
484
|
}
|
|
488
485
|
|
|
489
486
|
writeUint8Array(array) {
|
|
490
487
|
const writer = this;
|
|
491
|
-
if (writer.
|
|
488
|
+
if (writer.offset + array.length > writer.array.length) {
|
|
492
489
|
const previousArray = writer.array;
|
|
493
490
|
writer.array = new Uint8Array(previousArray.length + array.length);
|
|
494
491
|
writer.array.set(previousArray);
|
|
495
492
|
}
|
|
496
|
-
writer.array.set(array, writer.
|
|
497
|
-
|
|
493
|
+
writer.array.set(array, writer.offset);
|
|
494
|
+
writer.offset += array.length;
|
|
498
495
|
}
|
|
499
496
|
|
|
500
497
|
getData() {
|
|
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
|
|
@@ -167,15 +167,7 @@ function filterEmptyChunks(readable) {
|
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
function setReadable(stream, readable, flush) {
|
|
170
|
-
|
|
171
|
-
readable = readable.pipeThrough(new TransformStream({
|
|
172
|
-
transform(chunk, controller) {
|
|
173
|
-
if (chunk && chunk.length) {
|
|
174
|
-
stream.size += chunk.length;
|
|
175
|
-
controller.enqueue(chunk);
|
|
176
|
-
}
|
|
177
|
-
}, flush
|
|
178
|
-
}));
|
|
170
|
+
readable = readable.pipeThrough(new TransformStream({ flush }));
|
|
179
171
|
Object.defineProperty(stream, "readable", {
|
|
180
172
|
get() {
|
|
181
173
|
return readable;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -36,10 +36,12 @@ import {
|
|
|
36
36
|
MESSAGE_START,
|
|
37
37
|
MESSAGE_PULL,
|
|
38
38
|
MESSAGE_DATA,
|
|
39
|
+
MESSAGE_ACK_DATA,
|
|
39
40
|
MESSAGE_CLOSE
|
|
40
41
|
} from "./codec-interface.js";
|
|
41
42
|
|
|
42
|
-
const
|
|
43
|
+
const pendingPullMessages = new Map();
|
|
44
|
+
const pendingDataMessages = new Map();
|
|
43
45
|
let codec;
|
|
44
46
|
let messageId = 0;
|
|
45
47
|
|
|
@@ -51,10 +53,15 @@ addEventListener(MESSAGE_EVENT_TYPE, async event => {
|
|
|
51
53
|
init(message);
|
|
52
54
|
}
|
|
53
55
|
if (type == MESSAGE_DATA) {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
+
const resolve = pendingPullMessages.get(messageId);
|
|
57
|
+
pendingPullMessages.delete(messageId);
|
|
56
58
|
resolve({ value: new Uint8Array(data), done });
|
|
57
59
|
}
|
|
60
|
+
if (type == MESSAGE_ACK_DATA) {
|
|
61
|
+
const resolve = pendingDataMessages.get(messageId);
|
|
62
|
+
pendingDataMessages.delete(messageId);
|
|
63
|
+
resolve();
|
|
64
|
+
}
|
|
58
65
|
} catch (error) {
|
|
59
66
|
postMessage({ error: { message: error.message, stack: error.stack } });
|
|
60
67
|
}
|
|
@@ -79,7 +86,7 @@ async function init(message) {
|
|
|
79
86
|
const strategy = { highWaterMark: 1, size: () => config.chunkSize };
|
|
80
87
|
const readable = new ReadableStream({
|
|
81
88
|
async pull(controller) {
|
|
82
|
-
let result = new Promise(
|
|
89
|
+
let result = new Promise(resolve => pendingPullMessages.set(messageId, resolve));
|
|
83
90
|
sendMessage({ type: MESSAGE_PULL, messageId });
|
|
84
91
|
messageId = (messageId + 1) % Number.MAX_SAFE_INTEGER;
|
|
85
92
|
const { value, done } = await result;
|
|
@@ -90,14 +97,18 @@ async function init(message) {
|
|
|
90
97
|
}
|
|
91
98
|
}, strategy);
|
|
92
99
|
const writable = new WritableStream({
|
|
93
|
-
write(data) {
|
|
94
|
-
|
|
100
|
+
async write(data) {
|
|
101
|
+
let resolveAckData;
|
|
102
|
+
const ackData = new Promise(resolve => resolveAckData = resolve);
|
|
103
|
+
pendingDataMessages.set(messageId, resolveAckData);
|
|
104
|
+
sendMessage({ type: MESSAGE_DATA, data, messageId });
|
|
105
|
+
messageId = (messageId + 1) % Number.MAX_SAFE_INTEGER;
|
|
106
|
+
await ackData;
|
|
95
107
|
}
|
|
96
108
|
}, strategy);
|
|
97
109
|
codec = new Codec(codecConstructor, readable, writable, options, config);
|
|
98
110
|
const result = await codec.run();
|
|
99
111
|
sendMessage({ type: MESSAGE_CLOSE, result });
|
|
100
|
-
|
|
101
112
|
} catch (error) {
|
|
102
113
|
const { message, stack } = error;
|
|
103
114
|
postMessage({ error: { message, stack } });
|
package/lib/core/zip-entry.js
CHANGED
|
File without changes
|
package/lib/core/zip-fs-core.js
CHANGED
|
@@ -437,6 +437,11 @@ class FS {
|
|
|
437
437
|
await this.root.importData64URI(dataURI, options);
|
|
438
438
|
}
|
|
439
439
|
|
|
440
|
+
async importUint8Array(array, options) {
|
|
441
|
+
resetFS(this);
|
|
442
|
+
await this.root.importUint8Array(array, options);
|
|
443
|
+
}
|
|
444
|
+
|
|
440
445
|
async importHttpContent(url, options) {
|
|
441
446
|
resetFS(this);
|
|
442
447
|
await this.root.importHttpContent(url, options);
|
package/lib/core/zip-reader.js
CHANGED
|
@@ -322,6 +322,7 @@ class ZipEntry {
|
|
|
322
322
|
readable.offset = dataOffset;
|
|
323
323
|
readable.size = size;
|
|
324
324
|
const { writable } = writer;
|
|
325
|
+
writable.size = 0;
|
|
325
326
|
const signal = getOptionValue(zipEntry, options, "signal");
|
|
326
327
|
await initStream(writer, uncompressedSize);
|
|
327
328
|
const { onstart, onprogress, onend } = options;
|
package/lib/core/zip-writer.js
CHANGED
|
@@ -93,13 +93,16 @@ const pendingEntries = [];
|
|
|
93
93
|
class ZipWriter {
|
|
94
94
|
|
|
95
95
|
constructor(writer, options = {}) {
|
|
96
|
+
if (writer.writable.size == undefined) {
|
|
97
|
+
writer.writable.size = 0;
|
|
98
|
+
}
|
|
96
99
|
Object.assign(this, {
|
|
97
100
|
writer,
|
|
98
101
|
options,
|
|
99
102
|
config: getConfiguration(),
|
|
100
103
|
files: new Map(),
|
|
101
104
|
filenames: new Set(),
|
|
102
|
-
offset: writer.size
|
|
105
|
+
offset: writer.writable.size,
|
|
103
106
|
pendingCompressedSize: 0,
|
|
104
107
|
pendingAddFileCalls: new Set()
|
|
105
108
|
});
|
|
@@ -321,7 +324,6 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
321
324
|
let releaseLockCurrentFileEntry;
|
|
322
325
|
let writingBufferedData;
|
|
323
326
|
let fileWriter;
|
|
324
|
-
let fileWriterSize;
|
|
325
327
|
files.set(name, fileEntry);
|
|
326
328
|
try {
|
|
327
329
|
let lockPreviousFileEntry;
|
|
@@ -331,15 +333,19 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
331
333
|
}
|
|
332
334
|
if (options.bufferedWrite || zipWriter.lockWriter || !dataDescriptor) {
|
|
333
335
|
fileWriter = new BlobWriter();
|
|
336
|
+
fileWriter.writable.size = 0;
|
|
334
337
|
bufferedWrite = true;
|
|
335
338
|
await initStream(writer);
|
|
336
339
|
} else {
|
|
337
340
|
fileWriter = writer;
|
|
338
341
|
zipWriter.lockWriter = Promise.resolve();
|
|
342
|
+
releaseLockWriter = () => delete zipWriter.lockWriter;
|
|
339
343
|
}
|
|
340
344
|
await initStream(fileWriter);
|
|
341
|
-
|
|
342
|
-
|
|
345
|
+
if (!bufferedWrite) {
|
|
346
|
+
await lockPreviousFileEntry;
|
|
347
|
+
}
|
|
348
|
+
fileEntry = await createFileEntry(reader, fileWriter, fileEntry, zipWriter.config, options);
|
|
343
349
|
files.set(name, fileEntry);
|
|
344
350
|
fileEntry.filename = name;
|
|
345
351
|
if (bufferedWrite) {
|
|
@@ -350,8 +356,7 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
350
356
|
writingBufferedData = true;
|
|
351
357
|
const { writable } = writer;
|
|
352
358
|
if (!dataDescriptor) {
|
|
353
|
-
const
|
|
354
|
-
const arrayBuffer = await sliceAsArrayBuffer(blob, 0, headerLength);
|
|
359
|
+
const arrayBuffer = await sliceAsArrayBuffer(blob, 0, 26);
|
|
355
360
|
const arrayBufferView = new DataView(arrayBuffer);
|
|
356
361
|
if (!fileEntry.encrypted || zipCrypto) {
|
|
357
362
|
setUint32(arrayBufferView, 14, fileEntry.signature);
|
|
@@ -364,7 +369,7 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
364
369
|
setUint32(arrayBufferView, 22, fileEntry.uncompressedSize);
|
|
365
370
|
}
|
|
366
371
|
await writeData(writable, new Uint8Array(arrayBuffer));
|
|
367
|
-
blob = blob.slice(
|
|
372
|
+
blob = blob.slice(arrayBuffer.byteLength);
|
|
368
373
|
}
|
|
369
374
|
await blob.stream().pipeTo(writable, { preventClose: true, signal });
|
|
370
375
|
writingBufferedData = false;
|
|
@@ -384,7 +389,11 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
384
389
|
if (error) {
|
|
385
390
|
error.corruptedEntry = true;
|
|
386
391
|
}
|
|
387
|
-
|
|
392
|
+
if (bufferedWrite) {
|
|
393
|
+
zipWriter.offset += fileWriter.writable.size;
|
|
394
|
+
} else {
|
|
395
|
+
zipWriter.offset = fileWriter.writable.size;
|
|
396
|
+
}
|
|
388
397
|
}
|
|
389
398
|
files.delete(name);
|
|
390
399
|
throw error;
|
|
@@ -412,7 +421,7 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
412
421
|
}
|
|
413
422
|
}
|
|
414
423
|
|
|
415
|
-
async function createFileEntry(reader,
|
|
424
|
+
async function createFileEntry(reader, writer, pendingFileEntry, config, options) {
|
|
416
425
|
const {
|
|
417
426
|
rawFilename,
|
|
418
427
|
lastAccessDate,
|
|
@@ -505,7 +514,7 @@ async function createFileEntry(reader, pendingFileEntry, writable, config, optio
|
|
|
505
514
|
internalFileAttribute,
|
|
506
515
|
externalFileAttribute
|
|
507
516
|
};
|
|
508
|
-
let uncompressedSize =
|
|
517
|
+
let uncompressedSize = 0;
|
|
509
518
|
let bitFlag = BITFLAG_LANG_ENCODING_FLAG;
|
|
510
519
|
if (dataDescriptor) {
|
|
511
520
|
bitFlag = bitFlag | BITFLAG_DATA_DESCRIPTOR;
|
|
@@ -561,6 +570,7 @@ async function createFileEntry(reader, pendingFileEntry, writable, config, optio
|
|
|
561
570
|
arraySet(localHeaderArray, rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
|
|
562
571
|
let result;
|
|
563
572
|
let compressedSize = 0;
|
|
573
|
+
const { writable } = writer;
|
|
564
574
|
fileEntry.writingData = pendingFileEntry.writingData = true;
|
|
565
575
|
if (reader) {
|
|
566
576
|
reader.chunkSize = getChunkSize(config);
|
|
@@ -586,9 +596,10 @@ async function createFileEntry(reader, pendingFileEntry, writable, config, optio
|
|
|
586
596
|
streamOptions: { signal, size, onstart, onprogress, onend },
|
|
587
597
|
codecConstructor: config.Deflate
|
|
588
598
|
};
|
|
599
|
+
const previousSize = writable.size;
|
|
589
600
|
result = await runWorker({ readable, writable }, workerOptions);
|
|
590
|
-
uncompressedSize =
|
|
591
|
-
compressedSize =
|
|
601
|
+
uncompressedSize = reader.size = readable.size();
|
|
602
|
+
compressedSize = writable.size - previousSize;
|
|
592
603
|
} else {
|
|
593
604
|
await writeData(writable, localHeaderArray);
|
|
594
605
|
}
|
|
@@ -784,6 +795,7 @@ function sliceAsArrayBuffer(blob, start, end) {
|
|
|
784
795
|
async function writeData(writable, array) {
|
|
785
796
|
const streamWriter = writable.getWriter();
|
|
786
797
|
await streamWriter.ready;
|
|
798
|
+
writable.size += array.length;
|
|
787
799
|
await streamWriter.write(array);
|
|
788
800
|
streamWriter.releaseLock();
|
|
789
801
|
}
|
|
File without changes
|
|
File without changes
|
package/lib/z-worker-fflate.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|