@zip.js/zip.js 2.6.13 → 2.6.16
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/README.md +70 -17
- package/dist/README.md +6 -4
- package/dist/zip-fs-full.js +51 -46
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +51 -46
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +50 -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 +50 -45
- package/dist/zip.min.js +1 -1
- package/index.d.ts +15 -9
- package/lib/core/io.js +11 -10
- package/lib/core/zip-fs-core.js +1 -1
- package/lib/core/zip-reader.js +2 -1
- package/lib/core/zip-writer.js +37 -34
- package/package.json +2 -2
package/dist/zip-full.js
CHANGED
|
@@ -6950,18 +6950,19 @@
|
|
|
6950
6950
|
|
|
6951
6951
|
class Uint8ArrayWriter extends Writer {
|
|
6952
6952
|
|
|
6953
|
-
|
|
6954
|
-
|
|
6955
|
-
this.array = new Uint8Array();
|
|
6953
|
+
init(initSize = 0) {
|
|
6954
|
+
this.array = new Uint8Array(initSize);
|
|
6956
6955
|
}
|
|
6957
6956
|
|
|
6958
6957
|
writeUint8Array(array) {
|
|
6959
|
-
super.writeUint8Array(array);
|
|
6960
6958
|
const writer = this;
|
|
6961
|
-
|
|
6962
|
-
|
|
6963
|
-
|
|
6964
|
-
|
|
6959
|
+
if (writer.size + array.length > writer.array.length) {
|
|
6960
|
+
const previousArray = writer.array;
|
|
6961
|
+
writer.array = new Uint8Array(previousArray.length + array.length);
|
|
6962
|
+
writer.array.set(previousArray);
|
|
6963
|
+
}
|
|
6964
|
+
writer.array.set(array, writer.size);
|
|
6965
|
+
super.writeUint8Array(array);
|
|
6965
6966
|
}
|
|
6966
6967
|
|
|
6967
6968
|
getData() {
|
|
@@ -6975,9 +6976,9 @@
|
|
|
6975
6976
|
return protocol == "http:" || protocol == "https:";
|
|
6976
6977
|
}
|
|
6977
6978
|
|
|
6978
|
-
async function initStream(stream) {
|
|
6979
|
+
async function initStream(stream, initSize) {
|
|
6979
6980
|
if (stream.init && !stream.initialized) {
|
|
6980
|
-
await stream.init();
|
|
6981
|
+
await stream.init(initSize);
|
|
6981
6982
|
}
|
|
6982
6983
|
}
|
|
6983
6984
|
|
|
@@ -7396,6 +7397,7 @@
|
|
|
7396
7397
|
bitFlag,
|
|
7397
7398
|
signature,
|
|
7398
7399
|
rawLastModDate,
|
|
7400
|
+
uncompressedSize,
|
|
7399
7401
|
compressedSize
|
|
7400
7402
|
} = zipEntry;
|
|
7401
7403
|
const localDirectory = zipEntry.localDirectory = {};
|
|
@@ -7436,7 +7438,7 @@
|
|
|
7436
7438
|
readable.size = size;
|
|
7437
7439
|
const { writable } = writer;
|
|
7438
7440
|
const signal = getOptionValue$1(zipEntry, options, "signal");
|
|
7439
|
-
await initStream(writer);
|
|
7441
|
+
await initStream(writer, uncompressedSize);
|
|
7440
7442
|
const { onstart, onprogress, onend } = options;
|
|
7441
7443
|
const workerOptions = {
|
|
7442
7444
|
options: {
|
|
@@ -7764,6 +7766,7 @@
|
|
|
7764
7766
|
const EXTRAFIELD_LENGTH_ZIP64 = 24;
|
|
7765
7767
|
|
|
7766
7768
|
let workers = 0;
|
|
7769
|
+
const pendingEntries = [];
|
|
7767
7770
|
|
|
7768
7771
|
class ZipWriter {
|
|
7769
7772
|
|
|
@@ -7776,7 +7779,6 @@
|
|
|
7776
7779
|
filenames: new Set(),
|
|
7777
7780
|
offset: writer.size || 0,
|
|
7778
7781
|
pendingCompressedSize: 0,
|
|
7779
|
-
pendingEntries: [],
|
|
7780
7782
|
pendingAddFileCalls: new Set()
|
|
7781
7783
|
});
|
|
7782
7784
|
}
|
|
@@ -7785,36 +7787,34 @@
|
|
|
7785
7787
|
const zipWriter = this;
|
|
7786
7788
|
const {
|
|
7787
7789
|
pendingAddFileCalls,
|
|
7788
|
-
pendingEntries,
|
|
7789
7790
|
config
|
|
7790
7791
|
} = zipWriter;
|
|
7791
7792
|
if (workers < config.maxWorkers) {
|
|
7792
7793
|
workers++;
|
|
7793
|
-
|
|
7794
|
-
|
|
7795
|
-
|
|
7796
|
-
|
|
7797
|
-
|
|
7798
|
-
|
|
7799
|
-
|
|
7800
|
-
|
|
7801
|
-
|
|
7802
|
-
|
|
7803
|
-
|
|
7804
|
-
|
|
7805
|
-
|
|
7806
|
-
|
|
7807
|
-
|
|
7794
|
+
} else {
|
|
7795
|
+
await new Promise(resolve => pendingEntries.push(resolve));
|
|
7796
|
+
}
|
|
7797
|
+
let promiseAddFile;
|
|
7798
|
+
try {
|
|
7799
|
+
name = name.trim();
|
|
7800
|
+
if (zipWriter.filenames.has(name)) {
|
|
7801
|
+
throw new Error(ERR_DUPLICATED_NAME);
|
|
7802
|
+
}
|
|
7803
|
+
zipWriter.filenames.add(name);
|
|
7804
|
+
promiseAddFile = addFile(zipWriter, name, reader, options);
|
|
7805
|
+
pendingAddFileCalls.add(promiseAddFile);
|
|
7806
|
+
return await promiseAddFile;
|
|
7807
|
+
} catch (error) {
|
|
7808
|
+
zipWriter.filenames.delete(name);
|
|
7809
|
+
throw error;
|
|
7810
|
+
} finally {
|
|
7811
|
+
pendingAddFileCalls.delete(promiseAddFile);
|
|
7812
|
+
const pendingEntry = pendingEntries.shift();
|
|
7813
|
+
if (pendingEntry) {
|
|
7814
|
+
pendingEntry();
|
|
7815
|
+
} else {
|
|
7808
7816
|
workers--;
|
|
7809
|
-
const pendingEntry = pendingEntries.shift();
|
|
7810
|
-
if (pendingEntry) {
|
|
7811
|
-
zipWriter.add(pendingEntry.name, pendingEntry.reader, pendingEntry.options)
|
|
7812
|
-
.then(pendingEntry.resolve)
|
|
7813
|
-
.catch(pendingEntry.reject);
|
|
7814
|
-
}
|
|
7815
7817
|
}
|
|
7816
|
-
} else {
|
|
7817
|
-
return new Promise((resolve, reject) => pendingEntries.push({ name, reader, options, resolve, reject }));
|
|
7818
7818
|
}
|
|
7819
7819
|
}
|
|
7820
7820
|
|
|
@@ -7984,8 +7984,9 @@
|
|
|
7984
7984
|
let bufferedWrite;
|
|
7985
7985
|
let releaseLockWriter;
|
|
7986
7986
|
let releaseLockCurrentFileEntry;
|
|
7987
|
-
let
|
|
7987
|
+
let writingBufferedData;
|
|
7988
7988
|
let fileWriter;
|
|
7989
|
+
let fileWriterSize;
|
|
7989
7990
|
files.set(name, fileEntry);
|
|
7990
7991
|
try {
|
|
7991
7992
|
let lockPreviousFileEntry;
|
|
@@ -8002,6 +8003,7 @@
|
|
|
8002
8003
|
await initStream(writer);
|
|
8003
8004
|
fileWriter = writer;
|
|
8004
8005
|
}
|
|
8006
|
+
fileWriterSize = fileWriter.size;
|
|
8005
8007
|
fileEntry = await createFileEntry(reader, fileEntry, fileWriter.writable, zipWriter.config, options);
|
|
8006
8008
|
files.set(name, fileEntry);
|
|
8007
8009
|
fileEntry.filename = name;
|
|
@@ -8009,7 +8011,7 @@
|
|
|
8009
8011
|
let blob = fileWriter.getData();
|
|
8010
8012
|
await lockPreviousFileEntry;
|
|
8011
8013
|
await requestLockWriter();
|
|
8012
|
-
|
|
8014
|
+
writingBufferedData = true;
|
|
8013
8015
|
const { writable } = writer;
|
|
8014
8016
|
if (!dataDescriptor) {
|
|
8015
8017
|
const headerLength = 26;
|
|
@@ -8029,7 +8031,7 @@
|
|
|
8029
8031
|
blob = blob.slice(headerLength);
|
|
8030
8032
|
}
|
|
8031
8033
|
await blob.stream().pipeTo(writable, { preventClose: true, signal });
|
|
8032
|
-
|
|
8034
|
+
writingBufferedData = false;
|
|
8033
8035
|
}
|
|
8034
8036
|
fileEntry.offset = zipWriter.offset;
|
|
8035
8037
|
if (fileEntry.zip64) {
|
|
@@ -8041,9 +8043,12 @@
|
|
|
8041
8043
|
zipWriter.offset += fileEntry.length;
|
|
8042
8044
|
return fileEntry;
|
|
8043
8045
|
} catch (error) {
|
|
8044
|
-
if ((bufferedWrite &&
|
|
8045
|
-
|
|
8046
|
-
|
|
8046
|
+
if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.writingData)) {
|
|
8047
|
+
zipWriter.hasCorruptedEntries = true;
|
|
8048
|
+
if (error) {
|
|
8049
|
+
error.corruptedEntry = true;
|
|
8050
|
+
}
|
|
8051
|
+
zipWriter.offset += fileWriter.size - fileWriterSize;
|
|
8047
8052
|
}
|
|
8048
8053
|
files.delete(name);
|
|
8049
8054
|
throw error;
|
|
@@ -8220,10 +8225,10 @@
|
|
|
8220
8225
|
arraySet(localHeaderArray, rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
|
|
8221
8226
|
let result;
|
|
8222
8227
|
let compressedSize = 0;
|
|
8228
|
+
fileEntry.writingData = pendingFileEntry.writingData = true;
|
|
8223
8229
|
if (reader) {
|
|
8224
8230
|
reader.chunkSize = getChunkSize(config);
|
|
8225
8231
|
await writeData(writable, localHeaderArray);
|
|
8226
|
-
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
8227
8232
|
const size = () => reader.size;
|
|
8228
8233
|
const readable = reader.readable;
|
|
8229
8234
|
readable.size = size;
|
|
@@ -8250,7 +8255,6 @@
|
|
|
8250
8255
|
compressedSize = result.size;
|
|
8251
8256
|
} else {
|
|
8252
8257
|
await writeData(writable, localHeaderArray);
|
|
8253
|
-
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
8254
8258
|
}
|
|
8255
8259
|
let dataDescriptorArray = new Uint8Array();
|
|
8256
8260
|
let dataDescriptorView, dataDescriptorOffset = 0;
|
|
@@ -8303,7 +8307,8 @@
|
|
|
8303
8307
|
creationDate,
|
|
8304
8308
|
lastAccessDate,
|
|
8305
8309
|
encrypted,
|
|
8306
|
-
length
|
|
8310
|
+
length,
|
|
8311
|
+
writingData: false
|
|
8307
8312
|
});
|
|
8308
8313
|
return fileEntry;
|
|
8309
8314
|
}
|