@zip.js/zip.js 2.8.55 → 2.8.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.
- package/deno.json +1 -1
- package/dist/zip-core-external.js +90 -52
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +90 -51
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +102 -60
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +101 -59
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +102 -60
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +102 -59
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +102 -59
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +90 -51
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +90 -51
- package/dist/zip-native.min.js +1 -1
- package/dist/zip.js +90 -51
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +102 -59
- package/index-native.min.js +1 -1
- package/index.cjs +102 -59
- package/index.d.cts +18 -1
- package/index.d.ts +18 -1
- package/index.min.js +1 -1
- package/lib/core/options.js +14 -0
- package/lib/core/zip-fs.js +1 -1
- package/lib/core/zip-reader.js +19 -5
- package/lib/core/zip-writer.js +73 -55
- package/lib/zip-core-reader.js +1 -0
- package/package.json +1 -1
package/dist/zip-fs-external.js
CHANGED
|
@@ -226,6 +226,18 @@ function checkPasswordOption(password, rawPassword) {
|
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
+
function checkInteger(value, maxValue, errorMessage) {
|
|
230
|
+
if (!Number.isInteger(value) || value < 0 || value > maxValue) {
|
|
231
|
+
throw new Error(errorMessage);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function checkIntegerOption(value, maxValue, errorMessage) {
|
|
236
|
+
if (value !== UNDEFINED_VALUE) {
|
|
237
|
+
checkInteger(value, maxValue, errorMessage);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
229
241
|
function toNumber(value) {
|
|
230
242
|
return typeof value == STRING_TYPE && value.trim() ? Number(value) : value;
|
|
231
243
|
}
|
|
@@ -4746,6 +4758,7 @@ const ERR_UNSAFE_FILENAME = "Unsafe filename";
|
|
|
4746
4758
|
const ERR_INVALID_STRICTNESS = "Invalid strictness (must be 'strict', 'balanced' or 'tolerant')";
|
|
4747
4759
|
const ERR_INVALID_FILENAME_VALIDATION = "Invalid filenameValidation (must be 'strict', 'balanced' or 'tolerant')";
|
|
4748
4760
|
const ERR_INVALID_MAX_APPENDED_DATA_SIZE = "Invalid maxAppendedDataSize (must be a number greater than or equal to 0)";
|
|
4761
|
+
const ERR_UNSUPPORTED_UINT64 = "64-bit value exceeds Number.MAX_SAFE_INTEGER";
|
|
4749
4762
|
const DRIVE_LETTER_REGEXP = /^[a-zA-Z]:/;
|
|
4750
4763
|
const CHARSET_UTF8 = "utf-8";
|
|
4751
4764
|
const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
|
|
@@ -4768,6 +4781,7 @@ const ZIP64_EXTRACTION = {
|
|
|
4768
4781
|
bytes: 8
|
|
4769
4782
|
}
|
|
4770
4783
|
};
|
|
4784
|
+
const MAX_SAFE_UINT64 = BigInt(Number.MAX_SAFE_INTEGER);
|
|
4771
4785
|
const MAX_END_OF_CENTRAL_DIR_PROBES = 64;
|
|
4772
4786
|
const MAX_DEFLATE_EXPANSION_RATIO = 1032;
|
|
4773
4787
|
const CENTRAL_DIRECTORY_UNREACHABLE = 0;
|
|
@@ -4863,7 +4877,7 @@ class ZipReader {
|
|
|
4863
4877
|
zip64EndOfDirectoryVersion2 = getBigUint64(endOfDirectoryView, 4) > ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12;
|
|
4864
4878
|
if (zip64EndOfDirectoryVersion2) {
|
|
4865
4879
|
const extensibleDataLength = Math.min(
|
|
4866
|
-
|
|
4880
|
+
getBigUint64(endOfDirectoryView, 4) - (ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12),
|
|
4867
4881
|
reader.size - directoryDataOffset - ZIP64_END_OF_CENTRAL_DIR_LENGTH);
|
|
4868
4882
|
if (extensibleDataLength > 0) {
|
|
4869
4883
|
zip64EndOfDirectoryLength += extensibleDataLength;
|
|
@@ -5096,8 +5110,15 @@ class ZipReader {
|
|
|
5096
5110
|
yield entry;
|
|
5097
5111
|
}
|
|
5098
5112
|
let offsetAfterSignature = offset;
|
|
5099
|
-
|
|
5113
|
+
let digitalSignature = readDigitalSignature(directoryArray.subarray(offset)) ||
|
|
5100
5114
|
(decryptedDirectory ? readDigitalSignature(dataAfterEncryptedDirectory) : UNDEFINED_VALUE);
|
|
5115
|
+
if (!digitalSignature && !decryptedDirectory) {
|
|
5116
|
+
const signatureRecordOffset = directoryDataOffset + offset;
|
|
5117
|
+
const signatureRecordLength = Math.min(centralDirectoryEndOffset - signatureRecordOffset, 6 + MAX_16_BITS);
|
|
5118
|
+
if (signatureRecordLength >= 6) {
|
|
5119
|
+
digitalSignature = readDigitalSignature(await readUint8Array(reader, signatureRecordOffset, signatureRecordLength));
|
|
5120
|
+
}
|
|
5121
|
+
}
|
|
5101
5122
|
if (digitalSignature) {
|
|
5102
5123
|
zipReader.digitalSignature = digitalSignature;
|
|
5103
5124
|
offsetAfterSignature = offset + 6 + digitalSignature.length;
|
|
@@ -5437,8 +5458,8 @@ function getDirectoryEncryptionInfo(rawExtensibleData) {
|
|
|
5437
5458
|
const hashDataLength = getUint16$1(extensibleDataView, 26);
|
|
5438
5459
|
Object.assign(directoryEncryptionInfo, {
|
|
5439
5460
|
compressionMethod: getUint16$1(extensibleDataView, 0),
|
|
5440
|
-
compressedSize:
|
|
5441
|
-
uncompressedSize:
|
|
5461
|
+
compressedSize: getBigUint64(extensibleDataView, 2),
|
|
5462
|
+
uncompressedSize: getBigUint64(extensibleDataView, 10),
|
|
5442
5463
|
encryptionAlgorithm: getUint16$1(extensibleDataView, 18),
|
|
5443
5464
|
bitLength: getUint16$1(extensibleDataView, 20),
|
|
5444
5465
|
flags: getUint16$1(extensibleDataView, 22),
|
|
@@ -6073,7 +6094,11 @@ function getUint32$1(view, offset) {
|
|
|
6073
6094
|
}
|
|
6074
6095
|
|
|
6075
6096
|
function getBigUint64(view, offset) {
|
|
6076
|
-
|
|
6097
|
+
const value = view.getBigUint64(offset, true);
|
|
6098
|
+
if (value > MAX_SAFE_UINT64) {
|
|
6099
|
+
throw new Error(ERR_UNSUPPORTED_UINT64);
|
|
6100
|
+
}
|
|
6101
|
+
return Number(value);
|
|
6077
6102
|
}
|
|
6078
6103
|
|
|
6079
6104
|
var zipReader = /*#__PURE__*/Object.freeze({
|
|
@@ -6102,6 +6127,7 @@ var zipReader = /*#__PURE__*/Object.freeze({
|
|
|
6102
6127
|
ERR_UNSAFE_FILENAME: ERR_UNSAFE_FILENAME,
|
|
6103
6128
|
ERR_UNSUPPORTED_COMPRESSION: ERR_UNSUPPORTED_COMPRESSION$1,
|
|
6104
6129
|
ERR_UNSUPPORTED_ENCRYPTION: ERR_UNSUPPORTED_ENCRYPTION,
|
|
6130
|
+
ERR_UNSUPPORTED_UINT64: ERR_UNSUPPORTED_UINT64,
|
|
6105
6131
|
ERR_WORKER_STARTUP_TIMEOUT: ERR_WORKER_STARTUP_TIMEOUT,
|
|
6106
6132
|
ZipReader: ZipReader,
|
|
6107
6133
|
ZipReaderStream: ZipReaderStream
|
|
@@ -6174,6 +6200,8 @@ const ERR_INVALID_SIGNATURE_DATA = "Signature data exceeds 64KB";
|
|
|
6174
6200
|
|
|
6175
6201
|
const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
|
|
6176
6202
|
const EXTRAFIELD_OFFSET_AES_VENDOR_VERSION = 4;
|
|
6203
|
+
const EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD = 9;
|
|
6204
|
+
const EXTRAFIELD_USDZ_MAX_LENGTH = 67;
|
|
6177
6205
|
const VENDOR_VERSION_AE_1 = 1;
|
|
6178
6206
|
const INFOZIP_EXTRA_FIELD_TYPE$1 = "infozip";
|
|
6179
6207
|
const UNIX_EXTRA_FIELD_TYPE = "unix";
|
|
@@ -6220,16 +6248,14 @@ class ZipWriter {
|
|
|
6220
6248
|
await zipReader$1.close();
|
|
6221
6249
|
await initStream(this.writer);
|
|
6222
6250
|
const { directoryOffset } = zipReader$1;
|
|
6223
|
-
let splitZipSignatureLength = 0;
|
|
6224
6251
|
if (this.addSplitZipSignature) {
|
|
6225
6252
|
delete this.addSplitZipSignature;
|
|
6226
6253
|
if (!await startsWithSplitZipSignature(reader)) {
|
|
6227
6254
|
await writeData(this.writer, getSplitZipSignatureArray());
|
|
6228
|
-
|
|
6229
|
-
this.offset += splitZipSignatureLength;
|
|
6255
|
+
this.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
|
|
6230
6256
|
}
|
|
6231
6257
|
}
|
|
6232
|
-
const entryPositions = await copyZipData(this, reader, entries, directoryOffset
|
|
6258
|
+
const entryPositions = await copyZipData(this, reader, entries, directoryOffset);
|
|
6233
6259
|
this.filenames = new Set(entries.map(entry => entry.filename));
|
|
6234
6260
|
this.fileEntries = new Map(entries.map(entry => {
|
|
6235
6261
|
const {
|
|
@@ -6242,7 +6268,7 @@ class ZipWriter {
|
|
|
6242
6268
|
encrypted,
|
|
6243
6269
|
uncompressedSize,
|
|
6244
6270
|
compressedSize,
|
|
6245
|
-
|
|
6271
|
+
extraFieldZip64
|
|
6246
6272
|
} = entry;
|
|
6247
6273
|
let {
|
|
6248
6274
|
compressionMethod,
|
|
@@ -6259,13 +6285,13 @@ class ZipWriter {
|
|
|
6259
6285
|
rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || EMPTY_UINT8_ARRAY;
|
|
6260
6286
|
rawExtraFieldNTFS = rawExtraFieldNTFS || EMPTY_UINT8_ARRAY;
|
|
6261
6287
|
rawExtraFieldUnix = rawExtraFieldUnix || EMPTY_UINT8_ARRAY;
|
|
6262
|
-
rawExtraField = rawExtraField || EMPTY_UINT8_ARRAY;
|
|
6288
|
+
rawExtraField = removeExtraFieldZip64(rawExtraField || EMPTY_UINT8_ARRAY);
|
|
6263
6289
|
if (entry.extraFieldAES) {
|
|
6264
6290
|
compressionMethod = COMPRESSION_METHOD_AES;
|
|
6265
6291
|
}
|
|
6266
6292
|
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
|
|
6267
|
-
const zip64UncompressedSize =
|
|
6268
|
-
const zip64CompressedSize =
|
|
6293
|
+
const zip64UncompressedSize = Boolean(extraFieldZip64) && extraFieldZip64.uncompressedSize !== UNDEFINED_VALUE;
|
|
6294
|
+
const zip64CompressedSize = Boolean(extraFieldZip64) && extraFieldZip64.compressedSize !== UNDEFINED_VALUE;
|
|
6269
6295
|
const bitFlagValue = (getBitFlag(level, languageEncodingFlag, dataDescriptor, encrypted, compressionMethod) & ~BITFLAG_LEVEL) | (level << 1);
|
|
6270
6296
|
const {
|
|
6271
6297
|
headerArray,
|
|
@@ -6471,7 +6497,8 @@ async function addFile(zipWriter, name, reader, options) {
|
|
|
6471
6497
|
signature: options[PROPERTY_NAME_SIGNATURE],
|
|
6472
6498
|
crc32: options.crc32 === UNDEFINED_VALUE ? options[PROPERTY_NAME_SIGNATURE] : options.crc32,
|
|
6473
6499
|
offset: zipWriter.offset - diskOffset,
|
|
6474
|
-
diskNumberStart: diskNumber
|
|
6500
|
+
diskNumberStart: diskNumber,
|
|
6501
|
+
[OPTION_USDZ]: zipWriter.options[OPTION_USDZ]
|
|
6475
6502
|
});
|
|
6476
6503
|
const headerInfo = getHeaderInfo(options);
|
|
6477
6504
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
@@ -6503,15 +6530,9 @@ function resolveAttributes(zipWriter, name, options) {
|
|
|
6503
6530
|
let setuid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETUID);
|
|
6504
6531
|
let setgid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETGID);
|
|
6505
6532
|
let sticky = getOptionValue(zipWriter, options, PROPERTY_NAME_STICKY);
|
|
6506
|
-
|
|
6507
|
-
|
|
6508
|
-
|
|
6509
|
-
if (gid !== UNDEFINED_VALUE && (!Number.isInteger(gid) || gid < 0 || gid > MAX_32_BITS)) {
|
|
6510
|
-
throw new Error(ERR_INVALID_GID);
|
|
6511
|
-
}
|
|
6512
|
-
if (unixMode !== UNDEFINED_VALUE && (!Number.isInteger(unixMode) || unixMode < 0 || unixMode > MAX_16_BITS)) {
|
|
6513
|
-
throw new Error(ERR_INVALID_UNIX_MODE);
|
|
6514
|
-
}
|
|
6533
|
+
checkIntegerOption(uid, MAX_32_BITS, ERR_INVALID_UID);
|
|
6534
|
+
checkIntegerOption(gid, MAX_32_BITS, ERR_INVALID_GID);
|
|
6535
|
+
checkIntegerOption(unixMode, MAX_16_BITS, ERR_INVALID_UNIX_MODE);
|
|
6515
6536
|
if (unixExtraFieldType !== UNDEFINED_VALUE && unixExtraFieldType !== INFOZIP_EXTRA_FIELD_TYPE$1 && unixExtraFieldType !== UNIX_EXTRA_FIELD_TYPE) {
|
|
6516
6537
|
throw new Error(ERR_INVALID_UNIX_EXTRA_FIELD_TYPE);
|
|
6517
6538
|
}
|
|
@@ -6533,9 +6554,7 @@ function resolveAttributes(zipWriter, name, options) {
|
|
|
6533
6554
|
msDosCompatible = true;
|
|
6534
6555
|
versionMadeBy = (versionMadeBy & MAX_8_BITS);
|
|
6535
6556
|
}
|
|
6536
|
-
|
|
6537
|
-
throw new Error(ERR_INVALID_MSDOS_ATTRIBUTES);
|
|
6538
|
-
}
|
|
6557
|
+
checkIntegerOption(msdosAttributesRaw, MAX_8_BITS, ERR_INVALID_MSDOS_ATTRIBUTES);
|
|
6539
6558
|
if (msdosAttributes && (typeof msdosAttributes !== OBJECT_TYPE || Array.isArray(msdosAttributes))) {
|
|
6540
6559
|
throw new Error(ERR_INVALID_MSDOS_DATA);
|
|
6541
6560
|
}
|
|
@@ -6675,9 +6694,7 @@ function resolveMetadata(zipWriter, name, options) {
|
|
|
6675
6694
|
throw new Error(ERR_UNSUPPORTED_COMPRESSION);
|
|
6676
6695
|
}
|
|
6677
6696
|
let level = getNumberOptionValue(zipWriter, options, OPTION_LEVEL);
|
|
6678
|
-
|
|
6679
|
-
throw new Error(ERR_INVALID_LEVEL);
|
|
6680
|
-
}
|
|
6697
|
+
checkIntegerOption(level, MAX_LEVEL, ERR_INVALID_LEVEL);
|
|
6681
6698
|
if (zipWriter.options[OPTION_USDZ]) {
|
|
6682
6699
|
if (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) {
|
|
6683
6700
|
throw new Error(ERR_UNSUPPORTED_ENCRYPTION_USDZ);
|
|
@@ -6755,9 +6772,7 @@ function serializeExtraField(extraField) {
|
|
|
6755
6772
|
let extraFieldSize = 0;
|
|
6756
6773
|
let offset = 0;
|
|
6757
6774
|
extraField.forEach((data, type) => {
|
|
6758
|
-
|
|
6759
|
-
throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
|
|
6760
|
-
}
|
|
6775
|
+
checkInteger(type, MAX_16_BITS, ERR_INVALID_EXTRAFIELD_TYPE);
|
|
6761
6776
|
if (!(data instanceof Uint8Array)) {
|
|
6762
6777
|
throw new Error(ERR_INVALID_EXTRAFIELD_DATA_TYPE);
|
|
6763
6778
|
}
|
|
@@ -6832,6 +6847,10 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
|
|
|
6832
6847
|
maximumCompressedSize = contentSize === UNDEFINED_VALUE ? getMaximumCompressedSize(uncompressedSize) + encryptionOverhead : contentSize;
|
|
6833
6848
|
}
|
|
6834
6849
|
}
|
|
6850
|
+
const emptyEntry = !encryptedEntry && (!hasContent || (contentSize === 0 && !passThrough)) && !isCompressed(compressionMethod, level);
|
|
6851
|
+
if (emptyEntry && !zipCrypto && getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR) === UNDEFINED_VALUE) {
|
|
6852
|
+
dataDescriptor = false;
|
|
6853
|
+
}
|
|
6835
6854
|
const zip64UncompressedSize = zip64Enabled || uncompressedSize >= MAX_32_BITS;
|
|
6836
6855
|
const zip64CompressedSize = zip64Enabled || maximumCompressedSize >= MAX_32_BITS;
|
|
6837
6856
|
if (zip64UncompressedSize || zip64CompressedSize) {
|
|
@@ -6846,6 +6865,7 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
|
|
|
6846
6865
|
maximumCompressedSize,
|
|
6847
6866
|
resolvedOptions: {
|
|
6848
6867
|
dataDescriptor,
|
|
6868
|
+
emptyEntry,
|
|
6849
6869
|
zip64,
|
|
6850
6870
|
zip64UncompressedSize,
|
|
6851
6871
|
zip64CompressedSize,
|
|
@@ -6872,7 +6892,9 @@ async function getEntriesSize(writerOptions, entries, writeOrderGuaranteed, comm
|
|
|
6872
6892
|
const usdz = writerOptions[OPTION_USDZ];
|
|
6873
6893
|
const files = new Map();
|
|
6874
6894
|
let layoutDependsOnWriteOrder = Boolean(usdz);
|
|
6875
|
-
|
|
6895
|
+
const initialOffset = writerOptions[OPTION_OFFSET] === UNDEFINED_VALUE ? 0 : writerOptions[OPTION_OFFSET];
|
|
6896
|
+
let offset = initialOffset;
|
|
6897
|
+
let minimumEntrySize = INFINITY_VALUE;
|
|
6876
6898
|
for (const entry of entries) {
|
|
6877
6899
|
let { name } = entry;
|
|
6878
6900
|
const { size } = entry;
|
|
@@ -6896,7 +6918,7 @@ async function getEntriesSize(writerOptions, entries, writeOrderGuaranteed, comm
|
|
|
6896
6918
|
if (hasContent && !metadata.passThrough && isCompressed(sizes.compressionMethod, sizes.level)) {
|
|
6897
6919
|
throw new Error(ERR_UNDETERMINED_SIZE);
|
|
6898
6920
|
}
|
|
6899
|
-
const entryOptions = Object.assign({}, options, attributesInfo.resolvedOptions, metadata, sizes);
|
|
6921
|
+
const entryOptions = Object.assign({}, options, attributesInfo.resolvedOptions, metadata, sizes, { [OPTION_USDZ]: usdz });
|
|
6900
6922
|
const headerInfo = getHeaderInfo(entryOptions);
|
|
6901
6923
|
const dataDescriptorInfo = getDataDescriptorInfo(entryOptions);
|
|
6902
6924
|
const entryInfo = {
|
|
@@ -6907,15 +6929,17 @@ async function getEntriesSize(writerOptions, entries, writeOrderGuaranteed, comm
|
|
|
6907
6929
|
appendExtraFieldUSDZ(entryInfo, offset);
|
|
6908
6930
|
}
|
|
6909
6931
|
const compressedSize = hasContent ? maximumCompressedSize : 0;
|
|
6910
|
-
if (offset >= MAX_32_BITS) {
|
|
6911
|
-
layoutDependsOnWriteOrder = true;
|
|
6912
|
-
}
|
|
6913
6932
|
files.set(name, Object.assign({}, entryOptions, headerInfo, {
|
|
6914
6933
|
offset,
|
|
6915
6934
|
diskNumberStart: 0,
|
|
6916
6935
|
compressedSize
|
|
6917
6936
|
}));
|
|
6918
|
-
|
|
6937
|
+
const entrySize = entryInfo.metadataSize + compressedSize;
|
|
6938
|
+
minimumEntrySize = Math.min(minimumEntrySize, entrySize);
|
|
6939
|
+
offset += entrySize;
|
|
6940
|
+
}
|
|
6941
|
+
if (files.size && offset - minimumEntrySize >= MAX_32_BITS) {
|
|
6942
|
+
layoutDependsOnWriteOrder = true;
|
|
6919
6943
|
}
|
|
6920
6944
|
if (layoutDependsOnWriteOrder && !writeOrderGuaranteed) {
|
|
6921
6945
|
throw new Error(ERR_UNDETERMINED_SIZE);
|
|
@@ -6929,7 +6953,7 @@ async function getEntriesSize(writerOptions, entries, writeOrderGuaranteed, comm
|
|
|
6929
6953
|
zip64 = true;
|
|
6930
6954
|
}
|
|
6931
6955
|
}
|
|
6932
|
-
return offset + directoryDataLength + commentLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH);
|
|
6956
|
+
return offset - initialOffset + directoryDataLength + commentLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH);
|
|
6933
6957
|
}
|
|
6934
6958
|
|
|
6935
6959
|
async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
@@ -6940,6 +6964,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
6940
6964
|
const {
|
|
6941
6965
|
keepOrder,
|
|
6942
6966
|
dataDescriptor,
|
|
6967
|
+
emptyEntry,
|
|
6943
6968
|
signal
|
|
6944
6969
|
} = options;
|
|
6945
6970
|
const {
|
|
@@ -6964,7 +6989,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
6964
6989
|
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
|
|
6965
6990
|
requestLockCurrentFileEntry();
|
|
6966
6991
|
}
|
|
6967
|
-
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || !dataDescriptor) {
|
|
6992
|
+
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
|
|
6968
6993
|
bufferedWrite = true;
|
|
6969
6994
|
zipWriter.bufferedWrites++;
|
|
6970
6995
|
if (options.createTempStream) {
|
|
@@ -7386,8 +7411,8 @@ function getHeaderInfo(options) {
|
|
|
7386
7411
|
try {
|
|
7387
7412
|
const { uid, gid, unixExtraFieldType } = options;
|
|
7388
7413
|
if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE$1 && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
|
|
7389
|
-
const uidBytes = packUnixId(uid);
|
|
7390
|
-
const gidBytes = packUnixId(gid);
|
|
7414
|
+
const uidBytes = packUnixId(uid === UNDEFINED_VALUE ? 0 : uid);
|
|
7415
|
+
const gidBytes = packUnixId(gid === UNDEFINED_VALUE ? 0 : gid);
|
|
7391
7416
|
const payloadLength = 3 + uidBytes.length + gidBytes.length;
|
|
7392
7417
|
const extraFieldUnix = createRecordWriter(4 + payloadLength);
|
|
7393
7418
|
extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_INFOZIP);
|
|
@@ -7426,12 +7451,13 @@ function getHeaderInfo(options) {
|
|
|
7426
7451
|
if (passThrough && crc32 !== UNDEFINED_VALUE) {
|
|
7427
7452
|
rawExtraFieldAES[EXTRAFIELD_OFFSET_AES_VENDOR_VERSION] = VENDOR_VERSION_AE_1;
|
|
7428
7453
|
}
|
|
7429
|
-
rawExtraFieldAES
|
|
7454
|
+
setUint16(getDataView(rawExtraFieldAES), EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD, compressionMethod);
|
|
7430
7455
|
compressionMethod = COMPRESSION_METHOD_AES;
|
|
7431
7456
|
}
|
|
7432
7457
|
const localExtraFieldZip64Length = writeLocalExtraFieldZip64 ? getLength(rawLocalExtraFieldZip64) : 0;
|
|
7433
7458
|
const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField, rawLocalExtraField);
|
|
7434
|
-
|
|
7459
|
+
const maximumUsdzExtraFieldLength = options[OPTION_USDZ] ? EXTRAFIELD_USDZ_MAX_LENGTH : 0;
|
|
7460
|
+
if (extraFieldLength + maximumUsdzExtraFieldLength > MAX_16_BITS) {
|
|
7435
7461
|
throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
|
|
7436
7462
|
}
|
|
7437
7463
|
const dosLastModDate = new Date(Math.ceil(Math.floor(lastModDate.getTime() / 1000) / 2) * 2000);
|
|
@@ -7517,18 +7543,14 @@ function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
|
|
|
7517
7543
|
}
|
|
7518
7544
|
|
|
7519
7545
|
function packUnixId(id) {
|
|
7520
|
-
|
|
7521
|
-
|
|
7522
|
-
|
|
7523
|
-
|
|
7524
|
-
|
|
7525
|
-
|
|
7526
|
-
let length = 4;
|
|
7527
|
-
while (length > 1 && dataArray[length - 1] === 0) {
|
|
7528
|
-
length--;
|
|
7529
|
-
}
|
|
7530
|
-
return dataArray.subarray(0, length);
|
|
7546
|
+
const dataArray = new Uint8Array(4);
|
|
7547
|
+
const dataView = getDataView(dataArray);
|
|
7548
|
+
dataView.setUint32(0, id, true);
|
|
7549
|
+
let length = 4;
|
|
7550
|
+
while (length > 1 && dataArray[length - 1] === 0) {
|
|
7551
|
+
length--;
|
|
7531
7552
|
}
|
|
7553
|
+
return dataArray.subarray(0, length);
|
|
7532
7554
|
}
|
|
7533
7555
|
|
|
7534
7556
|
function normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes) {
|
|
@@ -7832,7 +7854,11 @@ async function writeDigitalSignatureRecord(zipWriter, directoryArray, options) {
|
|
|
7832
7854
|
signatureRecord.writeUint32(DIGITAL_SIGNATURE_RECORD_SIGNATURE);
|
|
7833
7855
|
signatureRecord.writeUint16(signatureDataLength);
|
|
7834
7856
|
signatureRecord.writeBytes(signatureData);
|
|
7835
|
-
|
|
7857
|
+
const { writer } = zipWriter;
|
|
7858
|
+
if (exceedsAvailableSize(writer, getLength(signatureRecord.array))) {
|
|
7859
|
+
await writer.closeDisk();
|
|
7860
|
+
}
|
|
7861
|
+
await writeData(writer, signatureRecord.array);
|
|
7836
7862
|
return 6 + signatureDataLength;
|
|
7837
7863
|
}
|
|
7838
7864
|
return 0;
|
|
@@ -7943,7 +7969,22 @@ async function startsWithSplitZipSignature(reader) {
|
|
|
7943
7969
|
return getUint32(getDataView(signatureArray), 0) == SPLIT_ZIP_FILE_SIGNATURE;
|
|
7944
7970
|
}
|
|
7945
7971
|
|
|
7946
|
-
|
|
7972
|
+
function removeExtraFieldZip64(rawExtraField) {
|
|
7973
|
+
const rawExtraFieldView = getDataView(rawExtraField);
|
|
7974
|
+
let offsetExtraField = 0;
|
|
7975
|
+
while (offsetExtraField + 4 <= getLength(rawExtraField)) {
|
|
7976
|
+
const size = 4 + getUint16(rawExtraFieldView, offsetExtraField + 2);
|
|
7977
|
+
if (getUint16(rawExtraFieldView, offsetExtraField) == EXTRAFIELD_TYPE_ZIP64) {
|
|
7978
|
+
return removeExtraFieldZip64(concat(
|
|
7979
|
+
rawExtraField.subarray(0, offsetExtraField),
|
|
7980
|
+
rawExtraField.subarray(Math.min(offsetExtraField + size, getLength(rawExtraField)))));
|
|
7981
|
+
}
|
|
7982
|
+
offsetExtraField += size;
|
|
7983
|
+
}
|
|
7984
|
+
return rawExtraField;
|
|
7985
|
+
}
|
|
7986
|
+
|
|
7987
|
+
async function copyZipData(zipWriter, reader, entries, directoryOffset) {
|
|
7947
7988
|
const { writer } = zipWriter;
|
|
7948
7989
|
const entryPositions = new Map();
|
|
7949
7990
|
if (writer.closeDisk) {
|
|
@@ -7964,9 +8005,10 @@ async function copyZipData(zipWriter, reader, entries, directoryOffset, splitZip
|
|
|
7964
8005
|
}
|
|
7965
8006
|
await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
|
|
7966
8007
|
} else {
|
|
8008
|
+
const baseOffset = zipWriter.offset;
|
|
7967
8009
|
await copyData(zipWriter, reader, 0, directoryOffset);
|
|
7968
8010
|
entries.forEach(entry => entryPositions.set(entry, {
|
|
7969
|
-
offset:
|
|
8011
|
+
offset: baseOffset + getSourceOffset(reader, entry),
|
|
7970
8012
|
diskNumberStart: 0
|
|
7971
8013
|
}));
|
|
7972
8014
|
}
|
|
@@ -9846,7 +9888,7 @@ function keepsContentType(writer, data) {
|
|
|
9846
9888
|
} else if (writer.constructor == BlobWriter) {
|
|
9847
9889
|
return data.type == contentType;
|
|
9848
9890
|
} else if (writer.constructor == Data64URIWriter) {
|
|
9849
|
-
return data.startsWith(
|
|
9891
|
+
return data.startsWith("data:" + (contentType || "") + ";base64,");
|
|
9850
9892
|
} else {
|
|
9851
9893
|
return true;
|
|
9852
9894
|
}
|
|
@@ -10414,4 +10456,4 @@ function decodeMimeTypes(data) {
|
|
|
10414
10456
|
return mimeTypes;
|
|
10415
10457
|
}
|
|
10416
10458
|
|
|
10417
|
-
export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_ABORTED, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_DUPLICATED_NAME, 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_INVALID_AUTHENTICATION_CODE, 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_ENCRYPTION_STRENGTH, 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_PASSWORD_TYPE, ERR_INVALID_PASS_THROUGH, ERR_INVALID_READER_OPTIONS, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE, 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_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_READABLE_CONSUMED, ERR_RESERVED_COMPRESSION_METHOD, ERR_SPLIT_ZIP_FILE, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION$1 as 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_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, Writer, ZipDirectoryEntry, ZipEntry, ZipFS, ZipFileEntry, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, fs, getMimeType, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
|
|
10459
|
+
export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_ABORTED, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_DUPLICATED_NAME, 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_INVALID_AUTHENTICATION_CODE, 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_ENCRYPTION_STRENGTH, 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_PASSWORD_TYPE, ERR_INVALID_PASS_THROUGH, ERR_INVALID_READER_OPTIONS, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE, 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_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_READABLE_CONSUMED, ERR_RESERVED_COMPRESSION_METHOD, ERR_SPLIT_ZIP_FILE, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION$1 as 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_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, Writer, ZipDirectoryEntry, ZipEntry, ZipFS, ZipFileEntry, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, fs, getMimeType, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
|