@zip.js/zip.js 2.6.13 → 2.6.16
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/README.md +70 -17
- package/dist/README.md +6 -4
- package/dist/zip-fs-full.js +51 -46
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +51 -46
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +50 -45
- 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 +50 -45
- package/dist/zip.min.js +1 -1
- package/index.d.ts +15 -9
- package/lib/core/io.js +11 -10
- package/lib/core/zip-fs-core.js +1 -1
- package/lib/core/zip-reader.js +2 -1
- package/lib/core/zip-writer.js +37 -34
- package/package.json +2 -2
package/dist/zip-fs.js
CHANGED
|
@@ -2716,18 +2716,19 @@
|
|
|
2716
2716
|
|
|
2717
2717
|
class Uint8ArrayWriter extends Writer {
|
|
2718
2718
|
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
this.array = new Uint8Array();
|
|
2719
|
+
init(initSize = 0) {
|
|
2720
|
+
this.array = new Uint8Array(initSize);
|
|
2722
2721
|
}
|
|
2723
2722
|
|
|
2724
2723
|
writeUint8Array(array) {
|
|
2725
|
-
super.writeUint8Array(array);
|
|
2726
2724
|
const writer = this;
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2725
|
+
if (writer.size + array.length > writer.array.length) {
|
|
2726
|
+
const previousArray = writer.array;
|
|
2727
|
+
writer.array = new Uint8Array(previousArray.length + array.length);
|
|
2728
|
+
writer.array.set(previousArray);
|
|
2729
|
+
}
|
|
2730
|
+
writer.array.set(array, writer.size);
|
|
2731
|
+
super.writeUint8Array(array);
|
|
2731
2732
|
}
|
|
2732
2733
|
|
|
2733
2734
|
getData() {
|
|
@@ -2741,9 +2742,9 @@
|
|
|
2741
2742
|
return protocol == "http:" || protocol == "https:";
|
|
2742
2743
|
}
|
|
2743
2744
|
|
|
2744
|
-
async function initStream(stream) {
|
|
2745
|
+
async function initStream(stream, initSize) {
|
|
2745
2746
|
if (stream.init && !stream.initialized) {
|
|
2746
|
-
await stream.init();
|
|
2747
|
+
await stream.init(initSize);
|
|
2747
2748
|
}
|
|
2748
2749
|
}
|
|
2749
2750
|
|
|
@@ -3162,6 +3163,7 @@
|
|
|
3162
3163
|
bitFlag,
|
|
3163
3164
|
signature,
|
|
3164
3165
|
rawLastModDate,
|
|
3166
|
+
uncompressedSize,
|
|
3165
3167
|
compressedSize
|
|
3166
3168
|
} = zipEntry;
|
|
3167
3169
|
const localDirectory = zipEntry.localDirectory = {};
|
|
@@ -3202,7 +3204,7 @@
|
|
|
3202
3204
|
readable.size = size;
|
|
3203
3205
|
const { writable } = writer;
|
|
3204
3206
|
const signal = getOptionValue$1(zipEntry, options, "signal");
|
|
3205
|
-
await initStream(writer);
|
|
3207
|
+
await initStream(writer, uncompressedSize);
|
|
3206
3208
|
const { onstart, onprogress, onend } = options;
|
|
3207
3209
|
const workerOptions = {
|
|
3208
3210
|
options: {
|
|
@@ -3530,6 +3532,7 @@
|
|
|
3530
3532
|
const EXTRAFIELD_LENGTH_ZIP64 = 24;
|
|
3531
3533
|
|
|
3532
3534
|
let workers = 0;
|
|
3535
|
+
const pendingEntries = [];
|
|
3533
3536
|
|
|
3534
3537
|
class ZipWriter {
|
|
3535
3538
|
|
|
@@ -3542,7 +3545,6 @@
|
|
|
3542
3545
|
filenames: new Set(),
|
|
3543
3546
|
offset: writer.size || 0,
|
|
3544
3547
|
pendingCompressedSize: 0,
|
|
3545
|
-
pendingEntries: [],
|
|
3546
3548
|
pendingAddFileCalls: new Set()
|
|
3547
3549
|
});
|
|
3548
3550
|
}
|
|
@@ -3551,36 +3553,34 @@
|
|
|
3551
3553
|
const zipWriter = this;
|
|
3552
3554
|
const {
|
|
3553
3555
|
pendingAddFileCalls,
|
|
3554
|
-
pendingEntries,
|
|
3555
3556
|
config
|
|
3556
3557
|
} = zipWriter;
|
|
3557
3558
|
if (workers < config.maxWorkers) {
|
|
3558
3559
|
workers++;
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3566
|
-
|
|
3567
|
-
|
|
3568
|
-
|
|
3569
|
-
|
|
3570
|
-
|
|
3571
|
-
|
|
3572
|
-
|
|
3573
|
-
|
|
3560
|
+
} else {
|
|
3561
|
+
await new Promise(resolve => pendingEntries.push(resolve));
|
|
3562
|
+
}
|
|
3563
|
+
let promiseAddFile;
|
|
3564
|
+
try {
|
|
3565
|
+
name = name.trim();
|
|
3566
|
+
if (zipWriter.filenames.has(name)) {
|
|
3567
|
+
throw new Error(ERR_DUPLICATED_NAME);
|
|
3568
|
+
}
|
|
3569
|
+
zipWriter.filenames.add(name);
|
|
3570
|
+
promiseAddFile = addFile(zipWriter, name, reader, options);
|
|
3571
|
+
pendingAddFileCalls.add(promiseAddFile);
|
|
3572
|
+
return await promiseAddFile;
|
|
3573
|
+
} catch (error) {
|
|
3574
|
+
zipWriter.filenames.delete(name);
|
|
3575
|
+
throw error;
|
|
3576
|
+
} finally {
|
|
3577
|
+
pendingAddFileCalls.delete(promiseAddFile);
|
|
3578
|
+
const pendingEntry = pendingEntries.shift();
|
|
3579
|
+
if (pendingEntry) {
|
|
3580
|
+
pendingEntry();
|
|
3581
|
+
} else {
|
|
3574
3582
|
workers--;
|
|
3575
|
-
const pendingEntry = pendingEntries.shift();
|
|
3576
|
-
if (pendingEntry) {
|
|
3577
|
-
zipWriter.add(pendingEntry.name, pendingEntry.reader, pendingEntry.options)
|
|
3578
|
-
.then(pendingEntry.resolve)
|
|
3579
|
-
.catch(pendingEntry.reject);
|
|
3580
|
-
}
|
|
3581
3583
|
}
|
|
3582
|
-
} else {
|
|
3583
|
-
return new Promise((resolve, reject) => pendingEntries.push({ name, reader, options, resolve, reject }));
|
|
3584
3584
|
}
|
|
3585
3585
|
}
|
|
3586
3586
|
|
|
@@ -3750,8 +3750,9 @@
|
|
|
3750
3750
|
let bufferedWrite;
|
|
3751
3751
|
let releaseLockWriter;
|
|
3752
3752
|
let releaseLockCurrentFileEntry;
|
|
3753
|
-
let
|
|
3753
|
+
let writingBufferedData;
|
|
3754
3754
|
let fileWriter;
|
|
3755
|
+
let fileWriterSize;
|
|
3755
3756
|
files.set(name, fileEntry);
|
|
3756
3757
|
try {
|
|
3757
3758
|
let lockPreviousFileEntry;
|
|
@@ -3768,6 +3769,7 @@
|
|
|
3768
3769
|
await initStream(writer);
|
|
3769
3770
|
fileWriter = writer;
|
|
3770
3771
|
}
|
|
3772
|
+
fileWriterSize = fileWriter.size;
|
|
3771
3773
|
fileEntry = await createFileEntry(reader, fileEntry, fileWriter.writable, zipWriter.config, options);
|
|
3772
3774
|
files.set(name, fileEntry);
|
|
3773
3775
|
fileEntry.filename = name;
|
|
@@ -3775,7 +3777,7 @@
|
|
|
3775
3777
|
let blob = fileWriter.getData();
|
|
3776
3778
|
await lockPreviousFileEntry;
|
|
3777
3779
|
await requestLockWriter();
|
|
3778
|
-
|
|
3780
|
+
writingBufferedData = true;
|
|
3779
3781
|
const { writable } = writer;
|
|
3780
3782
|
if (!dataDescriptor) {
|
|
3781
3783
|
const headerLength = 26;
|
|
@@ -3795,7 +3797,7 @@
|
|
|
3795
3797
|
blob = blob.slice(headerLength);
|
|
3796
3798
|
}
|
|
3797
3799
|
await blob.stream().pipeTo(writable, { preventClose: true, signal });
|
|
3798
|
-
|
|
3800
|
+
writingBufferedData = false;
|
|
3799
3801
|
}
|
|
3800
3802
|
fileEntry.offset = zipWriter.offset;
|
|
3801
3803
|
if (fileEntry.zip64) {
|
|
@@ -3807,9 +3809,12 @@
|
|
|
3807
3809
|
zipWriter.offset += fileEntry.length;
|
|
3808
3810
|
return fileEntry;
|
|
3809
3811
|
} catch (error) {
|
|
3810
|
-
if ((bufferedWrite &&
|
|
3811
|
-
|
|
3812
|
-
|
|
3812
|
+
if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.writingData)) {
|
|
3813
|
+
zipWriter.hasCorruptedEntries = true;
|
|
3814
|
+
if (error) {
|
|
3815
|
+
error.corruptedEntry = true;
|
|
3816
|
+
}
|
|
3817
|
+
zipWriter.offset += fileWriter.size - fileWriterSize;
|
|
3813
3818
|
}
|
|
3814
3819
|
files.delete(name);
|
|
3815
3820
|
throw error;
|
|
@@ -3986,10 +3991,10 @@
|
|
|
3986
3991
|
arraySet(localHeaderArray, rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
|
|
3987
3992
|
let result;
|
|
3988
3993
|
let compressedSize = 0;
|
|
3994
|
+
fileEntry.writingData = pendingFileEntry.writingData = true;
|
|
3989
3995
|
if (reader) {
|
|
3990
3996
|
reader.chunkSize = getChunkSize(config);
|
|
3991
3997
|
await writeData(writable, localHeaderArray);
|
|
3992
|
-
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
3993
3998
|
const size = () => reader.size;
|
|
3994
3999
|
const readable = reader.readable;
|
|
3995
4000
|
readable.size = size;
|
|
@@ -4016,7 +4021,6 @@
|
|
|
4016
4021
|
compressedSize = result.size;
|
|
4017
4022
|
} else {
|
|
4018
4023
|
await writeData(writable, localHeaderArray);
|
|
4019
|
-
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
4020
4024
|
}
|
|
4021
4025
|
let dataDescriptorArray = new Uint8Array();
|
|
4022
4026
|
let dataDescriptorView, dataDescriptorOffset = 0;
|
|
@@ -4069,7 +4073,8 @@
|
|
|
4069
4073
|
creationDate,
|
|
4070
4074
|
lastAccessDate,
|
|
4071
4075
|
encrypted,
|
|
4072
|
-
length
|
|
4076
|
+
length,
|
|
4077
|
+
writingData: false
|
|
4073
4078
|
});
|
|
4074
4079
|
return fileEntry;
|
|
4075
4080
|
}
|
|
@@ -4351,7 +4356,7 @@
|
|
|
4351
4356
|
return zipEntry.data;
|
|
4352
4357
|
} else {
|
|
4353
4358
|
const reader = zipEntry.reader = new zipEntry.Reader(zipEntry.data, options);
|
|
4354
|
-
await Promise.all([initStream(reader), initStream(writer)]);
|
|
4359
|
+
await Promise.all([initStream(reader), initStream(writer, zipEntry.data.uncompressedSize)]);
|
|
4355
4360
|
zipEntry.uncompressedSize = reader.size;
|
|
4356
4361
|
const readable = reader.readable;
|
|
4357
4362
|
readable.size = () => reader.size;
|