@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/dist/zip-full.js CHANGED
@@ -6950,18 +6950,19 @@
6950
6950
 
6951
6951
  class Uint8ArrayWriter extends Writer {
6952
6952
 
6953
- constructor() {
6954
- super();
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
- const previousArray = writer.array;
6962
- writer.array = new Uint8Array(previousArray.length + array.length);
6963
- writer.array.set(previousArray);
6964
- writer.array.set(array, previousArray.length);
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
- let promiseAddFile;
7794
- try {
7795
- name = name.trim();
7796
- if (zipWriter.filenames.has(name)) {
7797
- throw new Error(ERR_DUPLICATED_NAME);
7798
- }
7799
- zipWriter.filenames.add(name);
7800
- promiseAddFile = addFile(zipWriter, name, reader, options);
7801
- pendingAddFileCalls.add(promiseAddFile);
7802
- return await promiseAddFile;
7803
- } catch (error) {
7804
- zipWriter.filenames.delete(name);
7805
- throw error;
7806
- } finally {
7807
- pendingAddFileCalls.delete(promiseAddFile);
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 bufferedDataWritten;
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
- bufferedDataWritten = true;
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
- bufferedDataWritten = false;
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 && bufferedDataWritten) || (!bufferedWrite && fileEntry.dataWritten)) {
8045
- error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
8046
- zipWriter.offset += fileWriter.size;
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
  }