@zip.js/zip.js 2.6.51 → 2.6.52
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-full.js +38 -17
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +38 -17
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +38 -17
- package/dist/zip-full.min.js +1 -1
- package/dist/zip-no-worker-deflate.min.js +1 -1
- package/dist/zip-no-worker-inflate.min.js +1 -1
- package/dist/zip-no-worker.min.js +1 -1
- package/dist/zip.js +38 -17
- package/dist/zip.min.js +1 -1
- package/index.cjs +38 -17
- package/index.d.ts +1 -1
- package/lib/core/io.js +14 -13
- package/lib/core/zip-writer.js +24 -4
- package/package.json +1 -1
package/index.d.ts
CHANGED
package/lib/core/io.js
CHANGED
|
@@ -585,7 +585,7 @@ class SplitDataWriter extends Stream {
|
|
|
585
585
|
let diskSourceWriter, diskWritable, diskWriter;
|
|
586
586
|
const writable = new WritableStream({
|
|
587
587
|
async write(chunk) {
|
|
588
|
-
|
|
588
|
+
const { availableSize } = zipWriter;
|
|
589
589
|
if (!diskWriter) {
|
|
590
590
|
const { value, done } = await writerGenerator.next();
|
|
591
591
|
if (done && !value) {
|
|
@@ -596,24 +596,21 @@ class SplitDataWriter extends Stream {
|
|
|
596
596
|
if (diskSourceWriter.maxSize) {
|
|
597
597
|
zipWriter.maxSize = diskSourceWriter.maxSize;
|
|
598
598
|
}
|
|
599
|
+
zipWriter.availableSize = zipWriter.maxSize;
|
|
599
600
|
await initStream(diskSourceWriter);
|
|
600
601
|
diskWritable = value.writable;
|
|
601
602
|
diskWriter = diskWritable.getWriter();
|
|
602
603
|
}
|
|
603
604
|
await this.write(chunk);
|
|
604
|
-
} else if (
|
|
605
|
-
|
|
606
|
-
await writeChunk(chunk.slice(0, chunkLength));
|
|
605
|
+
} else if (chunk.length >= availableSize) {
|
|
606
|
+
await writeChunk(chunk.slice(0, availableSize));
|
|
607
607
|
await closeDisk();
|
|
608
608
|
zipWriter.diskOffset += diskSourceWriter.size;
|
|
609
609
|
zipWriter.diskNumber++;
|
|
610
610
|
diskWriter = null;
|
|
611
|
-
await this.write(chunk.slice(
|
|
611
|
+
await this.write(chunk.slice(availableSize));
|
|
612
612
|
} else {
|
|
613
|
-
|
|
614
|
-
await writeChunk(chunk);
|
|
615
|
-
}
|
|
616
|
-
zipWriter.availableSize = maxSize - diskSourceWriter.size;
|
|
613
|
+
await writeChunk(chunk);
|
|
617
614
|
}
|
|
618
615
|
},
|
|
619
616
|
async close() {
|
|
@@ -628,10 +625,14 @@ class SplitDataWriter extends Stream {
|
|
|
628
625
|
});
|
|
629
626
|
|
|
630
627
|
async function writeChunk(chunk) {
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
628
|
+
const chunkLength = chunk.length;
|
|
629
|
+
if (chunkLength) {
|
|
630
|
+
await diskWriter.ready;
|
|
631
|
+
await diskWriter.write(chunk);
|
|
632
|
+
diskSourceWriter.size += chunkLength;
|
|
633
|
+
zipWriter.size += chunkLength;
|
|
634
|
+
zipWriter.availableSize -= chunkLength;
|
|
635
|
+
}
|
|
635
636
|
}
|
|
636
637
|
|
|
637
638
|
async function closeDisk() {
|
package/lib/core/zip-writer.js
CHANGED
|
@@ -332,6 +332,9 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
332
332
|
dataDescriptor,
|
|
333
333
|
signal
|
|
334
334
|
} = options;
|
|
335
|
+
const {
|
|
336
|
+
headerInfo
|
|
337
|
+
} = entryInfo;
|
|
335
338
|
const previousFileEntry = Array.from(files.values()).pop();
|
|
336
339
|
let fileEntry = {};
|
|
337
340
|
let bufferedWrite;
|
|
@@ -357,7 +360,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
357
360
|
initLockWriter();
|
|
358
361
|
}
|
|
359
362
|
await initStream(fileWriter);
|
|
360
|
-
const { writable
|
|
363
|
+
const { writable } = writer;
|
|
361
364
|
let { diskOffset } = writer;
|
|
362
365
|
if (zipWriter.addSplitZipSignature) {
|
|
363
366
|
delete zipWriter.addSplitZipSignature;
|
|
@@ -369,7 +372,9 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
369
372
|
}
|
|
370
373
|
if (!bufferedWrite) {
|
|
371
374
|
await lockPreviousFileEntry;
|
|
375
|
+
await skipDiskIfNeeded(writable);
|
|
372
376
|
}
|
|
377
|
+
const { diskNumber } = writer;
|
|
373
378
|
writingEntryData = true;
|
|
374
379
|
fileEntry.diskNumberStart = diskNumber;
|
|
375
380
|
fileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, zipWriter.config, options);
|
|
@@ -385,6 +390,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
385
390
|
if (!dataDescriptor) {
|
|
386
391
|
blob = await writeMissingHeaderInfo(fileEntry, blob, writable, options);
|
|
387
392
|
}
|
|
393
|
+
await skipDiskIfNeeded(writable);
|
|
388
394
|
fileEntry.diskNumberStart = writer.diskNumber;
|
|
389
395
|
diskOffset = writer.diskOffset;
|
|
390
396
|
await blob.stream().pipeTo(writable, { preventClose: true, signal });
|
|
@@ -440,6 +446,13 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
440
446
|
zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
|
|
441
447
|
}
|
|
442
448
|
}
|
|
449
|
+
|
|
450
|
+
async function skipDiskIfNeeded(writable) {
|
|
451
|
+
if (headerInfo.localHeaderArray.length > writer.availableSize) {
|
|
452
|
+
writer.availableSize = 0;
|
|
453
|
+
await writeData(writable, new Uint8Array());
|
|
454
|
+
}
|
|
455
|
+
}
|
|
443
456
|
}
|
|
444
457
|
|
|
445
458
|
async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryInfo, config, options) {
|
|
@@ -827,6 +840,8 @@ async function closeFile(zipWriter, comment, options) {
|
|
|
827
840
|
}
|
|
828
841
|
const directoryArray = new Uint8Array(directoryDataLength);
|
|
829
842
|
const directoryView = getDataView(directoryArray);
|
|
843
|
+
await initStream(writer);
|
|
844
|
+
let directoryDiskOffset = 0;
|
|
830
845
|
for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
|
|
831
846
|
const {
|
|
832
847
|
offset: fileEntryOffset,
|
|
@@ -879,7 +894,13 @@ async function closeFile(zipWriter, comment, options) {
|
|
|
879
894
|
arraySet(directoryArray, rawExtraFieldNTFS, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp));
|
|
880
895
|
arraySet(directoryArray, rawExtraField, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS));
|
|
881
896
|
arraySet(directoryArray, rawComment, offset + 46 + getLength(rawFilename) + extraFieldLength);
|
|
882
|
-
|
|
897
|
+
const directoryEntryLength = 46 + getLength(rawFilename, rawComment) + extraFieldLength;
|
|
898
|
+
if (offset - directoryDiskOffset > writer.availableSize) {
|
|
899
|
+
writer.availableSize = 0;
|
|
900
|
+
await writeData(writable, directoryArray.slice(directoryDiskOffset, offset));
|
|
901
|
+
directoryDiskOffset = offset;
|
|
902
|
+
}
|
|
903
|
+
offset += directoryEntryLength;
|
|
883
904
|
if (options.onprogress) {
|
|
884
905
|
try {
|
|
885
906
|
await options.onprogress(indexFileEntry + 1, files.size, new Entry(fileEntry));
|
|
@@ -888,8 +909,7 @@ async function closeFile(zipWriter, comment, options) {
|
|
|
888
909
|
}
|
|
889
910
|
}
|
|
890
911
|
}
|
|
891
|
-
await
|
|
892
|
-
await writeData(writable, directoryArray);
|
|
912
|
+
await writeData(writable, directoryDiskOffset ? directoryArray.slice(directoryDiskOffset) : directoryArray);
|
|
893
913
|
let lastDiskNumber = writer.diskNumber;
|
|
894
914
|
const { availableSize } = writer;
|
|
895
915
|
if (availableSize < END_OF_CENTRAL_DIR_LENGTH) {
|
package/package.json
CHANGED