@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-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,36 +7942,36 @@
|
|
|
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;
|
|
7948
|
+
let fileWriter;
|
|
7936
7949
|
files.set(name, fileEntry);
|
|
7937
7950
|
try {
|
|
7938
7951
|
let lockPreviousFileEntry;
|
|
7939
|
-
let fileWriter;
|
|
7940
7952
|
if (options.keepOrder) {
|
|
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
|
}
|
|
7953
7965
|
fileWriter = writer;
|
|
7954
7966
|
}
|
|
7955
|
-
fileEntry = await createFileEntry(reader, fileWriter.writable, zipWriter.config, options);
|
|
7967
|
+
fileEntry = await createFileEntry(reader, fileEntry, fileWriter.writable, zipWriter.config, options);
|
|
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,32 +8003,30 @@
|
|
|
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
|
-
|
|
7998
|
-
zipWriter.offset += fileEntry.uncompressedSize;
|
|
7999
|
-
}
|
|
8008
|
+
zipWriter.offset += fileWriter.size;
|
|
8000
8009
|
}
|
|
8001
8010
|
files.delete(name);
|
|
8002
8011
|
throw error;
|
|
8003
8012
|
} finally {
|
|
8004
8013
|
resolveLockCurrentFileEntry();
|
|
8005
|
-
if (
|
|
8006
|
-
|
|
8014
|
+
if (releaseLockWriter) {
|
|
8015
|
+
releaseLockWriter();
|
|
8007
8016
|
}
|
|
8008
8017
|
}
|
|
8009
8018
|
|
|
8010
|
-
async function
|
|
8011
|
-
if (zipWriter.
|
|
8012
|
-
await zipWriter.
|
|
8013
|
-
await
|
|
8019
|
+
async function lockWriter() {
|
|
8020
|
+
if (zipWriter.lockWriter) {
|
|
8021
|
+
await zipWriter.lockWriter.then(() => delete zipWriter.lockWriter);
|
|
8022
|
+
await lockWriter();
|
|
8014
8023
|
} else {
|
|
8015
|
-
zipWriter.
|
|
8024
|
+
zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
|
|
8016
8025
|
}
|
|
8017
8026
|
}
|
|
8018
8027
|
}
|
|
8019
8028
|
|
|
8020
|
-
async function createFileEntry(reader, writable, config, options) {
|
|
8029
|
+
async function createFileEntry(reader, pendingFileEntry, writable, config, options) {
|
|
8021
8030
|
const {
|
|
8022
8031
|
rawFilename,
|
|
8023
8032
|
lastAccessDate,
|
|
@@ -8167,7 +8176,7 @@
|
|
|
8167
8176
|
let compressedSize = 0;
|
|
8168
8177
|
if (reader) {
|
|
8169
8178
|
await writeUint8Array(writable, localHeaderArray);
|
|
8170
|
-
fileEntry.dataWritten = true;
|
|
8179
|
+
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
8171
8180
|
const size = () => reader.size;
|
|
8172
8181
|
const readable = reader.readable;
|
|
8173
8182
|
readable.size = size;
|
|
@@ -8195,7 +8204,7 @@
|
|
|
8195
8204
|
compressedSize = result.length;
|
|
8196
8205
|
} else {
|
|
8197
8206
|
await writeUint8Array(writable, localHeaderArray);
|
|
8198
|
-
fileEntry.dataWritten = true;
|
|
8207
|
+
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
8199
8208
|
}
|
|
8200
8209
|
let dataDescriptorArray = new Uint8Array();
|
|
8201
8210
|
let dataDescriptorView, dataDescriptorOffset = 0;
|
|
@@ -8271,13 +8280,6 @@
|
|
|
8271
8280
|
}
|
|
8272
8281
|
const directoryArray = new Uint8Array(directoryDataLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH));
|
|
8273
8282
|
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
8283
|
for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
|
|
8282
8284
|
const {
|
|
8283
8285
|
rawFilename,
|
|
@@ -8361,6 +8363,13 @@
|
|
|
8361
8363
|
setUint16(directoryView, offset + 10, filesLength);
|
|
8362
8364
|
setUint32(directoryView, offset + 12, directoryDataLength);
|
|
8363
8365
|
setUint32(directoryView, offset + 16, directoryOffset);
|
|
8366
|
+
if (comment && comment.length) {
|
|
8367
|
+
if (comment.length <= MAX_16_BITS) {
|
|
8368
|
+
setUint16(directoryView, offset + 20, comment.length);
|
|
8369
|
+
} else {
|
|
8370
|
+
throw new Error(ERR_INVALID_COMMENT);
|
|
8371
|
+
}
|
|
8372
|
+
}
|
|
8364
8373
|
const { writable } = zipWriter.writer;
|
|
8365
8374
|
await writeUint8Array(writable, directoryArray);
|
|
8366
8375
|
if (comment && comment.length) {
|
|
@@ -8376,20 +8385,6 @@
|
|
|
8376
8385
|
}
|
|
8377
8386
|
}
|
|
8378
8387
|
|
|
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
8388
|
async function writeUint8Array(writable, array) {
|
|
8394
8389
|
const streamWriter = writable.getWriter();
|
|
8395
8390
|
await streamWriter.ready;
|