@zip.js/zip.js 2.6.50 → 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 +22 -8
- 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
|
@@ -740,9 +740,9 @@ interface ZipReaderOptions {
|
|
|
740
740
|
}
|
|
741
741
|
|
|
742
742
|
/**
|
|
743
|
-
* Represents an entry in a zip file (Core API).
|
|
743
|
+
* Represents the metadata of an entry in a zip file (Core API).
|
|
744
744
|
*/
|
|
745
|
-
export interface
|
|
745
|
+
export interface EntryMetaData {
|
|
746
746
|
/**
|
|
747
747
|
* The byte offset of the entry.
|
|
748
748
|
*/
|
|
@@ -861,6 +861,20 @@ export interface Entry {
|
|
|
861
861
|
getData?<Type>(writer: Writer<Type> | WritableWriter | WritableStream | AsyncGenerator<Writer<unknown> | WritableWriter | WritableStream, boolean>, options?: EntryGetDataOptions): Promise<Type>
|
|
862
862
|
}
|
|
863
863
|
|
|
864
|
+
/**
|
|
865
|
+
* Represents an entry with its data and metadata in a zip file (Core API).
|
|
866
|
+
*/
|
|
867
|
+
export interface Entry extends EntryMetaData {
|
|
868
|
+
/**
|
|
869
|
+
* Returns the content of the entry
|
|
870
|
+
*
|
|
871
|
+
* @param writer The {@link Writer} instance used to write the content of the entry.
|
|
872
|
+
* @param options The options.
|
|
873
|
+
* @returns A promise resolving to the type to data associated to `writer`.
|
|
874
|
+
*/
|
|
875
|
+
getData<Type>(writer: Writer<Type> | WritableWriter | WritableStream | AsyncGenerator<Writer<unknown> | WritableWriter | WritableStream, boolean>, options?: EntryGetDataOptions): Promise<Type>
|
|
876
|
+
}
|
|
877
|
+
|
|
864
878
|
/**
|
|
865
879
|
* Represents the options passed to {@link Entry#getData} and `{@link ZipFileEntry}.get*`.
|
|
866
880
|
*/
|
|
@@ -904,9 +918,9 @@ export class ZipWriter<Type> {
|
|
|
904
918
|
* @param filename The filename of the entry.
|
|
905
919
|
* @param reader The {@link Reader} instance used to read the content of the entry.
|
|
906
920
|
* @param options The options.
|
|
907
|
-
* @returns A promise resolving to an {@link
|
|
921
|
+
* @returns A promise resolving to an {@link EntryMetaData} instance.
|
|
908
922
|
*/
|
|
909
|
-
add<ReaderType>(filename: string, reader?: Reader<ReaderType> | ReadableReader | ReadableStream | Reader<unknown>[] | ReadableReader[] | ReadableStream[], options?: ZipWriterAddDataOptions): Promise<
|
|
923
|
+
add<ReaderType>(filename: string, reader?: Reader<ReaderType> | ReadableReader | ReadableStream | Reader<unknown>[] | ReadableReader[] | ReadableStream[], options?: ZipWriterAddDataOptions): Promise<EntryMetaData>
|
|
910
924
|
/**
|
|
911
925
|
* Writes the entries directory, writes the global comment, and returns the content of the zip file
|
|
912
926
|
*
|
|
@@ -1075,7 +1089,7 @@ interface ZipWriterConstructorOptions {
|
|
|
1075
1089
|
*/
|
|
1076
1090
|
dataDescriptorSignature?: boolean
|
|
1077
1091
|
/**
|
|
1078
|
-
* `true` to write {@link
|
|
1092
|
+
* `true` to write {@link EntryMetaData#externalFileAttribute} in MS-DOS format for folder entries.
|
|
1079
1093
|
*
|
|
1080
1094
|
* @defaultValue true
|
|
1081
1095
|
*/
|
|
@@ -1134,7 +1148,7 @@ interface EntryOnprogressOptions {
|
|
|
1134
1148
|
* @param entry The entry being read/written.
|
|
1135
1149
|
* @returns An empty promise or `undefined`.
|
|
1136
1150
|
*/
|
|
1137
|
-
onprogress?(progress: number, total: number, entry:
|
|
1151
|
+
onprogress?(progress: number, total: number, entry: EntryMetaData): Promise<void> | undefined
|
|
1138
1152
|
}
|
|
1139
1153
|
|
|
1140
1154
|
/**
|
|
@@ -1146,9 +1160,9 @@ declare class ZipEntry {
|
|
|
1146
1160
|
*/
|
|
1147
1161
|
name: string
|
|
1148
1162
|
/**
|
|
1149
|
-
* The underlying {@link
|
|
1163
|
+
* The underlying {@link EntryMetaData} instance.
|
|
1150
1164
|
*/
|
|
1151
|
-
data?:
|
|
1165
|
+
data?: EntryMetaData
|
|
1152
1166
|
/**
|
|
1153
1167
|
* The ID of the instance.
|
|
1154
1168
|
*/
|
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