@zip.js/zip.js 2.5.20 → 2.5.23
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/cli-deno/mc-zip.js +10 -4
- package/dist/zip-fs-full.js +48 -53
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +48 -53
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +48 -53
- 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 +48 -53
- package/dist/zip.min.js +1 -1
- package/index.d.ts +6 -0
- package/lib/core/zip-reader.js +16 -5
- package/lib/core/zip-writer.js +32 -48
- package/lib/zip-fs.js +3 -3
- package/lib/zip-full-fflate.js +3 -3
- package/lib/zip-full.js +3 -3
- package/lib/zip-no-worker-deflate.js +3 -3
- package/lib/zip-no-worker-fflate-deflate.js +3 -3
- package/lib/zip-no-worker-fflate-inflate.js +3 -3
- package/lib/zip-no-worker-fflate.js +3 -3
- package/lib/zip-no-worker-inflate.js +3 -3
- package/lib/zip-no-worker.js +3 -3
- package/lib/zip.js +3 -3
- package/package.json +1 -1
- package/rollup-fflate.config.js +3 -3
- package/tests/all/test-wrapped.js +8 -4
package/dist/zip.js
CHANGED
|
@@ -2989,8 +2989,12 @@
|
|
|
2989
2989
|
const endOfDirectoryView = getDataView$1(endOfDirectoryInfo);
|
|
2990
2990
|
let directoryDataLength = getUint32(endOfDirectoryView, 12);
|
|
2991
2991
|
let directoryDataOffset = getUint32(endOfDirectoryView, 16);
|
|
2992
|
+
const commentOffset = endOfDirectoryInfo.offset;
|
|
2993
|
+
const commentLength = getUint16(endOfDirectoryView, 20);
|
|
2994
|
+
const appendedDataOffset = commentOffset + END_OF_CENTRAL_DIR_LENGTH + commentLength;
|
|
2992
2995
|
let filesLength = getUint16(endOfDirectoryView, 8);
|
|
2993
2996
|
let prependedDataLength = 0;
|
|
2997
|
+
let startOffset = 0;
|
|
2994
2998
|
if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS) {
|
|
2995
2999
|
const endOfDirectoryLocatorArray = await readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH);
|
|
2996
3000
|
const endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
|
|
@@ -3061,6 +3065,7 @@
|
|
|
3061
3065
|
commentUTF8: languageEncodingFlag,
|
|
3062
3066
|
rawExtraField: directoryArray.subarray(extraFieldOffset, commentOffset)
|
|
3063
3067
|
});
|
|
3068
|
+
startOffset = Math.max(fileEntry.offset, startOffset);
|
|
3064
3069
|
const endOffset = commentOffset + fileEntry.commentLength;
|
|
3065
3070
|
fileEntry.rawComment = directoryArray.subarray(commentOffset, endOffset);
|
|
3066
3071
|
const filenameEncoding = getOptionValue$1(zipReader, options, "filenameEncoding");
|
|
@@ -3087,16 +3092,22 @@
|
|
|
3087
3092
|
}
|
|
3088
3093
|
yield entry;
|
|
3089
3094
|
}
|
|
3095
|
+
const extractPrependedData = getOptionValue$1(zipReader, options, "extractPrependedData");
|
|
3096
|
+
const extractAppendedData = getOptionValue$1(zipReader, options, "extractAppendedData");
|
|
3097
|
+
if (extractPrependedData) {
|
|
3098
|
+
zipReader.prependedData = await readUint8Array(reader, 0, startOffset);
|
|
3099
|
+
}
|
|
3100
|
+
zipReader.comment = await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength);
|
|
3101
|
+
if (extractAppendedData) {
|
|
3102
|
+
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) : new Uint8Array();
|
|
3103
|
+
}
|
|
3090
3104
|
return true;
|
|
3091
3105
|
}
|
|
3092
3106
|
|
|
3093
3107
|
async getEntries(options = {}) {
|
|
3094
3108
|
const entries = [];
|
|
3095
|
-
const
|
|
3096
|
-
|
|
3097
|
-
while (!(await result).done) {
|
|
3098
|
-
entries.push((await result).value);
|
|
3099
|
-
result = iterator.next();
|
|
3109
|
+
for await (const entry of this.getEntriesGenerator(options)) {
|
|
3110
|
+
entries.push(entry);
|
|
3100
3111
|
}
|
|
3101
3112
|
return entries;
|
|
3102
3113
|
}
|
|
@@ -3544,7 +3555,7 @@
|
|
|
3544
3555
|
await Promise.all(Array.from(pendingAddFileCalls));
|
|
3545
3556
|
}
|
|
3546
3557
|
await closeFile(this, comment, options);
|
|
3547
|
-
if (!writer.preventClose) {
|
|
3558
|
+
if (!writer.preventClose && !options.preventClose) {
|
|
3548
3559
|
await writable.getWriter().close();
|
|
3549
3560
|
}
|
|
3550
3561
|
return writer.getData ? writer.getData() : writable;
|
|
@@ -3697,36 +3708,36 @@
|
|
|
3697
3708
|
const previousFileEntry = Array.from(files.values()).pop();
|
|
3698
3709
|
let fileEntry = {};
|
|
3699
3710
|
let bufferedWrite;
|
|
3700
|
-
let
|
|
3711
|
+
let releaseLockWriter;
|
|
3701
3712
|
let resolveLockCurrentFileEntry;
|
|
3713
|
+
let writingBufferedData;
|
|
3714
|
+
let fileWriter;
|
|
3702
3715
|
files.set(name, fileEntry);
|
|
3703
3716
|
try {
|
|
3704
3717
|
let lockPreviousFileEntry;
|
|
3705
|
-
let fileWriter;
|
|
3706
3718
|
if (options.keepOrder) {
|
|
3707
3719
|
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;
|
|
3708
3720
|
}
|
|
3709
3721
|
fileEntry.lock = new Promise(resolve => resolveLockCurrentFileEntry = resolve);
|
|
3710
|
-
if (options.bufferedWrite || zipWriter.
|
|
3722
|
+
if (options.bufferedWrite || zipWriter.lockWriter || !options.dataDescriptor) {
|
|
3711
3723
|
fileWriter = new BlobWriter();
|
|
3712
3724
|
fileWriter.init();
|
|
3713
3725
|
bufferedWrite = true;
|
|
3714
3726
|
} else {
|
|
3715
|
-
zipWriter.
|
|
3727
|
+
zipWriter.lockWriter = Promise.resolve();
|
|
3716
3728
|
if (writer.init && !writer.initialized) {
|
|
3717
3729
|
await writer.init();
|
|
3718
3730
|
}
|
|
3719
3731
|
fileWriter = writer;
|
|
3720
3732
|
}
|
|
3721
|
-
fileEntry = await createFileEntry(reader, fileWriter.writable, zipWriter.config, options);
|
|
3733
|
+
fileEntry = await createFileEntry(reader, fileEntry, fileWriter.writable, zipWriter.config, options);
|
|
3722
3734
|
files.set(name, fileEntry);
|
|
3723
3735
|
fileEntry.filename = name;
|
|
3724
3736
|
if (bufferedWrite) {
|
|
3725
|
-
let
|
|
3726
|
-
const blob = fileWriter.getData();
|
|
3737
|
+
let blob = fileWriter.getData();
|
|
3727
3738
|
await lockPreviousFileEntry;
|
|
3728
|
-
await
|
|
3729
|
-
|
|
3739
|
+
await lockWriter();
|
|
3740
|
+
writingBufferedData = true;
|
|
3730
3741
|
const { writable } = writer;
|
|
3731
3742
|
if (!options.dataDescriptor) {
|
|
3732
3743
|
const headerLength = 26;
|
|
@@ -3743,10 +3754,10 @@
|
|
|
3743
3754
|
setUint32(arrayBufferView, 22, fileEntry.uncompressedSize);
|
|
3744
3755
|
}
|
|
3745
3756
|
await writeUint8Array(writable, new Uint8Array(arrayBuffer));
|
|
3746
|
-
|
|
3757
|
+
blob = blob.slice(headerLength);
|
|
3747
3758
|
}
|
|
3748
|
-
await
|
|
3749
|
-
|
|
3759
|
+
await blob.stream().pipeTo(writable, { preventClose: true });
|
|
3760
|
+
writingBufferedData = false;
|
|
3750
3761
|
}
|
|
3751
3762
|
fileEntry.offset = zipWriter.offset;
|
|
3752
3763
|
if (fileEntry.zip64) {
|
|
@@ -3758,32 +3769,30 @@
|
|
|
3758
3769
|
zipWriter.offset += fileEntry.length;
|
|
3759
3770
|
return fileEntry;
|
|
3760
3771
|
} catch (error) {
|
|
3761
|
-
if ((bufferedWrite &&
|
|
3772
|
+
if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.dataWritten)) {
|
|
3762
3773
|
error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
|
|
3763
|
-
|
|
3764
|
-
zipWriter.offset += fileEntry.uncompressedSize;
|
|
3765
|
-
}
|
|
3774
|
+
zipWriter.offset += fileWriter.size;
|
|
3766
3775
|
}
|
|
3767
3776
|
files.delete(name);
|
|
3768
3777
|
throw error;
|
|
3769
3778
|
} finally {
|
|
3770
3779
|
resolveLockCurrentFileEntry();
|
|
3771
|
-
if (
|
|
3772
|
-
|
|
3780
|
+
if (releaseLockWriter) {
|
|
3781
|
+
releaseLockWriter();
|
|
3773
3782
|
}
|
|
3774
3783
|
}
|
|
3775
3784
|
|
|
3776
|
-
async function
|
|
3777
|
-
if (zipWriter.
|
|
3778
|
-
await zipWriter.
|
|
3779
|
-
await
|
|
3785
|
+
async function lockWriter() {
|
|
3786
|
+
if (zipWriter.lockWriter) {
|
|
3787
|
+
await zipWriter.lockWriter.then(() => delete zipWriter.lockWriter);
|
|
3788
|
+
await lockWriter();
|
|
3780
3789
|
} else {
|
|
3781
|
-
zipWriter.
|
|
3790
|
+
zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
|
|
3782
3791
|
}
|
|
3783
3792
|
}
|
|
3784
3793
|
}
|
|
3785
3794
|
|
|
3786
|
-
async function createFileEntry(reader, writable, config, options) {
|
|
3795
|
+
async function createFileEntry(reader, pendingFileEntry, writable, config, options) {
|
|
3787
3796
|
const {
|
|
3788
3797
|
rawFilename,
|
|
3789
3798
|
lastAccessDate,
|
|
@@ -3933,7 +3942,7 @@
|
|
|
3933
3942
|
let compressedSize = 0;
|
|
3934
3943
|
if (reader) {
|
|
3935
3944
|
await writeUint8Array(writable, localHeaderArray);
|
|
3936
|
-
fileEntry.dataWritten = true;
|
|
3945
|
+
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
3937
3946
|
const size = () => reader.size;
|
|
3938
3947
|
const readable = reader.readable;
|
|
3939
3948
|
readable.size = size;
|
|
@@ -3961,7 +3970,7 @@
|
|
|
3961
3970
|
compressedSize = result.length;
|
|
3962
3971
|
} else {
|
|
3963
3972
|
await writeUint8Array(writable, localHeaderArray);
|
|
3964
|
-
fileEntry.dataWritten = true;
|
|
3973
|
+
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
3965
3974
|
}
|
|
3966
3975
|
let dataDescriptorArray = new Uint8Array();
|
|
3967
3976
|
let dataDescriptorView, dataDescriptorOffset = 0;
|
|
@@ -4037,13 +4046,6 @@
|
|
|
4037
4046
|
}
|
|
4038
4047
|
const directoryArray = new Uint8Array(directoryDataLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH));
|
|
4039
4048
|
const directoryView = getDataView(directoryArray);
|
|
4040
|
-
if (comment && comment.length) {
|
|
4041
|
-
if (comment.length <= MAX_16_BITS) {
|
|
4042
|
-
setUint16(directoryView, offset + 20, comment.length);
|
|
4043
|
-
} else {
|
|
4044
|
-
throw new Error(ERR_INVALID_COMMENT);
|
|
4045
|
-
}
|
|
4046
|
-
}
|
|
4047
4049
|
for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
|
|
4048
4050
|
const {
|
|
4049
4051
|
rawFilename,
|
|
@@ -4127,6 +4129,13 @@
|
|
|
4127
4129
|
setUint16(directoryView, offset + 10, filesLength);
|
|
4128
4130
|
setUint32(directoryView, offset + 12, directoryDataLength);
|
|
4129
4131
|
setUint32(directoryView, offset + 16, directoryOffset);
|
|
4132
|
+
if (comment && comment.length) {
|
|
4133
|
+
if (comment.length <= MAX_16_BITS) {
|
|
4134
|
+
setUint16(directoryView, offset + 20, comment.length);
|
|
4135
|
+
} else {
|
|
4136
|
+
throw new Error(ERR_INVALID_COMMENT);
|
|
4137
|
+
}
|
|
4138
|
+
}
|
|
4130
4139
|
const { writable } = zipWriter.writer;
|
|
4131
4140
|
await writeUint8Array(writable, directoryArray);
|
|
4132
4141
|
if (comment && comment.length) {
|
|
@@ -4142,20 +4151,6 @@
|
|
|
4142
4151
|
}
|
|
4143
4152
|
}
|
|
4144
4153
|
|
|
4145
|
-
async function writeBlob(writable, blob, start = 0) {
|
|
4146
|
-
const blockSize = 512 * 1024 * 1024;
|
|
4147
|
-
await writeSlice();
|
|
4148
|
-
|
|
4149
|
-
async function writeSlice() {
|
|
4150
|
-
if (start < blob.size) {
|
|
4151
|
-
const arrayBuffer = await sliceAsArrayBuffer(blob, start, start + blockSize);
|
|
4152
|
-
await writeUint8Array(writable, new Uint8Array(arrayBuffer));
|
|
4153
|
-
start += blockSize;
|
|
4154
|
-
await writeSlice();
|
|
4155
|
-
}
|
|
4156
|
-
}
|
|
4157
|
-
}
|
|
4158
|
-
|
|
4159
4154
|
async function writeUint8Array(writable, array) {
|
|
4160
4155
|
const streamWriter = writable.getWriter();
|
|
4161
4156
|
await streamWriter.ready;
|