@zip.js/zip.js 2.5.20 → 2.5.21
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 +42 -45
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +42 -45
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +42 -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 +42 -45
- 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 +26 -40
- 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-fs.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,8 +3708,9 @@
|
|
|
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;
|
|
3702
3714
|
files.set(name, fileEntry);
|
|
3703
3715
|
try {
|
|
3704
3716
|
let lockPreviousFileEntry;
|
|
@@ -3707,12 +3719,12 @@
|
|
|
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
|
}
|
|
@@ -3722,11 +3734,10 @@
|
|
|
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,7 +3769,7 @@
|
|
|
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
3774
|
if (fileEntry.uncompressedSize) {
|
|
3764
3775
|
zipWriter.offset += fileEntry.uncompressedSize;
|
|
@@ -3768,17 +3779,17 @@
|
|
|
3768
3779
|
throw error;
|
|
3769
3780
|
} finally {
|
|
3770
3781
|
resolveLockCurrentFileEntry();
|
|
3771
|
-
if (
|
|
3772
|
-
|
|
3782
|
+
if (releaseLockWriter) {
|
|
3783
|
+
releaseLockWriter();
|
|
3773
3784
|
}
|
|
3774
3785
|
}
|
|
3775
3786
|
|
|
3776
|
-
async function
|
|
3777
|
-
if (zipWriter.
|
|
3778
|
-
await zipWriter.
|
|
3779
|
-
await
|
|
3787
|
+
async function lockWriter() {
|
|
3788
|
+
if (zipWriter.lockWriter) {
|
|
3789
|
+
await zipWriter.lockWriter.then(() => delete zipWriter.lockWriter);
|
|
3790
|
+
await lockWriter();
|
|
3780
3791
|
} else {
|
|
3781
|
-
zipWriter.
|
|
3792
|
+
zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
|
|
3782
3793
|
}
|
|
3783
3794
|
}
|
|
3784
3795
|
}
|
|
@@ -4037,13 +4048,6 @@
|
|
|
4037
4048
|
}
|
|
4038
4049
|
const directoryArray = new Uint8Array(directoryDataLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH));
|
|
4039
4050
|
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
4051
|
for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
|
|
4048
4052
|
const {
|
|
4049
4053
|
rawFilename,
|
|
@@ -4127,6 +4131,13 @@
|
|
|
4127
4131
|
setUint16(directoryView, offset + 10, filesLength);
|
|
4128
4132
|
setUint32(directoryView, offset + 12, directoryDataLength);
|
|
4129
4133
|
setUint32(directoryView, offset + 16, directoryOffset);
|
|
4134
|
+
if (comment && comment.length) {
|
|
4135
|
+
if (comment.length <= MAX_16_BITS) {
|
|
4136
|
+
setUint16(directoryView, offset + 20, comment.length);
|
|
4137
|
+
} else {
|
|
4138
|
+
throw new Error(ERR_INVALID_COMMENT);
|
|
4139
|
+
}
|
|
4140
|
+
}
|
|
4130
4141
|
const { writable } = zipWriter.writer;
|
|
4131
4142
|
await writeUint8Array(writable, directoryArray);
|
|
4132
4143
|
if (comment && comment.length) {
|
|
@@ -4142,20 +4153,6 @@
|
|
|
4142
4153
|
}
|
|
4143
4154
|
}
|
|
4144
4155
|
|
|
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
4156
|
async function writeUint8Array(writable, array) {
|
|
4160
4157
|
const streamWriter = writable.getWriter();
|
|
4161
4158
|
await streamWriter.ready;
|