@zip.js/zip.js 2.5.23 → 2.5.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.
- package/dist/z-worker-fflate.js +1 -1
- package/dist/z-worker-pako.js +1 -1
- package/dist/zip-fs-full.js +65 -36
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +65 -36
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +65 -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 +65 -36
- package/dist/zip.min.js +1 -1
- package/lib/core/io.js +4 -3
- package/lib/core/util/stream-codec-shim.js +3 -4
- package/lib/core/zip-reader.js +2 -2
- package/lib/core/zip-writer.js +59 -28
- package/package.json +1 -1
package/dist/zip-full.js
CHANGED
|
@@ -4426,14 +4426,13 @@
|
|
|
4426
4426
|
if (codecAdapter.pendingData) {
|
|
4427
4427
|
const { pendingData } = codecAdapter;
|
|
4428
4428
|
codecAdapter.pendingData = new Uint8Array(pendingData.length + data.length);
|
|
4429
|
-
|
|
4430
|
-
|
|
4429
|
+
pendingData.set(pendingData, 0);
|
|
4430
|
+
pendingData.set(data, pendingData.length);
|
|
4431
4431
|
} else {
|
|
4432
4432
|
codecAdapter.pendingData = new Uint8Array(data);
|
|
4433
4433
|
}
|
|
4434
4434
|
};
|
|
4435
|
-
|
|
4436
|
-
if (options.hasOwnProperty("level") && options.level === undefined) {
|
|
4435
|
+
if (Object.hasOwn(options, "level") && options.level === undefined) {
|
|
4437
4436
|
delete options.level;
|
|
4438
4437
|
}
|
|
4439
4438
|
codecAdapter.codec = new constructor(Object.assign({}, constructorOptions, options));
|
|
@@ -6490,12 +6489,13 @@
|
|
|
6490
6489
|
|
|
6491
6490
|
get readable() {
|
|
6492
6491
|
const reader = this;
|
|
6492
|
+
const { chunkSize = DEFAULT_CHUNK_SIZE } = reader;
|
|
6493
6493
|
const readable = new ReadableStream({
|
|
6494
6494
|
start() {
|
|
6495
6495
|
this.chunkOffset = 0;
|
|
6496
6496
|
},
|
|
6497
6497
|
async pull(controller) {
|
|
6498
|
-
const { offset = 0,
|
|
6498
|
+
const { offset = 0, size } = readable;
|
|
6499
6499
|
const { chunkOffset } = this;
|
|
6500
6500
|
controller.enqueue(await reader.readUint8Array(offset + chunkOffset, Math.min(chunkSize, size() - chunkOffset)));
|
|
6501
6501
|
if (chunkOffset + chunkSize > size()) {
|
|
@@ -6855,7 +6855,7 @@
|
|
|
6855
6855
|
if (response.status < 400) {
|
|
6856
6856
|
return response;
|
|
6857
6857
|
} else {
|
|
6858
|
-
throw new Error(ERR_HTTP_STATUS + (response.statusText || response.status));
|
|
6858
|
+
throw response.status == 416 ? new Error(ERR_HTTP_RANGE) : new Error(ERR_HTTP_STATUS + (response.statusText || response.status));
|
|
6859
6859
|
}
|
|
6860
6860
|
}
|
|
6861
6861
|
|
|
@@ -6876,7 +6876,7 @@
|
|
|
6876
6876
|
headers: new Map(headers)
|
|
6877
6877
|
});
|
|
6878
6878
|
} else {
|
|
6879
|
-
reject(new Error(ERR_HTTP_STATUS + (request.statusText || request.status)));
|
|
6879
|
+
reject(request.status == 416 ? new Error(ERR_HTTP_RANGE) : new Error(ERR_HTTP_STATUS + (request.statusText || request.status)));
|
|
6880
6880
|
}
|
|
6881
6881
|
}, false);
|
|
6882
6882
|
request.addEventListener("error", event => reject(event.detail.error), false);
|
|
@@ -7213,6 +7213,7 @@
|
|
|
7213
7213
|
if (!reader.initialized) {
|
|
7214
7214
|
await reader.init();
|
|
7215
7215
|
}
|
|
7216
|
+
reader.chunkSize = getChunkSize(config);
|
|
7216
7217
|
if (reader.size < END_OF_CENTRAL_DIR_LENGTH) {
|
|
7217
7218
|
throw new Error(ERR_BAD_FORMAT);
|
|
7218
7219
|
}
|
|
@@ -7331,7 +7332,7 @@
|
|
|
7331
7332
|
if (extractPrependedData) {
|
|
7332
7333
|
zipReader.prependedData = await readUint8Array(reader, 0, startOffset);
|
|
7333
7334
|
}
|
|
7334
|
-
zipReader.comment = await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength);
|
|
7335
|
+
zipReader.comment = commentLength ? await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength) : new Uint8Array();
|
|
7335
7336
|
if (extractAppendedData) {
|
|
7336
7337
|
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) : new Uint8Array();
|
|
7337
7338
|
}
|
|
@@ -7409,7 +7410,6 @@
|
|
|
7409
7410
|
const readable = reader.readable;
|
|
7410
7411
|
readable.offset = dataOffset;
|
|
7411
7412
|
readable.size = size;
|
|
7412
|
-
readable.chunkSize = getChunkSize(config);
|
|
7413
7413
|
const { writable } = writer;
|
|
7414
7414
|
const signal = getOptionValue$1(zipEntry, options, "signal");
|
|
7415
7415
|
if (writer.init && !writer.initialized) {
|
|
@@ -7760,17 +7760,22 @@
|
|
|
7760
7760
|
|
|
7761
7761
|
async add(name = "", reader, options = {}) {
|
|
7762
7762
|
const zipWriter = this;
|
|
7763
|
-
|
|
7763
|
+
const {
|
|
7764
|
+
pendingAddFileCalls,
|
|
7765
|
+
pendingEntries,
|
|
7766
|
+
config
|
|
7767
|
+
} = zipWriter;
|
|
7768
|
+
if (workers < config.maxWorkers) {
|
|
7764
7769
|
workers++;
|
|
7765
7770
|
let promiseAddFile;
|
|
7766
7771
|
try {
|
|
7767
7772
|
promiseAddFile = addFile(zipWriter, name, reader, options);
|
|
7768
|
-
|
|
7773
|
+
pendingAddFileCalls.add(promiseAddFile);
|
|
7769
7774
|
return await promiseAddFile;
|
|
7770
7775
|
} finally {
|
|
7771
|
-
|
|
7776
|
+
pendingAddFileCalls.delete(promiseAddFile);
|
|
7772
7777
|
workers--;
|
|
7773
|
-
const pendingEntry =
|
|
7778
|
+
const pendingEntry = pendingEntries.shift();
|
|
7774
7779
|
if (pendingEntry) {
|
|
7775
7780
|
zipWriter.add(pendingEntry.name, pendingEntry.reader, pendingEntry.options)
|
|
7776
7781
|
.then(pendingEntry.resolve)
|
|
@@ -7778,7 +7783,7 @@
|
|
|
7778
7783
|
}
|
|
7779
7784
|
}
|
|
7780
7785
|
} else {
|
|
7781
|
-
return new Promise((resolve, reject) =>
|
|
7786
|
+
return new Promise((resolve, reject) => pendingEntries.push({ name, reader, options, resolve, reject }));
|
|
7782
7787
|
}
|
|
7783
7788
|
}
|
|
7784
7789
|
|
|
@@ -7938,22 +7943,31 @@
|
|
|
7938
7943
|
}
|
|
7939
7944
|
|
|
7940
7945
|
async function getFileEntry(zipWriter, name, reader, options) {
|
|
7941
|
-
const {
|
|
7946
|
+
const {
|
|
7947
|
+
files,
|
|
7948
|
+
writer
|
|
7949
|
+
} = zipWriter;
|
|
7950
|
+
const {
|
|
7951
|
+
keepOrder,
|
|
7952
|
+
dataDescriptor,
|
|
7953
|
+
zipCrypto,
|
|
7954
|
+
signal
|
|
7955
|
+
} = options;
|
|
7942
7956
|
const previousFileEntry = Array.from(files.values()).pop();
|
|
7943
7957
|
let fileEntry = {};
|
|
7944
7958
|
let bufferedWrite;
|
|
7945
7959
|
let releaseLockWriter;
|
|
7946
|
-
let
|
|
7947
|
-
let
|
|
7960
|
+
let releaseLockCurrentFileEntry;
|
|
7961
|
+
let bufferedDataWritten;
|
|
7948
7962
|
let fileWriter;
|
|
7949
7963
|
files.set(name, fileEntry);
|
|
7950
7964
|
try {
|
|
7951
7965
|
let lockPreviousFileEntry;
|
|
7952
|
-
if (
|
|
7966
|
+
if (keepOrder) {
|
|
7953
7967
|
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;
|
|
7968
|
+
requestLockCurrentFileEntry();
|
|
7954
7969
|
}
|
|
7955
|
-
|
|
7956
|
-
if (options.bufferedWrite || zipWriter.lockWriter || !options.dataDescriptor) {
|
|
7970
|
+
if (options.bufferedWrite || zipWriter.lockWriter || !dataDescriptor) {
|
|
7957
7971
|
fileWriter = new BlobWriter();
|
|
7958
7972
|
fileWriter.init();
|
|
7959
7973
|
bufferedWrite = true;
|
|
@@ -7970,14 +7984,14 @@
|
|
|
7970
7984
|
if (bufferedWrite) {
|
|
7971
7985
|
let blob = fileWriter.getData();
|
|
7972
7986
|
await lockPreviousFileEntry;
|
|
7973
|
-
await
|
|
7974
|
-
|
|
7987
|
+
await requestLockWriter();
|
|
7988
|
+
bufferedDataWritten = true;
|
|
7975
7989
|
const { writable } = writer;
|
|
7976
|
-
if (!
|
|
7990
|
+
if (!dataDescriptor) {
|
|
7977
7991
|
const headerLength = 26;
|
|
7978
7992
|
const arrayBuffer = await sliceAsArrayBuffer(blob, 0, headerLength);
|
|
7979
7993
|
const arrayBufferView = new DataView(arrayBuffer);
|
|
7980
|
-
if (!fileEntry.encrypted ||
|
|
7994
|
+
if (!fileEntry.encrypted || zipCrypto) {
|
|
7981
7995
|
setUint32(arrayBufferView, 14, fileEntry.signature);
|
|
7982
7996
|
}
|
|
7983
7997
|
if (fileEntry.zip64) {
|
|
@@ -7990,8 +8004,8 @@
|
|
|
7990
8004
|
await writeUint8Array(writable, new Uint8Array(arrayBuffer));
|
|
7991
8005
|
blob = blob.slice(headerLength);
|
|
7992
8006
|
}
|
|
7993
|
-
await blob.stream().pipeTo(writable, { preventClose: true });
|
|
7994
|
-
|
|
8007
|
+
await blob.stream().pipeTo(writable, { preventClose: true, signal });
|
|
8008
|
+
bufferedDataWritten = false;
|
|
7995
8009
|
}
|
|
7996
8010
|
fileEntry.offset = zipWriter.offset;
|
|
7997
8011
|
if (fileEntry.zip64) {
|
|
@@ -8003,23 +8017,30 @@
|
|
|
8003
8017
|
zipWriter.offset += fileEntry.length;
|
|
8004
8018
|
return fileEntry;
|
|
8005
8019
|
} catch (error) {
|
|
8006
|
-
if ((bufferedWrite &&
|
|
8020
|
+
if ((bufferedWrite && bufferedDataWritten) || (!bufferedWrite && fileEntry.dataWritten)) {
|
|
8007
8021
|
error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
|
|
8008
8022
|
zipWriter.offset += fileWriter.size;
|
|
8009
8023
|
}
|
|
8010
8024
|
files.delete(name);
|
|
8011
8025
|
throw error;
|
|
8012
8026
|
} finally {
|
|
8013
|
-
|
|
8027
|
+
if (releaseLockCurrentFileEntry) {
|
|
8028
|
+
releaseLockCurrentFileEntry();
|
|
8029
|
+
}
|
|
8014
8030
|
if (releaseLockWriter) {
|
|
8015
8031
|
releaseLockWriter();
|
|
8016
8032
|
}
|
|
8017
8033
|
}
|
|
8018
8034
|
|
|
8019
|
-
|
|
8020
|
-
|
|
8021
|
-
|
|
8022
|
-
|
|
8035
|
+
function requestLockCurrentFileEntry() {
|
|
8036
|
+
fileEntry.lock = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
|
|
8037
|
+
}
|
|
8038
|
+
|
|
8039
|
+
async function requestLockWriter() {
|
|
8040
|
+
const { lockWriter } = zipWriter;
|
|
8041
|
+
if (lockWriter) {
|
|
8042
|
+
await lockWriter.then(() => delete zipWriter.lockWriter);
|
|
8043
|
+
return requestLockWriter();
|
|
8023
8044
|
} else {
|
|
8024
8045
|
zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
|
|
8025
8046
|
}
|
|
@@ -8161,7 +8182,7 @@
|
|
|
8161
8182
|
const rawLastModDate = dateArray[0];
|
|
8162
8183
|
setUint32(headerView, 6, rawLastModDate);
|
|
8163
8184
|
setUint16(headerView, 22, rawFilename.length);
|
|
8164
|
-
const extraFieldLength = rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length +
|
|
8185
|
+
const extraFieldLength = rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length + rawExtraField.length;
|
|
8165
8186
|
setUint16(headerView, 24, extraFieldLength);
|
|
8166
8187
|
const localHeaderArray = new Uint8Array(30 + rawFilename.length + extraFieldLength);
|
|
8167
8188
|
const localHeaderView = getDataView(localHeaderArray);
|
|
@@ -8171,16 +8192,16 @@
|
|
|
8171
8192
|
arraySet(localHeaderArray, rawExtraFieldAES, 30 + rawFilename.length);
|
|
8172
8193
|
arraySet(localHeaderArray, rawExtraFieldExtendedTimestamp, 30 + rawFilename.length + rawExtraFieldAES.length);
|
|
8173
8194
|
arraySet(localHeaderArray, rawExtraFieldNTFS, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length);
|
|
8174
|
-
arraySet(localHeaderArray,
|
|
8195
|
+
arraySet(localHeaderArray, rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
|
|
8175
8196
|
let result;
|
|
8176
8197
|
let compressedSize = 0;
|
|
8177
8198
|
if (reader) {
|
|
8199
|
+
reader.chunkSize = getChunkSize(config);
|
|
8178
8200
|
await writeUint8Array(writable, localHeaderArray);
|
|
8179
8201
|
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
8180
8202
|
const size = () => reader.size;
|
|
8181
8203
|
const readable = reader.readable;
|
|
8182
8204
|
readable.size = size;
|
|
8183
|
-
readable.chunkSize = getChunkSize(config);
|
|
8184
8205
|
const workerOptions = {
|
|
8185
8206
|
options: {
|
|
8186
8207
|
codecType: CODEC_DEFLATE,
|
|
@@ -8250,7 +8271,15 @@
|
|
|
8250
8271
|
await writeUint8Array(writable, dataDescriptorArray);
|
|
8251
8272
|
}
|
|
8252
8273
|
const length = localHeaderArray.length + compressedSize + dataDescriptorArray.length;
|
|
8253
|
-
Object.assign(fileEntry, {
|
|
8274
|
+
Object.assign(fileEntry, {
|
|
8275
|
+
compressedSize,
|
|
8276
|
+
lastModDate,
|
|
8277
|
+
rawLastModDate,
|
|
8278
|
+
creationDate,
|
|
8279
|
+
lastAccessDate,
|
|
8280
|
+
encrypted,
|
|
8281
|
+
length
|
|
8282
|
+
});
|
|
8254
8283
|
return fileEntry;
|
|
8255
8284
|
}
|
|
8256
8285
|
|