@zip.js/zip.js 2.6.55 → 2.6.57

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.
@@ -119,7 +119,8 @@ class ZipWriter {
119
119
  filenames: new Set(),
120
120
  offset: writer.writable.size,
121
121
  pendingEntriesSize: 0,
122
- pendingAddFileCalls: new Set()
122
+ pendingAddFileCalls: new Set(),
123
+ bufferedWrites: 0
123
124
  });
124
125
  }
125
126
 
@@ -350,14 +351,15 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
350
351
  lockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;
351
352
  requestLockCurrentFileEntry();
352
353
  }
353
- if (options.bufferedWrite || zipWriter.lockWriter || !dataDescriptor) {
354
+ if (options.bufferedWrite || zipWriter.writerLocked || zipWriter.bufferedWrites || !dataDescriptor) {
354
355
  fileWriter = new BlobWriter();
355
356
  fileWriter.writable.size = 0;
356
357
  bufferedWrite = true;
358
+ zipWriter.bufferedWrites++;
357
359
  await initStream(writer);
358
360
  } else {
359
361
  fileWriter = writer;
360
- initLockWriter();
362
+ requestLockWriter();
361
363
  }
362
364
  await initStream(fileWriter);
363
365
  const { writable } = writer;
@@ -420,6 +422,9 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
420
422
  files.delete(name);
421
423
  throw error;
422
424
  } finally {
425
+ if (bufferedWrite) {
426
+ zipWriter.bufferedWrites--;
427
+ }
423
428
  if (releaseLockCurrentFileEntry) {
424
429
  releaseLockCurrentFileEntry();
425
430
  }
@@ -432,19 +437,14 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
432
437
  fileEntry.lock = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
433
438
  }
434
439
 
435
- function initLockWriter() {
436
- zipWriter.lockWriter = Promise.resolve();
437
- releaseLockWriter = () => delete zipWriter.lockWriter;
438
- }
439
-
440
440
  async function requestLockWriter() {
441
- const { lockWriter } = zipWriter;
442
- if (lockWriter) {
443
- await lockWriter.then(() => delete zipWriter.lockWriter);
444
- return requestLockWriter();
445
- } else {
446
- zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
447
- }
441
+ zipWriter.writerLocked = true;
442
+ let { lockWriter } = zipWriter;
443
+ zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = () => {
444
+ zipWriter.writerLocked = false;
445
+ resolve();
446
+ });
447
+ await lockWriter;
448
448
  }
449
449
 
450
450
  async function skipDiskIfNeeded(writable) {
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.55",
6
+ "version": "2.6.57",
7
7
  "type": "module",
8
8
  "keywords": [
9
9
  "zip",