@zip.js/zip.js 2.18.1 → 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 +59 -94
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +59 -94
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +59 -94
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +59 -94
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +59 -94
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +61 -96
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +60 -95
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +61 -96
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +61 -96
- 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 +60 -95
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +61 -96
- package/index-native.min.js +1 -1
- package/index.cjs +60 -95
- package/index.d.cts +33 -23
- package/index.d.ts +33 -23
- 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 +26 -36
- package/lib/core/zip-writer.js +18 -14
- package/package.json +1 -1
- package/worker-message-property-names.js +1 -1
package/index-native.cjs
CHANGED
|
@@ -179,7 +179,6 @@ const OPTION_CHECK_CRC32 = "checkCrc32";
|
|
|
179
179
|
const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
|
|
180
180
|
const OPTION_USE_WEB_WORKERS = "useWebWorkers";
|
|
181
181
|
const OPTION_USE_COMPRESSION_STREAM = "useCompressionStream";
|
|
182
|
-
const OPTION_TRANSFER_STREAMS = "transferStreams";
|
|
183
182
|
const OPTION_PREVENT_CLOSE = "preventClose";
|
|
184
183
|
const OPTION_ENCRYPTION_STRENGTH = "encryptionStrength";
|
|
185
184
|
const OPTION_EXTENDED_TIMESTAMP = "extendedTimestamp";
|
|
@@ -297,7 +296,7 @@ function toNumber(value) {
|
|
|
297
296
|
*/
|
|
298
297
|
|
|
299
298
|
|
|
300
|
-
const DEFAULT_CHUNK_SIZE$1 =
|
|
299
|
+
const DEFAULT_CHUNK_SIZE$1 = 256 * 1024;
|
|
301
300
|
const MINIMUM_CHUNK_SIZE = 64;
|
|
302
301
|
const MINIMUM_PROPERTY_VALUE = 1;
|
|
303
302
|
const ERR_INVALID_MAX_WORKERS = "Invalid maxWorkers (must be an integer greater than 0)";
|
|
@@ -439,7 +438,7 @@ function resetConfiguration() {
|
|
|
439
438
|
Object.assign(config, DEFAULT_CONFIGURATION);
|
|
440
439
|
}
|
|
441
440
|
|
|
442
|
-
const r=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],o=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],t=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],n=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],e=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],i=new Uint8Array(288);i.fill(8,0,144),i.fill(9,144,256),i.fill(7,256,280),i.fill(8,280,288);const w=new Uint8Array(30).fill(5);function L(r){const o=new Uint16Array(16);for(const t of r)o[t]++;o[0]=0;const t=new Uint16Array(17);for(let r=1;r<=15;r++)t[r+1]=t[r]+o[r];const n=new Uint16Array(r.length);for(let o=0;o<r.length;o++)r[o]&&(n[t[r[o]]++]=o);return {lengthCounts:o,symbols:n}}const u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=(U=()=>function(u){let f=0,U=0,g=0,l=new Uint8Array(1024),d=0,s=0;for(;!s;){s=N(1);const r=N(2);if(0==r)C();else if(1==r)K(L(i),L(w));else {if(2!=r)throw new Error("invalid deflate block type");K(...V());}}return l.subarray(0,d);function q(){if(f>=u.length)throw new Error("unexpected end of deflate data");return u[f++]}function N(r){for(;g<r;)U|=q()<<g,g+=8;const o=U&(1<<r)-1;return U>>>=r,g-=r,o}function C(){U=0,g=0;const r=q()|q()<<8;f+=2,a(d+r);for(let o=0;o<r;o++)l[d++]=q();}function K(e,i){let w=c(e);for(;256!=w;){if(w<256)a(d+1),l[d++]=w;else {const e=w-257,L=r[e]+N(o[e]),u=c(i),f=t[u]+N(n[u]);a(d+L);const U=d-f;for(let r=0;r<L;r++)l[d++]=l[U+r];}w=c(e);}}function V(){const r=N(5)+257,o=N(5)+1,t=N(4)+4,n=new Uint8Array(19);for(let r=0;r<t;r++)n[e[r]]=N(3);const i=L(n),w=new Uint8Array(r+o);let u=0;for(;u<w.length;){const r=c(i);if(r<16)w[u++]=r;else if(16==r){const r=w[u-1];let o=N(2)+3;for(;o--;)w[u++]=r;}else u+=17==r?N(3)+3:N(7)+11;}return [L(w.subarray(0,r)),L(w.subarray(r))]}function c(r){const{lengthCounts:o,symbols:t}=r;let n=0,e=0,i=0;for(let r=1;r<=15;r++){n|=N(1);const w=o[r];if(n-e<w)return t[i+(n-e)];i+=w,e=e+w<<1,n<<=1;}throw new Error("invalid huffman code")}function a(r){if(l.length<r){let o=2*l.length;for(;o<r;)o*=2;const t=new Uint8Array(o);t.set(l.subarray(0,d)),l=t;}}}(function(r){const o=(r=String(r).replace(/[^A-Za-z0-9+/=]/g,"")).length,t=[];for(let n=0;n<o;n+=4){const o=u.indexOf(r[n])<<18|u.indexOf(r[n+1])<<12|(63&u.indexOf(r[n+2]))<<6|63&u.indexOf(r[n+3]);t.push(o>>16&255),"="!==r[n+2]&&t.push(o>>8&255),"="!==r[n+3]&&t.push(255&o);}return new Uint8Array(t)}("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")),r=>r({workerURI:r=>{const o="text/javascript";let t=U();if("string"==typeof t&&(t=(new TextEncoder).encode(t)),r){const r=new Blob([t],{type:o});return URL.createObjectURL(r)}return "data:"+o+";base64,"+function(r){let o="";const t=r.length;let n=0;for(;n+2<t;n+=3){const t=r[n]<<16|r[n+1]<<8|r[n+2];o+=u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t];}const e=t-n;if(1===e){const t=r[n]<<16;o+=u[t>>18&63]+u[t>>12&63]+"==";}else if(2===e){const t=r[n]<<16|r[n+1]<<8;o+=u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+"=";}return o}(t)}}));var U;
|
|
441
|
+
const r=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],l=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],e=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],n=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],f=new Uint8Array(288);f.fill(8,0,144),f.fill(9,144,256),f.fill(7,256,280),f.fill(8,280,288);const t=new Uint8Array(30).fill(5);function o(r){const l=new Uint16Array(16);for(const s of r)l[s]++;l[0]=0;const s=new Uint16Array(17);for(let r=1;r<=15;r++)s[r+1]=s[r]+l[r];const e=new Uint16Array(r.length);for(let l=0;l<r.length;l++)r[l]&&(e[s[r[l]]++]=l);return {lengthCounts:l,symbols:e}}const c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",g$1=(a=()=>function(c){let g=0,a=0,W=0,y=new Uint8Array(1024),U=0,d=0;for(;!d;){d=F(1);const r=F(2);if(0==r)J();else if(1==r)i(o(f),o(t));else {if(2!=r)throw new Error("invalid deflate block type");i(...V());}}return y.subarray(0,U);function q(){if(g>=c.length)throw new Error("unexpected end of deflate data");return c[g++]}function F(r){for(;W<r;)a|=q()<<W,W+=8;const l=a&(1<<r)-1;return a>>>=r,W-=r,l}function J(){a=0,W=0;const r=q()|q()<<8;g+=2,Y(U+r);for(let l=0;l<r;l++)y[U++]=q();}function i(n,f){let t=T(n);for(;256!=t;){if(t<256)Y(U+1),y[U++]=t;else {const n=t-257,o=r[n]+F(l[n]),c=T(f),g=s[c]+F(e[c]);Y(U+o);const a=U-g;for(let r=0;r<o;r++)y[U++]=y[a+r];}t=T(n);}}function V(){const r=F(5)+257,l=F(5)+1,s=F(4)+4,e=new Uint8Array(19);for(let r=0;r<s;r++)e[n[r]]=F(3);const f=o(e),t=new Uint8Array(r+l);let c=0;for(;c<t.length;){const r=T(f);if(r<16)t[c++]=r;else if(16==r){const r=t[c-1];let l=F(2)+3;for(;l--;)t[c++]=r;}else c+=17==r?F(3)+3:F(7)+11;}return [o(t.subarray(0,r)),o(t.subarray(r))]}function T(r){const{lengthCounts:l,symbols:s}=r;let e=0,n=0,f=0;for(let r=1;r<=15;r++){e|=F(1);const t=l[r];if(e-n<t)return s[f+(e-n)];f+=t,n=n+t<<1,e<<=1;}throw new Error("invalid huffman code")}function Y(r){if(y.length<r){let l=2*y.length;for(;l<r;)l*=2;const s=new Uint8Array(l);s.set(y.subarray(0,U)),y=s;}}}(function(r){const l=(r=String(r).replace(/[^A-Za-z0-9+/=]/g,"")).length,s=[];for(let e=0;e<l;e+=4){const l=c.indexOf(r[e])<<18|c.indexOf(r[e+1])<<12|(63&c.indexOf(r[e+2]))<<6|63&c.indexOf(r[e+3]);s.push(l>>16&255),"="!==r[e+2]&&s.push(l>>8&255),"="!==r[e+3]&&s.push(255&l);}return new Uint8Array(s)}("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")),r=>r({workerURI:r=>{const l="text/javascript";let s=a();if("string"==typeof s&&(s=(new TextEncoder).encode(s)),r){const r=new Blob([s],{type:l});return URL.createObjectURL(r)}return "data:"+l+";base64,"+function(r){let l="";const s=r.length;let e=0;for(;e+2<s;e+=3){const s=r[e]<<16|r[e+1]<<8|r[e+2];l+=c[s>>18&63]+c[s>>12&63]+c[s>>6&63]+c[63&s];}const n=s-e;if(1===n){const s=r[e]<<16;l+=c[s>>18&63]+c[s>>12&63]+"==";}else if(2===n){const s=r[e]<<16|r[e+1]<<8;l+=c[s>>18&63]+c[s>>12&63]+c[s>>6&63]+"=";}return l}(s)}}));var a;
|
|
443
442
|
|
|
444
443
|
/*
|
|
445
444
|
Copyright (c) 2026 Gildas Lormeau. All rights reserved.
|
|
@@ -2388,7 +2387,7 @@ function mapInflateStreamError(readable, sourceErrors) {
|
|
|
2388
2387
|
*/
|
|
2389
2388
|
|
|
2390
2389
|
|
|
2391
|
-
const DEFAULT_CHUNK_SIZE =
|
|
2390
|
+
const DEFAULT_CHUNK_SIZE = 256 * 1024;
|
|
2392
2391
|
const MESSAGE_EVENT_TYPE = "message";
|
|
2393
2392
|
const MESSAGE_START = "start";
|
|
2394
2393
|
const MESSAGE_PULL = "pull";
|
|
@@ -2594,7 +2593,7 @@ function disableWebWorker(workerData) {
|
|
|
2594
2593
|
class CodecWorker {
|
|
2595
2594
|
|
|
2596
2595
|
constructor(workerData, { readable, writable }, workerOptions, onTaskFinished) {
|
|
2597
|
-
const { options, config, streamOptions, useWebWorkers,
|
|
2596
|
+
const { options, config, streamOptions, useWebWorkers, workerURI } = workerOptions;
|
|
2598
2597
|
let { createWorker } = workerOptions;
|
|
2599
2598
|
const { signal } = streamOptions;
|
|
2600
2599
|
if (createWorkerFailed) {
|
|
@@ -2611,7 +2610,6 @@ class CodecWorker {
|
|
|
2611
2610
|
workerOptions,
|
|
2612
2611
|
workerURI,
|
|
2613
2612
|
createWorker,
|
|
2614
|
-
transferStreams,
|
|
2615
2613
|
terminate() {
|
|
2616
2614
|
return new Promise(resolve => {
|
|
2617
2615
|
const { worker, busy } = workerData;
|
|
@@ -2789,12 +2787,6 @@ const MESSAGE_ERROR_EVENT_TYPE = "messageerror";
|
|
|
2789
2787
|
const ABORT_EVENT_TYPE = "abort";
|
|
2790
2788
|
|
|
2791
2789
|
let webWorkerSource, webWorkerURI, webWorkerOptions;
|
|
2792
|
-
let transferStreamsSupported = true;
|
|
2793
|
-
try {
|
|
2794
|
-
transferStreamsSupported = typeof structuredClone == FUNCTION_TYPE && structuredClone(new DOMException("", "AbortError")).code !== UNDEFINED_VALUE;
|
|
2795
|
-
} catch {
|
|
2796
|
-
// ignored
|
|
2797
|
-
}
|
|
2798
2790
|
|
|
2799
2791
|
setWebWorkerBackend(createWebWorkerInterface);
|
|
2800
2792
|
|
|
@@ -2881,14 +2873,11 @@ async function runWebWorker(workerData, config) {
|
|
|
2881
2873
|
});
|
|
2882
2874
|
const { readable, options } = workerData;
|
|
2883
2875
|
const { writable, closed, abortPipe } = watchClosedStream(workerData.writable, workerData);
|
|
2884
|
-
let streamsTransferred;
|
|
2885
2876
|
try {
|
|
2886
|
-
|
|
2877
|
+
sendMessage({
|
|
2887
2878
|
type: MESSAGE_START,
|
|
2888
2879
|
options,
|
|
2889
|
-
config
|
|
2890
|
-
readable,
|
|
2891
|
-
writable
|
|
2880
|
+
config
|
|
2892
2881
|
}, workerData);
|
|
2893
2882
|
} catch (error) {
|
|
2894
2883
|
abortPipe();
|
|
@@ -2900,12 +2889,10 @@ async function runWebWorker(workerData, config) {
|
|
|
2900
2889
|
workerData.onTaskFinished();
|
|
2901
2890
|
throw error;
|
|
2902
2891
|
}
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
});
|
|
2908
|
-
}
|
|
2892
|
+
Object.assign(workerData, {
|
|
2893
|
+
reader: readable.getReader(),
|
|
2894
|
+
writer: writable.getWriter()
|
|
2895
|
+
});
|
|
2909
2896
|
const { workerStartupTimeout } = config;
|
|
2910
2897
|
if (!workerData.workerAlive && Number.isFinite(workerStartupTimeout) && workerStartupTimeout >= 0) {
|
|
2911
2898
|
workerData.startupTimeout = setTimeout(() => onStartupTimeout(workerData), workerStartupTimeout);
|
|
@@ -2938,7 +2925,7 @@ async function runWebWorker(workerData, config) {
|
|
|
2938
2925
|
}
|
|
2939
2926
|
|
|
2940
2927
|
async function closeWritable() {
|
|
2941
|
-
if (!
|
|
2928
|
+
if (!writable.locked) {
|
|
2942
2929
|
try {
|
|
2943
2930
|
await writable.getWriter().close();
|
|
2944
2931
|
} catch {
|
|
@@ -3129,31 +3116,14 @@ function onWorkerError(event, workerData) {
|
|
|
3129
3116
|
}
|
|
3130
3117
|
}
|
|
3131
3118
|
|
|
3132
|
-
function sendMessage(message, { worker, writer
|
|
3119
|
+
function sendMessage(message, { worker, writer }) {
|
|
3133
3120
|
try {
|
|
3134
|
-
const { value
|
|
3135
|
-
const transferables = [];
|
|
3121
|
+
const { value } = message;
|
|
3136
3122
|
if (value) {
|
|
3137
3123
|
message.value = toExactUint8Array(value);
|
|
3138
|
-
transferables.push(message.value.buffer);
|
|
3139
|
-
}
|
|
3140
|
-
if (transferStreams && transferStreamsSupported && workerAlive) {
|
|
3141
|
-
if (readable) {
|
|
3142
|
-
transferables.push(readable);
|
|
3143
|
-
}
|
|
3144
|
-
if (writable) {
|
|
3145
|
-
transferables.push(writable);
|
|
3146
|
-
}
|
|
3147
|
-
} else {
|
|
3148
|
-
message.readable = message.writable = null;
|
|
3149
|
-
}
|
|
3150
|
-
if (transferables.length) {
|
|
3151
3124
|
try {
|
|
3152
|
-
worker.postMessage(message,
|
|
3153
|
-
return true;
|
|
3125
|
+
worker.postMessage(message, [message.value.buffer]);
|
|
3154
3126
|
} catch {
|
|
3155
|
-
transferStreamsSupported = false;
|
|
3156
|
-
message.readable = message.writable = null;
|
|
3157
3127
|
worker.postMessage(message);
|
|
3158
3128
|
}
|
|
3159
3129
|
} else {
|
|
@@ -3302,7 +3272,7 @@ let indexWorker = 0;
|
|
|
3302
3272
|
|
|
3303
3273
|
async function runWorker(stream, workerOptions) {
|
|
3304
3274
|
const { options, config } = workerOptions;
|
|
3305
|
-
const {
|
|
3275
|
+
const { useWebWorkers, useCompressionStream, compressed, checkCrc32, computeCrc32, encrypted, format, codecURI } = options;
|
|
3306
3276
|
const { workerURI, createWorker, maxWorkers } = config;
|
|
3307
3277
|
if (format) {
|
|
3308
3278
|
if (codecURI) {
|
|
@@ -3310,7 +3280,6 @@ async function runWorker(stream, workerOptions) {
|
|
|
3310
3280
|
}
|
|
3311
3281
|
await ensureCodecStreams(format, options.codecURI);
|
|
3312
3282
|
}
|
|
3313
|
-
workerOptions.transferStreams = !format && (transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams));
|
|
3314
3283
|
const streamCopy = !compressed && !checkCrc32 && !computeCrc32 && !encrypted;
|
|
3315
3284
|
const workerSupported = format === UNDEFINED_VALUE || Boolean(options.codecURI);
|
|
3316
3285
|
workerOptions.useWebWorkers = !streamCopy && workerSupported && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
|
|
@@ -5112,17 +5081,6 @@ class ZipReader {
|
|
|
5112
5081
|
if (filename === UNDEFINED_VALUE) {
|
|
5113
5082
|
filename = decodeText(rawFilename, rawFilenameEncoding);
|
|
5114
5083
|
}
|
|
5115
|
-
if (normalizeFilename) {
|
|
5116
|
-
const normalizedFilename = normalizeFilename(filename);
|
|
5117
|
-
if (normalizedFilename !== UNDEFINED_VALUE) {
|
|
5118
|
-
filename = normalizedFilename;
|
|
5119
|
-
}
|
|
5120
|
-
}
|
|
5121
|
-
if (isUnsafeFilename(filename, filenameValidation)) {
|
|
5122
|
-
const error = new Error(ERR_UNSAFE_FILENAME);
|
|
5123
|
-
error.filename = filename;
|
|
5124
|
-
throw error;
|
|
5125
|
-
}
|
|
5126
5084
|
let comment = decode(rawComment, rawCommentEncoding, TEXT_TYPE_COMMENT);
|
|
5127
5085
|
if (comment === UNDEFINED_VALUE) {
|
|
5128
5086
|
comment = decodeText(rawComment, rawCommentEncoding);
|
|
@@ -5150,7 +5108,20 @@ class ZipReader {
|
|
|
5150
5108
|
filename,
|
|
5151
5109
|
comment
|
|
5152
5110
|
});
|
|
5153
|
-
|
|
5111
|
+
const malformedExtraField = readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
|
|
5112
|
+
filename = fileEntry.filename;
|
|
5113
|
+
if (normalizeFilename) {
|
|
5114
|
+
const normalizedFilename = normalizeFilename(filename);
|
|
5115
|
+
if (normalizedFilename !== UNDEFINED_VALUE) {
|
|
5116
|
+
filename = fileEntry.filename = normalizedFilename;
|
|
5117
|
+
}
|
|
5118
|
+
}
|
|
5119
|
+
if (isUnsafeFilename(filename, filenameValidation)) {
|
|
5120
|
+
const error = new Error(ERR_UNSAFE_FILENAME);
|
|
5121
|
+
error.filename = filename;
|
|
5122
|
+
throw error;
|
|
5123
|
+
}
|
|
5124
|
+
if (malformedExtraField) {
|
|
5154
5125
|
addWarning(warnings, WARNING_MALFORMED_EXTRA_FIELD, filename);
|
|
5155
5126
|
}
|
|
5156
5127
|
fileEntry.offset += prependedDataLength;
|
|
@@ -5554,7 +5525,6 @@ let ZipEntry$1 = class ZipEntry {
|
|
|
5554
5525
|
encrypted,
|
|
5555
5526
|
useWebWorkers: getOptionValue$1(zipEntry, options, OPTION_USE_WEB_WORKERS),
|
|
5556
5527
|
useCompressionStream,
|
|
5557
|
-
transferStreams: getOptionValue$1(zipEntry, options, OPTION_TRANSFER_STREAMS),
|
|
5558
5528
|
deflate64,
|
|
5559
5529
|
format: registeredCodec ? registeredCodec.format : UNDEFINED_VALUE,
|
|
5560
5530
|
codecURI: registeredCodec ? registeredCodec.codecURI : UNDEFINED_VALUE,
|
|
@@ -5784,19 +5754,17 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
|
|
|
5784
5754
|
readExtraFieldNTFS(extraFieldNTFS, directory);
|
|
5785
5755
|
directory.extraFieldNTFS = extraFieldNTFS;
|
|
5786
5756
|
}
|
|
5787
|
-
const
|
|
5757
|
+
const extraFieldInfoZip = extraField.get(EXTRAFIELD_TYPE_INFOZIP);
|
|
5788
5758
|
let unixIdsRead;
|
|
5759
|
+
if (extraFieldInfoZip) {
|
|
5760
|
+
unixIdsRead = readExtraFieldUnix(extraFieldInfoZip, directory, true);
|
|
5761
|
+
directory.extraFieldInfoZip = extraFieldInfoZip;
|
|
5762
|
+
}
|
|
5763
|
+
const extraFieldUnix = extraField.get(EXTRAFIELD_TYPE_UNIX);
|
|
5789
5764
|
if (extraFieldUnix) {
|
|
5790
|
-
|
|
5765
|
+
readExtraFieldUnix(extraFieldUnix, unixIdsRead ? {} : directory, false);
|
|
5791
5766
|
directory.extraFieldUnix = extraFieldUnix;
|
|
5792
5767
|
}
|
|
5793
|
-
if (!unixIdsRead) {
|
|
5794
|
-
const extraFieldInfoZip = extraField.get(EXTRAFIELD_TYPE_INFOZIP);
|
|
5795
|
-
if (extraFieldInfoZip) {
|
|
5796
|
-
readExtraFieldUnix(extraFieldInfoZip, directory, true);
|
|
5797
|
-
directory.extraFieldInfoZip = extraFieldInfoZip;
|
|
5798
|
-
}
|
|
5799
|
-
}
|
|
5800
5768
|
const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
|
|
5801
5769
|
if (extraFieldExtendedTimestamp) {
|
|
5802
5770
|
readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
|
|
@@ -6022,19 +5990,11 @@ async function detectOverlappingEntry({
|
|
|
6022
5990
|
const zip64 = Boolean(extraFieldZip64);
|
|
6023
5991
|
const dataDescriptorArray = await readUint8Array(reader, dataOffset + compressedSize, DATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH + DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH);
|
|
6024
5992
|
const dataDescriptorView = getDataView(dataDescriptorArray);
|
|
6025
|
-
const
|
|
6026
|
-
|
|
6027
|
-
|
|
6028
|
-
|
|
6029
|
-
|
|
6030
|
-
candidate.compressedSize == compressedSize && candidate.uncompressedSize == uncompressedSize) {
|
|
6031
|
-
localDataDescriptor = candidate;
|
|
6032
|
-
break;
|
|
6033
|
-
}
|
|
6034
|
-
}
|
|
6035
|
-
if (!localDataDescriptor) {
|
|
6036
|
-
localDataDescriptor = readDataDescriptor(dataDescriptorView, zip64, false);
|
|
6037
|
-
}
|
|
5993
|
+
const candidates = [[zip64, true], [zip64, false], [!zip64, true], [!zip64, false]]
|
|
5994
|
+
.map(([zip64Layout, signature]) => readDataDescriptor(dataDescriptorView, zip64Layout, signature))
|
|
5995
|
+
.filter(candidate => candidate && candidate.compressedSize == compressedSize && candidate.uncompressedSize == uncompressedSize);
|
|
5996
|
+
const localDataDescriptor = candidates.find(candidate => candidate.crc32 == crc32) || candidates[0] ||
|
|
5997
|
+
readDataDescriptor(dataDescriptorView, zip64, true) || readDataDescriptor(dataDescriptorView, zip64, false);
|
|
6038
5998
|
if (localDataDescriptor) {
|
|
6039
5999
|
fileEntry.localDirectory.dataDescriptor = localDataDescriptor;
|
|
6040
6000
|
dataDescriptorLength = getDataDescriptorLength(localDataDescriptor.zip64, localDataDescriptor.signature);
|
|
@@ -6691,6 +6651,7 @@ class ZipWriter {
|
|
|
6691
6651
|
rawExtraFieldExtendedTimestamp: EMPTY_UINT8_ARRAY,
|
|
6692
6652
|
rawExtraFieldNTFS: EMPTY_UINT8_ARRAY,
|
|
6693
6653
|
rawExtraFieldUnix: EMPTY_UINT8_ARRAY,
|
|
6654
|
+
rawCentralExtraFieldUnix: EMPTY_UINT8_ARRAY,
|
|
6694
6655
|
rawExtraField,
|
|
6695
6656
|
rawCentralExtraField: EMPTY_UINT8_ARRAY,
|
|
6696
6657
|
headerArray,
|
|
@@ -7259,7 +7220,6 @@ function resolveMetadata(zipWriter, name, options) {
|
|
|
7259
7220
|
const ntfsTimestamp = getOptionValue(zipWriter, options, OPTION_NTFS_TIMESTAMP);
|
|
7260
7221
|
const keepOrder = getOptionValue(zipWriter, options, OPTION_KEEP_ORDER, true);
|
|
7261
7222
|
const useWebWorkers = getOptionValue(zipWriter, options, OPTION_USE_WEB_WORKERS);
|
|
7262
|
-
const transferStreams = getOptionValue(zipWriter, options, OPTION_TRANSFER_STREAMS);
|
|
7263
7223
|
const bufferedWrite = getOptionValue(zipWriter, options, OPTION_BUFFERED_WRITE);
|
|
7264
7224
|
const createTempStream = getFunctionOptionValue(zipWriter, options, OPTION_CREATE_TEMP_STREAM);
|
|
7265
7225
|
const dataDescriptorSignature = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR_SIGNATURE, true);
|
|
@@ -7325,7 +7285,6 @@ function resolveMetadata(zipWriter, name, options) {
|
|
|
7325
7285
|
ntfsTimestamp,
|
|
7326
7286
|
keepOrder,
|
|
7327
7287
|
useWebWorkers,
|
|
7328
|
-
transferStreams,
|
|
7329
7288
|
bufferedWrite,
|
|
7330
7289
|
createTempStream,
|
|
7331
7290
|
dataDescriptorSignature,
|
|
@@ -7384,7 +7343,7 @@ async function resolveSizes(zipWriter, reader, { resolvedOptions: metadata }, op
|
|
|
7384
7343
|
if (reader) {
|
|
7385
7344
|
reader = new GenericReader(reader);
|
|
7386
7345
|
await initStream(reader);
|
|
7387
|
-
if (!reader.
|
|
7346
|
+
if (!reader.readUint8Array && !reader.readable) {
|
|
7388
7347
|
throw new Error(ERR_INVALID_READER);
|
|
7389
7348
|
}
|
|
7390
7349
|
({ size: contentSize } = reader);
|
|
@@ -7745,6 +7704,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7745
7704
|
extraFieldExtendedTimestampTime,
|
|
7746
7705
|
rawExtraFieldNTFS,
|
|
7747
7706
|
rawExtraFieldUnix,
|
|
7707
|
+
rawCentralExtraFieldUnix,
|
|
7748
7708
|
rawExtraFieldAES,
|
|
7749
7709
|
} = headerInfo;
|
|
7750
7710
|
const { dataDescriptorArray } = dataDescriptorInfo;
|
|
@@ -7769,7 +7729,6 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7769
7729
|
rawExtraField,
|
|
7770
7730
|
rawCentralExtraField,
|
|
7771
7731
|
useWebWorkers,
|
|
7772
|
-
transferStreams,
|
|
7773
7732
|
onstart,
|
|
7774
7733
|
onprogress,
|
|
7775
7734
|
onend,
|
|
@@ -7811,6 +7770,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7811
7770
|
rawExtraFieldExtendedTimestamp,
|
|
7812
7771
|
rawExtraFieldNTFS,
|
|
7813
7772
|
rawExtraFieldUnix,
|
|
7773
|
+
rawCentralExtraFieldUnix,
|
|
7814
7774
|
rawExtraFieldAES,
|
|
7815
7775
|
rawExtraField,
|
|
7816
7776
|
rawCentralExtraField,
|
|
@@ -7857,7 +7817,6 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7857
7817
|
encrypted: encrypted && !passThroughEncryption,
|
|
7858
7818
|
useWebWorkers,
|
|
7859
7819
|
useCompressionStream,
|
|
7860
|
-
transferStreams,
|
|
7861
7820
|
format,
|
|
7862
7821
|
codecURI,
|
|
7863
7822
|
compressionMethod
|
|
@@ -8035,6 +7994,7 @@ function getHeaderInfo(options) {
|
|
|
8035
7994
|
rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
|
|
8036
7995
|
}
|
|
8037
7996
|
let rawExtraFieldUnix;
|
|
7997
|
+
let rawCentralExtraFieldUnix;
|
|
8038
7998
|
try {
|
|
8039
7999
|
const { uid, gid, unixExtraFieldType } = options;
|
|
8040
8000
|
if (unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
|
|
@@ -8049,7 +8009,7 @@ function getHeaderInfo(options) {
|
|
|
8049
8009
|
extraFieldUnix.writeBytes(uidBytes);
|
|
8050
8010
|
extraFieldUnix.writeUint8(gidBytes.length);
|
|
8051
8011
|
extraFieldUnix.writeBytes(gidBytes);
|
|
8052
|
-
rawExtraFieldUnix = extraFieldUnix.array;
|
|
8012
|
+
rawExtraFieldUnix = rawCentralExtraFieldUnix = extraFieldUnix.array;
|
|
8053
8013
|
} else if (unixExtraFieldType == UNIX_EXTRA_FIELD_TYPE && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE)) {
|
|
8054
8014
|
const extraFieldUnix = createRecordWriter(8);
|
|
8055
8015
|
extraFieldUnix.writeUint16(EXTRAFIELD_TYPE_UNIX);
|
|
@@ -8057,11 +8017,15 @@ function getHeaderInfo(options) {
|
|
|
8057
8017
|
extraFieldUnix.writeUint16((uid === UNDEFINED_VALUE ? 0 : uid) & MAX_16_BITS);
|
|
8058
8018
|
extraFieldUnix.writeUint16((gid === UNDEFINED_VALUE ? 0 : gid) & MAX_16_BITS);
|
|
8059
8019
|
rawExtraFieldUnix = extraFieldUnix.array;
|
|
8020
|
+
const centralExtraFieldUnix = createRecordWriter(4);
|
|
8021
|
+
centralExtraFieldUnix.writeUint16(EXTRAFIELD_TYPE_UNIX);
|
|
8022
|
+
centralExtraFieldUnix.writeUint16(0);
|
|
8023
|
+
rawCentralExtraFieldUnix = centralExtraFieldUnix.array;
|
|
8060
8024
|
} else {
|
|
8061
|
-
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
8025
|
+
rawExtraFieldUnix = rawCentralExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
8062
8026
|
}
|
|
8063
8027
|
} catch {
|
|
8064
|
-
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
8028
|
+
rawExtraFieldUnix = rawCentralExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
8065
8029
|
}
|
|
8066
8030
|
if (compressionMethod === UNDEFINED_VALUE) {
|
|
8067
8031
|
compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
|
|
@@ -8153,6 +8117,7 @@ function getHeaderInfo(options) {
|
|
|
8153
8117
|
rawExtraFieldExtendedTimestamp,
|
|
8154
8118
|
rawExtraFieldNTFS,
|
|
8155
8119
|
rawExtraFieldUnix,
|
|
8120
|
+
rawCentralExtraFieldUnix,
|
|
8156
8121
|
rawExtraFieldAES,
|
|
8157
8122
|
extraFieldLength
|
|
8158
8123
|
};
|
|
@@ -8328,7 +8293,7 @@ function createDirectoryRecords(files) {
|
|
|
8328
8293
|
rawExtraFieldAES,
|
|
8329
8294
|
rawComment,
|
|
8330
8295
|
rawExtraFieldNTFS,
|
|
8331
|
-
|
|
8296
|
+
rawCentralExtraFieldUnix,
|
|
8332
8297
|
rawExtraField,
|
|
8333
8298
|
rawCentralExtraField,
|
|
8334
8299
|
extraFieldExtendedTimestampFlag,
|
|
@@ -8390,7 +8355,7 @@ function createDirectoryRecords(files) {
|
|
|
8390
8355
|
rawExtraFieldZip64,
|
|
8391
8356
|
rawExtraFieldAES,
|
|
8392
8357
|
rawExtraFieldNTFS,
|
|
8393
|
-
|
|
8358
|
+
rawCentralExtraFieldUnix,
|
|
8394
8359
|
rawExtraFieldTimestamp,
|
|
8395
8360
|
rawExtraField,
|
|
8396
8361
|
rawCentralExtraField);
|
|
@@ -8419,7 +8384,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
8419
8384
|
rawExtraFieldAES,
|
|
8420
8385
|
rawExtraFieldExtendedTimestamp,
|
|
8421
8386
|
rawExtraFieldNTFS,
|
|
8422
|
-
|
|
8387
|
+
rawCentralExtraFieldUnix,
|
|
8423
8388
|
rawExtraField,
|
|
8424
8389
|
rawCentralExtraField,
|
|
8425
8390
|
rawComment,
|
|
@@ -8436,7 +8401,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
8436
8401
|
uncompressedSize,
|
|
8437
8402
|
compressedSize
|
|
8438
8403
|
} = fileEntry;
|
|
8439
|
-
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS,
|
|
8404
|
+
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawCentralExtraFieldUnix, rawExtraField, rawCentralExtraField);
|
|
8440
8405
|
const directoryRecordLength = CENTRAL_FILE_HEADER_LENGTH + getLength(rawFilename, rawComment) + extraFieldLength;
|
|
8441
8406
|
if (exceedsAvailableSize(writer, offset + directoryRecordLength - directoryDiskOffset)) {
|
|
8442
8407
|
await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));
|
|
@@ -8472,7 +8437,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
8472
8437
|
directoryRecord.writeBytes(rawExtraFieldAES);
|
|
8473
8438
|
directoryRecord.writeBytes(rawExtraFieldExtendedTimestamp);
|
|
8474
8439
|
directoryRecord.writeBytes(rawExtraFieldNTFS);
|
|
8475
|
-
directoryRecord.writeBytes(
|
|
8440
|
+
directoryRecord.writeBytes(rawCentralExtraFieldUnix);
|
|
8476
8441
|
directoryRecord.writeBytes(rawExtraField);
|
|
8477
8442
|
directoryRecord.writeBytes(rawCentralExtraField);
|
|
8478
8443
|
directoryRecord.writeBytes(rawComment);
|
|
@@ -9049,7 +9014,7 @@ function formatSupported(StreamClass, format) {
|
|
|
9049
9014
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
9050
9015
|
*/
|
|
9051
9016
|
|
|
9052
|
-
const VERSION = "2.
|
|
9017
|
+
const VERSION = "2.19.0";
|
|
9053
9018
|
|
|
9054
9019
|
/*
|
|
9055
9020
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -11128,7 +11093,7 @@ function decodeMimeTypes(data) {
|
|
|
11128
11093
|
*/
|
|
11129
11094
|
|
|
11130
11095
|
|
|
11131
|
-
|
|
11096
|
+
g$1(setDefaultConfiguration);
|
|
11132
11097
|
|
|
11133
11098
|
exports.BlobReader = BlobReader;
|
|
11134
11099
|
exports.BlobWriter = BlobWriter;
|