@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.
@@ -121,7 +121,7 @@ class ZipFileEntry extends ZipEntry {
121
121
  return zipEntry.data;
122
122
  } else {
123
123
  const reader = zipEntry.reader = new zipEntry.Reader(zipEntry.data, options);
124
- await Promise.all([initStream(reader), initStream(writer)]);
124
+ await Promise.all([initStream(reader), initStream(writer, zipEntry.data.uncompressedSize)]);
125
125
  zipEntry.uncompressedSize = reader.size;
126
126
  const readable = reader.readable;
127
127
  readable.size = () => reader.size;
@@ -282,6 +282,7 @@ class ZipEntry {
282
282
  bitFlag,
283
283
  signature,
284
284
  rawLastModDate,
285
+ uncompressedSize,
285
286
  compressedSize
286
287
  } = zipEntry;
287
288
  const localDirectory = zipEntry.localDirectory = {};
@@ -322,7 +323,7 @@ class ZipEntry {
322
323
  readable.size = size;
323
324
  const { writable } = writer;
324
325
  const signal = getOptionValue(zipEntry, options, "signal");
325
- await initStream(writer);
326
+ await initStream(writer, uncompressedSize);
326
327
  const { onstart, onprogress, onend } = options;
327
328
  const workerOptions = {
328
329
  options: {
@@ -321,8 +321,9 @@ async function getFileEntry(zipWriter, name, reader, options) {
321
321
  let bufferedWrite;
322
322
  let releaseLockWriter;
323
323
  let releaseLockCurrentFileEntry;
324
- let bufferedDataWritten;
324
+ let writingBufferedData;
325
325
  let fileWriter;
326
+ let fileWriterSize;
326
327
  files.set(name, fileEntry);
327
328
  try {
328
329
  let lockPreviousFileEntry;
@@ -339,6 +340,7 @@ async function getFileEntry(zipWriter, name, reader, options) {
339
340
  await initStream(writer);
340
341
  fileWriter = writer;
341
342
  }
343
+ fileWriterSize = fileWriter.size;
342
344
  fileEntry = await createFileEntry(reader, fileEntry, fileWriter.writable, zipWriter.config, options);
343
345
  files.set(name, fileEntry);
344
346
  fileEntry.filename = name;
@@ -346,7 +348,7 @@ async function getFileEntry(zipWriter, name, reader, options) {
346
348
  let blob = fileWriter.getData();
347
349
  await lockPreviousFileEntry;
348
350
  await requestLockWriter();
349
- bufferedDataWritten = true;
351
+ writingBufferedData = true;
350
352
  const { writable } = writer;
351
353
  if (!dataDescriptor) {
352
354
  const headerLength = 26;
@@ -366,7 +368,7 @@ async function getFileEntry(zipWriter, name, reader, options) {
366
368
  blob = blob.slice(headerLength);
367
369
  }
368
370
  await blob.stream().pipeTo(writable, { preventClose: true, signal });
369
- bufferedDataWritten = false;
371
+ writingBufferedData = false;
370
372
  }
371
373
  fileEntry.offset = zipWriter.offset;
372
374
  if (fileEntry.zip64) {
@@ -378,9 +380,12 @@ async function getFileEntry(zipWriter, name, reader, options) {
378
380
  zipWriter.offset += fileEntry.length;
379
381
  return fileEntry;
380
382
  } catch (error) {
381
- if ((bufferedWrite && bufferedDataWritten) || (!bufferedWrite && fileEntry.dataWritten)) {
382
- error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
383
- zipWriter.offset += fileWriter.size;
383
+ if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.writingData)) {
384
+ zipWriter.hasCorruptedEntries = true;
385
+ if (error) {
386
+ error.corruptedEntry = true;
387
+ }
388
+ zipWriter.offset += fileWriter.size - fileWriterSize;
384
389
  }
385
390
  files.delete(name);
386
391
  throw error;
@@ -557,10 +562,10 @@ async function createFileEntry(reader, pendingFileEntry, writable, config, optio
557
562
  arraySet(localHeaderArray, rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
558
563
  let result;
559
564
  let compressedSize = 0;
565
+ fileEntry.writingData = pendingFileEntry.writingData = true;
560
566
  if (reader) {
561
567
  reader.chunkSize = getChunkSize(config);
562
568
  await writeData(writable, localHeaderArray);
563
- fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
564
569
  const size = () => reader.size;
565
570
  const readable = reader.readable;
566
571
  readable.size = size;
@@ -587,7 +592,6 @@ async function createFileEntry(reader, pendingFileEntry, writable, config, optio
587
592
  compressedSize = result.size;
588
593
  } else {
589
594
  await writeData(writable, localHeaderArray);
590
- fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
591
595
  }
592
596
  let dataDescriptorArray = new Uint8Array();
593
597
  let dataDescriptorView, dataDescriptorOffset = 0;
@@ -640,7 +644,8 @@ async function createFileEntry(reader, pendingFileEntry, writable, config, optio
640
644
  creationDate,
641
645
  lastAccessDate,
642
646
  encrypted,
643
- length
647
+ length,
648
+ writingData: false
644
649
  });
645
650
  return fileEntry;
646
651
  }
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "A JavaScript library to zip and unzip files in the browser, Deno and Node.js",
4
4
  "author": "Gildas Lormeau",
5
5
  "license": "BSD-3-Clause",
6
- "version": "2.6.12",
6
+ "version": "2.6.15",
7
7
  "type": "module",
8
8
  "keywords": [
9
9
  "zip",
@@ -53,7 +53,7 @@
53
53
  "@rollup/plugin-node-resolve": "^13.3.0",
54
54
  "@rollup/plugin-replace": "^4.0.0",
55
55
  "http-server": "^14.1.1",
56
- "rollup": "^2.77.2",
56
+ "rollup": "^2.78.0",
57
57
  "rollup-plugin-terser": "^7.0.2",
58
58
  "typedoc": "^0.23.10"
59
59
  }
@@ -3,7 +3,6 @@
3
3
  "use strict";
4
4
 
5
5
  importScripts("./../../dist/zip-full.js");
6
- zip.configure({ useWebWorkers: false });
7
6
  self.addEventListener("fetch", event => {
8
7
  const matchZipEntry = event.request.url.match(/.zip#(.+)$/i);
9
8
  if (matchZipEntry) {