@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-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
 
@@ -7079,14 +7080,21 @@
7079
7080
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7080
7081
  */
7081
7082
 
7083
+ /* global TextDecoder */
7084
+
7082
7085
  const CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
7086
+ const VALID_CP437 = CP437.length == 256;
7083
7087
 
7084
- var decodeCP437 = stringValue => {
7085
- let result = "";
7086
- for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
7087
- result += CP437[stringValue[indexCharacter]];
7088
+ var decodeCP437 = (stringValue) => {
7089
+ if (VALID_CP437) {
7090
+ let result = "";
7091
+ for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
7092
+ result += CP437[stringValue[indexCharacter]];
7093
+ }
7094
+ return result;
7095
+ } else {
7096
+ return new TextDecoder().decode(stringValue);
7088
7097
  }
7089
- return result;
7090
7098
  };
7091
7099
 
7092
7100
  /*
@@ -7389,6 +7397,7 @@
7389
7397
  bitFlag,
7390
7398
  signature,
7391
7399
  rawLastModDate,
7400
+ uncompressedSize,
7392
7401
  compressedSize
7393
7402
  } = zipEntry;
7394
7403
  const localDirectory = zipEntry.localDirectory = {};
@@ -7429,7 +7438,7 @@
7429
7438
  readable.size = size;
7430
7439
  const { writable } = writer;
7431
7440
  const signal = getOptionValue$1(zipEntry, options, "signal");
7432
- await initStream(writer);
7441
+ await initStream(writer, uncompressedSize);
7433
7442
  const { onstart, onprogress, onend } = options;
7434
7443
  const workerOptions = {
7435
7444
  options: {
@@ -7977,8 +7986,9 @@
7977
7986
  let bufferedWrite;
7978
7987
  let releaseLockWriter;
7979
7988
  let releaseLockCurrentFileEntry;
7980
- let bufferedDataWritten;
7989
+ let writingBufferedData;
7981
7990
  let fileWriter;
7991
+ let fileWriterSize;
7982
7992
  files.set(name, fileEntry);
7983
7993
  try {
7984
7994
  let lockPreviousFileEntry;
@@ -7995,6 +8005,7 @@
7995
8005
  await initStream(writer);
7996
8006
  fileWriter = writer;
7997
8007
  }
8008
+ fileWriterSize = fileWriter.size;
7998
8009
  fileEntry = await createFileEntry(reader, fileEntry, fileWriter.writable, zipWriter.config, options);
7999
8010
  files.set(name, fileEntry);
8000
8011
  fileEntry.filename = name;
@@ -8002,7 +8013,7 @@
8002
8013
  let blob = fileWriter.getData();
8003
8014
  await lockPreviousFileEntry;
8004
8015
  await requestLockWriter();
8005
- bufferedDataWritten = true;
8016
+ writingBufferedData = true;
8006
8017
  const { writable } = writer;
8007
8018
  if (!dataDescriptor) {
8008
8019
  const headerLength = 26;
@@ -8022,7 +8033,7 @@
8022
8033
  blob = blob.slice(headerLength);
8023
8034
  }
8024
8035
  await blob.stream().pipeTo(writable, { preventClose: true, signal });
8025
- bufferedDataWritten = false;
8036
+ writingBufferedData = false;
8026
8037
  }
8027
8038
  fileEntry.offset = zipWriter.offset;
8028
8039
  if (fileEntry.zip64) {
@@ -8034,9 +8045,12 @@
8034
8045
  zipWriter.offset += fileEntry.length;
8035
8046
  return fileEntry;
8036
8047
  } catch (error) {
8037
- if ((bufferedWrite && bufferedDataWritten) || (!bufferedWrite && fileEntry.dataWritten)) {
8038
- error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
8039
- zipWriter.offset += fileWriter.size;
8048
+ if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.writingData)) {
8049
+ zipWriter.hasCorruptedEntries = true;
8050
+ if (error) {
8051
+ error.corruptedEntry = true;
8052
+ }
8053
+ zipWriter.offset += fileWriter.size - fileWriterSize;
8040
8054
  }
8041
8055
  files.delete(name);
8042
8056
  throw error;
@@ -8213,10 +8227,10 @@
8213
8227
  arraySet(localHeaderArray, rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
8214
8228
  let result;
8215
8229
  let compressedSize = 0;
8230
+ fileEntry.writingData = pendingFileEntry.writingData = true;
8216
8231
  if (reader) {
8217
8232
  reader.chunkSize = getChunkSize(config);
8218
8233
  await writeData(writable, localHeaderArray);
8219
- fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
8220
8234
  const size = () => reader.size;
8221
8235
  const readable = reader.readable;
8222
8236
  readable.size = size;
@@ -8243,7 +8257,6 @@
8243
8257
  compressedSize = result.size;
8244
8258
  } else {
8245
8259
  await writeData(writable, localHeaderArray);
8246
- fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
8247
8260
  }
8248
8261
  let dataDescriptorArray = new Uint8Array();
8249
8262
  let dataDescriptorView, dataDescriptorOffset = 0;
@@ -8296,7 +8309,8 @@
8296
8309
  creationDate,
8297
8310
  lastAccessDate,
8298
8311
  encrypted,
8299
- length
8312
+ length,
8313
+ writingData: false
8300
8314
  });
8301
8315
  return fileEntry;
8302
8316
  }