@zip.js/zip.js 2.6.12 → 2.6.15

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-fs.js CHANGED
@@ -2716,18 +2716,19 @@
2716
2716
 
2717
2717
  class Uint8ArrayWriter extends Writer {
2718
2718
 
2719
- constructor() {
2720
- super();
2721
- this.array = new Uint8Array();
2719
+ init(initSize = 0) {
2720
+ this.array = new Uint8Array(initSize);
2722
2721
  }
2723
2722
 
2724
2723
  writeUint8Array(array) {
2725
- super.writeUint8Array(array);
2726
2724
  const writer = this;
2727
- const previousArray = writer.array;
2728
- writer.array = new Uint8Array(previousArray.length + array.length);
2729
- writer.array.set(previousArray);
2730
- writer.array.set(array, previousArray.length);
2725
+ if (writer.size + array.length > writer.array.length) {
2726
+ const previousArray = writer.array;
2727
+ writer.array = new Uint8Array(previousArray.length + array.length);
2728
+ writer.array.set(previousArray);
2729
+ }
2730
+ writer.array.set(array, writer.size);
2731
+ super.writeUint8Array(array);
2731
2732
  }
2732
2733
 
2733
2734
  getData() {
@@ -2741,9 +2742,9 @@
2741
2742
  return protocol == "http:" || protocol == "https:";
2742
2743
  }
2743
2744
 
2744
- async function initStream(stream) {
2745
+ async function initStream(stream, initSize) {
2745
2746
  if (stream.init && !stream.initialized) {
2746
- await stream.init();
2747
+ await stream.init(initSize);
2747
2748
  }
2748
2749
  }
2749
2750
 
@@ -2845,14 +2846,21 @@
2845
2846
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2846
2847
  */
2847
2848
 
2849
+ /* global TextDecoder */
2850
+
2848
2851
  const CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
2852
+ const VALID_CP437 = CP437.length == 256;
2849
2853
 
2850
- var decodeCP437 = stringValue => {
2851
- let result = "";
2852
- for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
2853
- result += CP437[stringValue[indexCharacter]];
2854
+ var decodeCP437 = (stringValue) => {
2855
+ if (VALID_CP437) {
2856
+ let result = "";
2857
+ for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
2858
+ result += CP437[stringValue[indexCharacter]];
2859
+ }
2860
+ return result;
2861
+ } else {
2862
+ return new TextDecoder().decode(stringValue);
2854
2863
  }
2855
- return result;
2856
2864
  };
2857
2865
 
2858
2866
  /*
@@ -3155,6 +3163,7 @@
3155
3163
  bitFlag,
3156
3164
  signature,
3157
3165
  rawLastModDate,
3166
+ uncompressedSize,
3158
3167
  compressedSize
3159
3168
  } = zipEntry;
3160
3169
  const localDirectory = zipEntry.localDirectory = {};
@@ -3195,7 +3204,7 @@
3195
3204
  readable.size = size;
3196
3205
  const { writable } = writer;
3197
3206
  const signal = getOptionValue$1(zipEntry, options, "signal");
3198
- await initStream(writer);
3207
+ await initStream(writer, uncompressedSize);
3199
3208
  const { onstart, onprogress, onend } = options;
3200
3209
  const workerOptions = {
3201
3210
  options: {
@@ -3743,8 +3752,9 @@
3743
3752
  let bufferedWrite;
3744
3753
  let releaseLockWriter;
3745
3754
  let releaseLockCurrentFileEntry;
3746
- let bufferedDataWritten;
3755
+ let writingBufferedData;
3747
3756
  let fileWriter;
3757
+ let fileWriterSize;
3748
3758
  files.set(name, fileEntry);
3749
3759
  try {
3750
3760
  let lockPreviousFileEntry;
@@ -3761,6 +3771,7 @@
3761
3771
  await initStream(writer);
3762
3772
  fileWriter = writer;
3763
3773
  }
3774
+ fileWriterSize = fileWriter.size;
3764
3775
  fileEntry = await createFileEntry(reader, fileEntry, fileWriter.writable, zipWriter.config, options);
3765
3776
  files.set(name, fileEntry);
3766
3777
  fileEntry.filename = name;
@@ -3768,7 +3779,7 @@
3768
3779
  let blob = fileWriter.getData();
3769
3780
  await lockPreviousFileEntry;
3770
3781
  await requestLockWriter();
3771
- bufferedDataWritten = true;
3782
+ writingBufferedData = true;
3772
3783
  const { writable } = writer;
3773
3784
  if (!dataDescriptor) {
3774
3785
  const headerLength = 26;
@@ -3788,7 +3799,7 @@
3788
3799
  blob = blob.slice(headerLength);
3789
3800
  }
3790
3801
  await blob.stream().pipeTo(writable, { preventClose: true, signal });
3791
- bufferedDataWritten = false;
3802
+ writingBufferedData = false;
3792
3803
  }
3793
3804
  fileEntry.offset = zipWriter.offset;
3794
3805
  if (fileEntry.zip64) {
@@ -3800,9 +3811,12 @@
3800
3811
  zipWriter.offset += fileEntry.length;
3801
3812
  return fileEntry;
3802
3813
  } catch (error) {
3803
- if ((bufferedWrite && bufferedDataWritten) || (!bufferedWrite && fileEntry.dataWritten)) {
3804
- error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
3805
- zipWriter.offset += fileWriter.size;
3814
+ if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.writingData)) {
3815
+ zipWriter.hasCorruptedEntries = true;
3816
+ if (error) {
3817
+ error.corruptedEntry = true;
3818
+ }
3819
+ zipWriter.offset += fileWriter.size - fileWriterSize;
3806
3820
  }
3807
3821
  files.delete(name);
3808
3822
  throw error;
@@ -3979,10 +3993,10 @@
3979
3993
  arraySet(localHeaderArray, rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
3980
3994
  let result;
3981
3995
  let compressedSize = 0;
3996
+ fileEntry.writingData = pendingFileEntry.writingData = true;
3982
3997
  if (reader) {
3983
3998
  reader.chunkSize = getChunkSize(config);
3984
3999
  await writeData(writable, localHeaderArray);
3985
- fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
3986
4000
  const size = () => reader.size;
3987
4001
  const readable = reader.readable;
3988
4002
  readable.size = size;
@@ -4009,7 +4023,6 @@
4009
4023
  compressedSize = result.size;
4010
4024
  } else {
4011
4025
  await writeData(writable, localHeaderArray);
4012
- fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
4013
4026
  }
4014
4027
  let dataDescriptorArray = new Uint8Array();
4015
4028
  let dataDescriptorView, dataDescriptorOffset = 0;
@@ -4062,7 +4075,8 @@
4062
4075
  creationDate,
4063
4076
  lastAccessDate,
4064
4077
  encrypted,
4065
- length
4078
+ length,
4079
+ writingData: false
4066
4080
  });
4067
4081
  return fileEntry;
4068
4082
  }
@@ -4344,7 +4358,7 @@
4344
4358
  return zipEntry.data;
4345
4359
  } else {
4346
4360
  const reader = zipEntry.reader = new zipEntry.Reader(zipEntry.data, options);
4347
- await Promise.all([initStream(reader), initStream(writer)]);
4361
+ await Promise.all([initStream(reader), initStream(writer, zipEntry.data.uncompressedSize)]);
4348
4362
  zipEntry.uncompressedSize = reader.size;
4349
4363
  const readable = reader.readable;
4350
4364
  readable.size = () => reader.size;