@zip.js/zip.js 2.18.2 → 2.19.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 +122 -118
- package/deno.json +1 -1
- package/dist/zip-core-external.js +54 -81
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +54 -81
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +54 -81
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +54 -81
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +54 -81
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +56 -83
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +55 -82
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +56 -83
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +56 -83
- package/dist/zip-native.min.js +1 -1
- package/dist/zip-web-worker-native.js +1 -1
- package/dist/zip-web-worker.js +1 -1
- package/dist/zip.js +55 -82
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +56 -83
- package/index-native.min.js +1 -1
- package/index.cjs +55 -82
- package/index.d.cts +27 -18
- package/index.d.ts +27 -18
- package/index.min.js +1 -1
- package/lib/core/codec-pool.js +1 -2
- package/lib/core/codec-worker-web.js +11 -39
- package/lib/core/codec-worker.js +1 -2
- package/lib/core/configuration.js +1 -1
- package/lib/core/options.js +0 -2
- package/lib/core/streams/codec-stream.js +1 -1
- package/lib/core/version.js +1 -1
- package/lib/core/web-worker-base.js +2 -3
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/web-worker-inline-wasm.js +1 -1
- package/lib/core/zip-reader.js +21 -23
- package/lib/core/zip-writer.js +18 -14
- package/package.json +1 -1
- package/worker-message-property-names.js +1 -1
|
@@ -176,7 +176,6 @@ const OPTION_CHECK_CRC32 = "checkCrc32";
|
|
|
176
176
|
const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
|
|
177
177
|
const OPTION_USE_WEB_WORKERS = "useWebWorkers";
|
|
178
178
|
const OPTION_USE_COMPRESSION_STREAM = "useCompressionStream";
|
|
179
|
-
const OPTION_TRANSFER_STREAMS = "transferStreams";
|
|
180
179
|
const OPTION_PREVENT_CLOSE = "preventClose";
|
|
181
180
|
const OPTION_ENCRYPTION_STRENGTH = "encryptionStrength";
|
|
182
181
|
const OPTION_EXTENDED_TIMESTAMP = "extendedTimestamp";
|
|
@@ -294,7 +293,7 @@ function toNumber(value) {
|
|
|
294
293
|
*/
|
|
295
294
|
|
|
296
295
|
|
|
297
|
-
const DEFAULT_CHUNK_SIZE$1 =
|
|
296
|
+
const DEFAULT_CHUNK_SIZE$1 = 256 * 1024;
|
|
298
297
|
const MINIMUM_CHUNK_SIZE = 64;
|
|
299
298
|
const MINIMUM_PROPERTY_VALUE = 1;
|
|
300
299
|
const ERR_INVALID_MAX_WORKERS = "Invalid maxWorkers (must be an integer greater than 0)";
|
|
@@ -2423,7 +2422,7 @@ function mapInflateStreamError(readable, sourceErrors) {
|
|
|
2423
2422
|
*/
|
|
2424
2423
|
|
|
2425
2424
|
|
|
2426
|
-
const DEFAULT_CHUNK_SIZE =
|
|
2425
|
+
const DEFAULT_CHUNK_SIZE = 256 * 1024;
|
|
2427
2426
|
const MESSAGE_EVENT_TYPE = "message";
|
|
2428
2427
|
const MESSAGE_START = "start";
|
|
2429
2428
|
const MESSAGE_PULL = "pull";
|
|
@@ -2633,7 +2632,7 @@ function disableWebWorker(workerData) {
|
|
|
2633
2632
|
class CodecWorker {
|
|
2634
2633
|
|
|
2635
2634
|
constructor(workerData, { readable, writable }, workerOptions, onTaskFinished) {
|
|
2636
|
-
const { options, config, streamOptions, useWebWorkers,
|
|
2635
|
+
const { options, config, streamOptions, useWebWorkers, workerURI } = workerOptions;
|
|
2637
2636
|
let { createWorker } = workerOptions;
|
|
2638
2637
|
const { signal } = streamOptions;
|
|
2639
2638
|
if (createWorkerFailed) {
|
|
@@ -2650,7 +2649,6 @@ class CodecWorker {
|
|
|
2650
2649
|
workerOptions,
|
|
2651
2650
|
workerURI,
|
|
2652
2651
|
createWorker,
|
|
2653
|
-
transferStreams,
|
|
2654
2652
|
terminate() {
|
|
2655
2653
|
return new Promise(resolve => {
|
|
2656
2654
|
const { worker, busy } = workerData;
|
|
@@ -2828,12 +2826,6 @@ const MESSAGE_ERROR_EVENT_TYPE = "messageerror";
|
|
|
2828
2826
|
const ABORT_EVENT_TYPE = "abort";
|
|
2829
2827
|
|
|
2830
2828
|
let webWorkerSource, webWorkerURI, webWorkerOptions;
|
|
2831
|
-
let transferStreamsSupported = true;
|
|
2832
|
-
try {
|
|
2833
|
-
transferStreamsSupported = typeof structuredClone == FUNCTION_TYPE && structuredClone(new DOMException("", "AbortError")).code !== UNDEFINED_VALUE;
|
|
2834
|
-
} catch {
|
|
2835
|
-
// ignored
|
|
2836
|
-
}
|
|
2837
2829
|
|
|
2838
2830
|
setWebWorkerBackend(createWebWorkerInterface);
|
|
2839
2831
|
|
|
@@ -2920,14 +2912,11 @@ async function runWebWorker(workerData, config) {
|
|
|
2920
2912
|
});
|
|
2921
2913
|
const { readable, options } = workerData;
|
|
2922
2914
|
const { writable, closed, abortPipe } = watchClosedStream(workerData.writable, workerData);
|
|
2923
|
-
let streamsTransferred;
|
|
2924
2915
|
try {
|
|
2925
|
-
|
|
2916
|
+
sendMessage({
|
|
2926
2917
|
type: MESSAGE_START,
|
|
2927
2918
|
options,
|
|
2928
|
-
config
|
|
2929
|
-
readable,
|
|
2930
|
-
writable
|
|
2919
|
+
config
|
|
2931
2920
|
}, workerData);
|
|
2932
2921
|
} catch (error) {
|
|
2933
2922
|
abortPipe();
|
|
@@ -2939,12 +2928,10 @@ async function runWebWorker(workerData, config) {
|
|
|
2939
2928
|
workerData.onTaskFinished();
|
|
2940
2929
|
throw error;
|
|
2941
2930
|
}
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
});
|
|
2947
|
-
}
|
|
2931
|
+
Object.assign(workerData, {
|
|
2932
|
+
reader: readable.getReader(),
|
|
2933
|
+
writer: writable.getWriter()
|
|
2934
|
+
});
|
|
2948
2935
|
const { workerStartupTimeout } = config;
|
|
2949
2936
|
if (!workerData.workerAlive && Number.isFinite(workerStartupTimeout) && workerStartupTimeout >= 0) {
|
|
2950
2937
|
workerData.startupTimeout = setTimeout(() => onStartupTimeout(workerData), workerStartupTimeout);
|
|
@@ -2977,7 +2964,7 @@ async function runWebWorker(workerData, config) {
|
|
|
2977
2964
|
}
|
|
2978
2965
|
|
|
2979
2966
|
async function closeWritable() {
|
|
2980
|
-
if (!
|
|
2967
|
+
if (!writable.locked) {
|
|
2981
2968
|
try {
|
|
2982
2969
|
await writable.getWriter().close();
|
|
2983
2970
|
} catch {
|
|
@@ -3168,31 +3155,14 @@ function onWorkerError(event, workerData) {
|
|
|
3168
3155
|
}
|
|
3169
3156
|
}
|
|
3170
3157
|
|
|
3171
|
-
function sendMessage(message, { worker, writer
|
|
3158
|
+
function sendMessage(message, { worker, writer }) {
|
|
3172
3159
|
try {
|
|
3173
|
-
const { value
|
|
3174
|
-
const transferables = [];
|
|
3160
|
+
const { value } = message;
|
|
3175
3161
|
if (value) {
|
|
3176
3162
|
message.value = toExactUint8Array(value);
|
|
3177
|
-
transferables.push(message.value.buffer);
|
|
3178
|
-
}
|
|
3179
|
-
if (transferStreams && transferStreamsSupported && workerAlive) {
|
|
3180
|
-
if (readable) {
|
|
3181
|
-
transferables.push(readable);
|
|
3182
|
-
}
|
|
3183
|
-
if (writable) {
|
|
3184
|
-
transferables.push(writable);
|
|
3185
|
-
}
|
|
3186
|
-
} else {
|
|
3187
|
-
message.readable = message.writable = null;
|
|
3188
|
-
}
|
|
3189
|
-
if (transferables.length) {
|
|
3190
3163
|
try {
|
|
3191
|
-
worker.postMessage(message,
|
|
3192
|
-
return true;
|
|
3164
|
+
worker.postMessage(message, [message.value.buffer]);
|
|
3193
3165
|
} catch {
|
|
3194
|
-
transferStreamsSupported = false;
|
|
3195
|
-
message.readable = message.writable = null;
|
|
3196
3166
|
worker.postMessage(message);
|
|
3197
3167
|
}
|
|
3198
3168
|
} else {
|
|
@@ -3341,7 +3311,7 @@ let indexWorker = 0;
|
|
|
3341
3311
|
|
|
3342
3312
|
async function runWorker(stream, workerOptions) {
|
|
3343
3313
|
const { options, config } = workerOptions;
|
|
3344
|
-
const {
|
|
3314
|
+
const { useWebWorkers, useCompressionStream, compressed, checkCrc32, computeCrc32, encrypted, format, codecURI } = options;
|
|
3345
3315
|
const { workerURI, createWorker, maxWorkers } = config;
|
|
3346
3316
|
if (format) {
|
|
3347
3317
|
if (codecURI) {
|
|
@@ -3349,7 +3319,6 @@ async function runWorker(stream, workerOptions) {
|
|
|
3349
3319
|
}
|
|
3350
3320
|
await ensureCodecStreams(format, options.codecURI);
|
|
3351
3321
|
}
|
|
3352
|
-
workerOptions.transferStreams = !format && (transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams));
|
|
3353
3322
|
const streamCopy = !compressed && !checkCrc32 && !computeCrc32 && !encrypted;
|
|
3354
3323
|
const workerSupported = format === UNDEFINED_VALUE || Boolean(options.codecURI);
|
|
3355
3324
|
workerOptions.useWebWorkers = !streamCopy && workerSupported && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
|
|
@@ -5151,17 +5120,6 @@ class ZipReader {
|
|
|
5151
5120
|
if (filename === UNDEFINED_VALUE) {
|
|
5152
5121
|
filename = decodeText(rawFilename, rawFilenameEncoding);
|
|
5153
5122
|
}
|
|
5154
|
-
if (normalizeFilename) {
|
|
5155
|
-
const normalizedFilename = normalizeFilename(filename);
|
|
5156
|
-
if (normalizedFilename !== UNDEFINED_VALUE) {
|
|
5157
|
-
filename = normalizedFilename;
|
|
5158
|
-
}
|
|
5159
|
-
}
|
|
5160
|
-
if (isUnsafeFilename(filename, filenameValidation)) {
|
|
5161
|
-
const error = new Error(ERR_UNSAFE_FILENAME);
|
|
5162
|
-
error.filename = filename;
|
|
5163
|
-
throw error;
|
|
5164
|
-
}
|
|
5165
5123
|
let comment = decode(rawComment, rawCommentEncoding, TEXT_TYPE_COMMENT);
|
|
5166
5124
|
if (comment === UNDEFINED_VALUE) {
|
|
5167
5125
|
comment = decodeText(rawComment, rawCommentEncoding);
|
|
@@ -5189,7 +5147,20 @@ class ZipReader {
|
|
|
5189
5147
|
filename,
|
|
5190
5148
|
comment
|
|
5191
5149
|
});
|
|
5192
|
-
|
|
5150
|
+
const malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
|
|
5151
|
+
filename = fileEntry.filename;
|
|
5152
|
+
if (normalizeFilename) {
|
|
5153
|
+
const normalizedFilename = normalizeFilename(filename);
|
|
5154
|
+
if (normalizedFilename !== UNDEFINED_VALUE) {
|
|
5155
|
+
filename = fileEntry.filename = normalizedFilename;
|
|
5156
|
+
}
|
|
5157
|
+
}
|
|
5158
|
+
if (isUnsafeFilename(filename, filenameValidation)) {
|
|
5159
|
+
const error = new Error(ERR_UNSAFE_FILENAME);
|
|
5160
|
+
error.filename = filename;
|
|
5161
|
+
throw error;
|
|
5162
|
+
}
|
|
5163
|
+
if (malformedExtraField) {
|
|
5193
5164
|
addWarning(warnings, WARNING_MALFORMED_EXTRA_FIELD, filename);
|
|
5194
5165
|
}
|
|
5195
5166
|
fileEntry.offset += prependedDataLength;
|
|
@@ -5593,7 +5564,6 @@ let ZipEntry$1 = class ZipEntry {
|
|
|
5593
5564
|
encrypted,
|
|
5594
5565
|
useWebWorkers: getOptionValue$1(zipEntry, options, OPTION_USE_WEB_WORKERS),
|
|
5595
5566
|
useCompressionStream,
|
|
5596
|
-
transferStreams: getOptionValue$1(zipEntry, options, OPTION_TRANSFER_STREAMS),
|
|
5597
5567
|
deflate64,
|
|
5598
5568
|
format: registeredCodec ? registeredCodec.format : UNDEFINED_VALUE,
|
|
5599
5569
|
codecURI: registeredCodec ? registeredCodec.codecURI : UNDEFINED_VALUE,
|
|
@@ -5823,19 +5793,17 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
|
|
|
5823
5793
|
readExtraFieldNTFS(extraFieldNTFS, directory);
|
|
5824
5794
|
directory.extraFieldNTFS = extraFieldNTFS;
|
|
5825
5795
|
}
|
|
5826
|
-
const
|
|
5796
|
+
const extraFieldInfoZip = extraField.get(EXTRAFIELD_TYPE_INFOZIP);
|
|
5827
5797
|
let unixIdsRead;
|
|
5798
|
+
if (extraFieldInfoZip) {
|
|
5799
|
+
unixIdsRead = readExtraFieldUnix(extraFieldInfoZip, directory, true);
|
|
5800
|
+
directory.extraFieldInfoZip = extraFieldInfoZip;
|
|
5801
|
+
}
|
|
5802
|
+
const extraFieldUnix = extraField.get(EXTRAFIELD_TYPE_UNIX);
|
|
5828
5803
|
if (extraFieldUnix) {
|
|
5829
|
-
|
|
5804
|
+
readExtraFieldUnix(extraFieldUnix, unixIdsRead ? {} : directory, false);
|
|
5830
5805
|
directory.extraFieldUnix = extraFieldUnix;
|
|
5831
5806
|
}
|
|
5832
|
-
if (!unixIdsRead) {
|
|
5833
|
-
const extraFieldInfoZip = extraField.get(EXTRAFIELD_TYPE_INFOZIP);
|
|
5834
|
-
if (extraFieldInfoZip) {
|
|
5835
|
-
readExtraFieldUnix(extraFieldInfoZip, directory, true);
|
|
5836
|
-
directory.extraFieldInfoZip = extraFieldInfoZip;
|
|
5837
|
-
}
|
|
5838
|
-
}
|
|
5839
5807
|
const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
|
|
5840
5808
|
if (extraFieldExtendedTimestamp) {
|
|
5841
5809
|
readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
|
|
@@ -6722,6 +6690,7 @@ class ZipWriter {
|
|
|
6722
6690
|
rawExtraFieldExtendedTimestamp: EMPTY_UINT8_ARRAY,
|
|
6723
6691
|
rawExtraFieldNTFS: EMPTY_UINT8_ARRAY,
|
|
6724
6692
|
rawExtraFieldUnix: EMPTY_UINT8_ARRAY,
|
|
6693
|
+
rawCentralExtraFieldUnix: EMPTY_UINT8_ARRAY,
|
|
6725
6694
|
rawExtraField,
|
|
6726
6695
|
rawCentralExtraField: EMPTY_UINT8_ARRAY,
|
|
6727
6696
|
headerArray,
|
|
@@ -7290,7 +7259,6 @@ function resolveMetadata(zipWriter, name, options) {
|
|
|
7290
7259
|
const ntfsTimestamp = getOptionValue(zipWriter, options, OPTION_NTFS_TIMESTAMP);
|
|
7291
7260
|
const keepOrder = getOptionValue(zipWriter, options, OPTION_KEEP_ORDER, true);
|
|
7292
7261
|
const useWebWorkers = getOptionValue(zipWriter, options, OPTION_USE_WEB_WORKERS);
|
|
7293
|
-
const transferStreams = getOptionValue(zipWriter, options, OPTION_TRANSFER_STREAMS);
|
|
7294
7262
|
const bufferedWrite = getOptionValue(zipWriter, options, OPTION_BUFFERED_WRITE);
|
|
7295
7263
|
const createTempStream = getFunctionOptionValue(zipWriter, options, OPTION_CREATE_TEMP_STREAM);
|
|
7296
7264
|
const dataDescriptorSignature = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR_SIGNATURE, true);
|
|
@@ -7356,7 +7324,6 @@ function resolveMetadata(zipWriter, name, options) {
|
|
|
7356
7324
|
ntfsTimestamp,
|
|
7357
7325
|
keepOrder,
|
|
7358
7326
|
useWebWorkers,
|
|
7359
|
-
transferStreams,
|
|
7360
7327
|
bufferedWrite,
|
|
7361
7328
|
createTempStream,
|
|
7362
7329
|
dataDescriptorSignature,
|
|
@@ -7415,7 +7382,7 @@ async function resolveSizes(zipWriter, reader, { resolvedOptions: metadata }, op
|
|
|
7415
7382
|
if (reader) {
|
|
7416
7383
|
reader = new GenericReader(reader);
|
|
7417
7384
|
await initStream(reader);
|
|
7418
|
-
if (!reader.
|
|
7385
|
+
if (!reader.readUint8Array && !reader.readable) {
|
|
7419
7386
|
throw new Error(ERR_INVALID_READER);
|
|
7420
7387
|
}
|
|
7421
7388
|
({ size: contentSize } = reader);
|
|
@@ -7776,6 +7743,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7776
7743
|
extraFieldExtendedTimestampTime,
|
|
7777
7744
|
rawExtraFieldNTFS,
|
|
7778
7745
|
rawExtraFieldUnix,
|
|
7746
|
+
rawCentralExtraFieldUnix,
|
|
7779
7747
|
rawExtraFieldAES,
|
|
7780
7748
|
} = headerInfo;
|
|
7781
7749
|
const { dataDescriptorArray } = dataDescriptorInfo;
|
|
@@ -7800,7 +7768,6 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7800
7768
|
rawExtraField,
|
|
7801
7769
|
rawCentralExtraField,
|
|
7802
7770
|
useWebWorkers,
|
|
7803
|
-
transferStreams,
|
|
7804
7771
|
onstart,
|
|
7805
7772
|
onprogress,
|
|
7806
7773
|
onend,
|
|
@@ -7842,6 +7809,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7842
7809
|
rawExtraFieldExtendedTimestamp,
|
|
7843
7810
|
rawExtraFieldNTFS,
|
|
7844
7811
|
rawExtraFieldUnix,
|
|
7812
|
+
rawCentralExtraFieldUnix,
|
|
7845
7813
|
rawExtraFieldAES,
|
|
7846
7814
|
rawExtraField,
|
|
7847
7815
|
rawCentralExtraField,
|
|
@@ -7888,7 +7856,6 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7888
7856
|
encrypted: encrypted && !passThroughEncryption,
|
|
7889
7857
|
useWebWorkers,
|
|
7890
7858
|
useCompressionStream,
|
|
7891
|
-
transferStreams,
|
|
7892
7859
|
format,
|
|
7893
7860
|
codecURI,
|
|
7894
7861
|
compressionMethod
|
|
@@ -8066,6 +8033,7 @@ function getHeaderInfo(options) {
|
|
|
8066
8033
|
rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
|
|
8067
8034
|
}
|
|
8068
8035
|
let rawExtraFieldUnix;
|
|
8036
|
+
let rawCentralExtraFieldUnix;
|
|
8069
8037
|
try {
|
|
8070
8038
|
const { uid, gid, unixExtraFieldType } = options;
|
|
8071
8039
|
if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
|
|
@@ -8080,7 +8048,7 @@ function getHeaderInfo(options) {
|
|
|
8080
8048
|
extraFieldUnix.writeBytes(uidBytes);
|
|
8081
8049
|
extraFieldUnix.writeUint8(gidBytes.length);
|
|
8082
8050
|
extraFieldUnix.writeBytes(gidBytes);
|
|
8083
|
-
rawExtraFieldUnix = extraFieldUnix.array;
|
|
8051
|
+
rawExtraFieldUnix = rawCentralExtraFieldUnix = extraFieldUnix.array;
|
|
8084
8052
|
} else if (unixExtraFieldType == UNIX_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
|
|
8085
8053
|
const extraFieldUnix = createRecordWriter(8);
|
|
8086
8054
|
extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_UNIX);
|
|
@@ -8088,11 +8056,15 @@ function getHeaderInfo(options) {
|
|
|
8088
8056
|
extraFieldUnix.writeUint16((uid === UNDEFINED_VALUE ? 0 : uid) & MAX_16_BITS);
|
|
8089
8057
|
extraFieldUnix.writeUint16((gid === UNDEFINED_VALUE ? 0 : gid) & MAX_16_BITS);
|
|
8090
8058
|
rawExtraFieldUnix = extraFieldUnix.array;
|
|
8059
|
+
const centralExtraFieldUnix = createRecordWriter(4);
|
|
8060
|
+
centralExtraFieldUnix.writeUint16(EXTRAFIELD_TYPE_UNIX);
|
|
8061
|
+
centralExtraFieldUnix.writeUint16(0);
|
|
8062
|
+
rawCentralExtraFieldUnix = centralExtraFieldUnix.array;
|
|
8091
8063
|
} else {
|
|
8092
|
-
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
8064
|
+
rawExtraFieldUnix = rawCentralExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
8093
8065
|
}
|
|
8094
8066
|
} catch {
|
|
8095
|
-
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
8067
|
+
rawExtraFieldUnix = rawCentralExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
8096
8068
|
}
|
|
8097
8069
|
if (compressionMethod === UNDEFINED_VALUE) {
|
|
8098
8070
|
compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
|
|
@@ -8184,6 +8156,7 @@ function getHeaderInfo(options) {
|
|
|
8184
8156
|
rawExtraFieldExtendedTimestamp,
|
|
8185
8157
|
rawExtraFieldNTFS,
|
|
8186
8158
|
rawExtraFieldUnix,
|
|
8159
|
+
rawCentralExtraFieldUnix,
|
|
8187
8160
|
rawExtraFieldAES,
|
|
8188
8161
|
extraFieldLength
|
|
8189
8162
|
};
|
|
@@ -8359,7 +8332,7 @@ function createDirectoryRecords(files) {
|
|
|
8359
8332
|
rawExtraFieldAES,
|
|
8360
8333
|
rawComment,
|
|
8361
8334
|
rawExtraFieldNTFS,
|
|
8362
|
-
|
|
8335
|
+
rawCentralExtraFieldUnix,
|
|
8363
8336
|
rawExtraField,
|
|
8364
8337
|
rawCentralExtraField,
|
|
8365
8338
|
extraFieldExtendedTimestampFlag,
|
|
@@ -8421,7 +8394,7 @@ function createDirectoryRecords(files) {
|
|
|
8421
8394
|
rawExtraFieldZip64,
|
|
8422
8395
|
rawExtraFieldAES,
|
|
8423
8396
|
rawExtraFieldNTFS,
|
|
8424
|
-
|
|
8397
|
+
rawCentralExtraFieldUnix,
|
|
8425
8398
|
rawExtraFieldTimestamp,
|
|
8426
8399
|
rawExtraField,
|
|
8427
8400
|
rawCentralExtraField);
|
|
@@ -8450,7 +8423,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
8450
8423
|
rawExtraFieldAES,
|
|
8451
8424
|
rawExtraFieldExtendedTimestamp,
|
|
8452
8425
|
rawExtraFieldNTFS,
|
|
8453
|
-
|
|
8426
|
+
rawCentralExtraFieldUnix,
|
|
8454
8427
|
rawExtraField,
|
|
8455
8428
|
rawCentralExtraField,
|
|
8456
8429
|
rawComment,
|
|
@@ -8467,7 +8440,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
8467
8440
|
uncompressedSize,
|
|
8468
8441
|
compressedSize
|
|
8469
8442
|
} = fileEntry;
|
|
8470
|
-
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS,
|
|
8443
|
+
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawCentralExtraFieldUnix, rawExtraField, rawCentralExtraField);
|
|
8471
8444
|
const directoryRecordLength = CENTRAL_FILE_HEADER_LENGTH + getLength(rawFilename, rawComment) + extraFieldLength;
|
|
8472
8445
|
if (exceedsAvailableSize(writer, offset + directoryRecordLength - directoryDiskOffset)) {
|
|
8473
8446
|
await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));
|
|
@@ -8503,7 +8476,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
8503
8476
|
directoryRecord.writeBytes(rawExtraFieldAES);
|
|
8504
8477
|
directoryRecord.writeBytes(rawExtraFieldExtendedTimestamp);
|
|
8505
8478
|
directoryRecord.writeBytes(rawExtraFieldNTFS);
|
|
8506
|
-
directoryRecord.writeBytes(
|
|
8479
|
+
directoryRecord.writeBytes(rawCentralExtraFieldUnix);
|
|
8507
8480
|
directoryRecord.writeBytes(rawExtraField);
|
|
8508
8481
|
directoryRecord.writeBytes(rawCentralExtraField);
|
|
8509
8482
|
directoryRecord.writeBytes(rawComment);
|
|
@@ -9080,7 +9053,7 @@ function formatSupported(StreamClass, format) {
|
|
|
9080
9053
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
9081
9054
|
*/
|
|
9082
9055
|
|
|
9083
|
-
const VERSION = "2.
|
|
9056
|
+
const VERSION = "2.19.0";
|
|
9084
9057
|
|
|
9085
9058
|
/*
|
|
9086
9059
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|