@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/deno.json
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
|
}
|
|
@@ -4726,6 +4738,7 @@ const ERR_UNSAFE_FILENAME = "Unsafe filename";
|
|
|
4726
4738
|
const ERR_INVALID_STRICTNESS = "Invalid strictness (must be 'strict', 'balanced' or 'tolerant')";
|
|
4727
4739
|
const ERR_INVALID_FILENAME_VALIDATION = "Invalid filenameValidation (must be 'strict', 'balanced' or 'tolerant')";
|
|
4728
4740
|
const ERR_INVALID_MAX_APPENDED_DATA_SIZE = "Invalid maxAppendedDataSize (must be a number greater than or equal to 0)";
|
|
4741
|
+
const ERR_UNSUPPORTED_UINT64 = "64-bit value exceeds Number.MAX_SAFE_INTEGER";
|
|
4729
4742
|
const DRIVE_LETTER_REGEXP = /^[a-zA-Z]:/;
|
|
4730
4743
|
const CHARSET_UTF8 = "utf-8";
|
|
4731
4744
|
const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
|
|
@@ -4748,6 +4761,7 @@ const ZIP64_EXTRACTION = {
|
|
|
4748
4761
|
bytes: 8
|
|
4749
4762
|
}
|
|
4750
4763
|
};
|
|
4764
|
+
const MAX_SAFE_UINT64 = BigInt(Number.MAX_SAFE_INTEGER);
|
|
4751
4765
|
const MAX_END_OF_CENTRAL_DIR_PROBES = 64;
|
|
4752
4766
|
const MAX_DEFLATE_EXPANSION_RATIO = 1032;
|
|
4753
4767
|
const CENTRAL_DIRECTORY_UNREACHABLE = 0;
|
|
@@ -4843,7 +4857,7 @@ class ZipReader {
|
|
|
4843
4857
|
zip64EndOfDirectoryVersion2 = getBigUint64(endOfDirectoryView, 4) > ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12;
|
|
4844
4858
|
if (zip64EndOfDirectoryVersion2) {
|
|
4845
4859
|
const extensibleDataLength = Math.min(
|
|
4846
|
-
|
|
4860
|
+
getBigUint64(endOfDirectoryView, 4) - (ZIP64_END_OF_CENTRAL_DIR_LENGTH - 12),
|
|
4847
4861
|
reader.size - directoryDataOffset - ZIP64_END_OF_CENTRAL_DIR_LENGTH);
|
|
4848
4862
|
if (extensibleDataLength > 0) {
|
|
4849
4863
|
zip64EndOfDirectoryLength += extensibleDataLength;
|
|
@@ -5076,8 +5090,15 @@ class ZipReader {
|
|
|
5076
5090
|
yield entry;
|
|
5077
5091
|
}
|
|
5078
5092
|
let offsetAfterSignature = offset;
|
|
5079
|
-
|
|
5093
|
+
let digitalSignature = readDigitalSignature(directoryArray.subarray(offset)) ||
|
|
5080
5094
|
(decryptedDirectory ? readDigitalSignature(dataAfterEncryptedDirectory) : UNDEFINED_VALUE);
|
|
5095
|
+
if (!digitalSignature && !decryptedDirectory) {
|
|
5096
|
+
const signatureRecordOffset = directoryDataOffset + offset;
|
|
5097
|
+
const signatureRecordLength = Math.min(centralDirectoryEndOffset - signatureRecordOffset, 6 + MAX_16_BITS);
|
|
5098
|
+
if (signatureRecordLength >= 6) {
|
|
5099
|
+
digitalSignature = readDigitalSignature(await readUint8Array(reader, signatureRecordOffset, signatureRecordLength));
|
|
5100
|
+
}
|
|
5101
|
+
}
|
|
5081
5102
|
if (digitalSignature) {
|
|
5082
5103
|
zipReader.digitalSignature = digitalSignature;
|
|
5083
5104
|
offsetAfterSignature = offset + 6 + digitalSignature.length;
|
|
@@ -5417,8 +5438,8 @@ function getDirectoryEncryptionInfo(rawExtensibleData) {
|
|
|
5417
5438
|
const hashDataLength = getUint16$1(extensibleDataView, 26);
|
|
5418
5439
|
Object.assign(directoryEncryptionInfo, {
|
|
5419
5440
|
compressionMethod: getUint16$1(extensibleDataView, 0),
|
|
5420
|
-
compressedSize:
|
|
5421
|
-
uncompressedSize:
|
|
5441
|
+
compressedSize: getBigUint64(extensibleDataView, 2),
|
|
5442
|
+
uncompressedSize: getBigUint64(extensibleDataView, 10),
|
|
5422
5443
|
encryptionAlgorithm: getUint16$1(extensibleDataView, 18),
|
|
5423
5444
|
bitLength: getUint16$1(extensibleDataView, 20),
|
|
5424
5445
|
flags: getUint16$1(extensibleDataView, 22),
|
|
@@ -6053,7 +6074,11 @@ function getUint32$1(view, offset) {
|
|
|
6053
6074
|
}
|
|
6054
6075
|
|
|
6055
6076
|
function getBigUint64(view, offset) {
|
|
6056
|
-
|
|
6077
|
+
const value = view.getBigUint64(offset, true);
|
|
6078
|
+
if (value > MAX_SAFE_UINT64) {
|
|
6079
|
+
throw new Error(ERR_UNSUPPORTED_UINT64);
|
|
6080
|
+
}
|
|
6081
|
+
return Number(value);
|
|
6057
6082
|
}
|
|
6058
6083
|
|
|
6059
6084
|
var zipReader = /*#__PURE__*/Object.freeze({
|
|
@@ -6082,6 +6107,7 @@ var zipReader = /*#__PURE__*/Object.freeze({
|
|
|
6082
6107
|
ERR_UNSAFE_FILENAME: ERR_UNSAFE_FILENAME,
|
|
6083
6108
|
ERR_UNSUPPORTED_COMPRESSION: ERR_UNSUPPORTED_COMPRESSION$1,
|
|
6084
6109
|
ERR_UNSUPPORTED_ENCRYPTION: ERR_UNSUPPORTED_ENCRYPTION,
|
|
6110
|
+
ERR_UNSUPPORTED_UINT64: ERR_UNSUPPORTED_UINT64,
|
|
6085
6111
|
ERR_WORKER_STARTUP_TIMEOUT: ERR_WORKER_STARTUP_TIMEOUT,
|
|
6086
6112
|
ZipReader: ZipReader,
|
|
6087
6113
|
ZipReaderStream: ZipReaderStream
|
|
@@ -6154,6 +6180,8 @@ const ERR_INVALID_SIGNATURE_DATA = "Signature data exceeds 64KB";
|
|
|
6154
6180
|
|
|
6155
6181
|
const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
|
|
6156
6182
|
const EXTRAFIELD_OFFSET_AES_VENDOR_VERSION = 4;
|
|
6183
|
+
const EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD = 9;
|
|
6184
|
+
const EXTRAFIELD_USDZ_MAX_LENGTH = 67;
|
|
6157
6185
|
const VENDOR_VERSION_AE_1 = 1;
|
|
6158
6186
|
const INFOZIP_EXTRA_FIELD_TYPE = "infozip";
|
|
6159
6187
|
const UNIX_EXTRA_FIELD_TYPE = "unix";
|
|
@@ -6200,16 +6228,14 @@ class ZipWriter {
|
|
|
6200
6228
|
await zipReader$1.close();
|
|
6201
6229
|
await initStream(this.writer);
|
|
6202
6230
|
const { directoryOffset } = zipReader$1;
|
|
6203
|
-
let splitZipSignatureLength = 0;
|
|
6204
6231
|
if (this.addSplitZipSignature) {
|
|
6205
6232
|
delete this.addSplitZipSignature;
|
|
6206
6233
|
if (!await startsWithSplitZipSignature(reader)) {
|
|
6207
6234
|
await writeData(this.writer, getSplitZipSignatureArray());
|
|
6208
|
-
|
|
6209
|
-
this.offset += splitZipSignatureLength;
|
|
6235
|
+
this.offset += SPLIT_ZIP_FILE_SIGNATURE_LENGTH;
|
|
6210
6236
|
}
|
|
6211
6237
|
}
|
|
6212
|
-
const entryPositions = await copyZipData(this, reader, entries, directoryOffset
|
|
6238
|
+
const entryPositions = await copyZipData(this, reader, entries, directoryOffset);
|
|
6213
6239
|
this.filenames = new Set(entries.map(entry => entry.filename));
|
|
6214
6240
|
this.fileEntries = new Map(entries.map(entry => {
|
|
6215
6241
|
const {
|
|
@@ -6222,7 +6248,7 @@ class ZipWriter {
|
|
|
6222
6248
|
encrypted,
|
|
6223
6249
|
uncompressedSize,
|
|
6224
6250
|
compressedSize,
|
|
6225
|
-
|
|
6251
|
+
extraFieldZip64
|
|
6226
6252
|
} = entry;
|
|
6227
6253
|
let {
|
|
6228
6254
|
compressionMethod,
|
|
@@ -6239,13 +6265,13 @@ class ZipWriter {
|
|
|
6239
6265
|
rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || EMPTY_UINT8_ARRAY;
|
|
6240
6266
|
rawExtraFieldNTFS = rawExtraFieldNTFS || EMPTY_UINT8_ARRAY;
|
|
6241
6267
|
rawExtraFieldUnix = rawExtraFieldUnix || EMPTY_UINT8_ARRAY;
|
|
6242
|
-
rawExtraField = rawExtraField || EMPTY_UINT8_ARRAY;
|
|
6268
|
+
rawExtraField = removeExtraFieldZip64(rawExtraField || EMPTY_UINT8_ARRAY);
|
|
6243
6269
|
if (entry.extraFieldAES) {
|
|
6244
6270
|
compressionMethod = COMPRESSION_METHOD_AES;
|
|
6245
6271
|
}
|
|
6246
6272
|
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
|
|
6247
|
-
const zip64UncompressedSize =
|
|
6248
|
-
const zip64CompressedSize =
|
|
6273
|
+
const zip64UncompressedSize = Boolean(extraFieldZip64) && extraFieldZip64.uncompressedSize !== UNDEFINED_VALUE;
|
|
6274
|
+
const zip64CompressedSize = Boolean(extraFieldZip64) && extraFieldZip64.compressedSize !== UNDEFINED_VALUE;
|
|
6249
6275
|
const bitFlagValue = (getBitFlag(level, languageEncodingFlag, dataDescriptor, encrypted, compressionMethod) & ~BITFLAG_LEVEL) | (level << 1);
|
|
6250
6276
|
const {
|
|
6251
6277
|
headerArray,
|
|
@@ -6451,7 +6477,8 @@ async function addFile(zipWriter, name, reader, options) {
|
|
|
6451
6477
|
signature: options[PROPERTY_NAME_SIGNATURE],
|
|
6452
6478
|
crc32: options.crc32 === UNDEFINED_VALUE ? options[PROPERTY_NAME_SIGNATURE] : options.crc32,
|
|
6453
6479
|
offset: zipWriter.offset - diskOffset,
|
|
6454
|
-
diskNumberStart: diskNumber
|
|
6480
|
+
diskNumberStart: diskNumber,
|
|
6481
|
+
[OPTION_USDZ]: zipWriter.options[OPTION_USDZ]
|
|
6455
6482
|
});
|
|
6456
6483
|
const headerInfo = getHeaderInfo(options);
|
|
6457
6484
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
@@ -6483,15 +6510,9 @@ function resolveAttributes(zipWriter, name, options) {
|
|
|
6483
6510
|
let setuid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETUID);
|
|
6484
6511
|
let setgid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETGID);
|
|
6485
6512
|
let sticky = getOptionValue(zipWriter, options, PROPERTY_NAME_STICKY);
|
|
6486
|
-
|
|
6487
|
-
|
|
6488
|
-
|
|
6489
|
-
if (gid !== UNDEFINED_VALUE && (!Number.isInteger(gid) || gid < 0 || gid > MAX_32_BITS)) {
|
|
6490
|
-
throw new Error(ERR_INVALID_GID);
|
|
6491
|
-
}
|
|
6492
|
-
if (unixMode !== UNDEFINED_VALUE && (!Number.isInteger(unixMode) || unixMode < 0 || unixMode > MAX_16_BITS)) {
|
|
6493
|
-
throw new Error(ERR_INVALID_UNIX_MODE);
|
|
6494
|
-
}
|
|
6513
|
+
checkIntegerOption(uid, MAX_32_BITS, ERR_INVALID_UID);
|
|
6514
|
+
checkIntegerOption(gid, MAX_32_BITS, ERR_INVALID_GID);
|
|
6515
|
+
checkIntegerOption(unixMode, MAX_16_BITS, ERR_INVALID_UNIX_MODE);
|
|
6495
6516
|
if (unixExtraFieldType !== UNDEFINED_VALUE && unixExtraFieldType !== INFOZIP_EXTRA_FIELD_TYPE && unixExtraFieldType !== UNIX_EXTRA_FIELD_TYPE) {
|
|
6496
6517
|
throw new Error(ERR_INVALID_UNIX_EXTRA_FIELD_TYPE);
|
|
6497
6518
|
}
|
|
@@ -6513,9 +6534,7 @@ function resolveAttributes(zipWriter, name, options) {
|
|
|
6513
6534
|
msDosCompatible = true;
|
|
6514
6535
|
versionMadeBy = (versionMadeBy & MAX_8_BITS);
|
|
6515
6536
|
}
|
|
6516
|
-
|
|
6517
|
-
throw new Error(ERR_INVALID_MSDOS_ATTRIBUTES);
|
|
6518
|
-
}
|
|
6537
|
+
checkIntegerOption(msdosAttributesRaw, MAX_8_BITS, ERR_INVALID_MSDOS_ATTRIBUTES);
|
|
6519
6538
|
if (msdosAttributes && (typeof msdosAttributes !== OBJECT_TYPE || Array.isArray(msdosAttributes))) {
|
|
6520
6539
|
throw new Error(ERR_INVALID_MSDOS_DATA);
|
|
6521
6540
|
}
|
|
@@ -6655,9 +6674,7 @@ function resolveMetadata(zipWriter, name, options) {
|
|
|
6655
6674
|
throw new Error(ERR_UNSUPPORTED_COMPRESSION);
|
|
6656
6675
|
}
|
|
6657
6676
|
let level = getNumberOptionValue(zipWriter, options, OPTION_LEVEL);
|
|
6658
|
-
|
|
6659
|
-
throw new Error(ERR_INVALID_LEVEL);
|
|
6660
|
-
}
|
|
6677
|
+
checkIntegerOption(level, MAX_LEVEL, ERR_INVALID_LEVEL);
|
|
6661
6678
|
if (zipWriter.options[OPTION_USDZ]) {
|
|
6662
6679
|
if (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) {
|
|
6663
6680
|
throw new Error(ERR_UNSUPPORTED_ENCRYPTION_USDZ);
|
|
@@ -6735,9 +6752,7 @@ function serializeExtraField(extraField) {
|
|
|
6735
6752
|
let extraFieldSize = 0;
|
|
6736
6753
|
let offset = 0;
|
|
6737
6754
|
extraField.forEach((data, type) => {
|
|
6738
|
-
|
|
6739
|
-
throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
|
|
6740
|
-
}
|
|
6755
|
+
checkInteger(type, MAX_16_BITS, ERR_INVALID_EXTRAFIELD_TYPE);
|
|
6741
6756
|
if (!(data instanceof Uint8Array)) {
|
|
6742
6757
|
throw new Error(ERR_INVALID_EXTRAFIELD_DATA_TYPE);
|
|
6743
6758
|
}
|
|
@@ -6812,6 +6827,10 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
|
|
|
6812
6827
|
maximumCompressedSize = contentSize === UNDEFINED_VALUE ? getMaximumCompressedSize(uncompressedSize) + encryptionOverhead : contentSize;
|
|
6813
6828
|
}
|
|
6814
6829
|
}
|
|
6830
|
+
const emptyEntry = !encryptedEntry && (!hasContent || (contentSize === 0 && !passThrough)) && !isCompressed(compressionMethod, level);
|
|
6831
|
+
if (emptyEntry && !zipCrypto && getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR) === UNDEFINED_VALUE) {
|
|
6832
|
+
dataDescriptor = false;
|
|
6833
|
+
}
|
|
6815
6834
|
const zip64UncompressedSize = zip64Enabled || uncompressedSize >= MAX_32_BITS;
|
|
6816
6835
|
const zip64CompressedSize = zip64Enabled || maximumCompressedSize >= MAX_32_BITS;
|
|
6817
6836
|
if (zip64UncompressedSize || zip64CompressedSize) {
|
|
@@ -6826,6 +6845,7 @@ function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options
|
|
|
6826
6845
|
maximumCompressedSize,
|
|
6827
6846
|
resolvedOptions: {
|
|
6828
6847
|
dataDescriptor,
|
|
6848
|
+
emptyEntry,
|
|
6829
6849
|
zip64,
|
|
6830
6850
|
zip64UncompressedSize,
|
|
6831
6851
|
zip64CompressedSize,
|
|
@@ -6845,6 +6865,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
6845
6865
|
const {
|
|
6846
6866
|
keepOrder,
|
|
6847
6867
|
dataDescriptor,
|
|
6868
|
+
emptyEntry,
|
|
6848
6869
|
signal
|
|
6849
6870
|
} = options;
|
|
6850
6871
|
const {
|
|
@@ -6869,7 +6890,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
6869
6890
|
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
|
|
6870
6891
|
requestLockCurrentFileEntry();
|
|
6871
6892
|
}
|
|
6872
|
-
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || !dataDescriptor) {
|
|
6893
|
+
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
|
|
6873
6894
|
bufferedWrite = true;
|
|
6874
6895
|
zipWriter.bufferedWrites++;
|
|
6875
6896
|
if (options.createTempStream) {
|
|
@@ -7291,8 +7312,8 @@ function getHeaderInfo(options) {
|
|
|
7291
7312
|
try {
|
|
7292
7313
|
const { uid, gid, unixExtraFieldType } = options;
|
|
7293
7314
|
if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
|
|
7294
|
-
const uidBytes = packUnixId(uid);
|
|
7295
|
-
const gidBytes = packUnixId(gid);
|
|
7315
|
+
const uidBytes = packUnixId(uid === UNDEFINED_VALUE ? 0 : uid);
|
|
7316
|
+
const gidBytes = packUnixId(gid === UNDEFINED_VALUE ? 0 : gid);
|
|
7296
7317
|
const payloadLength = 3 + uidBytes.length + gidBytes.length;
|
|
7297
7318
|
const extraFieldUnix = createRecordWriter(4 + payloadLength);
|
|
7298
7319
|
extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_INFOZIP);
|
|
@@ -7331,12 +7352,13 @@ function getHeaderInfo(options) {
|
|
|
7331
7352
|
if (passThrough && crc32 !== UNDEFINED_VALUE) {
|
|
7332
7353
|
rawExtraFieldAES[EXTRAFIELD_OFFSET_AES_VENDOR_VERSION] = VENDOR_VERSION_AE_1;
|
|
7333
7354
|
}
|
|
7334
|
-
rawExtraFieldAES
|
|
7355
|
+
setUint16(getDataView(rawExtraFieldAES), EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD, compressionMethod);
|
|
7335
7356
|
compressionMethod = COMPRESSION_METHOD_AES;
|
|
7336
7357
|
}
|
|
7337
7358
|
const localExtraFieldZip64Length = writeLocalExtraFieldZip64 ? getLength(rawLocalExtraFieldZip64) : 0;
|
|
7338
7359
|
const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField, rawLocalExtraField);
|
|
7339
|
-
|
|
7360
|
+
const maximumUsdzExtraFieldLength = options[OPTION_USDZ] ? EXTRAFIELD_USDZ_MAX_LENGTH : 0;
|
|
7361
|
+
if (extraFieldLength + maximumUsdzExtraFieldLength > MAX_16_BITS) {
|
|
7340
7362
|
throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
|
|
7341
7363
|
}
|
|
7342
7364
|
const dosLastModDate = new Date(Math.ceil(Math.floor(lastModDate.getTime() / 1000) / 2) * 2000);
|
|
@@ -7422,18 +7444,14 @@ function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
|
|
|
7422
7444
|
}
|
|
7423
7445
|
|
|
7424
7446
|
function packUnixId(id) {
|
|
7425
|
-
|
|
7426
|
-
|
|
7427
|
-
|
|
7428
|
-
|
|
7429
|
-
|
|
7430
|
-
|
|
7431
|
-
let length = 4;
|
|
7432
|
-
while (length > 1 && dataArray[length - 1] === 0) {
|
|
7433
|
-
length--;
|
|
7434
|
-
}
|
|
7435
|
-
return dataArray.subarray(0, length);
|
|
7447
|
+
const dataArray = new Uint8Array(4);
|
|
7448
|
+
const dataView = getDataView(dataArray);
|
|
7449
|
+
dataView.setUint32(0, id, true);
|
|
7450
|
+
let length = 4;
|
|
7451
|
+
while (length > 1 && dataArray[length - 1] === 0) {
|
|
7452
|
+
length--;
|
|
7436
7453
|
}
|
|
7454
|
+
return dataArray.subarray(0, length);
|
|
7437
7455
|
}
|
|
7438
7456
|
|
|
7439
7457
|
function normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes) {
|
|
@@ -7737,7 +7755,11 @@ async function writeDigitalSignatureRecord(zipWriter, directoryArray, options) {
|
|
|
7737
7755
|
signatureRecord.writeUint32(DIGITAL_SIGNATURE_RECORD_SIGNATURE);
|
|
7738
7756
|
signatureRecord.writeUint16(signatureDataLength);
|
|
7739
7757
|
signatureRecord.writeBytes(signatureData);
|
|
7740
|
-
|
|
7758
|
+
const { writer } = zipWriter;
|
|
7759
|
+
if (exceedsAvailableSize(writer, getLength(signatureRecord.array))) {
|
|
7760
|
+
await writer.closeDisk();
|
|
7761
|
+
}
|
|
7762
|
+
await writeData(writer, signatureRecord.array);
|
|
7741
7763
|
return 6 + signatureDataLength;
|
|
7742
7764
|
}
|
|
7743
7765
|
return 0;
|
|
@@ -7848,7 +7870,22 @@ async function startsWithSplitZipSignature(reader) {
|
|
|
7848
7870
|
return getUint32(getDataView(signatureArray), 0) == SPLIT_ZIP_FILE_SIGNATURE;
|
|
7849
7871
|
}
|
|
7850
7872
|
|
|
7851
|
-
|
|
7873
|
+
function removeExtraFieldZip64(rawExtraField) {
|
|
7874
|
+
const rawExtraFieldView = getDataView(rawExtraField);
|
|
7875
|
+
let offsetExtraField = 0;
|
|
7876
|
+
while (offsetExtraField + 4 <= getLength(rawExtraField)) {
|
|
7877
|
+
const size = 4 + getUint16(rawExtraFieldView, offsetExtraField + 2);
|
|
7878
|
+
if (getUint16(rawExtraFieldView, offsetExtraField) == EXTRAFIELD_TYPE_ZIP64) {
|
|
7879
|
+
return removeExtraFieldZip64(concat(
|
|
7880
|
+
rawExtraField.subarray(0, offsetExtraField),
|
|
7881
|
+
rawExtraField.subarray(Math.min(offsetExtraField + size, getLength(rawExtraField)))));
|
|
7882
|
+
}
|
|
7883
|
+
offsetExtraField += size;
|
|
7884
|
+
}
|
|
7885
|
+
return rawExtraField;
|
|
7886
|
+
}
|
|
7887
|
+
|
|
7888
|
+
async function copyZipData(zipWriter, reader, entries, directoryOffset) {
|
|
7852
7889
|
const { writer } = zipWriter;
|
|
7853
7890
|
const entryPositions = new Map();
|
|
7854
7891
|
if (writer.closeDisk) {
|
|
@@ -7869,9 +7906,10 @@ async function copyZipData(zipWriter, reader, entries, directoryOffset, splitZip
|
|
|
7869
7906
|
}
|
|
7870
7907
|
await copyData(zipWriter, reader, copiedLength, directoryOffset - copiedLength);
|
|
7871
7908
|
} else {
|
|
7909
|
+
const baseOffset = zipWriter.offset;
|
|
7872
7910
|
await copyData(zipWriter, reader, 0, directoryOffset);
|
|
7873
7911
|
entries.forEach(entry => entryPositions.set(entry, {
|
|
7874
|
-
offset:
|
|
7912
|
+
offset: baseOffset + getSourceOffset(reader, entry),
|
|
7875
7913
|
diskNumberStart: 0
|
|
7876
7914
|
}));
|
|
7877
7915
|
}
|
|
@@ -8961,4 +8999,4 @@ function terminateWorkersAndModule() {
|
|
|
8961
8999
|
|
|
8962
9000
|
configureExternalAssets();
|
|
8963
9001
|
|
|
8964
|
-
export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, 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_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_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_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, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
|
|
9002
|
+
export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, 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_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_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_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, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
|