@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-full.js
CHANGED
|
@@ -7223,8 +7223,12 @@
|
|
|
7223
7223
|
const endOfDirectoryView = getDataView$1(endOfDirectoryInfo);
|
|
7224
7224
|
let directoryDataLength = getUint32(endOfDirectoryView, 12);
|
|
7225
7225
|
let directoryDataOffset = getUint32(endOfDirectoryView, 16);
|
|
7226
|
+
const commentOffset = endOfDirectoryInfo.offset;
|
|
7227
|
+
const commentLength = getUint16(endOfDirectoryView, 20);
|
|
7228
|
+
const appendedDataOffset = commentOffset + END_OF_CENTRAL_DIR_LENGTH + commentLength;
|
|
7226
7229
|
let filesLength = getUint16(endOfDirectoryView, 8);
|
|
7227
7230
|
let prependedDataLength = 0;
|
|
7231
|
+
let startOffset = 0;
|
|
7228
7232
|
if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS) {
|
|
7229
7233
|
const endOfDirectoryLocatorArray = await readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH);
|
|
7230
7234
|
const endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
|
|
@@ -7295,6 +7299,7 @@
|
|
|
7295
7299
|
commentUTF8: languageEncodingFlag,
|
|
7296
7300
|
rawExtraField: directoryArray.subarray(extraFieldOffset, commentOffset)
|
|
7297
7301
|
});
|
|
7302
|
+
startOffset = Math.max(fileEntry.offset, startOffset);
|
|
7298
7303
|
const endOffset = commentOffset + fileEntry.commentLength;
|
|
7299
7304
|
fileEntry.rawComment = directoryArray.subarray(commentOffset, endOffset);
|
|
7300
7305
|
const filenameEncoding = getOptionValue$1(zipReader, options, "filenameEncoding");
|
|
@@ -7321,16 +7326,22 @@
|
|
|
7321
7326
|
}
|
|
7322
7327
|
yield entry;
|
|
7323
7328
|
}
|
|
7329
|
+
const extractPrependedData = getOptionValue$1(zipReader, options, "extractPrependedData");
|
|
7330
|
+
const extractAppendedData = getOptionValue$1(zipReader, options, "extractAppendedData");
|
|
7331
|
+
if (extractPrependedData) {
|
|
7332
|
+
zipReader.prependedData = await readUint8Array(reader, 0, startOffset);
|
|
7333
|
+
}
|
|
7334
|
+
zipReader.comment = await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength);
|
|
7335
|
+
if (extractAppendedData) {
|
|
7336
|
+
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) : new Uint8Array();
|
|
7337
|
+
}
|
|
7324
7338
|
return true;
|
|
7325
7339
|
}
|
|
7326
7340
|
|
|
7327
7341
|
async getEntries(options = {}) {
|
|
7328
7342
|
const entries = [];
|
|
7329
|
-
const
|
|
7330
|
-
|
|
7331
|
-
while (!(await result).done) {
|
|
7332
|
-
entries.push((await result).value);
|
|
7333
|
-
result = iterator.next();
|
|
7343
|
+
for await (const entry of this.getEntriesGenerator(options)) {
|
|
7344
|
+
entries.push(entry);
|
|
7334
7345
|
}
|
|
7335
7346
|
return entries;
|
|
7336
7347
|
}
|
|
@@ -7778,7 +7789,7 @@
|
|
|
7778
7789
|
await Promise.all(Array.from(pendingAddFileCalls));
|
|
7779
7790
|
}
|
|
7780
7791
|
await closeFile(this, comment, options);
|
|
7781
|
-
if (!writer.preventClose) {
|
|
7792
|
+
if (!writer.preventClose && !options.preventClose) {
|
|
7782
7793
|
await writable.getWriter().close();
|
|
7783
7794
|
}
|
|
7784
7795
|
return writer.getData ? writer.getData() : writable;
|
|
@@ -7931,8 +7942,9 @@
|
|
|
7931
7942
|
const previousFileEntry = Array.from(files.values()).pop();
|
|
7932
7943
|
let fileEntry = {};
|
|
7933
7944
|
let bufferedWrite;
|
|
7934
|
-
let
|
|
7945
|
+
let releaseLockWriter;
|
|
7935
7946
|
let resolveLockCurrentFileEntry;
|
|
7947
|
+
let writingBufferedData;
|
|
7936
7948
|
files.set(name, fileEntry);
|
|
7937
7949
|
try {
|
|
7938
7950
|
let lockPreviousFileEntry;
|
|
@@ -7941,12 +7953,12 @@
|
|
|
7941
7953
|
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;
|
|
7942
7954
|
}
|
|
7943
7955
|
fileEntry.lock = new Promise(resolve => resolveLockCurrentFileEntry = resolve);
|
|
7944
|
-
if (options.bufferedWrite || zipWriter.
|
|
7956
|
+
if (options.bufferedWrite || zipWriter.lockWriter || !options.dataDescriptor) {
|
|
7945
7957
|
fileWriter = new BlobWriter();
|
|
7946
7958
|
fileWriter.init();
|
|
7947
7959
|
bufferedWrite = true;
|
|
7948
7960
|
} else {
|
|
7949
|
-
zipWriter.
|
|
7961
|
+
zipWriter.lockWriter = Promise.resolve();
|
|
7950
7962
|
if (writer.init && !writer.initialized) {
|
|
7951
7963
|
await writer.init();
|
|
7952
7964
|
}
|
|
@@ -7956,11 +7968,10 @@
|
|
|
7956
7968
|
files.set(name, fileEntry);
|
|
7957
7969
|
fileEntry.filename = name;
|
|
7958
7970
|
if (bufferedWrite) {
|
|
7959
|
-
let
|
|
7960
|
-
const blob = fileWriter.getData();
|
|
7971
|
+
let blob = fileWriter.getData();
|
|
7961
7972
|
await lockPreviousFileEntry;
|
|
7962
|
-
await
|
|
7963
|
-
|
|
7973
|
+
await lockWriter();
|
|
7974
|
+
writingBufferedData = true;
|
|
7964
7975
|
const { writable } = writer;
|
|
7965
7976
|
if (!options.dataDescriptor) {
|
|
7966
7977
|
const headerLength = 26;
|
|
@@ -7977,10 +7988,10 @@
|
|
|
7977
7988
|
setUint32(arrayBufferView, 22, fileEntry.uncompressedSize);
|
|
7978
7989
|
}
|
|
7979
7990
|
await writeUint8Array(writable, new Uint8Array(arrayBuffer));
|
|
7980
|
-
|
|
7991
|
+
blob = blob.slice(headerLength);
|
|
7981
7992
|
}
|
|
7982
|
-
await
|
|
7983
|
-
|
|
7993
|
+
await blob.stream().pipeTo(writable, { preventClose: true });
|
|
7994
|
+
writingBufferedData = false;
|
|
7984
7995
|
}
|
|
7985
7996
|
fileEntry.offset = zipWriter.offset;
|
|
7986
7997
|
if (fileEntry.zip64) {
|
|
@@ -7992,7 +8003,7 @@
|
|
|
7992
8003
|
zipWriter.offset += fileEntry.length;
|
|
7993
8004
|
return fileEntry;
|
|
7994
8005
|
} catch (error) {
|
|
7995
|
-
if ((bufferedWrite &&
|
|
8006
|
+
if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.dataWritten)) {
|
|
7996
8007
|
error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
|
|
7997
8008
|
if (fileEntry.uncompressedSize) {
|
|
7998
8009
|
zipWriter.offset += fileEntry.uncompressedSize;
|
|
@@ -8002,17 +8013,17 @@
|
|
|
8002
8013
|
throw error;
|
|
8003
8014
|
} finally {
|
|
8004
8015
|
resolveLockCurrentFileEntry();
|
|
8005
|
-
if (
|
|
8006
|
-
|
|
8016
|
+
if (releaseLockWriter) {
|
|
8017
|
+
releaseLockWriter();
|
|
8007
8018
|
}
|
|
8008
8019
|
}
|
|
8009
8020
|
|
|
8010
|
-
async function
|
|
8011
|
-
if (zipWriter.
|
|
8012
|
-
await zipWriter.
|
|
8013
|
-
await
|
|
8021
|
+
async function lockWriter() {
|
|
8022
|
+
if (zipWriter.lockWriter) {
|
|
8023
|
+
await zipWriter.lockWriter.then(() => delete zipWriter.lockWriter);
|
|
8024
|
+
await lockWriter();
|
|
8014
8025
|
} else {
|
|
8015
|
-
zipWriter.
|
|
8026
|
+
zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
|
|
8016
8027
|
}
|
|
8017
8028
|
}
|
|
8018
8029
|
}
|
|
@@ -8271,13 +8282,6 @@
|
|
|
8271
8282
|
}
|
|
8272
8283
|
const directoryArray = new Uint8Array(directoryDataLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH));
|
|
8273
8284
|
const directoryView = getDataView(directoryArray);
|
|
8274
|
-
if (comment && comment.length) {
|
|
8275
|
-
if (comment.length <= MAX_16_BITS) {
|
|
8276
|
-
setUint16(directoryView, offset + 20, comment.length);
|
|
8277
|
-
} else {
|
|
8278
|
-
throw new Error(ERR_INVALID_COMMENT);
|
|
8279
|
-
}
|
|
8280
|
-
}
|
|
8281
8285
|
for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
|
|
8282
8286
|
const {
|
|
8283
8287
|
rawFilename,
|
|
@@ -8361,6 +8365,13 @@
|
|
|
8361
8365
|
setUint16(directoryView, offset + 10, filesLength);
|
|
8362
8366
|
setUint32(directoryView, offset + 12, directoryDataLength);
|
|
8363
8367
|
setUint32(directoryView, offset + 16, directoryOffset);
|
|
8368
|
+
if (comment && comment.length) {
|
|
8369
|
+
if (comment.length <= MAX_16_BITS) {
|
|
8370
|
+
setUint16(directoryView, offset + 20, comment.length);
|
|
8371
|
+
} else {
|
|
8372
|
+
throw new Error(ERR_INVALID_COMMENT);
|
|
8373
|
+
}
|
|
8374
|
+
}
|
|
8364
8375
|
const { writable } = zipWriter.writer;
|
|
8365
8376
|
await writeUint8Array(writable, directoryArray);
|
|
8366
8377
|
if (comment && comment.length) {
|
|
@@ -8376,20 +8387,6 @@
|
|
|
8376
8387
|
}
|
|
8377
8388
|
}
|
|
8378
8389
|
|
|
8379
|
-
async function writeBlob(writable, blob, start = 0) {
|
|
8380
|
-
const blockSize = 512 * 1024 * 1024;
|
|
8381
|
-
await writeSlice();
|
|
8382
|
-
|
|
8383
|
-
async function writeSlice() {
|
|
8384
|
-
if (start < blob.size) {
|
|
8385
|
-
const arrayBuffer = await sliceAsArrayBuffer(blob, start, start + blockSize);
|
|
8386
|
-
await writeUint8Array(writable, new Uint8Array(arrayBuffer));
|
|
8387
|
-
start += blockSize;
|
|
8388
|
-
await writeSlice();
|
|
8389
|
-
}
|
|
8390
|
-
}
|
|
8391
|
-
}
|
|
8392
|
-
|
|
8393
8390
|
async function writeUint8Array(writable, array) {
|
|
8394
8391
|
const streamWriter = writable.getWriter();
|
|
8395
8392
|
await streamWriter.ready;
|