@zip.js/zip.js 2.19.0 → 2.20.0
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/BENCHMARKS.md +154 -130
- package/deno.json +1 -1
- package/dist/zip-core-external.js +140 -41
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +141 -40
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +140 -41
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +141 -40
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +140 -41
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +141 -40
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +141 -40
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +141 -40
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +141 -40
- package/dist/zip-native.min.js +1 -1
- package/dist/zip.js +141 -40
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +141 -40
- package/index-native.min.js +1 -1
- package/index.cjs +141 -40
- package/index.d.cts +70 -10
- package/index.d.ts +70 -10
- package/index.min.js +1 -1
- package/lib/core/version.js +1 -1
- package/lib/core/zip-reader.js +80 -18
- package/lib/core/zip-writer.js +57 -20
- package/lib/zip-core-reader.js +2 -0
- package/package.json +1 -1
package/dist/zip-fs-external.js
CHANGED
|
@@ -4834,6 +4834,8 @@ const WARNING_APPENDED_DATA = "appended data";
|
|
|
4834
4834
|
const WARNING_PREPENDED_DATA = "prepended data";
|
|
4835
4835
|
const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
|
|
4836
4836
|
const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
|
|
4837
|
+
const WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET = "mismatched central directory offset";
|
|
4838
|
+
const WARNING_MISSING_ZIP64_EXTRA_FIELD = "missing zip64 extra field";
|
|
4837
4839
|
const WARNING_DUPLICATE_FILENAME = "duplicate filename";
|
|
4838
4840
|
const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
|
|
4839
4841
|
const WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = "multiple end of central directory records";
|
|
@@ -4996,6 +4998,8 @@ class ZipReader {
|
|
|
4996
4998
|
reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
|
|
4997
4999
|
}
|
|
4998
5000
|
directoryDataOffset = getDiskOffset$1(reader, diskNumber) + getBigUint64(endOfDirectoryView, 48) + prependedDataLength;
|
|
5001
|
+
} else if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || diskNumber == MAX_16_BITS) {
|
|
5002
|
+
throw new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);
|
|
4999
5003
|
}
|
|
5000
5004
|
}
|
|
5001
5005
|
let declaredDirectoryDataLength = directoryDataLength;
|
|
@@ -5018,25 +5022,44 @@ class ZipReader {
|
|
|
5018
5022
|
if (directoryArray.length < 4) {
|
|
5019
5023
|
throw new Error(ERR_BAD_FORMAT);
|
|
5020
5024
|
}
|
|
5021
|
-
|
|
5025
|
+
let expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength;
|
|
5022
5026
|
if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
|
|
5023
5027
|
const storedPointsAtDirectory = getUint32$1(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE ||
|
|
5024
5028
|
Boolean(directoryEncryptionInfo && directoryEncryptionInfo.compressedSize) ||
|
|
5025
5029
|
detectEncryptedCentralDirectory(directoryView);
|
|
5026
5030
|
let reconcile = !storedPointsAtDirectory;
|
|
5027
|
-
if (
|
|
5028
|
-
const
|
|
5029
|
-
|
|
5031
|
+
if (expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
|
|
5032
|
+
const expectedPointsAtDirectory = await pointsAtDirectory(reader, expectedDirectoryDataOffset);
|
|
5033
|
+
if (storedPointsAtDirectory) {
|
|
5034
|
+
reconcile = expectedPointsAtDirectory;
|
|
5035
|
+
} else if (!expectedPointsAtDirectory) {
|
|
5036
|
+
const signatureRecordOffset = await findDigitalSignatureRecordOffset(reader, centralDirectoryEndOffset);
|
|
5037
|
+
const signedDirectoryDataOffset = signatureRecordOffset - directoryDataLength;
|
|
5038
|
+
if (signatureRecordOffset !== UNDEFINED_VALUE && signedDirectoryDataOffset >= 0 &&
|
|
5039
|
+
await pointsAtDirectory(reader, signedDirectoryDataOffset)) {
|
|
5040
|
+
expectedDirectoryDataOffset = signedDirectoryDataOffset;
|
|
5041
|
+
}
|
|
5042
|
+
}
|
|
5030
5043
|
}
|
|
5031
5044
|
if (reconcile) {
|
|
5032
5045
|
const originalDirectoryDataOffset = directoryDataOffset;
|
|
5033
5046
|
directoryDataOffset = expectedDirectoryDataOffset;
|
|
5047
|
+
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
|
|
5048
|
+
directoryView = getDataView(directoryArray);
|
|
5034
5049
|
if (directoryDataOffset > originalDirectoryDataOffset) {
|
|
5035
5050
|
prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
|
|
5036
5051
|
prependedCentralDirectory = storedPointsAtDirectory;
|
|
5052
|
+
} else {
|
|
5053
|
+
reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET);
|
|
5054
|
+
const offsetDelta = directoryDataOffset - originalDirectoryDataOffset;
|
|
5055
|
+
if (directoryArray.length >= CENTRAL_FILE_HEADER_LENGTH) {
|
|
5056
|
+
const localHeaderOffset = getUint32$1(directoryView, 42);
|
|
5057
|
+
if (!await startsWithSignature(reader, localHeaderOffset, LOCAL_FILE_HEADER_SIGNATURE) &&
|
|
5058
|
+
await startsWithSignature(reader, localHeaderOffset + offsetDelta, LOCAL_FILE_HEADER_SIGNATURE)) {
|
|
5059
|
+
prependedDataLength += offsetDelta;
|
|
5060
|
+
}
|
|
5061
|
+
}
|
|
5037
5062
|
}
|
|
5038
|
-
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
|
|
5039
|
-
directoryView = getDataView(directoryArray);
|
|
5040
5063
|
}
|
|
5041
5064
|
}
|
|
5042
5065
|
}
|
|
@@ -5147,7 +5170,16 @@ class ZipReader {
|
|
|
5147
5170
|
filename,
|
|
5148
5171
|
comment
|
|
5149
5172
|
});
|
|
5150
|
-
|
|
5173
|
+
let malformedExtraField;
|
|
5174
|
+
try {
|
|
5175
|
+
malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
|
|
5176
|
+
} catch (error) {
|
|
5177
|
+
if (checkAmbiguity || error.message != ERR_EXTRAFIELD_ZIP64_NOT_FOUND) {
|
|
5178
|
+
throw error;
|
|
5179
|
+
}
|
|
5180
|
+
fileEntry.zip64ExtraFieldMissing = true;
|
|
5181
|
+
addWarning(warnings, WARNING_MISSING_ZIP64_EXTRA_FIELD, fileEntry.filename);
|
|
5182
|
+
}
|
|
5151
5183
|
filename = fileEntry.filename;
|
|
5152
5184
|
if (normalizeFilename) {
|
|
5153
5185
|
const normalizedFilename = normalizeFilename(filename);
|
|
@@ -5189,11 +5221,12 @@ class ZipReader {
|
|
|
5189
5221
|
const sticky = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_STICKY_MASK);
|
|
5190
5222
|
const unixType = fileEntry.unixMode === UNDEFINED_VALUE ? unixExternalUpper : fileEntry.unixMode;
|
|
5191
5223
|
const symlink = (unixType & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_SYMLINK;
|
|
5192
|
-
const executable = !symlink && ((fileEntry.unixMode !== UNDEFINED_VALUE)
|
|
5193
|
-
? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
|
|
5194
|
-
: (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
|
|
5195
5224
|
const modeIsDir = fileEntry.unixMode !== UNDEFINED_VALUE && ((fileEntry.unixMode & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
|
|
5196
5225
|
const upperIsDir = ((unixExternalUpper & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
|
|
5226
|
+
const directory = modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || fileEntry.filename.endsWith(DIRECTORY_SIGNATURE);
|
|
5227
|
+
const executable = !symlink && !directory && ((fileEntry.unixMode !== UNDEFINED_VALUE)
|
|
5228
|
+
? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
|
|
5229
|
+
: (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)));
|
|
5197
5230
|
Object.assign(fileEntry, {
|
|
5198
5231
|
setuid,
|
|
5199
5232
|
setgid,
|
|
@@ -5201,7 +5234,7 @@ class ZipReader {
|
|
|
5201
5234
|
symlink,
|
|
5202
5235
|
unixExternalUpper,
|
|
5203
5236
|
executable,
|
|
5204
|
-
directory
|
|
5237
|
+
directory,
|
|
5205
5238
|
zipCrypto: fileEntry.encrypted && !fileEntry.extraFieldAES
|
|
5206
5239
|
});
|
|
5207
5240
|
const entry = new Entry(fileEntry);
|
|
@@ -5257,10 +5290,10 @@ class ZipReader {
|
|
|
5257
5290
|
const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
|
|
5258
5291
|
const splitZipSignatureLength = (checkAmbiguity || extractPrependedData) && filesLength &&
|
|
5259
5292
|
startOffset == SPLIT_ZIP_FILE_SIGNATURE_LENGTH && await startsWithSplitZipMarker(reader) ? SPLIT_ZIP_FILE_SIGNATURE_LENGTH : 0;
|
|
5260
|
-
if (checkAmbiguity && (prependedDataLength || (filesLength && startOffset > splitZipSignatureLength))) {
|
|
5293
|
+
if (checkAmbiguity && (prependedDataLength > 0 || (filesLength && startOffset > splitZipSignatureLength))) {
|
|
5261
5294
|
throwAmbiguousArchive(WARNING_PREPENDED_DATA);
|
|
5262
5295
|
}
|
|
5263
|
-
if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
|
|
5296
|
+
if (prependedDataLength > 0 || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
|
|
5264
5297
|
addWarning(warnings, WARNING_PREPENDED_DATA);
|
|
5265
5298
|
}
|
|
5266
5299
|
if (prependedCentralDirectory) {
|
|
@@ -5420,6 +5453,9 @@ let ZipEntry$1 = class ZipEntry {
|
|
|
5420
5453
|
|
|
5421
5454
|
async getData(writer, fileEntry, readRanges, options = {}) {
|
|
5422
5455
|
const zipEntry = this;
|
|
5456
|
+
if (zipEntry.zip64ExtraFieldMissing) {
|
|
5457
|
+
throw new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);
|
|
5458
|
+
}
|
|
5423
5459
|
const config = getConfiguration();
|
|
5424
5460
|
const {
|
|
5425
5461
|
reader,
|
|
@@ -5657,6 +5693,30 @@ function getWrappedFilesLength(directoryView, directoryArray, offset) {
|
|
|
5657
5693
|
return wrappedFilesLength % (MAX_16_BITS + 1) ? 0 : wrappedFilesLength;
|
|
5658
5694
|
}
|
|
5659
5695
|
|
|
5696
|
+
function pointsAtDirectory(reader, offset) {
|
|
5697
|
+
return startsWithSignature(reader, offset, CENTRAL_FILE_HEADER_SIGNATURE);
|
|
5698
|
+
}
|
|
5699
|
+
|
|
5700
|
+
async function startsWithSignature(reader, offset, signature) {
|
|
5701
|
+
if (offset < 0 || offset + 4 > reader.size) {
|
|
5702
|
+
return false;
|
|
5703
|
+
}
|
|
5704
|
+
const signatureArray = await readUint8Array(reader, offset, 4);
|
|
5705
|
+
return getUint32$1(getDataView(signatureArray), 0) == signature;
|
|
5706
|
+
}
|
|
5707
|
+
|
|
5708
|
+
async function findDigitalSignatureRecordOffset(reader, endOffset) {
|
|
5709
|
+
const startOffset = Math.max(0, endOffset - (6 + MAX_16_BITS));
|
|
5710
|
+
const tailArray = await readUint8Array(reader, startOffset, endOffset - startOffset);
|
|
5711
|
+
const tailView = getDataView(tailArray);
|
|
5712
|
+
for (let indexByte = tailArray.length - 6; indexByte >= 0; indexByte--) {
|
|
5713
|
+
if (getUint32$1(tailView, indexByte) == DIGITAL_SIGNATURE_RECORD_SIGNATURE &&
|
|
5714
|
+
indexByte + 6 + getUint16$1(tailView, indexByte + 4) == tailArray.length) {
|
|
5715
|
+
return startOffset + indexByte;
|
|
5716
|
+
}
|
|
5717
|
+
}
|
|
5718
|
+
}
|
|
5719
|
+
|
|
5660
5720
|
function readDigitalSignature(signatureRecordArray) {
|
|
5661
5721
|
if (signatureRecordArray.length >= 6) {
|
|
5662
5722
|
const signatureRecordView = getDataView(signatureRecordArray);
|
|
@@ -5788,6 +5848,11 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
|
|
|
5788
5848
|
readExtraFieldUnixDates(extraFieldUnixType1, directory);
|
|
5789
5849
|
directory.extraFieldUnixType1 = extraFieldUnixType1;
|
|
5790
5850
|
}
|
|
5851
|
+
const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
|
|
5852
|
+
if (extraFieldExtendedTimestamp) {
|
|
5853
|
+
readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
|
|
5854
|
+
directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
|
|
5855
|
+
}
|
|
5791
5856
|
const extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
|
|
5792
5857
|
if (extraFieldNTFS) {
|
|
5793
5858
|
readExtraFieldNTFS(extraFieldNTFS, directory);
|
|
@@ -5804,11 +5869,6 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
|
|
|
5804
5869
|
readExtraFieldUnix(extraFieldUnix, unixIdsRead ? {} : directory, false);
|
|
5805
5870
|
directory.extraFieldUnix = extraFieldUnix;
|
|
5806
5871
|
}
|
|
5807
|
-
const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
|
|
5808
|
-
if (extraFieldExtendedTimestamp) {
|
|
5809
|
-
readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
|
|
5810
|
-
directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
|
|
5811
|
-
}
|
|
5812
5872
|
const extraFieldUSDZ = extraField.get(EXTRAFIELD_TYPE_USDZ);
|
|
5813
5873
|
if (extraFieldUSDZ) {
|
|
5814
5874
|
directory.extraFieldUSDZ = extraFieldUSDZ;
|
|
@@ -6447,11 +6507,13 @@ var zipReader = /*#__PURE__*/Object.freeze({
|
|
|
6447
6507
|
WARNING_COMPRESSED_PATCHED_DATA: WARNING_COMPRESSED_PATCHED_DATA,
|
|
6448
6508
|
WARNING_DUPLICATE_FILENAME: WARNING_DUPLICATE_FILENAME,
|
|
6449
6509
|
WARNING_MALFORMED_EXTRA_FIELD: WARNING_MALFORMED_EXTRA_FIELD,
|
|
6510
|
+
WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET: WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET,
|
|
6450
6511
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG: WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG,
|
|
6451
6512
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
|
|
6452
6513
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
|
|
6453
6514
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME: WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME,
|
|
6454
6515
|
WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
|
|
6516
|
+
WARNING_MISSING_ZIP64_EXTRA_FIELD: WARNING_MISSING_ZIP64_EXTRA_FIELD,
|
|
6455
6517
|
WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY: WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY,
|
|
6456
6518
|
WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
|
|
6457
6519
|
WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
|
|
@@ -6584,13 +6646,14 @@ class ZipWriter {
|
|
|
6584
6646
|
return watchPromiseError(this, prependZipEntries(this, reader));
|
|
6585
6647
|
}
|
|
6586
6648
|
|
|
6587
|
-
appendZip(reader) {
|
|
6588
|
-
return watchPromiseError(this, this.appendZipEntries(reader));
|
|
6649
|
+
appendZip(reader, options = {}) {
|
|
6650
|
+
return watchPromiseError(this, this.appendZipEntries(reader, options));
|
|
6589
6651
|
}
|
|
6590
6652
|
|
|
6591
|
-
async appendZipEntries(reader) {
|
|
6653
|
+
async appendZipEntries(reader, options = {}) {
|
|
6592
6654
|
const zipWriter = this;
|
|
6593
6655
|
const { pendingAddFileCalls, filenames, fileEntries } = zipWriter;
|
|
6656
|
+
const filter = checkFunctionOption(options.filter);
|
|
6594
6657
|
while (pendingAddFileCalls.size) {
|
|
6595
6658
|
await Promise.allSettled(Array.from(pendingAddFileCalls));
|
|
6596
6659
|
}
|
|
@@ -6609,10 +6672,16 @@ class ZipWriter {
|
|
|
6609
6672
|
const { ZipReader } = await Promise.resolve().then(function () { return zipReader; });
|
|
6610
6673
|
const zipReader$1 = new ZipReader(reader);
|
|
6611
6674
|
const entries = await zipReader$1.getEntries();
|
|
6675
|
+
const keptEntries = [];
|
|
6676
|
+
for (const entry of entries) {
|
|
6677
|
+
if (!filter || await filter(entry)) {
|
|
6678
|
+
keptEntries.push(entry);
|
|
6679
|
+
}
|
|
6680
|
+
}
|
|
6612
6681
|
await zipReader$1.close();
|
|
6613
6682
|
await initStream(zipWriter.writer);
|
|
6614
6683
|
const { directoryOffset } = zipReader$1;
|
|
6615
|
-
|
|
6684
|
+
keptEntries.forEach(({ filename }) => {
|
|
6616
6685
|
if (filenames.has(filename)) {
|
|
6617
6686
|
throw new Error(ERR_DUPLICATED_NAME);
|
|
6618
6687
|
}
|
|
@@ -6633,8 +6702,8 @@ class ZipWriter {
|
|
|
6633
6702
|
zipWriter.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
|
|
6634
6703
|
}
|
|
6635
6704
|
}
|
|
6636
|
-
const entryPositions = await copyZipData(zipWriter, reader, entries, directoryOffset);
|
|
6637
|
-
|
|
6705
|
+
const entryPositions = await copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, Boolean(filter));
|
|
6706
|
+
keptEntries.forEach(entry => {
|
|
6638
6707
|
const {
|
|
6639
6708
|
version,
|
|
6640
6709
|
rawLastModDate,
|
|
@@ -8645,26 +8714,42 @@ function removeExtraFieldZip64(rawExtraField) {
|
|
|
8645
8714
|
return rawExtraField;
|
|
8646
8715
|
}
|
|
8647
8716
|
|
|
8648
|
-
async function copyZipData(zipWriter, reader, entries, directoryOffset) {
|
|
8717
|
+
async function copyZipData(zipWriter, reader, entries, keptEntries, directoryOffset, compact) {
|
|
8649
8718
|
const { writer } = zipWriter;
|
|
8650
8719
|
const entryPositions = new Map();
|
|
8651
|
-
if (writer.closeDisk) {
|
|
8720
|
+
if (writer.closeDisk || compact) {
|
|
8652
8721
|
const sortedEntries = Array.from(entries).sort((firstEntry, secondEntry) =>
|
|
8653
8722
|
getSourceOffset(reader, firstEntry) - getSourceOffset(reader, secondEntry));
|
|
8654
|
-
|
|
8655
|
-
|
|
8656
|
-
|
|
8657
|
-
|
|
8658
|
-
|
|
8659
|
-
|
|
8660
|
-
|
|
8661
|
-
|
|
8662
|
-
|
|
8663
|
-
|
|
8664
|
-
|
|
8665
|
-
|
|
8723
|
+
const regionEnds = getRegionEnds(reader, sortedEntries, directoryOffset);
|
|
8724
|
+
const keptEntrySet = new Set(keptEntries);
|
|
8725
|
+
let copiedOffset = 0;
|
|
8726
|
+
let lastPosition;
|
|
8727
|
+
for (let indexEntry = 0; indexEntry < sortedEntries.length; indexEntry++) {
|
|
8728
|
+
const entry = sortedEntries[indexEntry];
|
|
8729
|
+
if (keptEntrySet.has(entry)) {
|
|
8730
|
+
const sourceOffset = getSourceOffset(reader, entry);
|
|
8731
|
+
if (sourceOffset < copiedOffset) {
|
|
8732
|
+
entryPositions.set(entry, lastPosition);
|
|
8733
|
+
} else {
|
|
8734
|
+
if (!compact) {
|
|
8735
|
+
await copyData(zipWriter, reader, copiedOffset, sourceOffset - copiedOffset);
|
|
8736
|
+
}
|
|
8737
|
+
if (writer.closeDisk && exceedsAvailableSize(writer, await getLocalHeaderLength(reader, sourceOffset))) {
|
|
8738
|
+
await writer.closeDisk();
|
|
8739
|
+
}
|
|
8740
|
+
lastPosition = {
|
|
8741
|
+
offset: getSegmentOffset(zipWriter, writer),
|
|
8742
|
+
diskNumberStart: getDiskNumber(writer)
|
|
8743
|
+
};
|
|
8744
|
+
entryPositions.set(entry, lastPosition);
|
|
8745
|
+
await copyData(zipWriter, reader, sourceOffset, regionEnds[indexEntry] - sourceOffset);
|
|
8746
|
+
copiedOffset = regionEnds[indexEntry];
|
|
8747
|
+
}
|
|
8748
|
+
}
|
|
8749
|
+
}
|
|
8750
|
+
if (!compact) {
|
|
8751
|
+
await copyData(zipWriter, reader, copiedOffset, directoryOffset - copiedOffset);
|
|
8666
8752
|
}
|
|
8667
|
-
await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
|
|
8668
8753
|
} else {
|
|
8669
8754
|
const baseOffset = zipWriter.offset;
|
|
8670
8755
|
await copyData(zipWriter, reader, 0, directoryOffset);
|
|
@@ -8676,6 +8761,20 @@ async function copyZipData(zipWriter, reader, entries, directoryOffset) {
|
|
|
8676
8761
|
return entryPositions;
|
|
8677
8762
|
}
|
|
8678
8763
|
|
|
8764
|
+
function getRegionEnds(reader, sortedEntries, directoryOffset) {
|
|
8765
|
+
const regionEnds = new Array(sortedEntries.length);
|
|
8766
|
+
let regionEnd = directoryOffset;
|
|
8767
|
+
for (let indexEntry = sortedEntries.length - 1; indexEntry >= 0; indexEntry--) {
|
|
8768
|
+
const sourceOffset = getSourceOffset(reader, sortedEntries[indexEntry]);
|
|
8769
|
+
const nextEntry = sortedEntries[indexEntry + 1];
|
|
8770
|
+
if (nextEntry && getSourceOffset(reader, nextEntry) > sourceOffset) {
|
|
8771
|
+
regionEnd = getSourceOffset(reader, nextEntry);
|
|
8772
|
+
}
|
|
8773
|
+
regionEnds[indexEntry] = regionEnd;
|
|
8774
|
+
}
|
|
8775
|
+
return regionEnds;
|
|
8776
|
+
}
|
|
8777
|
+
|
|
8679
8778
|
async function copyData(zipWriter, reader, offset, size) {
|
|
8680
8779
|
if (size > 0) {
|
|
8681
8780
|
const { writer } = zipWriter;
|
|
@@ -9053,7 +9152,7 @@ function formatSupported(StreamClass, format) {
|
|
|
9053
9152
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
9054
9153
|
*/
|
|
9055
9154
|
|
|
9056
|
-
const VERSION = "2.
|
|
9155
|
+
const VERSION = "2.20.0";
|
|
9057
9156
|
|
|
9058
9157
|
/*
|
|
9059
9158
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -11621,4 +11720,4 @@ function decodeMimeTypes(data) {
|
|
|
11621
11720
|
return mimeTypes;
|
|
11622
11721
|
}
|
|
11623
11722
|
|
|
11624
|
-
export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_ABORTED, ERR_AMBIGUOUS_ARCHIVE, ERR_ANCESTOR_ENTRY, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_CODEC_OUT_OF_MEMORY, ERR_DUPLICATED_NAME, ERR_DUPLICATE_IMPORTED_ENTRY, ERR_ENCRYPTED, ERR_ENCRYPTED_CENTRAL_DIRECTORY, ERR_ENTRY_DATA_OUT_OF_BOUNDS, ERR_ENTRY_EXISTS, ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND, ERR_EOCDR_NOT_FOUND, ERR_EXTRAFIELD_ZIP64_NOT_FOUND, ERR_HTTP_RANGE, ERR_HTTP_RESOURCE_CHANGED, ERR_HTTP_STATUS, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_BASE_URI, ERR_INVALID_CODEC_DEFINITION, ERR_INVALID_CODEC_MODULE, ERR_INVALID_COMMENT, ERR_INVALID_COMMENT_TYPE, ERR_INVALID_COMPRESSED_DATA, ERR_INVALID_CRC32, ERR_INVALID_DATE, ERR_INVALID_DUPLICATES, ERR_INVALID_ENCRYPTION_STRENGTH, ERR_INVALID_ENTRY, ERR_INVALID_ENTRY_COMMENT, ERR_INVALID_ENTRY_COMMENT_TYPE, ERR_INVALID_ENTRY_NAME, ERR_INVALID_EXTRAFIELD, ERR_INVALID_EXTRAFIELD_DATA, ERR_INVALID_EXTRAFIELD_DATA_TYPE, ERR_INVALID_EXTRAFIELD_TYPE, ERR_INVALID_FILENAME_VALIDATION, ERR_INVALID_FUNCTION_OPTION, ERR_INVALID_GID, ERR_INVALID_LEVEL, ERR_INVALID_MAX_APPENDED_DATA_SIZE, ERR_INVALID_MAX_WORKERS, ERR_INVALID_MSDOS_ATTRIBUTES, ERR_INVALID_MSDOS_DATA, ERR_INVALID_PASSWORD, ERR_INVALID_PASSWORDS, ERR_INVALID_PASSWORD_TYPE, ERR_INVALID_PASS_THROUGH, ERR_INVALID_PASS_THROUGH_VALUE, ERR_INVALID_READER, ERR_INVALID_READER_OPTIONS, ERR_INVALID_REQUEST_PASSWORD, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE_DATA, ERR_INVALID_STRICTNESS, ERR_INVALID_UID, ERR_INVALID_UNCOMPRESSED_SIZE, ERR_INVALID_UNIX_EXTRA_FIELD_TYPE, ERR_INVALID_UNIX_ID_SIZE, ERR_INVALID_UNIX_MODE, ERR_INVALID_URI, ERR_INVALID_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_PARENT_NOT_DIRECTORY, ERR_READABLE_CONSUMED, ERR_RESERVED_COMPRESSION_METHOD, ERR_ROOT_DIRECTORY_NOT_MOVABLE, ERR_SPLIT_ZIP_FILE, ERR_TARGET_NOT_DIRECTORY, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_CRC32, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION, ERR_UNSUPPORTED_CONTEXT, ERR_UNSUPPORTED_CRYPTO_API, ERR_UNSUPPORTED_ENCRYPTION, ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH, ERR_UNSUPPORTED_ENCRYPTION_USDZ, ERR_UNSUPPORTED_FORMAT, ERR_UNSUPPORTED_PASS_THROUGH_VALUE, ERR_UNSUPPORTED_SPLIT_USDZ, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_WRITER_SIZE_NOT_WRITABLE, ERR_ZIP_CRYPTO_LAST_MOD_DATE, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, VERSION, WARNING_APPENDED_DATA, WARNING_CLAMPED_LAST_MODIFICATION_DATE, WARNING_COMPRESSED_PATCHED_DATA, WARNING_COMPRESSION_UNAVAILABLE, WARNING_DUPLICATE_FILENAME, WARNING_MALFORMED_EXTRA_FIELD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG, WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES, WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY, WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY, WARNING_PREPENDED_CENTRAL_DIRECTORY, WARNING_PREPENDED_DATA, WARNING_TRAILING_CENTRAL_DIRECTORY_DATA, WARNING_UNKNOWN_VERSION, WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA, WARNING_UNSORTED_CENTRAL_DIRECTORY, WARNING_WRAPPED_ENTRIES_COUNT, Writer, ZipDirectoryEntry, ZipEntry, ZipFS, ZipFileEntry, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, fs, getMimeType, getRegisteredCodecs, getSupportedCompressionMethods, isZipFile, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
|
|
11723
|
+
export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_ABORTED, ERR_AMBIGUOUS_ARCHIVE, ERR_ANCESTOR_ENTRY, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_CODEC_OUT_OF_MEMORY, ERR_DUPLICATED_NAME, ERR_DUPLICATE_IMPORTED_ENTRY, ERR_ENCRYPTED, ERR_ENCRYPTED_CENTRAL_DIRECTORY, ERR_ENTRY_DATA_OUT_OF_BOUNDS, ERR_ENTRY_EXISTS, ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND, ERR_EOCDR_NOT_FOUND, ERR_EXTRAFIELD_ZIP64_NOT_FOUND, ERR_HTTP_RANGE, ERR_HTTP_RESOURCE_CHANGED, ERR_HTTP_STATUS, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_BASE_URI, ERR_INVALID_CODEC_DEFINITION, ERR_INVALID_CODEC_MODULE, ERR_INVALID_COMMENT, ERR_INVALID_COMMENT_TYPE, ERR_INVALID_COMPRESSED_DATA, ERR_INVALID_CRC32, ERR_INVALID_DATE, ERR_INVALID_DUPLICATES, ERR_INVALID_ENCRYPTION_STRENGTH, ERR_INVALID_ENTRY, ERR_INVALID_ENTRY_COMMENT, ERR_INVALID_ENTRY_COMMENT_TYPE, ERR_INVALID_ENTRY_NAME, ERR_INVALID_EXTRAFIELD, ERR_INVALID_EXTRAFIELD_DATA, ERR_INVALID_EXTRAFIELD_DATA_TYPE, ERR_INVALID_EXTRAFIELD_TYPE, ERR_INVALID_FILENAME_VALIDATION, ERR_INVALID_FUNCTION_OPTION, ERR_INVALID_GID, ERR_INVALID_LEVEL, ERR_INVALID_MAX_APPENDED_DATA_SIZE, ERR_INVALID_MAX_WORKERS, ERR_INVALID_MSDOS_ATTRIBUTES, ERR_INVALID_MSDOS_DATA, ERR_INVALID_PASSWORD, ERR_INVALID_PASSWORDS, ERR_INVALID_PASSWORD_TYPE, ERR_INVALID_PASS_THROUGH, ERR_INVALID_PASS_THROUGH_VALUE, ERR_INVALID_READER, ERR_INVALID_READER_OPTIONS, ERR_INVALID_REQUEST_PASSWORD, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE_DATA, ERR_INVALID_STRICTNESS, ERR_INVALID_UID, ERR_INVALID_UNCOMPRESSED_SIZE, ERR_INVALID_UNIX_EXTRA_FIELD_TYPE, ERR_INVALID_UNIX_ID_SIZE, ERR_INVALID_UNIX_MODE, ERR_INVALID_URI, ERR_INVALID_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_PARENT_NOT_DIRECTORY, ERR_READABLE_CONSUMED, ERR_RESERVED_COMPRESSION_METHOD, ERR_ROOT_DIRECTORY_NOT_MOVABLE, ERR_SPLIT_ZIP_FILE, ERR_TARGET_NOT_DIRECTORY, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_CRC32, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION, ERR_UNSUPPORTED_CONTEXT, ERR_UNSUPPORTED_CRYPTO_API, ERR_UNSUPPORTED_ENCRYPTION, ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH, ERR_UNSUPPORTED_ENCRYPTION_USDZ, ERR_UNSUPPORTED_FORMAT, ERR_UNSUPPORTED_PASS_THROUGH_VALUE, ERR_UNSUPPORTED_SPLIT_USDZ, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_WRITER_SIZE_NOT_WRITABLE, ERR_ZIP_CRYPTO_LAST_MOD_DATE, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, VERSION, WARNING_APPENDED_DATA, WARNING_CLAMPED_LAST_MODIFICATION_DATE, WARNING_COMPRESSED_PATCHED_DATA, WARNING_COMPRESSION_UNAVAILABLE, WARNING_DUPLICATE_FILENAME, WARNING_MALFORMED_EXTRA_FIELD, WARNING_MISMATCHED_CENTRAL_DIRECTORY_OFFSET, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG, WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES, WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY, WARNING_MISSING_ZIP64_EXTRA_FIELD, WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY, WARNING_PREPENDED_CENTRAL_DIRECTORY, WARNING_PREPENDED_DATA, WARNING_TRAILING_CENTRAL_DIRECTORY_DATA, WARNING_UNKNOWN_VERSION, WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA, WARNING_UNSORTED_CENTRAL_DIRECTORY, WARNING_WRAPPED_ENTRIES_COUNT, Writer, ZipDirectoryEntry, ZipEntry, ZipFS, ZipFileEntry, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, fs, getMimeType, getRegisteredCodecs, getSupportedCompressionMethods, isZipFile, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
|