@zip.js/zip.js 2.11.4 → 2.13.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/deno.json +1 -1
- package/dist/zip-core-external.js +549 -139
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +559 -136
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +615 -260
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +628 -257
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +615 -260
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +630 -259
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +631 -260
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +561 -138
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +561 -138
- 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 +562 -139
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +630 -259
- package/index-native.min.js +1 -1
- package/index.cjs +631 -260
- package/index.d.cts +474 -59
- package/index.d.ts +474 -59
- package/index.min.js +1 -1
- package/lib/core/codec-worker-web.js +72 -22
- package/lib/core/codec-worker.js +18 -5
- package/lib/core/configuration.js +20 -5
- package/lib/core/constants.js +2 -0
- package/lib/core/io.js +13 -5
- package/lib/core/options.js +16 -0
- package/lib/core/streams/codec-stream.js +6 -0
- package/lib/core/util/error.js +35 -0
- package/lib/core/util/warnings.js +42 -0
- package/lib/core/version.js +1 -1
- package/lib/core/web-worker-base.js +46 -9
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/web-worker-inline-wasm.js +1 -1
- package/lib/core/zip-entry.js +49 -1
- package/lib/core/zip-fs.js +45 -133
- package/lib/core/zip-reader.js +115 -52
- package/lib/core/zip-writer.js +244 -57
- package/lib/zip-core-base.js +9 -3
- package/lib/zip-core-reader.js +2 -0
- package/lib/zip-core-writer.js +6 -1
- package/lib/zip-module-wasm-base.js +2 -2
- package/package.json +5 -3
- package/worker-message-property-names.js +1 -1
package/dist/zip.js
CHANGED
|
@@ -134,6 +134,7 @@
|
|
|
134
134
|
const BOOLEAN_TYPE = "boolean";
|
|
135
135
|
|
|
136
136
|
const EMPTY_UINT8_ARRAY = new Uint8Array();
|
|
137
|
+
const SYMBOL_ASYNC_DISPOSE = Symbol.asyncDispose || Symbol();
|
|
137
138
|
|
|
138
139
|
/*
|
|
139
140
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
@@ -178,6 +179,7 @@
|
|
|
178
179
|
const OPTION_CHECK_OVERLAPPING_ENTRY = "checkOverlappingEntry";
|
|
179
180
|
const OPTION_CHECK_AMBIGUITY = "checkAmbiguity";
|
|
180
181
|
const OPTION_CHECK_LOCAL_DIRECTORY = "checkLocalDirectory";
|
|
182
|
+
const OPTION_CHECK_LOCAL_FILENAME = "checkLocalFilename";
|
|
181
183
|
const OPTION_CHECK_SIGNATURE = "checkSignature";
|
|
182
184
|
const OPTION_CHECK_CRC32 = "checkCrc32";
|
|
183
185
|
const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
|
|
@@ -208,15 +210,18 @@
|
|
|
208
210
|
const OPTION_MAX_APPENDED_DATA_SIZE = "maxAppendedDataSize";
|
|
209
211
|
const OPTION_DECRYPT_CENTRAL_DIRECTORY = "decryptCentralDirectory";
|
|
210
212
|
const OPTION_SIGN_CENTRAL_DIRECTORY = "signCentralDirectory";
|
|
213
|
+
const OPTION_ENTRY = "entry";
|
|
211
214
|
const TEXT_TYPE_FILENAME = "filename";
|
|
212
215
|
const TEXT_TYPE_COMMENT = "comment";
|
|
213
216
|
const STRICTNESS_STRICT = "strict";
|
|
214
217
|
const STRICTNESS_BALANCED = "balanced";
|
|
215
218
|
const STRICTNESS_TOLERANT = "tolerant";
|
|
219
|
+
const PASS_THROUGH_COMPRESSED = "compressed";
|
|
216
220
|
|
|
217
221
|
const ERR_INVALID_FUNCTION_OPTION = "Invalid option (must be a function)";
|
|
218
222
|
const ERR_INVALID_SIGNAL = "Invalid signal (must be an AbortSignal instance)";
|
|
219
223
|
const ERR_INVALID_PASSWORD_TYPE = "Invalid password (password must be a string, rawPassword must be a Uint8Array)";
|
|
224
|
+
const ERR_INVALID_PASS_THROUGH_VALUE = "Invalid passThrough option (must be a boolean or 'compressed')";
|
|
220
225
|
const ERR_ABORTED = "The operation was aborted";
|
|
221
226
|
const ABORT_ERROR_NAME = "AbortError";
|
|
222
227
|
|
|
@@ -246,6 +251,13 @@
|
|
|
246
251
|
}
|
|
247
252
|
}
|
|
248
253
|
|
|
254
|
+
function checkPassThroughOption(passThrough) {
|
|
255
|
+
if (passThrough !== UNDEFINED_VALUE && typeof passThrough != BOOLEAN_TYPE && passThrough !== PASS_THROUGH_COMPRESSED) {
|
|
256
|
+
throw new Error(ERR_INVALID_PASS_THROUGH_VALUE);
|
|
257
|
+
}
|
|
258
|
+
return passThrough;
|
|
259
|
+
}
|
|
260
|
+
|
|
249
261
|
function checkInteger(value, maxValue, errorMessage) {
|
|
250
262
|
if (!Number.isInteger(value) || value < 0 || value > maxValue) {
|
|
251
263
|
throw new Error(errorMessage);
|
|
@@ -295,6 +307,8 @@
|
|
|
295
307
|
const MINIMUM_CHUNK_SIZE = 64;
|
|
296
308
|
const MINIMUM_PROPERTY_VALUE = 1;
|
|
297
309
|
const ERR_INVALID_MAX_WORKERS = "Invalid maxWorkers (must be an integer greater than 0)";
|
|
310
|
+
const ERR_INVALID_BASE_URI = "Invalid baseURI (must be a string)";
|
|
311
|
+
const ERR_INVALID_URI = "Invalid URI (must be a string or a function returning a string)";
|
|
298
312
|
let maxWorkers = 2;
|
|
299
313
|
try {
|
|
300
314
|
if (typeof navigator != UNDEFINED_TYPE && navigator.hardwareConcurrency) {
|
|
@@ -319,9 +333,9 @@
|
|
|
319
333
|
};
|
|
320
334
|
|
|
321
335
|
const PROPERTY_NAME_MAX_WORKERS = "maxWorkers";
|
|
336
|
+
const PROPERTY_NAME_BASE_URI = "baseURI";
|
|
322
337
|
|
|
323
|
-
const
|
|
324
|
-
"baseURI",
|
|
338
|
+
const URI_PROPERTY_NAMES = [
|
|
325
339
|
"wasmURI",
|
|
326
340
|
"workerURI"
|
|
327
341
|
];
|
|
@@ -345,7 +359,8 @@
|
|
|
345
359
|
"DecompressionStreamFallback"
|
|
346
360
|
];
|
|
347
361
|
const CONFIGURABLE_PROPERTY_NAMES = [
|
|
348
|
-
|
|
362
|
+
PROPERTY_NAME_BASE_URI,
|
|
363
|
+
...URI_PROPERTY_NAMES,
|
|
349
364
|
...BOOLEAN_PROPERTY_NAMES,
|
|
350
365
|
...NUMBER_PROPERTY_NAMES,
|
|
351
366
|
...FUNCTION_PROPERTY_NAMES
|
|
@@ -389,6 +404,14 @@
|
|
|
389
404
|
}
|
|
390
405
|
} else if (FUNCTION_PROPERTY_NAMES.includes(propertyName)) {
|
|
391
406
|
checkFunctionOption(propertyValue);
|
|
407
|
+
} else if (propertyName == PROPERTY_NAME_BASE_URI) {
|
|
408
|
+
if (propertyValue && typeof propertyValue != STRING_TYPE) {
|
|
409
|
+
throw new Error(ERR_INVALID_BASE_URI);
|
|
410
|
+
}
|
|
411
|
+
} else if (URI_PROPERTY_NAMES.includes(propertyName)) {
|
|
412
|
+
if (propertyValue && typeof propertyValue != STRING_TYPE && typeof propertyValue != FUNCTION_TYPE) {
|
|
413
|
+
throw new Error(ERR_INVALID_URI);
|
|
414
|
+
}
|
|
392
415
|
}
|
|
393
416
|
return propertyValue;
|
|
394
417
|
}
|
|
@@ -422,7 +445,7 @@
|
|
|
422
445
|
Object.assign(config, DEFAULT_CONFIGURATION);
|
|
423
446
|
}
|
|
424
447
|
|
|
425
|
-
const t$1=new Uint8Array(288);t$1.fill(8,0,144),t$1.fill(9,144,256),t$1.fill(7,256,280),t$1.fill(8,280,288),new Uint8Array(30).fill(5);const e$1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n$1=t=>t({workerURI:t=>{const n="text/javascript";let s='!function(t){"function"==typeof define&&define.amd?define(t):t()}(function(){"use strict";const{Array:t,Object:n,Number:e,Math:s,Error:r,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:u,Promise:l,TextEncoder:w,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:S,DecompressionStream:g}=self,v=void 0,b="undefined",k="function",z=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;t<256;t++){let n=t;for(let t=0;t<8;t++)n=1&n?n>>>1^3988292384:n>>>1;C[0][t]=n}for(let t=0;t<256;t++)for(let n=1;n<8;n++){const e=C[n-1][t];C[n][t]=e>>>8^C[0][255&e]}const[I,A,x,M,P,B,D,F]=C;class R{constructor(t){this.o=t||-1}append(t){let n=0|this.o;const e=0|t.length;let s=0;if(e>=8&&t.buffer){const r=new u(t.buffer,t.byteOffset,e),o=e-8;for(;s<=o;s+=8){const t=n^r.getInt32(s,!0),e=r.getInt32(s+4,!0);n=F[255&t]^D[t>>>8&255]^B[t>>>16&255]^P[t>>>24&255]^M[255&e]^x[e>>>8&255]^A[e>>>16&255]^I[e>>>24&255]}}for(;s<e;s++)n=n>>>8^I[255&(n^t[s])];this.o=n}get(){return~this.o}}class U extends d{constructor(){let t;const n=new R;super({transform(t,e){n.append(t),e.enqueue(t)},flush(){const e=new o(4);new u(e.buffer).setUint32(0,n.get()),t.value=e}}),t=this}}function W(t,n){const e=new o(t.length+n.length);return e.set(t),e.set(n,t.length),e}function _(t){return new u(t.buffer,t.byteOffset,t.byteLength)}const T={concat(t,n){if(0===t.length||0===n.length)return t.concat(n);const e=t[t.length-1],s=T.l(e);return 32===s?t.concat(n):T.h(n,s,0|e,t.slice(0,t.length-1))},bitLength(t){const n=t.length;if(0===n)return 0;const e=t[n-1];return 32*(n-1)+T.l(e)},m(t,n){if(32*t.length<n)return t;const e=(t=t.slice(0,s.ceil(n/32))).length;return n&=31,e>0&&n&&(t[e-1]=T.S(n,t[e-1]&2147483648>>n-1,1)),t},S:(t,n,e)=>32===t?n:(e?0|n:n<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,n,e,s){for(void 0===s&&(s=[]);n>=32;n-=32)s.push(e),e=0;if(0===n)return s.concat(t);for(let r=0;r<t.length;r++)s.push(e|t[r]>>>n),e=t[r]<<32-n;const r=t.length?t[t.length-1]:0,o=T.l(r);return s.push(T.S(n+o&31,n+o>32?e:s.pop(),1)),s}},V={bytes:{v(t){const n=T.bitLength(t)/8,e=new o(n);let s;for(let r=0;r<n;r++)3&r||(s=t[r/4]),e[r]=s>>>24,s<<=8;return e},C(t){const n=[];let e,s=0;for(e=0;e<t.length;e++)s=s<<8|t[e],3&~e||(n.push(s),s=0);return 3&e&&n.push(T.S(8*(3&e),s)),n}}},K=class{constructor(t){const n=this;n.blockSize=512,n.I=[1732584193,4023233417,2562383102,271733878,3285377520],n.A=[1518500249,1859775393,2400959708,3395469782],t?(n.M=t.M.slice(0),n.P=t.P.slice(0),n.B=t.B):n.reset()}reset(){const t=this;return t.M=t.I.slice(0),t.P=[],t.B=0,t}update(t){const n=this;"string"==typeof t&&(t=V.D.C(t));const e=n.P=T.concat(n.P,t),s=n.B,o=n.B=s+T.bitLength(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new i(e);let a=0;for(let t=n.blockSize+s-(n.blockSize+s&n.blockSize-1);t<=o;t+=n.blockSize)n.F(c.subarray(16*a,16*(a+1))),a+=1;return e.splice(0,16*a),n}R(){const t=this;let n=t.P;const e=t.M;n=T.concat(n,[T.S(1,1)]);for(let t=n.length+2;15&t;t++)n.push(0);for(n.push(s.floor(t.B/4294967296)),n.push(0|t.B);n.length;)t.F(n.splice(0,16));return t.reset(),e}U(t,n,e,s){return t<=19?n&e|~n&s:t<=39?n^e^s:t<=59?n&e|n&s|e&s:t<=79?n^e^s:void 0}W(t,n){return n<<t|n>>>32-t}F(n){const e=this,r=e.M,o=t(80);for(let t=0;t<16;t++)o[t]=n[t];let c=r[0],i=r[1],a=r[2],f=r[3],u=r[4];for(let t=0;t<=79;t++){t>=16&&(o[t]=e.W(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const n=e.W(5,c)+e.U(t,i,a,f)+u+o[t]+e.A[s.floor(t/20)]|0;u=f,f=a,a=e.W(30,i),i=c,c=n}r[0]=r[0]+c|0,r[1]=r[1]+i|0,r[2]=r[2]+a|0,r[3]=r[3]+f|0,r[4]=r[4]+u|0}},E={importKey:t=>new E._(V.bytes.C(t)),T(t,n,e,s){if(e=e||1e4,s<0||e<0)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let c,i,a,f,l;const w=new ArrayBuffer(o),h=new u(w);let p=0;const d=T;for(n=V.bytes.C(n),l=1;p<(o||1);l++){for(c=i=t.encrypt(d.concat(n,[l])),a=1;a<e;a++)for(i=t.encrypt(i),f=0;f<i.length;f++)c[f]^=i[f];for(a=0;p<(o||1)&&a<c.length;a++)h.setInt32(p,c[a]),p+=4}return w.slice(0,s/8)},_:class{constructor(t){const n=this,e=n.V=K,s=[[],[]];n.K=[new e,new e];const r=n.K[0].blockSize/32;t.length>r&&(t=(new e).update(t).R());for(let n=0;n<r;n++)s[0][n]=909522486^t[n],s[1][n]=1549556828^t[n];n.K[0].update(s[0]),n.K[1].update(s[1]),n.L=new e(n.K[0])}reset(){const t=this;t.L=new t.V(t.K[0]),t.O=!1}update(t){this.O=!0,this.L.update(t)}digest(){const t=this,n=t.L.R(),e=new t.V(t.K[1]).update(n).R();return t.reset(),e}encrypt(t){if(this.O)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},L=typeof h!=b&&typeof h.getRandomValues==k,O="Invalid password",j="zipjs-abort-check-password";function H(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const N=16,q={name:"PBKDF2"},G=n.assign({hash:{name:"HMAC"}},q),J=n.assign({iterations:1e3,hash:{name:"SHA-1"}},q),Q=["deriveBits"],X=[8,12,16],Y=[16,24,32],Z=10,$=[0,0,0,0],tt=typeof h!=b,nt=tt&&h.subtle,et=tt&&typeof nt!=b,st=V.bytes,rt=class{constructor(t){const n=this;n.j=[[[],[],[],[],[]],[[],[],[],[],[]]],n.j[0][0][0]||n.H();const e=n.j[0][4],s=n.j[1],o=t.length;let c,i,a,f=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(n.A=[i=t.slice(0),a=[]],c=o;c<4*o+28;c++){let t=i[c-1];(c%o===0||8===o&&c%o===4)&&(t=e[t>>>24]<<24^e[t>>16&255]<<16^e[t>>8&255]<<8^e[255&t],c%o===0&&(t=t<<8^t>>>24^f<<24,f=f<<1^283*(f>>7))),i[c]=i[c-o]^t}for(let t=0;c;t++,c--){const n=i[3&t?c:c-4];a[t]=c<=4||t<4?n:s[0][e[n>>>24]]^s[1][e[n>>16&255]]^s[2][e[n>>8&255]]^s[3][e[255&n]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}H(){const t=this.j[0],n=this.j[1],e=t[4],s=n[4],r=[],o=[];let c,i,a,f;for(let t=0;t<256;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let u=c=0;!e[u];u^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,e[u]=o,s[o]=u,f=r[a=r[i=r[u]]];let l=16843009*f^65537*a^257*i^16843008*u,w=257*r[o]^16843008*o;for(let e=0;e<4;e++)t[e][u]=w=w<<24^w>>>8,n[e][o]=l=l<<24^l>>>8}for(let e=0;e<5;e++)t[e]=t[e].slice(0),n[e]=n[e].slice(0)}N(t,n){if(4!==t.length)throw new r("invalid aes block size");const e=this.A[n],s=e.length/4-2,o=[0,0,0,0],c=this.j[n],i=c[0],a=c[1],f=c[2],u=c[3],l=c[4];let w,h,p,d=t[0]^e[0],y=t[n?3:1]^e[1],m=t[2]^e[2],S=t[n?1:3]^e[3],g=4;for(let t=0;t<s;t++)w=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^u[255&S]^e[g],h=i[y>>>24]^a[m>>16&255]^f[S>>8&255]^u[255&d]^e[g+1],p=i[m>>>24]^a[S>>16&255]^f[d>>8&255]^u[255&y]^e[g+2],S=i[S>>>24]^a[d>>16&255]^f[y>>8&255]^u[255&m]^e[g+3],g+=4,d=w,y=h,m=p;for(let t=0;t<4;t++)o[n?3&-t:t]=l[d>>>24]<<24^l[y>>16&255]<<16^l[m>>8&255]<<8^l[255&S]^e[g++],w=d,d=y,y=m,m=S,S=w;return o}},ot=class{constructor(t,n){this.G=t,this.J=n,this.X=n}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}Z(t){if(255&~(t>>24))t+=1<<24;else{let n=t>>16&255,e=t>>8&255,s=255&t;255===n?(n=0,255===e?(e=0,255===s?s=0:++s):++e):++n,t=0,t+=n<<16,t+=e<<8,t+=s}return t}$(t){0===(t[0]=this.Z(t[0]))&&(t[1]=this.Z(t[1]))}Y(t,n,e){let s;if(!(s=n.length))return[];const r=T.bitLength(n);for(let r=0;r<s;r+=4){this.$(e);const s=t.encrypt(e);n[r]^=s[0],n[r+1]^=s[1],n[r+2]^=s[2],n[r+3]^=s[3]}return T.m(n,r)}},ct=E._;let it=tt&&et&&typeof nt.importKey==k,at=tt&&et&&typeof nt.deriveBits==k;class ft extends d{constructor({password:t,rawPassword:n,encryptionStrength:e,checkPasswordOnly:s,checkAuthenticationCode:c=!0}){super({start(){lt(this,t,n,e)},async transform(t,n){const e=this,{password:c,strength:i,nt:a,ready:f}=e;c?(await async function(t,n,e,s){const o=await ht(t,n,e,dt(s,0,X[n])),c=dt(s,X[n]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)}(e,i,c,dt(t,0,X[i]+2)),t=dt(t,X[i]+2),s?n.error(new r(j)):a()):await f;const u=new o(t.length-Z-(t.length-Z)%N);n.enqueue(wt(e,t,u,0,Z,!0))},async flush(t){const{et:n,st:e,ot:s,ready:o}=this;if(e&&n){await o;const i=dt(s,0,s.length-Z),a=dt(s,s.length-Z);let f=z;if(i.length){const t=mt(st,i);e.update(t);const s=n.update(t);f=yt(st,s)}const u=dt(yt(st,e.digest()),0,Z);let l=s.length<Z?1:0;for(let t=0;t<Z;t++)l|=u[t]^a[t];if(l&&c)throw new r("Invalid authentication code");t.enqueue(f)}}})}}class ut extends d{constructor({password:t,rawPassword:n,encryptionStrength:e}){super({start(){lt(this,t,n,e)},async transform(t,n){const e=this,{password:s,strength:r,nt:c,ready:i}=e;let a=z;s?(a=await async function(t,n,e){const s=H(new o(X[n]));return W(s,await ht(t,n,e,s))}(e,r,s),c()):await i;const f=new o(a.length+t.length-t.length%N);f.set(a,0),n.enqueue(wt(e,t,f,a.length,0))},async flush(t){const{et:n,st:e,ot:s,ready:r}=this;if(e&&n){await r;let o=z;if(s.length){const t=n.update(mt(st,s));e.update(t),o=yt(st,t)}const c=yt(st,e.digest()).slice(0,Z);t.enqueue(W(o,c))}}})}}function lt(t,e,s,r){n.assign(t,{ready:new l(n=>t.nt=n),password:pt(e,s),strength:r-1,ot:z})}function wt(t,n,e,s,r,c){const{et:i,st:a,ot:f}=t;f.length&&(n=W(f,n));const u=n.length-r;let l;for(e=function(t,n){if(n&&n>t.length){const e=t;(t=new o(n)).set(e,0)}return t}(e,s+(u-u%N)),l=0;l<=u-N;l+=N){const t=mt(st,dt(n,l,l+N));c&&a.update(t);const r=i.update(t);c||a.update(r),e.set(yt(st,r),l+s)}return t.ot=dt(n,l),e}async function ht(e,s,r,c){e.password=null;const i=await async function(t,n,e,s,r){if(!it)return E.importKey(n);try{return await nt.importKey("raw",n,e,!1,r)}catch{return it=!1,E.importKey(n)}}(0,r,G,0,Q),a=await async function(t,n,e){if(!at)return E.T(n,t.salt,J.iterations,e);try{return await nt.deriveBits(t,n,e)}catch{return at=!1,E.T(n,t.salt,J.iterations,e)}}(n.assign({salt:c},J),i,8*(2*Y[s]+2)),f=new o(a),u=mt(st,dt(f,0,Y[s])),l=mt(st,dt(f,Y[s],2*Y[s])),w=dt(f,2*Y[s]);return n.assign(e,{keys:{key:u,ct:l,passwordVerification:w},et:new ot(new rt(u),t.from($)),st:new ct(l)}),w}function pt(t,n){return n===v?function(t){if(typeof w==b){t=unescape(encodeURIComponent(t));const n=new o(t.length);for(let e=0;e<n.length;e++)n[e]=t.charCodeAt(e);return n}return(new w).encode(t)}(t):n}function dt(t,n,e){return t.subarray(n,e)}function yt(t,n){return t.v(n)}function mt(t,n){return t.C(n)}class St extends d{constructor({password:t,rawPassword:n,passwordVerification:e,checkPasswordOnly:s}){super({start(){vt(this,t,n,e)},transform(t,n){const e=this;if(e.password||e.rawPassword){const n=bt(e,t.subarray(0,12));if(e.password=e.rawPassword=null,0!=(n[11]^e.passwordVerification))throw new r(O);t=t.subarray(12)}s?n.error(new r(j)):n.enqueue(bt(e,t))}})}}class gt extends d{constructor({password:t,rawPassword:n,passwordVerification:e}){super({start(){vt(this,t,n,e)},transform(t,n){const e=this;let s,r;if(e.password||e.rawPassword){e.password=e.rawPassword=null;const n=H(new o(12));n[11]=e.passwordVerification,s=new o(t.length+n.length),s.set(kt(e,n),0),r=12}else s=new o(t.length),r=0;s.set(kt(e,t),r),n.enqueue(s)}})}}function vt(t,e,s,r){n.assign(t,{password:e,rawPassword:s,passwordVerification:r}),function(t,e,s){const r=[305419896,591751049,878082192];if(n.assign(t,{keys:r,it:new R(r[0]),ft:new R(r[2])}),s)for(let n=0;n<s.length;n++)zt(t,s[n]);else for(let n=0;n<e.length;n++)zt(t,e.charCodeAt(n))}(t,e,s)}function bt(t,n){const e=new o(n.length);for(let s=0;s<n.length;s++)e[s]=Ct(t)^n[s],zt(t,e[s]);return e}function kt(t,n){const e=new o(n.length);for(let s=0;s<n.length;s++)e[s]=Ct(t)^n[s],zt(t,n[s]);return e}function zt(t,n){let[,e]=t.keys;t.it.append([n]);const r=~t.it.get();e=At(s.imul(At(e+It(r)),134775813)+1),t.ft.append([e>>>24]);const o=~t.ft.get();t.keys=[r,e,o]}function Ct(t){const n=2|t.keys[2];return It(s.imul(n,1^n)>>>8)}function It(t){return 255&t}function At(t){return 4294967295&t}function xt(t){if(t instanceof y)return t;const n=t.getReader();return new y({async pull(t){const{value:e,done:s}=await n.read();s?t.close():t.enqueue(e)},cancel:t=>n.cancel(t)})}const Mt=new f;function Pt(t){return Mt.get(t)}const Bt="Invalid uncompressed size",Dt="deflate-raw",Ft="gzip",Rt=[31,139,8];class Ut extends d{constructor(t,{chunkSize:n,CompressionStreamFallback:e,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,computeCrc32:a,level:f,deflate64:l,format:w,compressionMethod:h,inputSize:p}=t,d=this;let y,m,S,g=super.readable;const v=w&&Pt(w),b=a&&r&&!l&&!v&&(!o||i)&&Boolean(c&&s);if(o&&!i||!a||b||(y=new U,g=Lt(g,y)),r)if(v)g=Ot(g,Kt(v.CompressionStream,w,{level:f,chunkSize:n,compressionMethod:h,uncompressedSize:p}));else if(b)S=new Wt,g=Ot(g,new s(Ft)),g=Lt(g,S);else try{g=Et(g,c,{level:f,chunkSize:n},s,e)}catch(t){let n;try{n=new s(Ft)}catch{throw t}g=Ot(g,n),g=Lt(g,new Wt)}o&&(i?g=Lt(g,new gt(t)):(m=new ut(t),g=Lt(g,m))),Vt(d,g,()=>{o&&!i||!a||(d.crc32=b?S.crc32:new u(y.value.buffer).getUint32(0))})}}class Wt extends d{constructor(){let t,n=10,e=new o(0);super({transform(t,r){if(n){const e=s.min(n,t.length);if(n-=e,!(t=t.subarray(e)).length)return}const o=e.length+t.length;if(o<=8)return void(e=W(e,t));const c=o-8,i=s.min(c,e.length);r.enqueue(W(e.subarray(0,i),t.subarray(0,c-i))),e=W(e.subarray(i),t.subarray(c-i))},flush(){const n=_(e);t.crc32=n.getUint32(0,!0),t.uncompressedSize=n.getUint32(4,!0)}}),t=this}}class _t extends d{constructor(t,{chunkSize:n,DecompressionStreamFallback:e,DecompressionStream:s}){super({});const{zipCrypto:c,encrypted:i,checkCrc32:a,crc32:f,compressed:w,useCompressionStream:h,deflate64:p,format:m,compressionMethod:S,rawBitFlag:g,outputSize:b}=t;let k,z,C=super.readable;if(i&&(c?C=Lt(C,new St(t)):(z=new ft(t),C=Lt(C,z))),w){const t=m&&Pt(m);if(t)C=Ot(C,Kt(t.DecompressionStream,m,{chunkSize:n,compressionMethod:S,rawBitFlag:g,uncompressedSize:b}));else try{C=Et(C,h,{chunkSize:n,deflate64:p},s,e)}catch(t){if(p||b===v)throw t;let n;try{n=new s(Ft)}catch{throw t}C=function(t,n,e){const s=new R;let c,i,a,f=0,u=!1;const w=new l((t,n)=>{i=t,a=n});w.catch(()=>{}),e||i();const h=new d({start(t){const n=new o(10);n.set(Rt),t.enqueue(n)},transform(t,n){n.enqueue(t)},async flush(t){u=!0,y();try{await w}finally{m()}const n=new o(8),r=_(n);r.setUint32(0,s.get(),!0),r.setUint32(4,e,!0),t.enqueue(n)},cancel(t){a(t)}}),p=new d({transform(t,n){s.append(t),f+=t.length,f>=e?i():u&&y(),n.enqueue(t)},cancel(t){a(t)}});return t=Lt(t,h),Lt(t=Ot(t,n),p);function y(){m(),c=setTimeout(()=>a(new r(Bt)),5e3)}function m(){clearTimeout(c)}}(C,n,b)}C=function(t){const n=t.getReader();return new y({async pull(t){let e;try{e=await n.read()}catch(t){if(t&&t.message)throw t;const n=new r("Invalid compressed data");throw n.cause=t,n}const{value:s,done:o}=e;o?t.close():t.enqueue(s)},cancel:t=>n.cancel(t)})}(C)}a&&(k=new U,C=Lt(C,k)),Vt(this,C,()=>{if(a){const t=new u(k.value.buffer);if(f!=t.getUint32(0,!1))throw new r("Invalid CRC32")}})}}const Tt=new f;function Vt(t,e,s){e=Lt(e,new d({flush:s})),n.defineProperty(t,"readable",{get:()=>e})}function Kt(t,n,e){if(!t)throw new r("Compression method not supported");return new t(n,e)}function Et(t,n,e,s,r){const o=n&&s?s:r||s,c=e.deflate64?"deflate64-raw":Dt;let i;try{i=new o(c,e)}catch(t){if(!n||!r||o==r)throw t;i=new r(c,e)}return Ot(t,i)}function Lt(t,n){return xt(t).pipeThrough(n)}function Ot(t,n){const e=n.writable.getWriter(),s=t.getReader();return async function(){try{for(;;){await e.ready;const t=await s.read();if(t.done){await e.close();break}await e.write(t.value)}}catch(t){await async function(t,n){try{await t.abort(n)}catch{}}(e,t),await async function(t,n){try{await t.cancel(n)}catch{}}(s,t)}}(),n.readable}const jt="data",Ht="close",Nt="deflate";class qt extends d{constructor(t,e){super({});const s=this,{codecType:o}=t;let c;o.startsWith(Nt)?c=Ut:o.startsWith("inflate")&&(c=_t),s.outputSize=0;let i=0;const a=new c(t,e),f=super.readable,u=new d({transform(t,n){t&&t.length&&(i+=t.length,n.enqueue(t))},flush(){n.assign(s,{inputSize:i})}}),l=new d({transform(n,e){if(n&&n.length&&(e.enqueue(n),s.outputSize+=n.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r(Bt)},flush(){const{crc32:t}=a;n.assign(s,{crc32:t,inputSize:i})}});n.defineProperty(s,"readable",{get:()=>f.pipeThrough(u).pipeThrough(a).pipeThrough(l)})}}class Gt extends d{constructor(t){const n=[];let s=0;function r(){const e=new o(t);let r=0;for(;r<t;){const s=n[0],o=t-r;s.length<=o?(e.set(s,r),r+=s.length,n.shift()):(e.set(s.subarray(0,o),r),n[0]=s.subarray(o),r+=o)}return s-=t,e}(!e.isFinite(t)||t<1)&&(t=65536),super({transform(e,o){for(n.push(e),s+=e.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(function(t,n){const e=new o(n);let s=0;for(const n of t)e.set(n,s),s+=n.length;return e}(n,s))}})}}let Jt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Jt=navigator.hardwareConcurrency)}catch{}const Qt=new f,Xt=new f;let Yt,Zt=0;async function $t(t){let n,o;try{const{options:c,config:i}=t;if(c.format)try{await async function(t,n){!Mt.has(t)&&n&&function(t,n){const{CompressionStream:e,DecompressionStream:s}=n;if(typeof e!=k&&typeof s!=k)throw new r("Invalid codec module");Mt.set(t,{CompressionStream:e,DecompressionStream:s})}(t,await(import(n)))}(c.format,c.codecURI)}catch(t){throw t.codecImportFailed=!0,t}if(i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream,c.compressed&&!c.format)if(c.useCompressionStream){if(!function(t,n){if(!t)return!1;let e=Tt.get(t);e||(e=new f,Tt.set(t,e));let s=e.get(n);if(s===v){try{new t(n),s=!0}catch{s=!1}e.set(n,s)}return s}(c.codecType.startsWith(Nt)?i.CompressionStream:i.DecompressionStream,Dt))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{c.useCompressionStream=!0}!i.CompressionStreamFallback&&i.CompressionStreamZlib&&(i.CompressionStreamFallback=i.CompressionStreamZlib),!i.DecompressionStreamFallback&&i.DecompressionStreamZlib&&(i.DecompressionStreamFallback=i.DecompressionStreamZlib);const a={highWaterMark:1},u=t.readable?xt(t.readable):new y({async pull(t){const n=new l(t=>Qt.set(Zt,t));tn({type:"pull",messageId:Zt}),Zt=(Zt+1)%e.MAX_SAFE_INTEGER;const{value:s,done:r}=await n;t.enqueue(s),r&&t.close()}},a);o=t.writable?function(t){if(t instanceof m)return t;const n=t.getWriter();return new m({write:t=>n.write(t),close:()=>n.close(),abort:t=>n.abort(t)})}(t.writable):new m({async write(t){let n;const s=new l(t=>n=t);Xt.set(Zt,n),tn({type:jt,value:t,messageId:Zt}),Zt=(Zt+1)%e.MAX_SAFE_INTEGER,await s}},a),n=new qt(c,i),Yt=new AbortController;const{signal:w}=Yt;await u.pipeThrough(n).pipeThrough(new Gt(function(t){return r="string"==typeof(n=r=t.chunkSize)&&n.trim()?e(n):n,e.isInteger(r)&&r>=1?s.max(r,64):65536;var n,r}(i))).pipeTo(o,{signal:w,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{crc32:h,inputSize:p,outputSize:d}=n;tn({type:Ht,result:{crc32:h,inputSize:p,outputSize:d}})}catch(t){if(t.outputSize=n?n.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}nn(t)}}function tn(t){const{value:n}=t;if(n)if(n.length)try{t.value=(e=n,e.byteOffset||e.byteLength!=e.buffer.byteLength?new o(e):e).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var e}function nn(t=new r("Unknown error")){const{message:n,stack:e,code:s,name:o,outputSize:c,cause:i,codecImportFailed:a}=t,f={message:n,stack:e,code:s,name:o,outputSize:c};i&&(f.cause={name:i.name,message:i.message}),a&&(f.codecImportFailed=!0),p({error:f})}addEventListener("message",({data:t})=>{const{type:n,messageId:e,value:s,done:r}=t;try{if("start"==n&&$t(t),n==jt){const t=Qt.get(e);Qt.delete(e),t({value:s||new o,done:r})}if("ack"==n){const t=Xt.get(e);Xt.delete(e),t()}n==Ht&&Yt.abort()}catch(t){nn(t)}}),p({type:"ready"});const en="deflate",sn="deflate-raw",rn="deflate64-raw",on="gzip";let cn,an,fn,un,ln;function wn(t,n,e={}){if(!cn){const t=new r("WASM module not loaded");throw t.cause=ln,t}const c="number"==typeof e.level?e.level:-1,i="number"==typeof e.outBuffer?e.outBuffer:65536,a="number"==typeof e.inBufferSize?e.inBufferSize:65536;return new d({start(){try{let e;if(this.ut=an(i),this.in=an(a),this.inBufferSize=a,!this.ut||!this.in)throw new r("allocation failed");if(this.lt=new o(i),t?(this.wt=cn.deflate_process,this.ht=cn.deflate_last_consumed,this.yt=cn.deflate_end,this.St=cn.deflate_new(),e=n===on?cn.deflate_init_gzip(this.St,c):n===sn?cn.deflate_init_raw(this.St,c):cn.deflate_init(this.St,c)):n===rn?(this.wt=cn.inflate9_process,this.ht=cn.inflate9_last_consumed,this.yt=cn.inflate9_end,this.St=cn.inflate9_new(),e=cn.inflate9_init_raw(this.St)):(this.wt=cn.inflate_process,this.ht=cn.inflate_last_consumed,this.yt=cn.inflate_end,this.St=cn.inflate_new(),e=n===sn?cn.inflate_init_raw(this.St):n===on?cn.inflate_init_gzip(this.St):cn.inflate_init(this.St)),0!==e)throw new r("init failed:"+e)}catch(t){throw f(this),t}},transform(t,n){try{const e=t,c=new o(un.buffer),a=this.wt,f=this.ht,u=this.ut,l=this.lt;let w=0;for(;w<e.length;){const t=s.min(e.length-w,32768);if((!this.in||this.inBufferSize<t)&&(this.in&&fn&&(fn(this.in),this.in=0),this.in=an(t),this.inBufferSize=t,!this.in))throw new r("allocation failed");c.set(e.subarray(w,w+t),this.in);const o=a(this.St,this.in,t,u,i,0),h=o>>24&255,p=128&h?h-256:h;if(p<0)throw new r("process error:"+p);const d=16777215&o;d&&(l.set(c.subarray(u,u+d),0),n.enqueue(l.slice(0,d)));const y=f(this.St);if(0===y&&0===d)break;w+=y}}catch(t){f(this),n.error(t)}},flush(t){try{const n=new o(un.buffer),e=this.wt,s=this.ut,c=this.lt;for(;;){const o=e(this.St,0,0,s,i,4),a=o>>24&255,f=128&a?a-256:a;if(f<0)throw new r("process error:"+f);const u=16777215&o;if(u&&(c.set(n.subarray(s,s+u),0),t.enqueue(c.slice(0,u))),1===a||0===u)break}}catch(n){t.error(n)}finally{const n=f(this);0!==n&&t.error(new r("end error:"+n))}},cancel(){f(this)}});function f(t){let n=0;return t.St&&t.yt&&(n=t.yt(t.St)),t.St=0,t.in&&fn&&fn(t.in),t.in=0,t.ut&&fn&&fn(t.ut),t.ut=0,n}}class hn{constructor(t=en,n){return wn(!0,t,n)}}class pn{constructor(t=en,n){return wn(!1,t,n)}}hn.gt=!0,pn.gt=!0,hn.vt=[en,sn,on],pn.vt=[en,sn,on,rn];let dn=!1;!function(t={}){const{init:n}=t,e=t.CompressionStreamFallback||t.CompressionStreamZlib,s=t.DecompressionStreamFallback||t.DecompressionStreamZlib;self.initModule=async t=>{n&&await n(t),e&&(t.CompressionStreamFallback=e),s&&(t.DecompressionStreamFallback=s)}}({CompressionStreamFallback:hn,DecompressionStreamFallback:pn,init:t=>async function(t,{baseURI:n}){if(!dn)try{await async function(t,n){let e,s;try{try{s=new URL(t,n)}catch{}const r=await fetch(s);e=await r.arrayBuffer()}catch(n){if(!t.startsWith("data:application/wasm;base64,"))throw n;e=function(t){const n=t.split(",")[1],e=atob(n),s=e.length,r=new o(s);for(let t=0;t<s;++t)r[t]=e.charCodeAt(t);return r.buffer}(t)}!function(t){if(cn=t,({malloc:an,free:fn,memory:un}=cn),"function"!=typeof an||"function"!=typeof fn||!un)throw cn=an=fn=un=null,new r("Invalid WASM module")}((await WebAssembly.instantiate(e)).instance.exports)}(t,n),dn=!0}catch(t){throw function(t){ln=t}(t),t}}(t.wasmURI,t)})});\n';if("string"==typeof s&&(s=(new TextEncoder).encode(s)),t){const t=new Blob([s],{type:n});return URL.createObjectURL(t)}return "data:"+n+";base64,"+function(t){let n="";const s=t.length;let r=0;for(;r+2<s;r+=3){const s=t[r]<<16|t[r+1]<<8|t[r+2];n+=e$1[s>>18&63]+e$1[s>>12&63]+e$1[s>>6&63]+e$1[63&s];}const o=s-r;if(1===o){const s=t[r]<<16;n+=e$1[s>>18&63]+e$1[s>>12&63]+"==";}else if(2===o){const s=t[r]<<16|t[r+1]<<8;n+=e$1[s>>18&63]+e$1[s>>12&63]+e$1[s>>6&63]+"=";}return n}(s)}});
|
|
448
|
+
const t$1=new Uint8Array(288);t$1.fill(8,0,144),t$1.fill(9,144,256),t$1.fill(7,256,280),t$1.fill(8,280,288),new Uint8Array(30).fill(5);const e$1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n$1=t=>t({workerURI:t=>{const n="text/javascript";let r='!function(t){"function"==typeof define&&define.amd?define(t):t()}(function(){"use strict";const{Array:t,Object:n,Number:e,Math:r,Error:s,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:u,Promise:l,TextEncoder:w,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:S,DecompressionStream:g}=self,v=void 0,b="undefined",k="function",z=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;t<256;t++){let n=t;for(let t=0;t<8;t++)n=1&n?n>>>1^3988292384:n>>>1;C[0][t]=n}for(let t=0;t<256;t++)for(let n=1;n<8;n++){const e=C[n-1][t];C[n][t]=e>>>8^C[0][255&e]}const[I,A,x,M,P,B,D,F]=C;class R{constructor(t){this.o=t||-1}append(t){let n=0|this.o;const e=0|t.length;let r=0;if(e>=8&&t.buffer){const s=new u(t.buffer,t.byteOffset,e),o=e-8;for(;r<=o;r+=8){const t=n^s.getInt32(r,!0),e=s.getInt32(r+4,!0);n=F[255&t]^D[t>>>8&255]^B[t>>>16&255]^P[t>>>24&255]^M[255&e]^x[e>>>8&255]^A[e>>>16&255]^I[e>>>24&255]}}for(;r<e;r++)n=n>>>8^I[255&(n^t[r])];this.o=n}get(){return~this.o}}class U extends d{constructor(){let t;const n=new R;super({transform(t,e){n.append(t),e.enqueue(t)},flush(){const e=new o(4);new u(e.buffer).setUint32(0,n.get()),t.value=e}}),t=this}}function V(t,n){const e=new o(t.length+n.length);return e.set(t),e.set(n,t.length),e}function W(t){return new u(t.buffer,t.byteOffset,t.byteLength)}const _={concat(t,n){if(0===t.length||0===n.length)return t.concat(n);const e=t[t.length-1],r=_.l(e);return 32===r?t.concat(n):_.h(n,r,0|e,t.slice(0,t.length-1))},bitLength(t){const n=t.length;if(0===n)return 0;const e=t[n-1];return 32*(n-1)+_.l(e)},m(t,n){if(32*t.length<n)return t;const e=(t=t.slice(0,r.ceil(n/32))).length;return n&=31,e>0&&n&&(t[e-1]=_.S(n,t[e-1]&2147483648>>n-1,1)),t},S:(t,n,e)=>32===t?n:(e?0|n:n<<32-t)+1099511627776*t,l:t=>r.round(t/1099511627776)||32,h(t,n,e,r){for(void 0===r&&(r=[]);n>=32;n-=32)r.push(e),e=0;if(0===n)return r.concat(t);for(let s=0;s<t.length;s++)r.push(e|t[s]>>>n),e=t[s]<<32-n;const s=t.length?t[t.length-1]:0,o=_.l(s);return r.push(_.S(n+o&31,n+o>32?e:r.pop(),1)),r}},T={bytes:{v(t){const n=_.bitLength(t)/8,e=new o(n);let r;for(let s=0;s<n;s++)3&s||(r=t[s/4]),e[s]=r>>>24,r<<=8;return e},C(t){const n=[];let e,r=0;for(e=0;e<t.length;e++)r=r<<8|t[e],3&~e||(n.push(r),r=0);return 3&e&&n.push(_.S(8*(3&e),r)),n}}},K=class{constructor(t){const n=this;n.blockSize=512,n.I=[1732584193,4023233417,2562383102,271733878,3285377520],n.A=[1518500249,1859775393,2400959708,3395469782],t?(n.M=t.M.slice(0),n.P=t.P.slice(0),n.B=t.B):n.reset()}reset(){const t=this;return t.M=t.I.slice(0),t.P=[],t.B=0,t}update(t){const n=this;"string"==typeof t&&(t=T.D.C(t));const e=n.P=_.concat(n.P,t),r=n.B,o=n.B=r+_.bitLength(t);if(o>9007199254740991)throw new s("Cannot hash more than 2^53 - 1 bits");const c=new i(e);let a=0;for(let t=n.blockSize+r-(n.blockSize+r&n.blockSize-1);t<=o;t+=n.blockSize)n.F(c.subarray(16*a,16*(a+1))),a+=1;return e.splice(0,16*a),n}R(){const t=this;let n=t.P;const e=t.M;n=_.concat(n,[_.S(1,1)]);for(let t=n.length+2;15&t;t++)n.push(0);for(n.push(r.floor(t.B/4294967296)),n.push(0|t.B);n.length;)t.F(n.splice(0,16));return t.reset(),e}U(t,n,e,r){return t<=19?n&e|~n&r:t<=39?n^e^r:t<=59?n&e|n&r|e&r:t<=79?n^e^r:void 0}V(t,n){return n<<t|n>>>32-t}F(n){const e=this,s=e.M,o=t(80);for(let t=0;t<16;t++)o[t]=n[t];let c=s[0],i=s[1],a=s[2],f=s[3],u=s[4];for(let t=0;t<=79;t++){t>=16&&(o[t]=e.V(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const n=e.V(5,c)+e.U(t,i,a,f)+u+o[t]+e.A[r.floor(t/20)]|0;u=f,f=a,a=e.V(30,i),i=c,c=n}s[0]=s[0]+c|0,s[1]=s[1]+i|0,s[2]=s[2]+a|0,s[3]=s[3]+f|0,s[4]=s[4]+u|0}},j={importKey:t=>new j.W(T.bytes.C(t)),_(t,n,e,r){if(e=e||1e4,r<0||e<0)throw new s("invalid params to pbkdf2");const o=1+(r>>5)<<2;let c,i,a,f,l;const w=new ArrayBuffer(o),h=new u(w);let p=0;const d=_;for(n=T.bytes.C(n),l=1;p<(o||1);l++){for(c=i=t.encrypt(d.concat(n,[l])),a=1;a<e;a++)for(i=t.encrypt(i),f=0;f<i.length;f++)c[f]^=i[f];for(a=0;p<(o||1)&&a<c.length;a++)h.setInt32(p,c[a]),p+=4}return w.slice(0,r/8)},W:class{constructor(t){const n=this,e=n.T=K,r=[[],[]];n.K=[new e,new e];const s=n.K[0].blockSize/32;t.length>s&&(t=(new e).update(t).R());for(let n=0;n<s;n++)r[0][n]=909522486^t[n],r[1][n]=1549556828^t[n];n.K[0].update(r[0]),n.K[1].update(r[1]),n.j=new e(n.K[0])}reset(){const t=this;t.j=new t.T(t.K[0]),t.L=!1}update(t){this.L=!0,this.j.update(t)}digest(){const t=this,n=t.j.R(),e=new t.T(t.K[1]).update(n).R();return t.reset(),e}encrypt(t){if(this.L)throw new s("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},E=typeof h!=b&&typeof h.getRandomValues==k,L="Invalid password",O="zipjs-abort-check-password";function H(t){if(E)return h.getRandomValues(t);throw new s("Crypto API not supported")}const N=16,q={name:"PBKDF2"},G=n.assign({hash:{name:"HMAC"}},q),J=n.assign({iterations:1e3,hash:{name:"SHA-1"}},q),Q=["deriveBits"],X=[8,12,16],Y=[16,24,32],Z=10,$=[0,0,0,0],tt=typeof h!=b,nt=tt&&h.subtle,et=tt&&typeof nt!=b,rt=T.bytes,st=class{constructor(t){const n=this;n.O=[[[],[],[],[],[]],[[],[],[],[],[]]],n.O[0][0][0]||n.H();const e=n.O[0][4],r=n.O[1],o=t.length;let c,i,a,f=1;if(4!==o&&6!==o&&8!==o)throw new s("invalid aes key size");for(n.A=[i=t.slice(0),a=[]],c=o;c<4*o+28;c++){let t=i[c-1];(c%o===0||8===o&&c%o===4)&&(t=e[t>>>24]<<24^e[t>>16&255]<<16^e[t>>8&255]<<8^e[255&t],c%o===0&&(t=t<<8^t>>>24^f<<24,f=f<<1^283*(f>>7))),i[c]=i[c-o]^t}for(let t=0;c;t++,c--){const n=i[3&t?c:c-4];a[t]=c<=4||t<4?n:r[0][e[n>>>24]]^r[1][e[n>>16&255]]^r[2][e[n>>8&255]]^r[3][e[255&n]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}H(){const t=this.O[0],n=this.O[1],e=t[4],r=n[4],s=[],o=[];let c,i,a,f;for(let t=0;t<256;t++)o[(s[t]=t<<1^283*(t>>7))^t]=t;for(let u=c=0;!e[u];u^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,e[u]=o,r[o]=u,f=s[a=s[i=s[u]]];let l=16843009*f^65537*a^257*i^16843008*u,w=257*s[o]^16843008*o;for(let e=0;e<4;e++)t[e][u]=w=w<<24^w>>>8,n[e][o]=l=l<<24^l>>>8}for(let e=0;e<5;e++)t[e]=t[e].slice(0),n[e]=n[e].slice(0)}N(t,n){if(4!==t.length)throw new s("invalid aes block size");const e=this.A[n],r=e.length/4-2,o=[0,0,0,0],c=this.O[n],i=c[0],a=c[1],f=c[2],u=c[3],l=c[4];let w,h,p,d=t[0]^e[0],y=t[n?3:1]^e[1],m=t[2]^e[2],S=t[n?1:3]^e[3],g=4;for(let t=0;t<r;t++)w=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^u[255&S]^e[g],h=i[y>>>24]^a[m>>16&255]^f[S>>8&255]^u[255&d]^e[g+1],p=i[m>>>24]^a[S>>16&255]^f[d>>8&255]^u[255&y]^e[g+2],S=i[S>>>24]^a[d>>16&255]^f[y>>8&255]^u[255&m]^e[g+3],g+=4,d=w,y=h,m=p;for(let t=0;t<4;t++)o[n?3&-t:t]=l[d>>>24]<<24^l[y>>16&255]<<16^l[m>>8&255]<<8^l[255&S]^e[g++],w=d,d=y,y=m,m=S,S=w;return o}},ot=class{constructor(t,n){this.G=t,this.J=n,this.X=n}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}Z(t){if(255&~(t>>24))t+=1<<24;else{let n=t>>16&255,e=t>>8&255,r=255&t;255===n?(n=0,255===e?(e=0,255===r?r=0:++r):++e):++n,t=0,t+=n<<16,t+=e<<8,t+=r}return t}$(t){0===(t[0]=this.Z(t[0]))&&(t[1]=this.Z(t[1]))}Y(t,n,e){let r;if(!(r=n.length))return[];const s=_.bitLength(n);for(let s=0;s<r;s+=4){this.$(e);const r=t.encrypt(e);n[s]^=r[0],n[s+1]^=r[1],n[s+2]^=r[2],n[s+3]^=r[3]}return _.m(n,s)}},ct=j.W;let it=tt&&et&&typeof nt.importKey==k,at=tt&&et&&typeof nt.deriveBits==k;class ft extends d{constructor({password:t,rawPassword:n,encryptionStrength:e,checkPasswordOnly:r,checkAuthenticationCode:c=!0}){super({start(){lt(this,t,n,e)},async transform(t,n){const e=this,{password:c,strength:i,nt:a,ready:f}=e;c?(await async function(t,n,e,r){const o=await ht(t,n,e,dt(r,0,X[n])),c=dt(r,X[n]);if(o[0]!=c[0]||o[1]!=c[1])throw new s(L)}(e,i,c,dt(t,0,X[i]+2)),t=dt(t,X[i]+2),r?n.error(new s(O)):a()):await f;const u=new o(t.length-Z-(t.length-Z)%N);n.enqueue(wt(e,t,u,0,Z,!0))},async flush(t){const{et:n,st:e,ot:r,ready:o}=this;if(e&&n){await o;const i=dt(r,0,r.length-Z),a=dt(r,r.length-Z);let f=z;if(i.length){const t=mt(rt,i);e.update(t);const r=n.update(t);f=yt(rt,r)}const u=dt(yt(rt,e.digest()),0,Z);let l=r.length<Z?1:0;for(let t=0;t<Z;t++)l|=u[t]^a[t];if(l&&c)throw new s("Invalid authentication code");t.enqueue(f)}}})}}class ut extends d{constructor({password:t,rawPassword:n,encryptionStrength:e}){super({start(){lt(this,t,n,e)},async transform(t,n){const e=this,{password:r,strength:s,nt:c,ready:i}=e;let a=z;r?(a=await async function(t,n,e){const r=H(new o(X[n]));return V(r,await ht(t,n,e,r))}(e,s,r),c()):await i;const f=new o(a.length+t.length-t.length%N);f.set(a,0),n.enqueue(wt(e,t,f,a.length,0))},async flush(t){const{et:n,st:e,ot:r,ready:s}=this;if(e&&n){await s;let o=z;if(r.length){const t=n.update(mt(rt,r));e.update(t),o=yt(rt,t)}const c=yt(rt,e.digest()).slice(0,Z);t.enqueue(V(o,c))}}})}}function lt(t,e,r,s){n.assign(t,{ready:new l(n=>t.nt=n),password:pt(e,r),strength:s-1,ot:z})}function wt(t,n,e,r,s,c){const{et:i,st:a,ot:f}=t;f.length&&(n=V(f,n));const u=n.length-s;let l;for(e=function(t,n){if(n&&n>t.length){const e=t;(t=new o(n)).set(e,0)}return t}(e,r+(u-u%N)),l=0;l<=u-N;l+=N){const t=mt(rt,dt(n,l,l+N));c&&a.update(t);const s=i.update(t);c||a.update(s),e.set(yt(rt,s),l+r)}return t.ot=dt(n,l),e}async function ht(e,r,s,c){e.password=null;const i=await async function(t,n,e,r,s){if(!it)return j.importKey(n);try{return await nt.importKey("raw",n,e,!1,s)}catch{return it=!1,j.importKey(n)}}(0,s,G,0,Q),a=await async function(t,n,e){if(!at)return j._(n,t.salt,J.iterations,e);try{return await nt.deriveBits(t,n,e)}catch{return at=!1,j._(n,t.salt,J.iterations,e)}}(n.assign({salt:c},J),i,8*(2*Y[r]+2)),f=new o(a),u=mt(rt,dt(f,0,Y[r])),l=mt(rt,dt(f,Y[r],2*Y[r])),w=dt(f,2*Y[r]);return n.assign(e,{keys:{key:u,ct:l,passwordVerification:w},et:new ot(new st(u),t.from($)),st:new ct(l)}),w}function pt(t,n){return n===v?function(t){if(typeof w==b){t=unescape(encodeURIComponent(t));const n=new o(t.length);for(let e=0;e<n.length;e++)n[e]=t.charCodeAt(e);return n}return(new w).encode(t)}(t):n}function dt(t,n,e){return t.subarray(n,e)}function yt(t,n){return t.v(n)}function mt(t,n){return t.C(n)}class St extends d{constructor({password:t,rawPassword:n,passwordVerification:e,checkPasswordOnly:r}){super({start(){vt(this,t,n,e)},transform(t,n){const e=this;if(e.password||e.rawPassword){const n=bt(e,t.subarray(0,12));if(e.password=e.rawPassword=null,0!=(n[11]^e.passwordVerification))throw new s(L);t=t.subarray(12)}r?n.error(new s(O)):n.enqueue(bt(e,t))}})}}class gt extends d{constructor({password:t,rawPassword:n,passwordVerification:e}){super({start(){vt(this,t,n,e)},transform(t,n){const e=this;let r,s;if(e.password||e.rawPassword){e.password=e.rawPassword=null;const n=H(new o(12));n[11]=e.passwordVerification,r=new o(t.length+n.length),r.set(kt(e,n),0),s=12}else r=new o(t.length),s=0;r.set(kt(e,t),s),n.enqueue(r)}})}}function vt(t,e,r,s){n.assign(t,{password:e,rawPassword:r,passwordVerification:s}),function(t,e,r){const s=[305419896,591751049,878082192];if(n.assign(t,{keys:s,it:new R(s[0]),ft:new R(s[2])}),r)for(let n=0;n<r.length;n++)zt(t,r[n]);else for(let n=0;n<e.length;n++)zt(t,e.charCodeAt(n))}(t,e,r)}function bt(t,n){const e=new o(n.length);for(let r=0;r<n.length;r++)e[r]=Ct(t)^n[r],zt(t,e[r]);return e}function kt(t,n){const e=new o(n.length);for(let r=0;r<n.length;r++)e[r]=Ct(t)^n[r],zt(t,n[r]);return e}function zt(t,n){let[,e]=t.keys;t.it.append([n]);const s=~t.it.get();e=At(r.imul(At(e+It(s)),134775813)+1),t.ft.append([e>>>24]);const o=~t.ft.get();t.keys=[s,e,o]}function Ct(t){const n=2|t.keys[2];return It(r.imul(n,1^n)>>>8)}function It(t){return 255&t}function At(t){return 4294967295&t}function xt(t){if(t instanceof y)return t;const n=t.getReader();return new y({async pull(t){const{value:e,done:r}=await n.read();r?t.close():t.enqueue(e)},cancel:t=>n.cancel(t)})}const Mt=new f;function Pt(t){return Mt.get(t)}const Bt="Invalid uncompressed size",Dt="deflate-raw",Ft="gzip",Rt=[31,139,8];class Ut extends d{constructor(t,{chunkSize:n,CompressionStreamFallback:e,CompressionStream:r}){super({});const{compressed:s,encrypted:o,useCompressionStream:c,zipCrypto:i,computeCrc32:a,level:f,deflate64:l,format:w,compressionMethod:h,inputSize:p}=t,d=this;let y,m,S,g=super.readable;const v=w&&Pt(w),b=a&&s&&!l&&!v&&(!o||i)&&Boolean(c&&r);if(o&&!i||!a||b||(y=new U,g=Et(g,y)),s)if(v)g=Lt(g,Kt(v.CompressionStream,w,{level:f,chunkSize:n,compressionMethod:h,uncompressedSize:p}));else if(b)S=new Vt,g=Lt(g,new r(Ft)),g=Et(g,S);else try{g=jt(g,c,{level:f,chunkSize:n},r,e)}catch(t){let n;try{n=new r(Ft)}catch{throw t}g=Lt(g,n),g=Et(g,new Vt)}o&&(i?g=Et(g,new gt(t)):(m=new ut(t),g=Et(g,m))),Tt(d,g,()=>{o&&!i||!a||(d.crc32=b?S.crc32:new u(y.value.buffer).getUint32(0))})}}class Vt extends d{constructor(){let t,n=10,e=new o(0);super({transform(t,s){if(n){const e=r.min(n,t.length);if(n-=e,!(t=t.subarray(e)).length)return}const o=e.length+t.length;if(o<=8)return void(e=V(e,t));const c=o-8,i=r.min(c,e.length);s.enqueue(V(e.subarray(0,i),t.subarray(0,c-i))),e=V(e.subarray(i),t.subarray(c-i))},flush(){const n=W(e);t.crc32=n.getUint32(0,!0),t.uncompressedSize=n.getUint32(4,!0)}}),t=this}}class Wt extends d{constructor(t,{chunkSize:n,DecompressionStreamFallback:e,DecompressionStream:r}){super({});const{zipCrypto:c,encrypted:i,checkCrc32:a,crc32:f,compressed:w,useCompressionStream:h,deflate64:p,format:m,compressionMethod:S,rawBitFlag:g,outputSize:b}=t;let k,z,C=super.readable;if(i&&(c?C=Et(C,new St(t)):(z=new ft(t),C=Et(C,z))),w){const t=m&&Pt(m);if(t)C=Lt(C,Kt(t.DecompressionStream,m,{chunkSize:n,compressionMethod:S,rawBitFlag:g,uncompressedSize:b}));else try{C=jt(C,h,{chunkSize:n,deflate64:p},r,e)}catch(t){if(p||b===v)throw t;let n;try{n=new r(Ft)}catch{throw t}C=function(t,n,e){const r=new R;let c,i,a,f=0,u=!1;const w=new l((t,n)=>{i=t,a=n});w.catch(()=>{}),e||i();const h=new d({start(t){const n=new o(10);n.set(Rt),t.enqueue(n)},transform(t,n){n.enqueue(t)},async flush(t){u=!0,y();try{await w}finally{m()}const n=new o(8),s=W(n);s.setUint32(0,r.get(),!0),s.setUint32(4,e,!0),t.enqueue(n)},cancel(t){a(t)}}),p=new d({transform(t,n){r.append(t),f+=t.length,f>=e?i():u&&y(),n.enqueue(t)},cancel(t){a(t)}});return t=Et(t,h),Et(t=Lt(t,n),p);function y(){m(),c=setTimeout(()=>a(new s(Bt)),5e3)}function m(){clearTimeout(c)}}(C,n,b)}C=function(t){const n=t.getReader();return new y({async pull(t){let e;try{e=await n.read()}catch(t){if(t&&t.message)throw t;const n=new s("Invalid compressed data");throw n.cause=t,n}const{value:r,done:o}=e;o?t.close():t.enqueue(r)},cancel:t=>n.cancel(t)})}(C)}a&&(k=new U,C=Et(C,k)),Tt(this,C,()=>{if(a){const t=new u(k.value.buffer);if(f!=t.getUint32(0,!1))throw new s("Invalid CRC32")}})}}const _t=new f;function Tt(t,e,r){e=Et(e,new d({flush:r})),n.defineProperty(t,"readable",{get:()=>e})}function Kt(t,n,e){if(!t)throw new s("Compression method not supported");return new t(n,e)}function jt(t,n,e,r,s){const o=n&&r?r:s||r,c=e.deflate64?"deflate64-raw":Dt;let i;try{i=new o(c,e)}catch(t){if(!n||!s||o==s)throw t;i=new s(c,e)}return Lt(t,i)}function Et(t,n){return xt(t).pipeThrough(n)}function Lt(t,n){const e=n.writable.getWriter(),r=t.getReader();return async function(){try{for(;;){await e.ready;const t=await r.read();if(t.done){await e.close();break}await e.write(t.value)}}catch(t){await async function(t,n){try{await t.abort(n)}catch{}}(e,t),await async function(t,n){try{await t.cancel(n)}catch{}}(r,t)}}(),n.readable}const Ot="data",Ht="close",Nt="deflate";class qt extends d{constructor(t,e){super({});const r=this,{codecType:o}=t;let c;o.startsWith(Nt)?c=Ut:o.startsWith("inflate")&&(c=Wt),r.outputSize=0;let i=0;const a=new c(t,e),f=super.readable,u=new d({transform(t,n){t&&t.length&&(i+=t.length,n.enqueue(t))},flush(){n.assign(r,{inputSize:i})}}),l=new d({transform(n,e){if(n&&n.length&&(e.enqueue(n),r.outputSize+=n.length,t.outputSize!==v&&r.outputSize>t.outputSize))throw new s(Bt)},flush(){const{crc32:t}=a;n.assign(r,{crc32:t,inputSize:i})}});n.defineProperty(r,"readable",{get:()=>f.pipeThrough(u).pipeThrough(a).pipeThrough(l)})}}class Gt extends d{constructor(t){const r=[];let s=0,c=0;function i(){const n=new o(t);let e=0;for(;e<t;){const s=r[0],o=t-e;s.length<=o?(n.set(s,e),e+=s.length,r.shift()):(n.set(s.subarray(0,o),e),r[0]=s.subarray(o),e+=o)}return s-=t,n}(!e.isFinite(t)||t<1)&&(t=65536),super({transform(n,e){for(r.push(n),s+=n.length;s>t;)c+=t,e.enqueue(i())},flush(t){s&&(c+=s,t.enqueue(function(t,n){const e=new o(n);let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}(r,s)))}}),n.defineProperty(this,"outputSize",{get:()=>c})}}let Jt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Jt=navigator.hardwareConcurrency)}catch{}function Qt(t){return Boolean(t)&&"object"==typeof t}const Xt=new f,Yt=new f,Zt=function(){try{return structuredClone(new s)instanceof s}catch{return!1}}();let $t,tn=0;async function nn(t){let n,o,c;try{const{options:i,config:a}=t;if(i.format)try{await async function(t,n){!Mt.has(t)&&n&&function(t,n){const{CompressionStream:e,DecompressionStream:r}=n;if(typeof e!=k&&typeof r!=k)throw new s("Invalid codec module");Mt.set(t,{CompressionStream:e,DecompressionStream:r})}(t,await(import(n)))}(i.format,i.codecURI)}catch(t){if(Qt(t))try{t.codecImportFailed=!0}catch{}throw t}if(a.CompressionStream=self.CompressionStream,a.DecompressionStream=self.DecompressionStream,i.compressed&&!i.format)if(i.useCompressionStream){if(!function(t,n){if(!t)return!1;let e=_t.get(t);e||(e=new f,_t.set(t,e));let r=e.get(n);if(r===v){try{new t(n),r=!0}catch{r=!1}e.set(n,r)}return r}(i.codecType.startsWith(Nt)?a.CompressionStream:a.DecompressionStream,Dt))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{i.useCompressionStream=!0}!a.CompressionStreamFallback&&a.CompressionStreamZlib&&(a.CompressionStreamFallback=a.CompressionStreamZlib),!a.DecompressionStreamFallback&&a.DecompressionStreamZlib&&(a.DecompressionStreamFallback=a.DecompressionStreamZlib);const u={highWaterMark:1},w=t.readable?xt(t.readable):new y({async pull(t){const n=new l(t=>Xt.set(tn,t));en({type:"pull",messageId:tn}),tn=(tn+1)%e.MAX_SAFE_INTEGER;const{value:r,done:s}=await n;t.enqueue(r),s&&t.close()}},u);c=t.writable?function(t){if(t instanceof m)return t;const n=t.getWriter();return new m({write:t=>n.write(t),close:()=>n.close(),abort:t=>n.abort(t)})}(t.writable):new m({async write(t){let n;const r=new l(t=>n=t);Yt.set(tn,n),en({type:Ot,value:t,messageId:tn}),tn=(tn+1)%e.MAX_SAFE_INTEGER,await r}},u),n=new qt(i,a),o=new Gt(function(t){return s="string"==typeof(n=s=t.chunkSize)&&n.trim()?e(n):n,e.isInteger(s)&&s>=1?r.max(s,64):65536;var n,s}(a)),$t=new AbortController;const{signal:h}=$t;await w.pipeThrough(n).pipeThrough(o).pipeTo(c,{signal:h,preventClose:!0,preventAbort:!0}),await c.getWriter().close();const{crc32:p,inputSize:d,outputSize:S}=n;en({type:Ht,result:{crc32:p,inputSize:d,outputSize:S}})}catch(t){const n=o?o.outputSize:0;if(Qt(t))try{t.outputSize=n}catch{}if(c&&!c.locked)try{await c.getWriter().close()}catch{}rn(t,n)}}function en(t){const{value:n}=t;if(n)if(n.length)try{t.value=(e=n,e.byteOffset||e.byteLength!=e.buffer.byteLength?new o(e):e).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var e}function rn(t,n){const{message:e,stack:r,code:o,name:c,outputSize:i,cause:a,codecImportFailed:f}=function(t=new s("Unknown error")){return Qt(t)?t:new s(String(t))}(t),u={message:e,stack:r,code:o,name:c,outputSize:i===v?n:i};if(a&&(u.cause={name:a.name,message:a.message}),f&&(u.codecImportFailed=!0),Zt)try{return void p({error:u,errorValue:{value:t}})}catch{}p({error:u})}addEventListener("message",({data:t})=>{const{type:n,messageId:e,value:r,done:s}=t;try{if("start"==n&&nn(t),n==Ot){const t=Xt.get(e);Xt.delete(e),t({value:r||new o,done:s})}if("ack"==n){const t=Yt.get(e);Yt.delete(e),t()}n==Ht&&$t.abort()}catch(t){rn(t)}}),p({type:"ready"});const sn="deflate",on="deflate-raw",cn="deflate64-raw",an="gzip";let fn,un,ln,wn,hn;function pn(t,n,e={}){if(!fn){const t=new s("WASM module not loaded");throw t.cause=hn,t}const c="number"==typeof e.level?e.level:-1,i="number"==typeof e.outBuffer?e.outBuffer:65536,a="number"==typeof e.inBufferSize?e.inBufferSize:65536;return new d({start(){try{let e;if(this.ut=un(i),this.in=un(a),this.inBufferSize=a,!this.ut||!this.in)throw new s("allocation failed");if(this.lt=new o(i),t?(this.wt=fn.deflate_process,this.ht=fn.deflate_last_consumed,this.yt=fn.deflate_end,this.St=fn.deflate_new(),e=n===an?fn.deflate_init_gzip(this.St,c):n===on?fn.deflate_init_raw(this.St,c):fn.deflate_init(this.St,c)):n===cn?(this.wt=fn.inflate9_process,this.ht=fn.inflate9_last_consumed,this.yt=fn.inflate9_end,this.St=fn.inflate9_new(),e=fn.inflate9_init_raw(this.St)):(this.wt=fn.inflate_process,this.ht=fn.inflate_last_consumed,this.yt=fn.inflate_end,this.St=fn.inflate_new(),e=n===on?fn.inflate_init_raw(this.St):n===an?fn.inflate_init_gzip(this.St):fn.inflate_init(this.St)),0!==e)throw new s("init failed:"+e)}catch(t){throw f(this),t}},transform(t,n){try{const e=t,c=new o(wn.buffer),a=this.wt,f=this.ht,u=this.ut,l=this.lt;let w=0;for(;w<e.length;){const t=r.min(e.length-w,32768);if((!this.in||this.inBufferSize<t)&&(this.in&&ln&&(ln(this.in),this.in=0),this.in=un(t),this.inBufferSize=t,!this.in))throw new s("allocation failed");c.set(e.subarray(w,w+t),this.in);const o=a(this.St,this.in,t,u,i,0),h=o>>24&255,p=128&h?h-256:h;if(p<0)throw new s("process error:"+p);const d=16777215&o;d&&(l.set(c.subarray(u,u+d),0),n.enqueue(l.slice(0,d)));const y=f(this.St);if(0===y&&0===d)break;w+=y}}catch(t){f(this),n.error(t)}},flush(t){try{const n=new o(wn.buffer),e=this.wt,r=this.ut,c=this.lt;for(;;){const o=e(this.St,0,0,r,i,4),a=o>>24&255,f=128&a?a-256:a;if(f<0)throw new s("process error:"+f);const u=16777215&o;if(u&&(c.set(n.subarray(r,r+u),0),t.enqueue(c.slice(0,u))),1===a||0===u)break}}catch(n){t.error(n)}finally{const n=f(this);0!==n&&t.error(new s("end error:"+n))}},cancel(){f(this)}});function f(t){let n=0;return t.St&&t.yt&&(n=t.yt(t.St)),t.St=0,t.in&&ln&&ln(t.in),t.in=0,t.ut&&ln&&ln(t.ut),t.ut=0,n}}class dn{constructor(t=sn,n){return pn(!0,t,n)}}class yn{constructor(t=sn,n){return pn(!1,t,n)}}dn.gt=!0,yn.gt=!0,dn.vt=[sn,on,an],yn.vt=[sn,on,an,cn];let mn=!1;!function(t={}){const{init:n}=t,e=t.CompressionStreamFallback||t.CompressionStreamZlib,r=t.DecompressionStreamFallback||t.DecompressionStreamZlib;self.initModule=async t=>{n&&await n(t),e&&(t.CompressionStreamFallback=e),r&&(t.DecompressionStreamFallback=r)}}({CompressionStreamFallback:dn,DecompressionStreamFallback:yn,init:t=>async function(t,{baseURI:n}){if(!mn)try{await async function(t,n){let e,r;try{try{r=new URL(t,n)}catch{}const s=await fetch(r);e=await s.arrayBuffer()}catch(n){if(!t.startsWith("data:application/wasm;base64,"))throw n;e=function(t){const n=t.split(",")[1],e=atob(n),r=e.length,s=new o(r);for(let t=0;t<r;++t)s[t]=e.charCodeAt(t);return s.buffer}(t)}!function(t){if(fn=t,({malloc:un,free:ln,memory:wn}=fn),"function"!=typeof un||"function"!=typeof ln||!wn)throw fn=un=ln=wn=null,new s("Invalid WASM module")}((await WebAssembly.instantiate(e)).instance.exports)}(t,n),mn=!0}catch(t){throw function(t){hn=t}(t),t}}(t.wasmURI,t)})});\n';if("string"==typeof r&&(r=(new TextEncoder).encode(r)),t){const t=new Blob([r],{type:n});return URL.createObjectURL(t)}return "data:"+n+";base64,"+function(t){let n="";const r=t.length;let s=0;for(;s+2<r;s+=3){const r=t[s]<<16|t[s+1]<<8|t[s+2];n+=e$1[r>>18&63]+e$1[r>>12&63]+e$1[r>>6&63]+e$1[63&r];}const o=r-s;if(1===o){const r=t[s]<<16;n+=e$1[r>>18&63]+e$1[r>>12&63]+"==";}else if(2===o){const r=t[s]<<16|t[s+1]<<8;n+=e$1[r>>18&63]+e$1[r>>12&63]+e$1[r>>6&63]+"=";}return n}(r)}});
|
|
426
449
|
|
|
427
450
|
/*
|
|
428
451
|
Copyright (c) 2026 Gildas Lormeau. All rights reserved.
|
|
@@ -468,6 +491,39 @@
|
|
|
468
491
|
return new DataView(array.buffer, array.byteOffset, array.byteLength);
|
|
469
492
|
}
|
|
470
493
|
|
|
494
|
+
/*
|
|
495
|
+
Copyright (c) 2026 Gildas Lormeau. All rights reserved.
|
|
496
|
+
|
|
497
|
+
Redistribution and use in source and binary forms, with or without
|
|
498
|
+
modification, are permitted provided that the following conditions are met:
|
|
499
|
+
|
|
500
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
501
|
+
this list of conditions and the following disclaimer.
|
|
502
|
+
|
|
503
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
504
|
+
notice, this list of conditions and the following disclaimer in
|
|
505
|
+
the documentation and/or other materials provided with the distribution.
|
|
506
|
+
|
|
507
|
+
3. The names of the authors may not be used to endorse or promote products
|
|
508
|
+
derived from this software without specific prior written permission.
|
|
509
|
+
|
|
510
|
+
THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
|
511
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
512
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
|
513
|
+
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
514
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
515
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
516
|
+
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
517
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
518
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
519
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
520
|
+
*/
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
function isErrorObject(error) {
|
|
524
|
+
return Boolean(error) && typeof error == "object";
|
|
525
|
+
}
|
|
526
|
+
|
|
471
527
|
/*
|
|
472
528
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
473
529
|
|
|
@@ -2607,6 +2663,7 @@
|
|
|
2607
2663
|
constructor(chunkSize) {
|
|
2608
2664
|
const pendingChunks = [];
|
|
2609
2665
|
let pendingLength = 0;
|
|
2666
|
+
let outputSize = 0;
|
|
2610
2667
|
if (!Number.isFinite(chunkSize) || chunkSize < 1) {
|
|
2611
2668
|
chunkSize = DEFAULT_CHUNK_SIZE;
|
|
2612
2669
|
}
|
|
@@ -2615,15 +2672,20 @@
|
|
|
2615
2672
|
pendingChunks.push(chunk);
|
|
2616
2673
|
pendingLength += chunk.length;
|
|
2617
2674
|
while (pendingLength > chunkSize) {
|
|
2675
|
+
outputSize += chunkSize;
|
|
2618
2676
|
controller.enqueue(shiftChunk());
|
|
2619
2677
|
}
|
|
2620
2678
|
},
|
|
2621
2679
|
flush(controller) {
|
|
2622
2680
|
if (pendingLength) {
|
|
2681
|
+
outputSize += pendingLength;
|
|
2623
2682
|
controller.enqueue(concatChunks(pendingChunks, pendingLength));
|
|
2624
2683
|
}
|
|
2625
2684
|
}
|
|
2626
2685
|
});
|
|
2686
|
+
Object.defineProperty(this, "outputSize", {
|
|
2687
|
+
get: () => outputSize
|
|
2688
|
+
});
|
|
2627
2689
|
|
|
2628
2690
|
function shiftChunk() {
|
|
2629
2691
|
const result = new Uint8Array(chunkSize);
|
|
@@ -2733,7 +2795,9 @@
|
|
|
2733
2795
|
|
|
2734
2796
|
class CodecWorker {
|
|
2735
2797
|
|
|
2736
|
-
constructor(workerData, { readable, writable },
|
|
2798
|
+
constructor(workerData, { readable, writable }, workerOptions, onTaskFinished) {
|
|
2799
|
+
const { options, config, streamOptions, useWebWorkers, transferStreams, workerURI } = workerOptions;
|
|
2800
|
+
let { createWorker } = workerOptions;
|
|
2737
2801
|
const { signal } = streamOptions;
|
|
2738
2802
|
if (createWorkerFailed) {
|
|
2739
2803
|
createWorker = UNDEFINED_VALUE;
|
|
@@ -2746,6 +2810,7 @@
|
|
|
2746
2810
|
.pipeThrough(new ProgressWatcherStream(streamOptions), { signal }),
|
|
2747
2811
|
writable,
|
|
2748
2812
|
options: Object.assign({}, options),
|
|
2813
|
+
workerOptions,
|
|
2749
2814
|
workerURI,
|
|
2750
2815
|
createWorker,
|
|
2751
2816
|
transferStreams,
|
|
@@ -2827,8 +2892,8 @@
|
|
|
2827
2892
|
};
|
|
2828
2893
|
}
|
|
2829
2894
|
|
|
2830
|
-
async function runWorker$1({ options, readable, writable, onTaskFinished }, config) {
|
|
2831
|
-
let codecStream;
|
|
2895
|
+
async function runWorker$1({ options, readable, writable, onTaskFinished, workerOptions }, config) {
|
|
2896
|
+
let codecStream, chunkStream;
|
|
2832
2897
|
try {
|
|
2833
2898
|
if (options.compressed && !options.format) {
|
|
2834
2899
|
const deflate = options.codecType.startsWith(CODEC_DEFLATE);
|
|
@@ -2851,9 +2916,10 @@
|
|
|
2851
2916
|
}
|
|
2852
2917
|
}
|
|
2853
2918
|
codecStream = new CodecStream(options, config);
|
|
2919
|
+
chunkStream = new ChunkStream(getChunkSize(config));
|
|
2854
2920
|
await readable
|
|
2855
2921
|
.pipeThrough(codecStream)
|
|
2856
|
-
.pipeThrough(
|
|
2922
|
+
.pipeThrough(chunkStream)
|
|
2857
2923
|
.pipeTo(writable, { preventClose: true, preventAbort: true });
|
|
2858
2924
|
const {
|
|
2859
2925
|
crc32,
|
|
@@ -2867,7 +2933,15 @@
|
|
|
2867
2933
|
};
|
|
2868
2934
|
} catch (error) {
|
|
2869
2935
|
if (codecStream) {
|
|
2870
|
-
|
|
2936
|
+
const outputSize = chunkStream ? chunkStream.outputSize : 0;
|
|
2937
|
+
workerOptions.outputSize = outputSize;
|
|
2938
|
+
if (isErrorObject(error)) {
|
|
2939
|
+
try {
|
|
2940
|
+
error.outputSize = outputSize;
|
|
2941
|
+
} catch {
|
|
2942
|
+
// ignored
|
|
2943
|
+
}
|
|
2944
|
+
}
|
|
2871
2945
|
}
|
|
2872
2946
|
throw error;
|
|
2873
2947
|
} finally {
|
|
@@ -2976,11 +3050,23 @@
|
|
|
2976
3050
|
let resolveResult, rejectResult;
|
|
2977
3051
|
const result = new Promise((resolve, reject) => {
|
|
2978
3052
|
resolveResult = resolve;
|
|
2979
|
-
rejectResult =
|
|
3053
|
+
rejectResult = error => {
|
|
3054
|
+
const { outputSize, workerOptions } = workerData;
|
|
3055
|
+
workerOptions.outputSize = outputSize;
|
|
3056
|
+
if (isErrorObject(error) && error.outputSize === UNDEFINED_VALUE) {
|
|
3057
|
+
try {
|
|
3058
|
+
error.outputSize = outputSize;
|
|
3059
|
+
} catch {
|
|
3060
|
+
// ignored
|
|
3061
|
+
}
|
|
3062
|
+
}
|
|
3063
|
+
reject(error);
|
|
3064
|
+
};
|
|
2980
3065
|
});
|
|
2981
3066
|
Object.assign(workerData, {
|
|
2982
3067
|
reader: null,
|
|
2983
3068
|
writer: null,
|
|
3069
|
+
outputSize: 0,
|
|
2984
3070
|
resolveResult,
|
|
2985
3071
|
rejectResult,
|
|
2986
3072
|
result
|
|
@@ -3241,21 +3327,15 @@
|
|
|
3241
3327
|
}
|
|
3242
3328
|
|
|
3243
3329
|
async function onMessage({ data }, workerData) {
|
|
3244
|
-
const { type, value, messageId, result, error } = data;
|
|
3330
|
+
const { type, value, messageId, result, error, errorValue } = data;
|
|
3245
3331
|
const { reader, writer, resolveResult, rejectResult, onTaskFinished, generation } = workerData;
|
|
3246
3332
|
const stale = () => workerData.generation != generation;
|
|
3247
3333
|
try {
|
|
3248
3334
|
if (error) {
|
|
3249
|
-
|
|
3250
|
-
|
|
3251
|
-
Object.assign(responseError, { stack, code, name, outputSize });
|
|
3252
|
-
if (cause) {
|
|
3253
|
-
responseError.cause = Object.assign(new Error(cause.message), { name: cause.name });
|
|
3254
|
-
}
|
|
3255
|
-
if (codecImportFailed) {
|
|
3256
|
-
responseError.codecImportFailed = true;
|
|
3335
|
+
if (error.outputSize !== UNDEFINED_VALUE) {
|
|
3336
|
+
workerData.outputSize = error.outputSize;
|
|
3257
3337
|
}
|
|
3258
|
-
|
|
3338
|
+
fail(getResponseError(error, errorValue));
|
|
3259
3339
|
} else {
|
|
3260
3340
|
if (type == MESSAGE_PULL) {
|
|
3261
3341
|
const { value, done } = await reader.read();
|
|
@@ -3264,39 +3344,82 @@
|
|
|
3264
3344
|
}
|
|
3265
3345
|
}
|
|
3266
3346
|
if (type == MESSAGE_DATA) {
|
|
3347
|
+
const chunk = new Uint8Array(value);
|
|
3267
3348
|
await writer.ready;
|
|
3268
|
-
await writer.write(
|
|
3349
|
+
await writer.write(chunk);
|
|
3350
|
+
workerData.outputSize += chunk.length;
|
|
3269
3351
|
if (!stale()) {
|
|
3270
3352
|
sendMessage({ type: MESSAGE_ACK_DATA, messageId }, workerData);
|
|
3271
3353
|
}
|
|
3272
3354
|
}
|
|
3273
3355
|
if (type == MESSAGE_CLOSE) {
|
|
3274
|
-
|
|
3356
|
+
succeed(result);
|
|
3275
3357
|
}
|
|
3276
3358
|
}
|
|
3277
3359
|
} catch (error) {
|
|
3278
3360
|
if (!stale()) {
|
|
3279
3361
|
terminateWorker$1(workerData);
|
|
3280
|
-
|
|
3362
|
+
fail(error);
|
|
3281
3363
|
}
|
|
3282
3364
|
}
|
|
3283
3365
|
|
|
3284
|
-
function
|
|
3285
|
-
if (stale()) {
|
|
3286
|
-
return;
|
|
3287
|
-
}
|
|
3288
|
-
if (error) {
|
|
3366
|
+
function fail(error) {
|
|
3367
|
+
if (!stale()) {
|
|
3289
3368
|
rejectResult(error);
|
|
3290
|
-
|
|
3369
|
+
releaseWriter();
|
|
3370
|
+
if (!(isErrorObject(error) && error.codecImportFailed)) {
|
|
3371
|
+
onTaskFinished();
|
|
3372
|
+
}
|
|
3373
|
+
}
|
|
3374
|
+
}
|
|
3375
|
+
|
|
3376
|
+
function succeed(result) {
|
|
3377
|
+
if (!stale()) {
|
|
3291
3378
|
resolveResult(result);
|
|
3379
|
+
releaseWriter();
|
|
3380
|
+
onTaskFinished();
|
|
3292
3381
|
}
|
|
3382
|
+
}
|
|
3383
|
+
|
|
3384
|
+
function releaseWriter() {
|
|
3293
3385
|
if (writer) {
|
|
3294
3386
|
writer.releaseLock();
|
|
3295
3387
|
}
|
|
3296
|
-
|
|
3297
|
-
|
|
3388
|
+
}
|
|
3389
|
+
}
|
|
3390
|
+
|
|
3391
|
+
function getResponseError(errorData, errorValue) {
|
|
3392
|
+
const { message, stack, code, name, outputSize, cause, codecImportFailed } = errorData;
|
|
3393
|
+
let responseError;
|
|
3394
|
+
if (errorValue) {
|
|
3395
|
+
responseError = errorValue.value;
|
|
3396
|
+
} else {
|
|
3397
|
+
responseError = Object.assign(new Error(message), { stack, code, name });
|
|
3398
|
+
if (cause) {
|
|
3399
|
+
responseError.cause = Object.assign(new Error(cause.message), { name: cause.name });
|
|
3400
|
+
}
|
|
3401
|
+
}
|
|
3402
|
+
if (isErrorObject(responseError)) {
|
|
3403
|
+
try {
|
|
3404
|
+
if (outputSize !== UNDEFINED_VALUE) {
|
|
3405
|
+
responseError.outputSize = outputSize;
|
|
3406
|
+
}
|
|
3407
|
+
if (codecImportFailed) {
|
|
3408
|
+
responseError.codecImportFailed = true;
|
|
3409
|
+
}
|
|
3410
|
+
if (errorValue) {
|
|
3411
|
+
if (responseError.name !== name) {
|
|
3412
|
+
responseError.name = name;
|
|
3413
|
+
}
|
|
3414
|
+
if (responseError.code !== code) {
|
|
3415
|
+
responseError.code = code;
|
|
3416
|
+
}
|
|
3417
|
+
}
|
|
3418
|
+
} catch {
|
|
3419
|
+
// ignored
|
|
3298
3420
|
}
|
|
3299
3421
|
}
|
|
3422
|
+
return responseError;
|
|
3300
3423
|
}
|
|
3301
3424
|
|
|
3302
3425
|
/*
|
|
@@ -3573,10 +3696,13 @@
|
|
|
3573
3696
|
|
|
3574
3697
|
|
|
3575
3698
|
const ERR_HTTP_STATUS = "HTTP error ";
|
|
3699
|
+
const MIN_SUCCESS_HTTP_STATUS = 200;
|
|
3700
|
+
const MAX_SUCCESS_HTTP_STATUS = 299;
|
|
3576
3701
|
const ERR_HTTP_RANGE = "HTTP Range not supported";
|
|
3577
3702
|
const ERR_HTTP_RESOURCE_CHANGED = "HTTP resource changed";
|
|
3578
3703
|
const ERR_ITERATOR_COMPLETED_TOO_SOON = "Writer iterator completed too soon";
|
|
3579
3704
|
const ERR_WRITER_NOT_INITIALIZED = "Writer not initialized";
|
|
3705
|
+
const ERR_WRITER_SIZE_NOT_WRITABLE = "Invalid writer (size must be writable)";
|
|
3580
3706
|
|
|
3581
3707
|
const CONTENT_TYPE_TEXT_PLAIN = "text/plain";
|
|
3582
3708
|
const HTTP_HEADER_CONTENT_LENGTH = "Content-Length";
|
|
@@ -3768,6 +3894,7 @@
|
|
|
3768
3894
|
const reader = this;
|
|
3769
3895
|
const { sourceBlob, size } = reader;
|
|
3770
3896
|
const { offset = 0, size: readSize = size - offset } = options || {};
|
|
3897
|
+
// deno-lint-ignore valid-typeof
|
|
3771
3898
|
if (typeof sourceBlob.stream == FUNCTION_TYPE) {
|
|
3772
3899
|
if (!offset && readSize >= size) {
|
|
3773
3900
|
return toCompatibleReadable(sourceBlob.stream());
|
|
@@ -4154,7 +4281,7 @@
|
|
|
4154
4281
|
|
|
4155
4282
|
async function sendFetchRequest(method, { fetch: fetchFunction = fetch, options, url }, headers) {
|
|
4156
4283
|
const response = await fetchFunction(url, Object.assign({}, options, { method, headers }));
|
|
4157
|
-
if (response.status
|
|
4284
|
+
if (response.status >= MIN_SUCCESS_HTTP_STATUS && response.status <= MAX_SUCCESS_HTTP_STATUS) {
|
|
4158
4285
|
return response;
|
|
4159
4286
|
} else {
|
|
4160
4287
|
throw response.status == 416 ? new Error(ERR_HTTP_RANGE) : new Error(ERR_HTTP_STATUS + (response.statusText || response.status));
|
|
@@ -4165,7 +4292,7 @@
|
|
|
4165
4292
|
return new Promise((resolve, reject) => {
|
|
4166
4293
|
const request = new XMLHttpRequest();
|
|
4167
4294
|
request.addEventListener("load", () => {
|
|
4168
|
-
if (request.status
|
|
4295
|
+
if (request.status >= MIN_SUCCESS_HTTP_STATUS && request.status <= MAX_SUCCESS_HTTP_STATUS) {
|
|
4169
4296
|
const headers = [];
|
|
4170
4297
|
request.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach(header => {
|
|
4171
4298
|
const splitHeader = header.trim().split(/\s*:\s*/);
|
|
@@ -4469,8 +4596,10 @@
|
|
|
4469
4596
|
writable: toCompatibleWritable(writer)
|
|
4470
4597
|
};
|
|
4471
4598
|
}
|
|
4472
|
-
|
|
4473
|
-
writer.size = 0;
|
|
4599
|
+
try {
|
|
4600
|
+
writer.size = writer.size === UNDEFINED_VALUE ? 0 : writer.size;
|
|
4601
|
+
} catch {
|
|
4602
|
+
throw new Error(ERR_WRITER_SIZE_NOT_WRITABLE);
|
|
4474
4603
|
}
|
|
4475
4604
|
return writer;
|
|
4476
4605
|
}
|
|
@@ -4518,6 +4647,45 @@
|
|
|
4518
4647
|
}
|
|
4519
4648
|
}
|
|
4520
4649
|
|
|
4650
|
+
/*
|
|
4651
|
+
Copyright (c) 2026 Gildas Lormeau. All rights reserved.
|
|
4652
|
+
|
|
4653
|
+
Redistribution and use in source and binary forms, with or without
|
|
4654
|
+
modification, are permitted provided that the following conditions are met:
|
|
4655
|
+
|
|
4656
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
4657
|
+
this list of conditions and the following disclaimer.
|
|
4658
|
+
|
|
4659
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
4660
|
+
notice, this list of conditions and the following disclaimer in
|
|
4661
|
+
the documentation and/or other materials provided with the distribution.
|
|
4662
|
+
|
|
4663
|
+
3. The names of the authors may not be used to endorse or promote products
|
|
4664
|
+
derived from this software without specific prior written permission.
|
|
4665
|
+
|
|
4666
|
+
THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
|
4667
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
4668
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
|
4669
|
+
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
4670
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
4671
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
4672
|
+
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
4673
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
4674
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
4675
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
4676
|
+
*/
|
|
4677
|
+
|
|
4678
|
+
|
|
4679
|
+
function addWarning(warnings, reason, filename) {
|
|
4680
|
+
if (!warnings.some(warning => warning.reason == reason)) {
|
|
4681
|
+
const warning = { reason };
|
|
4682
|
+
if (filename !== UNDEFINED_VALUE) {
|
|
4683
|
+
warning.filename = filename;
|
|
4684
|
+
}
|
|
4685
|
+
warnings.push(warning);
|
|
4686
|
+
}
|
|
4687
|
+
}
|
|
4688
|
+
|
|
4521
4689
|
/*
|
|
4522
4690
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
4523
4691
|
|
|
@@ -4546,6 +4714,7 @@
|
|
|
4546
4714
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
4547
4715
|
*/
|
|
4548
4716
|
|
|
4717
|
+
|
|
4549
4718
|
const PROPERTY_NAME_FILENAME = "filename";
|
|
4550
4719
|
const PROPERTY_NAME_RAW_FILENAME = "rawFilename";
|
|
4551
4720
|
const PROPERTY_NAME_COMMENT = "comment";
|
|
@@ -4670,6 +4839,38 @@
|
|
|
4670
4839
|
|
|
4671
4840
|
}
|
|
4672
4841
|
|
|
4842
|
+
const INTERPRETED_EXTRA_FIELD_TYPES = new Set([
|
|
4843
|
+
EXTRAFIELD_TYPE_ZIP64,
|
|
4844
|
+
EXTRAFIELD_TYPE_AES,
|
|
4845
|
+
EXTRAFIELD_TYPE_NTFS,
|
|
4846
|
+
EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP,
|
|
4847
|
+
EXTRAFIELD_TYPE_UNICODE_PATH,
|
|
4848
|
+
EXTRAFIELD_TYPE_UNICODE_COMMENT,
|
|
4849
|
+
EXTRAFIELD_TYPE_USDZ,
|
|
4850
|
+
EXTRAFIELD_TYPE_INFOZIP,
|
|
4851
|
+
EXTRAFIELD_TYPE_UNIX,
|
|
4852
|
+
EXTRAFIELD_TYPE_UNIX_TYPE1,
|
|
4853
|
+
EXTRAFIELD_TYPE_PKWARE_UNIX
|
|
4854
|
+
]);
|
|
4855
|
+
|
|
4856
|
+
function getUserExtraField(extraField) {
|
|
4857
|
+
if (extraField) {
|
|
4858
|
+
const userExtraField = new Map();
|
|
4859
|
+
extraField.forEach((field, type) => {
|
|
4860
|
+
if (!INTERPRETED_EXTRA_FIELD_TYPES.has(type)) {
|
|
4861
|
+
userExtraField.set(type, field.data);
|
|
4862
|
+
}
|
|
4863
|
+
});
|
|
4864
|
+
if (userExtraField.size) {
|
|
4865
|
+
return userExtraField;
|
|
4866
|
+
}
|
|
4867
|
+
}
|
|
4868
|
+
}
|
|
4869
|
+
|
|
4870
|
+
function getEncryptionOverhead(encrypted, zipCrypto, encryptionStrength) {
|
|
4871
|
+
return encrypted ? (zipCrypto ? 12 : 16 + encryptionStrength * 4) : 0;
|
|
4872
|
+
}
|
|
4873
|
+
|
|
4673
4874
|
/*
|
|
4674
4875
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
4675
4876
|
|
|
@@ -4729,6 +4930,8 @@
|
|
|
4729
4930
|
const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
|
|
4730
4931
|
const WARNING_DUPLICATE_FILENAME = "duplicate filename";
|
|
4731
4932
|
const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
|
|
4933
|
+
const WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = "multiple end of central directory records";
|
|
4934
|
+
const WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME = "mismatched local file header (filename)";
|
|
4732
4935
|
const WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = "mismatched local file header (general purpose bit flag)";
|
|
4733
4936
|
const WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = "mismatched local file header (compression method)";
|
|
4734
4937
|
const WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = "mismatched local file header (crc32 or sizes)";
|
|
@@ -4799,7 +5002,7 @@
|
|
|
4799
5002
|
}
|
|
4800
5003
|
}
|
|
4801
5004
|
if (rejectAmbiguousEndOfDirectory && endOfDirectoryReachingEndCount > 1) {
|
|
4802
|
-
throwAmbiguousArchive(
|
|
5005
|
+
throwAmbiguousArchive(WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY);
|
|
4803
5006
|
}
|
|
4804
5007
|
const endOfDirectoryView = getDataView(endOfDirectoryInfo);
|
|
4805
5008
|
let directoryDataLength = getUint32$1(endOfDirectoryView, 12);
|
|
@@ -5097,7 +5300,8 @@
|
|
|
5097
5300
|
const writer = new TransformStream();
|
|
5098
5301
|
const arrayBufferPromise = streamToBlob(writer.readable).then(blob => blob.arrayBuffer());
|
|
5099
5302
|
arrayBufferPromise.catch(() => { });
|
|
5100
|
-
await fileEntry.getData(writer, entry, zipReader.readRanges,
|
|
5303
|
+
await fileEntry.getData(writer, entry, zipReader.readRanges,
|
|
5304
|
+
Object.assign({}, options, { preventClose: false }));
|
|
5101
5305
|
return arrayBufferPromise;
|
|
5102
5306
|
};
|
|
5103
5307
|
offset = endOffset;
|
|
@@ -5178,49 +5382,101 @@
|
|
|
5178
5382
|
await reader.readable.cancel();
|
|
5179
5383
|
}
|
|
5180
5384
|
}
|
|
5385
|
+
|
|
5386
|
+
[SYMBOL_ASYNC_DISPOSE]() {
|
|
5387
|
+
return this.close();
|
|
5388
|
+
}
|
|
5181
5389
|
}
|
|
5182
5390
|
|
|
5183
5391
|
class ZipReaderStream {
|
|
5184
5392
|
|
|
5185
5393
|
constructor(options = {}) {
|
|
5186
|
-
|
|
5187
|
-
const
|
|
5394
|
+
let sourceController;
|
|
5395
|
+
const { readable, writable } = new TransformStream({
|
|
5396
|
+
start(controller) {
|
|
5397
|
+
sourceController = controller;
|
|
5398
|
+
}
|
|
5399
|
+
});
|
|
5400
|
+
const zipReader = new ZipReader(readable, options);
|
|
5401
|
+
const gen = zipReader.getEntriesGenerator();
|
|
5402
|
+
const pendingEntries = new Set();
|
|
5188
5403
|
this.readable = new ReadableStream({
|
|
5189
5404
|
async pull(controller) {
|
|
5190
5405
|
const { done, value } = await gen.next();
|
|
5191
5406
|
if (done)
|
|
5192
5407
|
return controller.close();
|
|
5193
|
-
const
|
|
5194
|
-
const { readable, writable } = new TransformStream();
|
|
5195
|
-
if (value.getData) {
|
|
5196
|
-
getData();
|
|
5197
|
-
return readable;
|
|
5198
|
-
}
|
|
5199
|
-
|
|
5200
|
-
async function getData() {
|
|
5201
|
-
try {
|
|
5202
|
-
await value.getData(writable);
|
|
5203
|
-
} catch (error) {
|
|
5204
|
-
try {
|
|
5205
|
-
await writable.abort(error);
|
|
5206
|
-
} catch {
|
|
5207
|
-
// ignored
|
|
5208
|
-
}
|
|
5209
|
-
}
|
|
5210
|
-
}
|
|
5211
|
-
})();
|
|
5408
|
+
const entryStream = createEntryStream(value, pendingEntries);
|
|
5212
5409
|
const chunk = {
|
|
5213
5410
|
...value,
|
|
5214
|
-
readable:
|
|
5411
|
+
readable: entryStream.readable
|
|
5215
5412
|
};
|
|
5216
5413
|
delete chunk.getData;
|
|
5414
|
+
Object.defineProperties(chunk, {
|
|
5415
|
+
localDirectory: {
|
|
5416
|
+
get: () => value.localDirectory,
|
|
5417
|
+
enumerable: true
|
|
5418
|
+
},
|
|
5419
|
+
warnings: {
|
|
5420
|
+
get: () => value.warnings,
|
|
5421
|
+
enumerable: true
|
|
5422
|
+
}
|
|
5423
|
+
});
|
|
5217
5424
|
controller.enqueue(chunk);
|
|
5425
|
+
},
|
|
5426
|
+
async cancel(reason) {
|
|
5427
|
+
const entryStreams = Array.from(pendingEntries);
|
|
5428
|
+
pendingEntries.clear();
|
|
5429
|
+
sourceController.error(reason);
|
|
5430
|
+
await Promise.allSettled(entryStreams.map(entryStream => entryStream.cancel(reason)));
|
|
5431
|
+
await Promise.allSettled([gen.return(), zipReader.close()]);
|
|
5218
5432
|
}
|
|
5219
5433
|
});
|
|
5220
5434
|
this.writable = writable;
|
|
5221
5435
|
}
|
|
5222
5436
|
}
|
|
5223
5437
|
|
|
5438
|
+
function createEntryStream(entry, pendingEntries) {
|
|
5439
|
+
const { readable, writable } = new TransformStream();
|
|
5440
|
+
let dataReader;
|
|
5441
|
+
const entryStream = {
|
|
5442
|
+
cancel: async reason => {
|
|
5443
|
+
pendingEntries.delete(entryStream);
|
|
5444
|
+
await (dataReader ? dataReader.cancel(reason) : readable.cancel(reason));
|
|
5445
|
+
}
|
|
5446
|
+
};
|
|
5447
|
+
entryStream.readable = new ReadableStream({
|
|
5448
|
+
async pull(controller) {
|
|
5449
|
+
if (!dataReader) {
|
|
5450
|
+
dataReader = readable.getReader();
|
|
5451
|
+
pendingEntries.add(entryStream);
|
|
5452
|
+
getData();
|
|
5453
|
+
}
|
|
5454
|
+
const { done, value } = await dataReader.read();
|
|
5455
|
+
if (done) {
|
|
5456
|
+
controller.close();
|
|
5457
|
+
} else {
|
|
5458
|
+
controller.enqueue(value);
|
|
5459
|
+
}
|
|
5460
|
+
},
|
|
5461
|
+
cancel: reason => entryStream.cancel(reason)
|
|
5462
|
+
}, { highWaterMark: 0 });
|
|
5463
|
+
return entryStream;
|
|
5464
|
+
|
|
5465
|
+
async function getData() {
|
|
5466
|
+
try {
|
|
5467
|
+
await entry.getData(writable, { preventClose: false });
|
|
5468
|
+
} catch (error) {
|
|
5469
|
+
try {
|
|
5470
|
+
await writable.abort(error);
|
|
5471
|
+
} catch {
|
|
5472
|
+
// ignored
|
|
5473
|
+
}
|
|
5474
|
+
} finally {
|
|
5475
|
+
pendingEntries.delete(entryStream);
|
|
5476
|
+
}
|
|
5477
|
+
}
|
|
5478
|
+
}
|
|
5479
|
+
|
|
5224
5480
|
async function isZipFile(reader, options = {}) {
|
|
5225
5481
|
reader = new GenericReader(reader);
|
|
5226
5482
|
await initStream(reader);
|
|
@@ -5280,7 +5536,9 @@
|
|
|
5280
5536
|
const dataView = getDataView(dataArray);
|
|
5281
5537
|
let password = getOptionValue$1(zipEntry, options, OPTION_PASSWORD);
|
|
5282
5538
|
let rawPassword = getOptionValue$1(zipEntry, options, OPTION_RAW_PASSWORD);
|
|
5283
|
-
const passThrough = getOptionValue$1(zipEntry, options, OPTION_PASS_THROUGH);
|
|
5539
|
+
const passThrough = checkPassThroughOption(getOptionValue$1(zipEntry, options, OPTION_PASS_THROUGH));
|
|
5540
|
+
const passThroughCompression = Boolean(passThrough);
|
|
5541
|
+
const passThroughEncryption = passThrough === true;
|
|
5284
5542
|
checkPasswordOption(password, rawPassword);
|
|
5285
5543
|
password = password && password.length && password;
|
|
5286
5544
|
rawPassword = rawPassword && rawPassword.length && rawPassword;
|
|
@@ -5301,7 +5559,9 @@
|
|
|
5301
5559
|
const checkLocalDirectoryOption = getOptionValue$1(zipEntry, options, OPTION_CHECK_LOCAL_DIRECTORY);
|
|
5302
5560
|
const entryStrictness = getStrictness(options, zipEntry.options);
|
|
5303
5561
|
const checkLocalDirectory = getCheckLocalDirectory(checkLocalDirectoryOption, entryStrictness);
|
|
5304
|
-
const
|
|
5562
|
+
const checkLocalFilenameOption = getOptionValue$1(zipEntry, options, OPTION_CHECK_LOCAL_FILENAME);
|
|
5563
|
+
const checkLocalFilename = getCheckLocalFilename(
|
|
5564
|
+
checkLocalFilenameOption === UNDEFINED_VALUE ? checkLocalDirectoryOption : checkLocalFilenameOption, entryStrictness);
|
|
5305
5565
|
let rawLocalFilename = EMPTY_UINT8_ARRAY;
|
|
5306
5566
|
if (checkLocalFilename && (filenameLength || extraFieldLength)) {
|
|
5307
5567
|
const trailingDataArray = await readUint8Array(reader, localHeaderOffset + HEADER_SIZE, filenameLength + extraFieldLength);
|
|
@@ -5332,16 +5592,17 @@
|
|
|
5332
5592
|
if (gid !== UNDEFINED_VALUE && fileEntry.gid === UNDEFINED_VALUE) {
|
|
5333
5593
|
fileEntry.gid = gid;
|
|
5334
5594
|
}
|
|
5335
|
-
const
|
|
5595
|
+
const checkPasswordOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);
|
|
5596
|
+
const encrypted = zipEntry.encrypted && localDirectory.encrypted && (!passThroughEncryption || checkPasswordOnly);
|
|
5336
5597
|
const zipCrypto = encrypted && !extraFieldAES;
|
|
5337
|
-
if (!
|
|
5598
|
+
if (!passThroughEncryption) {
|
|
5338
5599
|
fileEntry.zipCrypto = zipCrypto;
|
|
5339
5600
|
}
|
|
5340
5601
|
if (encrypted && (localDirectory.rawBitFlag & BITFLAG_STRONG_ENCRYPTION) == BITFLAG_STRONG_ENCRYPTION) {
|
|
5341
5602
|
throw new Error(ERR_UNSUPPORTED_ENCRYPTION);
|
|
5342
5603
|
}
|
|
5343
|
-
const registeredCodec =
|
|
5344
|
-
if (compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE && compressionMethod != COMPRESSION_METHOD_DEFLATE_64 && !registeredCodec && !
|
|
5604
|
+
const registeredCodec = passThroughCompression ? UNDEFINED_VALUE : getRegisteredCodec(compressionMethod);
|
|
5605
|
+
if (compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE && compressionMethod != COMPRESSION_METHOD_DEFLATE_64 && !registeredCodec && !passThroughCompression) {
|
|
5345
5606
|
throw new Error(ERR_UNSUPPORTED_COMPRESSION);
|
|
5346
5607
|
}
|
|
5347
5608
|
if (encrypted) {
|
|
@@ -5358,15 +5619,16 @@
|
|
|
5358
5619
|
const readable = toCompatibleReadable(reader.createReadable({ offset: dataOffset, size }));
|
|
5359
5620
|
const signal = checkSignalOption(getOptionValue$1(zipEntry, options, OPTION_SIGNAL));
|
|
5360
5621
|
throwIfAborted(signal);
|
|
5361
|
-
const checkPasswordOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);
|
|
5362
5622
|
let checkOverlappingEntry = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY);
|
|
5363
5623
|
const checkOverlappingEntryOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY_ONLY);
|
|
5364
5624
|
if (checkOverlappingEntryOnly) {
|
|
5365
5625
|
checkOverlappingEntry = true;
|
|
5366
5626
|
}
|
|
5367
5627
|
const { onstart, onprogress, onend } = options;
|
|
5368
|
-
const compressed = compressionMethod != COMPRESSION_METHOD_STORE && !
|
|
5369
|
-
const outputSize =
|
|
5628
|
+
const compressed = compressionMethod != COMPRESSION_METHOD_STORE && !passThroughCompression;
|
|
5629
|
+
const outputSize = passThroughCompression ?
|
|
5630
|
+
compressedSize - getEncryptionOverhead(encrypted, zipCrypto, extraFieldAES && extraFieldAES.strength) :
|
|
5631
|
+
uncompressedSize;
|
|
5370
5632
|
const deflate64 = compressionMethod == COMPRESSION_METHOD_DEFLATE_64;
|
|
5371
5633
|
let useCompressionStream = getOptionValue$1(zipEntry, options, OPTION_USE_COMPRESSION_STREAM);
|
|
5372
5634
|
if (deflate64) {
|
|
@@ -5375,7 +5637,7 @@
|
|
|
5375
5637
|
const checkCrc32Option = getOptionValue$1(zipEntry, options, OPTION_CHECK_CRC32);
|
|
5376
5638
|
const checkCrc32 = (checkCrc32Option === UNDEFINED_VALUE ?
|
|
5377
5639
|
getOptionValue$1(zipEntry, options, OPTION_CHECK_SIGNATURE) :
|
|
5378
|
-
checkCrc32Option) && !
|
|
5640
|
+
checkCrc32Option) && !passThroughCompression &&
|
|
5379
5641
|
(!encrypted || zipCrypto || (extraFieldAES && extraFieldAES.vendorVersion == VENDOR_VERSION_AE_1$1));
|
|
5380
5642
|
const workerOptions = {
|
|
5381
5643
|
options: {
|
|
@@ -5419,7 +5681,7 @@
|
|
|
5419
5681
|
readRanges
|
|
5420
5682
|
});
|
|
5421
5683
|
}
|
|
5422
|
-
let writable, abortError;
|
|
5684
|
+
let writable, abortError, aborted;
|
|
5423
5685
|
try {
|
|
5424
5686
|
if (!checkOverlappingEntryOnly) {
|
|
5425
5687
|
if (checkPasswordOnly) {
|
|
@@ -5429,24 +5691,28 @@
|
|
|
5429
5691
|
await initStream(writer, getDecodableOutputSize(outputSize, compressedSize, compressed));
|
|
5430
5692
|
({ writable } = writer);
|
|
5431
5693
|
const { outputSize: writtenSize } = await runWorker({ readable, writable }, workerOptions);
|
|
5432
|
-
writer.size += writtenSize;
|
|
5433
5694
|
if (writtenSize != outputSize) {
|
|
5434
|
-
throw new Error(ERR_INVALID_UNCOMPRESSED_SIZE);
|
|
5695
|
+
throw Object.assign(new Error(ERR_INVALID_UNCOMPRESSED_SIZE), { outputSize: writtenSize });
|
|
5435
5696
|
}
|
|
5697
|
+
writer.size += writtenSize;
|
|
5436
5698
|
}
|
|
5437
5699
|
} catch (error) {
|
|
5438
|
-
|
|
5700
|
+
const { outputSize: failedOutputSize } = workerOptions;
|
|
5701
|
+
if (failedOutputSize !== UNDEFINED_VALUE) {
|
|
5702
|
+
writer.size += failedOutputSize;
|
|
5703
|
+
} else if (isErrorObject(error) && error.outputSize !== UNDEFINED_VALUE) {
|
|
5439
5704
|
writer.size += error.outputSize;
|
|
5440
5705
|
}
|
|
5441
|
-
if (!checkPasswordOnly || error.message != ERR_ABORT_CHECK_PASSWORD) {
|
|
5706
|
+
if (!checkPasswordOnly || !isErrorObject(error) || error.message != ERR_ABORT_CHECK_PASSWORD) {
|
|
5442
5707
|
abortError = error;
|
|
5708
|
+
aborted = true;
|
|
5443
5709
|
throw error;
|
|
5444
5710
|
}
|
|
5445
5711
|
} finally {
|
|
5446
5712
|
const preventClose = !ownsWritable(writer) && getOptionValue$1(zipEntry, options, OPTION_PREVENT_CLOSE);
|
|
5447
5713
|
if (!preventClose && writable && !writable.locked) {
|
|
5448
5714
|
const writableWriter = writable.getWriter();
|
|
5449
|
-
if (
|
|
5715
|
+
if (aborted) {
|
|
5450
5716
|
try {
|
|
5451
5717
|
await writableWriter.abort(abortError);
|
|
5452
5718
|
} catch {
|
|
@@ -6098,7 +6364,7 @@
|
|
|
6098
6364
|
if (checkLocalFilename && !maskedLocalDirectory &&
|
|
6099
6365
|
(rawLocalFilename.length != rawFilename.length ||
|
|
6100
6366
|
rawLocalFilename.some((byteValue, indexByte) => byteValue != rawFilename[indexByte]))) {
|
|
6101
|
-
reportAmbiguity(reject, warnings,
|
|
6367
|
+
reportAmbiguity(reject, warnings, WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME);
|
|
6102
6368
|
}
|
|
6103
6369
|
if ((localDirectory.rawBitFlag & BITFLAG_AMBIGUITY_MASK) != (zipEntry.rawBitFlag & BITFLAG_AMBIGUITY_MASK)) {
|
|
6104
6370
|
reportAmbiguity(reject, warnings, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG);
|
|
@@ -6123,16 +6389,6 @@
|
|
|
6123
6389
|
}
|
|
6124
6390
|
}
|
|
6125
6391
|
|
|
6126
|
-
function addWarning(warnings, reason, filename) {
|
|
6127
|
-
if (!warnings.some(warning => warning.reason == reason)) {
|
|
6128
|
-
const warning = { reason };
|
|
6129
|
-
if (filename !== UNDEFINED_VALUE) {
|
|
6130
|
-
warning.filename = filename;
|
|
6131
|
-
}
|
|
6132
|
-
warnings.push(warning);
|
|
6133
|
-
}
|
|
6134
|
-
}
|
|
6135
|
-
|
|
6136
6392
|
function throwAmbiguousArchive(reason) {
|
|
6137
6393
|
const error = new Error(ERR_AMBIGUOUS_ARCHIVE);
|
|
6138
6394
|
error.reason = reason;
|
|
@@ -6212,7 +6468,9 @@
|
|
|
6212
6468
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG: WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG,
|
|
6213
6469
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
|
|
6214
6470
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
|
|
6471
|
+
WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME: WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME,
|
|
6215
6472
|
WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
|
|
6473
|
+
WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY: WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY,
|
|
6216
6474
|
WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
|
|
6217
6475
|
WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
|
|
6218
6476
|
WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
|
|
@@ -6265,7 +6523,7 @@
|
|
|
6265
6523
|
const ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
|
|
6266
6524
|
const ERR_UNSUPPORTED_ENCRYPTION_USDZ = "Encryption is not supported in USDZ files";
|
|
6267
6525
|
const ERR_UNSUPPORTED_SPLIT_USDZ = "Split zip files are not supported in USDZ files";
|
|
6268
|
-
const ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH = "Encryption is not supported when the 'passThrough' option is set";
|
|
6526
|
+
const ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH = "Encryption is not supported when the 'passThrough' option is set to true (use 'compressed' instead)";
|
|
6269
6527
|
const ERR_INVALID_EXTRAFIELD = "Invalid extra field (must be a Map)";
|
|
6270
6528
|
const ERR_INVALID_EXTRAFIELD_TYPE = "Invalid extra field type (must be integer 0..65535)";
|
|
6271
6529
|
const ERR_INVALID_EXTRAFIELD_DATA_TYPE = "Invalid extra field data (must be a Uint8Array)";
|
|
@@ -6277,6 +6535,7 @@
|
|
|
6277
6535
|
const ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported (set the 'zip64' option to 'true')";
|
|
6278
6536
|
const ERR_UNDEFINED_UNCOMPRESSED_SIZE = "Undefined uncompressed size";
|
|
6279
6537
|
const ERR_UNDEFINED_COMPRESSION_METHOD = "Undefined compression method";
|
|
6538
|
+
const ERR_UNDEFINED_CRC32 = "Undefined CRC32";
|
|
6280
6539
|
const ERR_UNDETERMINED_SIZE = "Undetermined size";
|
|
6281
6540
|
const ERR_UNDEFINED_READER = "Undefined reader";
|
|
6282
6541
|
const ERR_INVALID_READER = "Invalid reader (must be a Reader instance, a ReadableStream instance, or an object with a 'readable' property)";
|
|
@@ -6290,14 +6549,21 @@
|
|
|
6290
6549
|
const ERR_INVALID_MSDOS_DATA = "Invalid msdosAttributes (must be an object with boolean flags)";
|
|
6291
6550
|
const ERR_INVALID_LEVEL = "Invalid level (must be integer 0..9)";
|
|
6292
6551
|
const ERR_INVALID_SIGNATURE_DATA = "Signature data exceeds 64KB";
|
|
6552
|
+
const ERR_INVALID_ENTRY = "Invalid entry option (must be an entry returned by ZipReader#getEntries())";
|
|
6553
|
+
const ERR_ZIP_CRYPTO_LAST_MOD_DATE = "The last modification date of an entry encrypted with ZipCrypto cannot be changed when passThrough is set";
|
|
6554
|
+
const WARNING_COMPRESSION_UNAVAILABLE = "compression unavailable";
|
|
6555
|
+
const WARNING_CLAMPED_LAST_MODIFICATION_DATE = "clamped last modification date";
|
|
6293
6556
|
|
|
6294
6557
|
const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
|
|
6295
6558
|
const EXTRAFIELD_OFFSET_AES_VENDOR_VERSION = 4;
|
|
6296
6559
|
const EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD = 9;
|
|
6297
6560
|
const EXTRAFIELD_USDZ_MAX_LENGTH = 67;
|
|
6561
|
+
const MIN_PRINTABLE_ASCII_CHARACTER_CODE = 0x20;
|
|
6562
|
+
const MAX_PRINTABLE_ASCII_CHARACTER_CODE = 0x7e;
|
|
6298
6563
|
const VENDOR_VERSION_AE_1 = 1;
|
|
6299
6564
|
const INFOZIP_EXTRA_FIELD_TYPE = "infozip";
|
|
6300
6565
|
const UNIX_EXTRA_FIELD_TYPE = "unix";
|
|
6566
|
+
const LEVEL_BY_BITFLAG_LEVEL = [8, 9, 5, 3];
|
|
6301
6567
|
const MAX_LEVEL = 9;
|
|
6302
6568
|
|
|
6303
6569
|
let workers = 0;
|
|
@@ -6324,9 +6590,11 @@
|
|
|
6324
6590
|
initialOffset: options[OPTION_OFFSET] === UNDEFINED_VALUE ? 0 : options[OPTION_OFFSET] - (writer.size || writer.writable.size || 0),
|
|
6325
6591
|
pendingAddFileCalls: new Set(),
|
|
6326
6592
|
pendingErrors: [],
|
|
6593
|
+
warnings: [],
|
|
6327
6594
|
bufferedWrites: 0,
|
|
6328
6595
|
directWrites: 0,
|
|
6329
|
-
lastFileEntry: UNDEFINED_VALUE
|
|
6596
|
+
lastFileEntry: UNDEFINED_VALUE,
|
|
6597
|
+
archiveClosed: false
|
|
6330
6598
|
});
|
|
6331
6599
|
}
|
|
6332
6600
|
|
|
@@ -6491,6 +6759,9 @@
|
|
|
6491
6759
|
const zipWriter = this;
|
|
6492
6760
|
const { pendingAddFileCalls, writer } = this;
|
|
6493
6761
|
const { writable } = writer;
|
|
6762
|
+
if (zipWriter.archiveClosed) {
|
|
6763
|
+
return getWriterData(writer);
|
|
6764
|
+
}
|
|
6494
6765
|
if (!(comment instanceof Uint8Array)) {
|
|
6495
6766
|
throw new Error(ERR_INVALID_COMMENT_TYPE);
|
|
6496
6767
|
}
|
|
@@ -6501,7 +6772,7 @@
|
|
|
6501
6772
|
await Promise.allSettled(Array.from(pendingAddFileCalls));
|
|
6502
6773
|
}
|
|
6503
6774
|
await Promise.allSettled(zipWriter.pendingErrors.map(watcher => watcher.recorded));
|
|
6504
|
-
const unobservedWatchers = zipWriter.pendingErrors.filter(watcher => watcher.
|
|
6775
|
+
const unobservedWatchers = zipWriter.pendingErrors.filter(watcher => watcher.failed && !watcher.observed);
|
|
6505
6776
|
if (unobservedWatchers.length) {
|
|
6506
6777
|
const unobservedErrors = unobservedWatchers.map(watcher => watcher.error);
|
|
6507
6778
|
unobservedWatchers.forEach(watcher => watcher.observed = true);
|
|
@@ -6514,11 +6785,16 @@
|
|
|
6514
6785
|
throw error;
|
|
6515
6786
|
}
|
|
6516
6787
|
await closeFile(zipWriter, comment, options);
|
|
6788
|
+
zipWriter.archiveClosed = true;
|
|
6517
6789
|
const preventClose = !ownsWritable(writer) && getOptionValue(zipWriter, options, OPTION_PREVENT_CLOSE);
|
|
6518
6790
|
if (!preventClose) {
|
|
6519
6791
|
await writable.getWriter().close();
|
|
6520
6792
|
}
|
|
6521
|
-
return writer
|
|
6793
|
+
return getWriterData(writer);
|
|
6794
|
+
}
|
|
6795
|
+
|
|
6796
|
+
[SYMBOL_ASYNC_DISPOSE]() {
|
|
6797
|
+
return this.close();
|
|
6522
6798
|
}
|
|
6523
6799
|
}
|
|
6524
6800
|
|
|
@@ -6597,11 +6873,16 @@
|
|
|
6597
6873
|
}
|
|
6598
6874
|
}
|
|
6599
6875
|
|
|
6876
|
+
function getWriterData(writer) {
|
|
6877
|
+
return writer.getData ? writer.getData() : writer.writable;
|
|
6878
|
+
}
|
|
6879
|
+
|
|
6600
6880
|
function watchPromiseError(zipWriter, promise) {
|
|
6601
6881
|
const watchedPromise = new WatchedPromise((resolve, reject) => Promise.prototype.then.call(promise, resolve, reject));
|
|
6602
6882
|
const watcher = {};
|
|
6603
6883
|
watchedPromise.watcher = watcher;
|
|
6604
|
-
watcher.recorded = Promise.prototype.then.call(watchedPromise, UNDEFINED_VALUE,
|
|
6884
|
+
watcher.recorded = Promise.prototype.then.call(watchedPromise, UNDEFINED_VALUE,
|
|
6885
|
+
error => Object.assign(watcher, { failed: true, error }));
|
|
6605
6886
|
zipWriter.pendingErrors.push(watcher);
|
|
6606
6887
|
return watchedPromise;
|
|
6607
6888
|
}
|
|
@@ -6615,6 +6896,14 @@
|
|
|
6615
6896
|
|
|
6616
6897
|
async function addFileEntry(zipWriter, name, reader, options) {
|
|
6617
6898
|
options = Object.assign({}, options);
|
|
6899
|
+
const entry = options[OPTION_ENTRY];
|
|
6900
|
+
if (entry !== UNDEFINED_VALUE) {
|
|
6901
|
+
const { entryOptions, passThroughOptions } = getSourceEntryOptions(entry,
|
|
6902
|
+
checkPassThroughOption(getOptionValue(zipWriter, options, OPTION_PASS_THROUGH)),
|
|
6903
|
+
getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE));
|
|
6904
|
+
delete options[OPTION_ENTRY];
|
|
6905
|
+
options = Object.assign(entryOptions, passThroughOptions, options);
|
|
6906
|
+
}
|
|
6618
6907
|
if (getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY) && !name.endsWith(DIRECTORY_SIGNATURE)) {
|
|
6619
6908
|
name += DIRECTORY_SIGNATURE;
|
|
6620
6909
|
}
|
|
@@ -6679,21 +6968,33 @@
|
|
|
6679
6968
|
try {
|
|
6680
6969
|
const { resolvedOptions } = metadataInfo;
|
|
6681
6970
|
if (resolvedOptions.level != 0 && resolvedOptions.compressionMethod === UNDEFINED_VALUE &&
|
|
6682
|
-
!resolvedOptions.
|
|
6971
|
+
!resolvedOptions.passThroughCompression && !(await supportsDeflate(getConfiguration()))) {
|
|
6683
6972
|
resolvedOptions.level = 0;
|
|
6973
|
+
addWarning(zipWriter.warnings, WARNING_COMPRESSION_UNAVAILABLE, name);
|
|
6684
6974
|
}
|
|
6685
6975
|
const sizesInfo = await resolveSizes(zipWriter, reader, metadataInfo, options);
|
|
6686
6976
|
({ reader } = sizesInfo);
|
|
6687
6977
|
const diskOffset = getDiskOffset(zipWriter.writer);
|
|
6688
6978
|
const diskNumber = getDiskNumber(zipWriter.writer);
|
|
6979
|
+
let crc32 = options.crc32 === UNDEFINED_VALUE ? options[PROPERTY_NAME_SIGNATURE] : options.crc32;
|
|
6980
|
+
const storesAE2 = sizesInfo.resolvedOptions.encrypted && !resolvedOptions.zipCrypto;
|
|
6981
|
+
if (resolvedOptions.passThroughCompression && !resolvedOptions.passThroughEncryption && storesAE2) {
|
|
6982
|
+
crc32 = UNDEFINED_VALUE;
|
|
6983
|
+
}
|
|
6984
|
+
if (resolvedOptions.passThroughCompression && reader && !storesAE2 && crc32 === UNDEFINED_VALUE) {
|
|
6985
|
+
throw new Error(ERR_UNDEFINED_CRC32);
|
|
6986
|
+
}
|
|
6689
6987
|
options = Object.assign({}, options, attributesInfo.resolvedOptions, metadataInfo.resolvedOptions, sizesInfo.resolvedOptions, {
|
|
6690
6988
|
signature: options[PROPERTY_NAME_SIGNATURE],
|
|
6691
|
-
crc32
|
|
6989
|
+
crc32,
|
|
6692
6990
|
offset: zipWriter.offset - diskOffset,
|
|
6693
6991
|
diskNumberStart: diskNumber,
|
|
6694
6992
|
[OPTION_USDZ]: zipWriter.options[OPTION_USDZ]
|
|
6695
6993
|
});
|
|
6696
6994
|
const headerInfo = getHeaderInfo(options);
|
|
6995
|
+
if (headerInfo.lastModDateClamped) {
|
|
6996
|
+
addWarning(zipWriter.warnings, WARNING_CLAMPED_LAST_MODIFICATION_DATE, name);
|
|
6997
|
+
}
|
|
6697
6998
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
6698
6999
|
const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
|
|
6699
7000
|
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
@@ -6720,6 +7021,95 @@
|
|
|
6720
7021
|
return new Entry(fileEntry);
|
|
6721
7022
|
}
|
|
6722
7023
|
|
|
7024
|
+
function getSourceEntryOptions(entry, passThrough, lastModDateOverride) {
|
|
7025
|
+
if (entry === null || typeof entry != OBJECT_TYPE || Array.isArray(entry)) {
|
|
7026
|
+
throw new Error(ERR_INVALID_ENTRY);
|
|
7027
|
+
}
|
|
7028
|
+
const {
|
|
7029
|
+
externalFileAttributes,
|
|
7030
|
+
versionMadeBy,
|
|
7031
|
+
comment,
|
|
7032
|
+
lastModDate,
|
|
7033
|
+
rawLastModDate,
|
|
7034
|
+
creationDate,
|
|
7035
|
+
lastAccessDate,
|
|
7036
|
+
uncompressedSize,
|
|
7037
|
+
encrypted,
|
|
7038
|
+
zipCrypto,
|
|
7039
|
+
crc32,
|
|
7040
|
+
compressionMethod,
|
|
7041
|
+
extraFieldAES,
|
|
7042
|
+
extraFieldUnix,
|
|
7043
|
+
internalFileAttributes,
|
|
7044
|
+
extraField,
|
|
7045
|
+
bitFlag,
|
|
7046
|
+
directory,
|
|
7047
|
+
uid,
|
|
7048
|
+
gid
|
|
7049
|
+
} = entry;
|
|
7050
|
+
const entryOptions = {
|
|
7051
|
+
externalFileAttributes,
|
|
7052
|
+
versionMadeBy,
|
|
7053
|
+
comment,
|
|
7054
|
+
lastModDate,
|
|
7055
|
+
creationDate,
|
|
7056
|
+
lastAccessDate,
|
|
7057
|
+
internalFileAttributes,
|
|
7058
|
+
directory
|
|
7059
|
+
};
|
|
7060
|
+
if (bitFlag && bitFlag.languageEncodingFlag) {
|
|
7061
|
+
entryOptions[OPTION_USE_UNICODE_FILE_NAMES] = true;
|
|
7062
|
+
}
|
|
7063
|
+
const userExtraField = getUserExtraField(extraField);
|
|
7064
|
+
if (userExtraField) {
|
|
7065
|
+
entryOptions[PROPERTY_NAME_EXTRA_FIELD] = userExtraField;
|
|
7066
|
+
}
|
|
7067
|
+
if (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE) {
|
|
7068
|
+
Object.assign(entryOptions, {
|
|
7069
|
+
uid,
|
|
7070
|
+
gid,
|
|
7071
|
+
unixExtraFieldType: extraFieldUnix ? UNIX_EXTRA_FIELD_TYPE : INFOZIP_EXTRA_FIELD_TYPE
|
|
7072
|
+
});
|
|
7073
|
+
}
|
|
7074
|
+
const passThroughOptions = {};
|
|
7075
|
+
if (passThrough && !directory) {
|
|
7076
|
+
Object.assign(passThroughOptions, {
|
|
7077
|
+
uncompressedSize,
|
|
7078
|
+
crc32,
|
|
7079
|
+
compressionMethod
|
|
7080
|
+
});
|
|
7081
|
+
if (passThrough !== PASS_THROUGH_COMPRESSED) {
|
|
7082
|
+
Object.assign(passThroughOptions, {
|
|
7083
|
+
encrypted,
|
|
7084
|
+
zipCrypto,
|
|
7085
|
+
encryptionStrength: extraFieldAES ? extraFieldAES.strength : UNDEFINED_VALUE
|
|
7086
|
+
});
|
|
7087
|
+
}
|
|
7088
|
+
if (bitFlag) {
|
|
7089
|
+
passThroughOptions.dataDescriptor = bitFlag.dataDescriptor;
|
|
7090
|
+
passThroughOptions[OPTION_LEVEL] = LEVEL_BY_BITFLAG_LEVEL[bitFlag.level];
|
|
7091
|
+
}
|
|
7092
|
+
if (lastModDateOverride === UNDEFINED_VALUE) {
|
|
7093
|
+
passThroughOptions.rawLastModDate = rawLastModDate;
|
|
7094
|
+
} else if (passThrough !== PASS_THROUGH_COMPRESSED && zipCrypto && (!bitFlag || bitFlag.dataDescriptor) &&
|
|
7095
|
+
lastModDateOverride instanceof Date &&
|
|
7096
|
+
getDosTimeHighByte(lastModDateOverride) != ((rawLastModDate >>> 8) & MAX_8_BITS)) {
|
|
7097
|
+
throw new Error(ERR_ZIP_CRYPTO_LAST_MOD_DATE);
|
|
7098
|
+
}
|
|
7099
|
+
}
|
|
7100
|
+
return { entryOptions, passThroughOptions };
|
|
7101
|
+
}
|
|
7102
|
+
|
|
7103
|
+
function getDosTimeHighByte(lastModDate) {
|
|
7104
|
+
let dosLastModDate = new Date(Math.ceil(Math.floor(lastModDate.getTime() / 1000) / 2) * 2000);
|
|
7105
|
+
if (dosLastModDate < MIN_DATE) {
|
|
7106
|
+
dosLastModDate = MIN_DATE;
|
|
7107
|
+
} else if (dosLastModDate > MAX_DATE) {
|
|
7108
|
+
dosLastModDate = MAX_DATE;
|
|
7109
|
+
}
|
|
7110
|
+
return ((dosLastModDate.getHours() << 3) | (dosLastModDate.getMinutes() >> 3)) & MAX_8_BITS;
|
|
7111
|
+
}
|
|
7112
|
+
|
|
6723
7113
|
function resolveAttributes(zipWriter, name, options) {
|
|
6724
7114
|
let msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
|
|
6725
7115
|
let versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? VERSION_MADE_BY_MSDOS : VERSION_MADE_BY_UNIX);
|
|
@@ -6873,7 +7263,9 @@
|
|
|
6873
7263
|
const lastAccessDate = getDateOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
|
|
6874
7264
|
const creationDate = getDateOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
|
|
6875
7265
|
const internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
|
|
6876
|
-
const passThrough = getOptionValue(zipWriter, options, OPTION_PASS_THROUGH);
|
|
7266
|
+
const passThrough = checkPassThroughOption(getOptionValue(zipWriter, options, OPTION_PASS_THROUGH));
|
|
7267
|
+
const passThroughCompression = Boolean(passThrough);
|
|
7268
|
+
const passThroughEncryption = passThrough === true;
|
|
6877
7269
|
const password = getOptionValue(zipWriter, options, OPTION_PASSWORD);
|
|
6878
7270
|
const rawPassword = getOptionValue(zipWriter, options, OPTION_RAW_PASSWORD);
|
|
6879
7271
|
checkPasswordOption(password, rawPassword);
|
|
@@ -6889,10 +7281,11 @@
|
|
|
6889
7281
|
const dataDescriptorSignature = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR_SIGNATURE, true);
|
|
6890
7282
|
const signal = checkSignalOption(getOptionValue(zipWriter, options, OPTION_SIGNAL));
|
|
6891
7283
|
throwIfAborted(signal);
|
|
6892
|
-
const useUnicodeFileNames = getOptionValue(zipWriter, options, OPTION_USE_UNICODE_FILE_NAMES,
|
|
7284
|
+
const useUnicodeFileNames = getOptionValue(zipWriter, options, OPTION_USE_UNICODE_FILE_NAMES,
|
|
7285
|
+
!isPrintableASCIIText(rawFilename) || !isPrintableASCIIText(rawComment));
|
|
6893
7286
|
const compressionMethod = getOptionValue(zipWriter, options, PROPERTY_NAME_COMPRESSION_METHOD);
|
|
6894
|
-
const registeredCodec =
|
|
6895
|
-
if (!
|
|
7287
|
+
const registeredCodec = passThroughCompression || compressionMethod === UNDEFINED_VALUE ? UNDEFINED_VALUE : getRegisteredCodec(compressionMethod);
|
|
7288
|
+
if (!passThroughCompression && compressionMethod !== UNDEFINED_VALUE &&
|
|
6896
7289
|
compressionMethod !== COMPRESSION_METHOD_STORE && compressionMethod !== COMPRESSION_METHOD_DEFLATE && !registeredCodec) {
|
|
6897
7290
|
throw new Error(ERR_UNSUPPORTED_COMPRESSION);
|
|
6898
7291
|
}
|
|
@@ -6906,15 +7299,15 @@
|
|
|
6906
7299
|
level = 0;
|
|
6907
7300
|
}
|
|
6908
7301
|
}
|
|
6909
|
-
if (
|
|
6910
|
-
level =
|
|
7302
|
+
if (passThroughCompression) {
|
|
7303
|
+
level = toNumber(options[OPTION_LEVEL]);
|
|
6911
7304
|
}
|
|
6912
7305
|
let useCompressionStream = getOptionValue(zipWriter, options, OPTION_USE_COMPRESSION_STREAM);
|
|
6913
7306
|
let dataDescriptor = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR);
|
|
6914
7307
|
if (bufferedWrite && dataDescriptor === UNDEFINED_VALUE) {
|
|
6915
7308
|
dataDescriptor = false;
|
|
6916
7309
|
}
|
|
6917
|
-
if (dataDescriptor === UNDEFINED_VALUE || (zipCrypto && !
|
|
7310
|
+
if (dataDescriptor === UNDEFINED_VALUE || (zipCrypto && !passThroughEncryption)) {
|
|
6918
7311
|
dataDescriptor = true;
|
|
6919
7312
|
}
|
|
6920
7313
|
if (level !== UNDEFINED_VALUE && level != 6) {
|
|
@@ -6938,7 +7331,8 @@
|
|
|
6938
7331
|
lastAccessDate,
|
|
6939
7332
|
creationDate,
|
|
6940
7333
|
internalFileAttributes,
|
|
6941
|
-
|
|
7334
|
+
passThroughCompression,
|
|
7335
|
+
passThroughEncryption,
|
|
6942
7336
|
password,
|
|
6943
7337
|
rawPassword,
|
|
6944
7338
|
encryptionStrength,
|
|
@@ -6999,7 +7393,7 @@
|
|
|
6999
7393
|
}
|
|
7000
7394
|
|
|
7001
7395
|
async function resolveSizes(zipWriter, reader, { resolvedOptions: metadata }, options) {
|
|
7002
|
-
if (metadata.
|
|
7396
|
+
if (metadata.passThroughCompression && !reader && !getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY)) {
|
|
7003
7397
|
throw new Error(ERR_UNDEFINED_READER);
|
|
7004
7398
|
}
|
|
7005
7399
|
let contentSize;
|
|
@@ -7015,12 +7409,12 @@
|
|
|
7015
7409
|
}
|
|
7016
7410
|
|
|
7017
7411
|
function resolveEntrySizes(zipWriter, hasContent, contentSize, metadata, options) {
|
|
7018
|
-
const {
|
|
7412
|
+
const { passThroughCompression, passThroughEncryption, zipCrypto, password, rawPassword, encryptionStrength } = metadata;
|
|
7019
7413
|
let { dataDescriptor, zip64, level, compressionMethod } = metadata;
|
|
7020
7414
|
let maximumCompressedSize = 0;
|
|
7021
7415
|
let uncompressedSize = 0;
|
|
7022
7416
|
let unknownSize = false;
|
|
7023
|
-
if (
|
|
7417
|
+
if (passThroughCompression && hasContent) {
|
|
7024
7418
|
uncompressedSize = options[PROPERTY_NAME_UNCOMPRESSED_SIZE];
|
|
7025
7419
|
if (uncompressedSize === UNDEFINED_VALUE) {
|
|
7026
7420
|
throw new Error(ERR_UNDEFINED_UNCOMPRESSED_SIZE);
|
|
@@ -7031,17 +7425,17 @@
|
|
|
7031
7425
|
}
|
|
7032
7426
|
const zip64Enabled = zip64 === true;
|
|
7033
7427
|
const encrypted = getOptionValue(zipWriter, options, PROPERTY_NAME_ENCRYPTED);
|
|
7034
|
-
if (hasContent &&
|
|
7428
|
+
if (hasContent && passThroughEncryption && !encrypted && getLength(password, rawPassword)) {
|
|
7035
7429
|
throw new Error(ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH);
|
|
7036
7430
|
}
|
|
7037
|
-
const encryptedEntry = hasContent && (Boolean((password && getLength(password)) || (rawPassword && getLength(rawPassword))) || (
|
|
7431
|
+
const encryptedEntry = hasContent && (Boolean((password && getLength(password)) || (rawPassword && getLength(rawPassword))) || (passThroughEncryption && encrypted));
|
|
7038
7432
|
if (!hasContent) {
|
|
7039
7433
|
level = 0;
|
|
7040
7434
|
compressionMethod = COMPRESSION_METHOD_STORE;
|
|
7041
7435
|
}
|
|
7042
|
-
const encryptionOverhead = encryptedEntry
|
|
7436
|
+
const encryptionOverhead = getEncryptionOverhead(encryptedEntry, zipCrypto, encryptionStrength);
|
|
7043
7437
|
if (hasContent) {
|
|
7044
|
-
if (!
|
|
7438
|
+
if (!passThroughCompression) {
|
|
7045
7439
|
if (contentSize === UNDEFINED_VALUE) {
|
|
7046
7440
|
dataDescriptor = true;
|
|
7047
7441
|
if (zip64 || zip64 === UNDEFINED_VALUE) {
|
|
@@ -7054,10 +7448,12 @@
|
|
|
7054
7448
|
}
|
|
7055
7449
|
} else {
|
|
7056
7450
|
options.uncompressedSize = uncompressedSize;
|
|
7057
|
-
maximumCompressedSize = contentSize === UNDEFINED_VALUE ?
|
|
7451
|
+
maximumCompressedSize = contentSize === UNDEFINED_VALUE ?
|
|
7452
|
+
getMaximumCompressedSize(uncompressedSize) + encryptionOverhead :
|
|
7453
|
+
contentSize + (passThroughEncryption ? 0 : encryptionOverhead);
|
|
7058
7454
|
}
|
|
7059
7455
|
}
|
|
7060
|
-
const emptyEntry = !encryptedEntry && (!hasContent || (contentSize === 0 && !
|
|
7456
|
+
const emptyEntry = !encryptedEntry && (!hasContent || (contentSize === 0 && !passThroughCompression)) && !isCompressed(compressionMethod, level);
|
|
7061
7457
|
if (emptyEntry && !zipCrypto && getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR) === UNDEFINED_VALUE) {
|
|
7062
7458
|
dataDescriptor = false;
|
|
7063
7459
|
}
|
|
@@ -7264,6 +7660,7 @@
|
|
|
7264
7660
|
localExtraFieldZip64Length,
|
|
7265
7661
|
rawExtraFieldExtendedTimestamp,
|
|
7266
7662
|
extraFieldExtendedTimestampFlag,
|
|
7663
|
+
extraFieldExtendedTimestampTime,
|
|
7267
7664
|
rawExtraFieldNTFS,
|
|
7268
7665
|
rawExtraFieldUnix,
|
|
7269
7666
|
rawExtraFieldAES,
|
|
@@ -7276,6 +7673,7 @@
|
|
|
7276
7673
|
password,
|
|
7277
7674
|
rawPassword,
|
|
7278
7675
|
level,
|
|
7676
|
+
useUnicodeFileNames,
|
|
7279
7677
|
zip64,
|
|
7280
7678
|
zip64Enabled,
|
|
7281
7679
|
zip64UncompressedSize,
|
|
@@ -7310,7 +7708,8 @@
|
|
|
7310
7708
|
msdosAttributesRaw,
|
|
7311
7709
|
msdosAttributes,
|
|
7312
7710
|
useCompressionStream,
|
|
7313
|
-
|
|
7711
|
+
passThroughCompression,
|
|
7712
|
+
passThroughEncryption,
|
|
7314
7713
|
format,
|
|
7315
7714
|
codecURI
|
|
7316
7715
|
} = options;
|
|
@@ -7321,9 +7720,9 @@
|
|
|
7321
7720
|
zip64Enabled,
|
|
7322
7721
|
directory: Boolean(directory),
|
|
7323
7722
|
executable: Boolean(executable),
|
|
7324
|
-
filenameUTF8:
|
|
7723
|
+
filenameUTF8: Boolean(useUnicodeFileNames),
|
|
7325
7724
|
rawFilename,
|
|
7326
|
-
commentUTF8:
|
|
7725
|
+
commentUTF8: Boolean(useUnicodeFileNames),
|
|
7327
7726
|
rawComment,
|
|
7328
7727
|
rawExtraFieldZip64,
|
|
7329
7728
|
localExtraFieldZip64Length,
|
|
@@ -7354,7 +7753,7 @@
|
|
|
7354
7753
|
uncompressedSize
|
|
7355
7754
|
} = options;
|
|
7356
7755
|
let compressedSize = 0;
|
|
7357
|
-
if (!
|
|
7756
|
+
if (!passThroughCompression) {
|
|
7358
7757
|
uncompressedSize = 0;
|
|
7359
7758
|
}
|
|
7360
7759
|
const { writable } = writer;
|
|
@@ -7371,9 +7770,9 @@
|
|
|
7371
7770
|
encryptionStrength,
|
|
7372
7771
|
zipCrypto: encrypted && zipCrypto,
|
|
7373
7772
|
passwordVerification: encrypted && zipCrypto && (rawLastModDate >> 8) & MAX_8_BITS,
|
|
7374
|
-
computeCrc32: !
|
|
7375
|
-
compressed: compressed && !
|
|
7376
|
-
encrypted: encrypted && !
|
|
7773
|
+
computeCrc32: !passThroughCompression,
|
|
7774
|
+
compressed: compressed && !passThroughCompression,
|
|
7775
|
+
encrypted: encrypted && !passThroughEncryption,
|
|
7377
7776
|
useWebWorkers,
|
|
7378
7777
|
useCompressionStream,
|
|
7379
7778
|
transferStreams,
|
|
@@ -7388,7 +7787,7 @@
|
|
|
7388
7787
|
const result = await runWorker({ readable, writable }, workerOptions);
|
|
7389
7788
|
compressedSize = result.outputSize;
|
|
7390
7789
|
writer.size += compressedSize;
|
|
7391
|
-
if (!
|
|
7790
|
+
if (!passThroughCompression) {
|
|
7392
7791
|
uncompressedSize = result.inputSize;
|
|
7393
7792
|
if (!encrypted || zipCrypto) {
|
|
7394
7793
|
crc32 = result.crc32;
|
|
@@ -7399,7 +7798,10 @@
|
|
|
7399
7798
|
throw new Error(ERR_UNSUPPORTED_FORMAT);
|
|
7400
7799
|
}
|
|
7401
7800
|
} catch (error) {
|
|
7402
|
-
|
|
7801
|
+
const { outputSize: failedOutputSize } = workerOptions;
|
|
7802
|
+
if (failedOutputSize !== UNDEFINED_VALUE) {
|
|
7803
|
+
writer.size += failedOutputSize;
|
|
7804
|
+
} else if (isErrorObject(error) && error.outputSize !== UNDEFINED_VALUE) {
|
|
7403
7805
|
writer.size += error.outputSize;
|
|
7404
7806
|
}
|
|
7405
7807
|
throw error;
|
|
@@ -7431,8 +7833,9 @@
|
|
|
7431
7833
|
headerArray,
|
|
7432
7834
|
headerView,
|
|
7433
7835
|
signature: crc32,
|
|
7434
|
-
crc32: encrypted && !zipCrypto && !
|
|
7836
|
+
crc32: encrypted && !zipCrypto && !passThroughCompression ? UNDEFINED_VALUE : crc32,
|
|
7435
7837
|
extraFieldExtendedTimestampFlag,
|
|
7838
|
+
extraFieldExtendedTimestampTime,
|
|
7436
7839
|
zip64UncompressedSize,
|
|
7437
7840
|
zip64CompressedSize
|
|
7438
7841
|
});
|
|
@@ -7457,7 +7860,7 @@
|
|
|
7457
7860
|
encryptionStrength,
|
|
7458
7861
|
extendedTimestamp,
|
|
7459
7862
|
ntfsTimestamp,
|
|
7460
|
-
|
|
7863
|
+
passThroughCompression,
|
|
7461
7864
|
encrypted,
|
|
7462
7865
|
zip64UncompressedSize,
|
|
7463
7866
|
zip64CompressedSize,
|
|
@@ -7468,7 +7871,7 @@
|
|
|
7468
7871
|
let { version, compressionMethod } = options;
|
|
7469
7872
|
const compressed = !directory && isCompressed(compressionMethod, level);
|
|
7470
7873
|
let rawLocalExtraFieldZip64;
|
|
7471
|
-
const uncompressedFile =
|
|
7874
|
+
const uncompressedFile = passThroughCompression || !compressed;
|
|
7472
7875
|
const zip64ExtraFieldComplete = zip64 && (options.bufferedWrite || !dataDescriptor || ((!zip64UncompressedSize && !zip64CompressedSize) || (uncompressedFile && !unknownSize)));
|
|
7473
7876
|
const writeLocalExtraFieldZip64 = zip64ExtraFieldComplete || (zip64 && dataDescriptor && (zip64UncompressedSize || zip64CompressedSize));
|
|
7474
7877
|
if (zip64 && (zip64UncompressedSize || zip64CompressedSize)) {
|
|
@@ -7480,8 +7883,8 @@
|
|
|
7480
7883
|
if (zip64ExtraFieldComplete) {
|
|
7481
7884
|
extraFieldZip64.writeUint64(uncompressedSize);
|
|
7482
7885
|
if (uncompressedFile) {
|
|
7483
|
-
const encryptionOverhead = encrypted
|
|
7484
|
-
extraFieldZip64.writeUint64(
|
|
7886
|
+
const encryptionOverhead = getEncryptionOverhead(encrypted, zipCrypto, encryptionStrength);
|
|
7887
|
+
extraFieldZip64.writeUint64(passThroughCompression ? 0 : uncompressedSize + encryptionOverhead);
|
|
7485
7888
|
}
|
|
7486
7889
|
}
|
|
7487
7890
|
} else {
|
|
@@ -7500,6 +7903,7 @@
|
|
|
7500
7903
|
let rawExtraFieldNTFS;
|
|
7501
7904
|
let rawExtraFieldExtendedTimestamp;
|
|
7502
7905
|
let extraFieldExtendedTimestampFlag;
|
|
7906
|
+
let extraFieldExtendedTimestampTime;
|
|
7503
7907
|
if (extendedTimestamp) {
|
|
7504
7908
|
const lastModTimeUnix = getTimeUnix(lastModDate);
|
|
7505
7909
|
const lastModTimeUnixInRange = inUnixTimeRange(lastModTimeUnix);
|
|
@@ -7507,6 +7911,7 @@
|
|
|
7507
7911
|
const extraFieldTimestampLength = 9 + (lastAccessDate ? 4 : 0) + (creationDate ? 4 : 0);
|
|
7508
7912
|
const extraFieldTimestamp = createRecordWriter(extraFieldTimestampLength);
|
|
7509
7913
|
extraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);
|
|
7914
|
+
extraFieldExtendedTimestampTime = lastModTimeUnix;
|
|
7510
7915
|
extraFieldTimestamp.writeUint16(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
|
|
7511
7916
|
extraFieldTimestamp.writeUint16(extraFieldTimestampLength - 4);
|
|
7512
7917
|
extraFieldTimestamp.writeUint8(extraFieldExtendedTimestampFlag);
|
|
@@ -7590,7 +7995,7 @@
|
|
|
7590
7995
|
}
|
|
7591
7996
|
if (encrypted && !zipCrypto) {
|
|
7592
7997
|
version = version > VERSION_AES ? version : VERSION_AES;
|
|
7593
|
-
if (
|
|
7998
|
+
if (passThroughCompression && crc32 !== UNDEFINED_VALUE) {
|
|
7594
7999
|
rawExtraFieldAES[EXTRAFIELD_OFFSET_AES_VENDOR_VERSION] = VENDOR_VERSION_AE_1;
|
|
7595
8000
|
}
|
|
7596
8001
|
setUint16(getDataView(rawExtraFieldAES), EXTRAFIELD_OFFSET_AES_COMPRESSION_METHOD, compressionMethod);
|
|
@@ -7652,12 +8057,14 @@
|
|
|
7652
8057
|
headerArray,
|
|
7653
8058
|
headerView,
|
|
7654
8059
|
lastModDate: storedLastModDate,
|
|
8060
|
+
lastModDateClamped: storedLastModDate === clampedLastModDate && dosLastModDate.getTime() != clampedLastModDate.getTime(),
|
|
7655
8061
|
rawLastModDate,
|
|
7656
8062
|
encrypted,
|
|
7657
8063
|
compressed,
|
|
7658
8064
|
version,
|
|
7659
8065
|
compressionMethod,
|
|
7660
8066
|
extraFieldExtendedTimestampFlag,
|
|
8067
|
+
extraFieldExtendedTimestampTime,
|
|
7661
8068
|
rawExtraFieldZip64: EMPTY_UINT8_ARRAY,
|
|
7662
8069
|
localExtraFieldZip64Length,
|
|
7663
8070
|
rawExtraFieldExtendedTimestamp,
|
|
@@ -7760,7 +8167,7 @@
|
|
|
7760
8167
|
}, {
|
|
7761
8168
|
zip64,
|
|
7762
8169
|
zipCrypto,
|
|
7763
|
-
|
|
8170
|
+
passThroughCompression,
|
|
7764
8171
|
dataDescriptor
|
|
7765
8172
|
}) {
|
|
7766
8173
|
const {
|
|
@@ -7771,7 +8178,7 @@
|
|
|
7771
8178
|
dataDescriptorView,
|
|
7772
8179
|
dataDescriptorOffset
|
|
7773
8180
|
} = dataDescriptorInfo;
|
|
7774
|
-
if ((!encrypted || zipCrypto ||
|
|
8181
|
+
if ((!encrypted || zipCrypto || passThroughCompression) && crc32 !== UNDEFINED_VALUE) {
|
|
7775
8182
|
setUint32(headerView, HEADER_OFFSET_SIGNATURE, crc32);
|
|
7776
8183
|
if (dataDescriptor) {
|
|
7777
8184
|
setUint32(dataDescriptorView, dataDescriptorOffset, crc32);
|
|
@@ -7802,9 +8209,9 @@
|
|
|
7802
8209
|
uncompressedSize,
|
|
7803
8210
|
zip64UncompressedSize,
|
|
7804
8211
|
zip64CompressedSize
|
|
7805
|
-
}, localHeaderView, { dataDescriptor,
|
|
8212
|
+
}, localHeaderView, { dataDescriptor, passThroughCompression }) {
|
|
7806
8213
|
if (!dataDescriptor) {
|
|
7807
|
-
if (!encrypted || (
|
|
8214
|
+
if (!encrypted || (passThroughCompression && crc32 !== UNDEFINED_VALUE)) {
|
|
7808
8215
|
setUint32(localHeaderView, HEADER_OFFSET_SIGNATURE + LOCAL_HEADER_COMMON_OFFSET, crc32);
|
|
7809
8216
|
}
|
|
7810
8217
|
if (!zip64CompressedSize) {
|
|
@@ -7841,9 +8248,8 @@
|
|
|
7841
8248
|
rawExtraFieldUnix,
|
|
7842
8249
|
rawExtraField,
|
|
7843
8250
|
rawCentralExtraField,
|
|
7844
|
-
extendedTimestamp,
|
|
7845
8251
|
extraFieldExtendedTimestampFlag,
|
|
7846
|
-
|
|
8252
|
+
extraFieldExtendedTimestampTime,
|
|
7847
8253
|
zip64Enabled,
|
|
7848
8254
|
uncompressedSize,
|
|
7849
8255
|
compressedSize
|
|
@@ -7886,16 +8292,15 @@
|
|
|
7886
8292
|
fileEntry.zip64Offset = zip64Offset;
|
|
7887
8293
|
fileEntry.zip64DiskNumberStart = zip64DiskNumberStart;
|
|
7888
8294
|
let rawExtraFieldTimestamp;
|
|
7889
|
-
|
|
7890
|
-
|
|
8295
|
+
if (extraFieldExtendedTimestampTime === UNDEFINED_VALUE) {
|
|
8296
|
+
rawExtraFieldTimestamp = EMPTY_UINT8_ARRAY;
|
|
8297
|
+
} else {
|
|
7891
8298
|
const extraFieldTimestamp = createRecordWriter(9);
|
|
7892
8299
|
extraFieldTimestamp.writeUint16(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
|
|
7893
8300
|
extraFieldTimestamp.writeUint16(5);
|
|
7894
8301
|
extraFieldTimestamp.writeUint8(extraFieldExtendedTimestampFlag);
|
|
7895
|
-
extraFieldTimestamp.writeUint32(
|
|
8302
|
+
extraFieldTimestamp.writeUint32(extraFieldExtendedTimestampTime);
|
|
7896
8303
|
rawExtraFieldTimestamp = extraFieldTimestamp.array;
|
|
7897
|
-
} else {
|
|
7898
|
-
rawExtraFieldTimestamp = EMPTY_UINT8_ARRAY;
|
|
7899
8304
|
}
|
|
7900
8305
|
fileEntry.rawExtraFieldExtendedTimestamp = rawExtraFieldTimestamp;
|
|
7901
8306
|
const extraFieldLength = getLength(
|
|
@@ -8395,6 +8800,11 @@
|
|
|
8395
8800
|
};
|
|
8396
8801
|
}
|
|
8397
8802
|
|
|
8803
|
+
function isPrintableASCIIText(rawText) {
|
|
8804
|
+
return rawText.every(characterCode =>
|
|
8805
|
+
characterCode >= MIN_PRINTABLE_ASCII_CHARACTER_CODE && characterCode <= MAX_PRINTABLE_ASCII_CHARACTER_CODE);
|
|
8806
|
+
}
|
|
8807
|
+
|
|
8398
8808
|
function getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted, compressionMethod) {
|
|
8399
8809
|
let bitFlag = 0;
|
|
8400
8810
|
if (useUnicodeFileNames) {
|
|
@@ -8556,7 +8966,7 @@
|
|
|
8556
8966
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8557
8967
|
*/
|
|
8558
8968
|
|
|
8559
|
-
const VERSION = "2.
|
|
8969
|
+
const VERSION = "2.13.0";
|
|
8560
8970
|
|
|
8561
8971
|
/*
|
|
8562
8972
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -9378,9 +9788,9 @@
|
|
|
9378
9788
|
DecompressionStreamFallback: DecompressionStreamZlib
|
|
9379
9789
|
});
|
|
9380
9790
|
|
|
9381
|
-
function terminateWorkersAndModule() {
|
|
9791
|
+
async function terminateWorkersAndModule() {
|
|
9792
|
+
await terminateWorkers();
|
|
9382
9793
|
modulePromise = null;
|
|
9383
|
-
terminateWorkers();
|
|
9384
9794
|
resetWasmModule();
|
|
9385
9795
|
}
|
|
9386
9796
|
|
|
@@ -9450,6 +9860,7 @@
|
|
|
9450
9860
|
exports.BlobWriter = BlobWriter;
|
|
9451
9861
|
exports.Data64URIReader = Data64URIReader;
|
|
9452
9862
|
exports.Data64URIWriter = Data64URIWriter;
|
|
9863
|
+
exports.ERR_ABORTED = ERR_ABORTED;
|
|
9453
9864
|
exports.ERR_AMBIGUOUS_ARCHIVE = ERR_AMBIGUOUS_ARCHIVE;
|
|
9454
9865
|
exports.ERR_BAD_FORMAT = ERR_BAD_FORMAT;
|
|
9455
9866
|
exports.ERR_CENTRAL_DIRECTORY_NOT_FOUND = ERR_CENTRAL_DIRECTORY_NOT_FOUND;
|
|
@@ -9462,7 +9873,9 @@
|
|
|
9462
9873
|
exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
|
|
9463
9874
|
exports.ERR_HTTP_RANGE = ERR_HTTP_RANGE;
|
|
9464
9875
|
exports.ERR_HTTP_RESOURCE_CHANGED = ERR_HTTP_RESOURCE_CHANGED;
|
|
9876
|
+
exports.ERR_HTTP_STATUS = ERR_HTTP_STATUS;
|
|
9465
9877
|
exports.ERR_INVALID_AUTHENTICATION_CODE = ERR_INVALID_AUTHENTICATION_CODE;
|
|
9878
|
+
exports.ERR_INVALID_BASE_URI = ERR_INVALID_BASE_URI;
|
|
9466
9879
|
exports.ERR_INVALID_CODEC_DEFINITION = ERR_INVALID_CODEC_DEFINITION;
|
|
9467
9880
|
exports.ERR_INVALID_CODEC_MODULE = ERR_INVALID_CODEC_MODULE;
|
|
9468
9881
|
exports.ERR_INVALID_COMMENT = ERR_INVALID_COMMENT;
|
|
@@ -9471,6 +9884,7 @@
|
|
|
9471
9884
|
exports.ERR_INVALID_CRC32 = ERR_INVALID_CRC32;
|
|
9472
9885
|
exports.ERR_INVALID_DATE = ERR_INVALID_DATE;
|
|
9473
9886
|
exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
|
|
9887
|
+
exports.ERR_INVALID_ENTRY = ERR_INVALID_ENTRY;
|
|
9474
9888
|
exports.ERR_INVALID_ENTRY_COMMENT = ERR_INVALID_ENTRY_COMMENT;
|
|
9475
9889
|
exports.ERR_INVALID_ENTRY_COMMENT_TYPE = ERR_INVALID_ENTRY_COMMENT_TYPE;
|
|
9476
9890
|
exports.ERR_INVALID_ENTRY_NAME = ERR_INVALID_ENTRY_NAME;
|
|
@@ -9488,6 +9902,7 @@
|
|
|
9488
9902
|
exports.ERR_INVALID_MSDOS_DATA = ERR_INVALID_MSDOS_DATA;
|
|
9489
9903
|
exports.ERR_INVALID_PASSWORD = ERR_INVALID_PASSWORD;
|
|
9490
9904
|
exports.ERR_INVALID_PASSWORD_TYPE = ERR_INVALID_PASSWORD_TYPE;
|
|
9905
|
+
exports.ERR_INVALID_PASS_THROUGH_VALUE = ERR_INVALID_PASS_THROUGH_VALUE;
|
|
9491
9906
|
exports.ERR_INVALID_READER = ERR_INVALID_READER;
|
|
9492
9907
|
exports.ERR_INVALID_SIGNAL = ERR_INVALID_SIGNAL;
|
|
9493
9908
|
exports.ERR_INVALID_SIGNATURE_DATA = ERR_INVALID_SIGNATURE_DATA;
|
|
@@ -9497,6 +9912,7 @@
|
|
|
9497
9912
|
exports.ERR_INVALID_UNIX_EXTRA_FIELD_TYPE = ERR_INVALID_UNIX_EXTRA_FIELD_TYPE;
|
|
9498
9913
|
exports.ERR_INVALID_UNIX_ID_SIZE = ERR_INVALID_UNIX_ID_SIZE;
|
|
9499
9914
|
exports.ERR_INVALID_UNIX_MODE = ERR_INVALID_UNIX_MODE;
|
|
9915
|
+
exports.ERR_INVALID_URI = ERR_INVALID_URI;
|
|
9500
9916
|
exports.ERR_INVALID_VERSION = ERR_INVALID_VERSION;
|
|
9501
9917
|
exports.ERR_ITERATOR_COMPLETED_TOO_SOON = ERR_ITERATOR_COMPLETED_TOO_SOON;
|
|
9502
9918
|
exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
|
|
@@ -9504,6 +9920,7 @@
|
|
|
9504
9920
|
exports.ERR_RESERVED_COMPRESSION_METHOD = ERR_RESERVED_COMPRESSION_METHOD;
|
|
9505
9921
|
exports.ERR_SPLIT_ZIP_FILE = ERR_SPLIT_ZIP_FILE;
|
|
9506
9922
|
exports.ERR_UNDEFINED_COMPRESSION_METHOD = ERR_UNDEFINED_COMPRESSION_METHOD;
|
|
9923
|
+
exports.ERR_UNDEFINED_CRC32 = ERR_UNDEFINED_CRC32;
|
|
9507
9924
|
exports.ERR_UNDEFINED_READER = ERR_UNDEFINED_READER;
|
|
9508
9925
|
exports.ERR_UNDEFINED_UNCOMPRESSED_SIZE = ERR_UNDEFINED_UNCOMPRESSED_SIZE;
|
|
9509
9926
|
exports.ERR_UNDETERMINED_SIZE = ERR_UNDETERMINED_SIZE;
|
|
@@ -9519,6 +9936,8 @@
|
|
|
9519
9936
|
exports.ERR_UNSUPPORTED_UINT64 = ERR_UNSUPPORTED_UINT64;
|
|
9520
9937
|
exports.ERR_WORKER_STARTUP_TIMEOUT = ERR_WORKER_STARTUP_TIMEOUT;
|
|
9521
9938
|
exports.ERR_WRITER_NOT_INITIALIZED = ERR_WRITER_NOT_INITIALIZED;
|
|
9939
|
+
exports.ERR_WRITER_SIZE_NOT_WRITABLE = ERR_WRITER_SIZE_NOT_WRITABLE;
|
|
9940
|
+
exports.ERR_ZIP_CRYPTO_LAST_MOD_DATE = ERR_ZIP_CRYPTO_LAST_MOD_DATE;
|
|
9522
9941
|
exports.ERR_ZIP_NOT_EMPTY = ERR_ZIP_NOT_EMPTY;
|
|
9523
9942
|
exports.HttpRangeReader = HttpRangeReader;
|
|
9524
9943
|
exports.HttpReader = HttpReader;
|
|
@@ -9531,13 +9950,17 @@
|
|
|
9531
9950
|
exports.Uint8ArrayWriter = Uint8ArrayWriter;
|
|
9532
9951
|
exports.VERSION = VERSION;
|
|
9533
9952
|
exports.WARNING_APPENDED_DATA = WARNING_APPENDED_DATA;
|
|
9953
|
+
exports.WARNING_CLAMPED_LAST_MODIFICATION_DATE = WARNING_CLAMPED_LAST_MODIFICATION_DATE;
|
|
9534
9954
|
exports.WARNING_COMPRESSED_PATCHED_DATA = WARNING_COMPRESSED_PATCHED_DATA;
|
|
9955
|
+
exports.WARNING_COMPRESSION_UNAVAILABLE = WARNING_COMPRESSION_UNAVAILABLE;
|
|
9535
9956
|
exports.WARNING_DUPLICATE_FILENAME = WARNING_DUPLICATE_FILENAME;
|
|
9536
9957
|
exports.WARNING_MALFORMED_EXTRA_FIELD = WARNING_MALFORMED_EXTRA_FIELD;
|
|
9537
9958
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG;
|
|
9538
9959
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
|
|
9539
9960
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
|
|
9961
|
+
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME = WARNING_MISMATCHED_LOCAL_FILE_HEADER_FILENAME;
|
|
9540
9962
|
exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
|
|
9963
|
+
exports.WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY = WARNING_MULTIPLE_END_OF_CENTRAL_DIRECTORY;
|
|
9541
9964
|
exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
|
|
9542
9965
|
exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
|
|
9543
9966
|
exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
|