@zip.js/zip.js 2.8.43 → 2.8.44

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.
Files changed (45) hide show
  1. package/README.md +0 -37
  2. package/deno.json +1 -1
  3. package/dist/zip-core-external.js +67 -47
  4. package/dist/zip-core-external.min.js +1 -1
  5. package/dist/zip-core.js +68 -46
  6. package/dist/zip-core.min.js +1 -1
  7. package/dist/zip-fs-core-external.js +67 -47
  8. package/dist/zip-fs-core-external.min.js +1 -1
  9. package/dist/zip-fs-core.js +66 -46
  10. package/dist/zip-fs-core.min.js +1 -1
  11. package/dist/zip-fs-external.js +67 -47
  12. package/dist/zip-fs-external.min.js +1 -1
  13. package/dist/zip-fs-native.js +70 -48
  14. package/dist/zip-fs-native.min.js +1 -1
  15. package/dist/zip-fs.js +69 -47
  16. package/dist/zip-fs.min.js +1 -1
  17. package/dist/zip-legacy.js +70 -48
  18. package/dist/zip-legacy.min.js +1 -1
  19. package/dist/zip-native.js +70 -48
  20. package/dist/zip-native.min.js +1 -1
  21. package/dist/zip-web-worker-native.js +1 -1
  22. package/dist/zip-web-worker.js +1 -1
  23. package/dist/zip.js +69 -47
  24. package/dist/zip.min.js +1 -1
  25. package/index-native.cjs +70 -48
  26. package/index-native.min.js +1 -1
  27. package/index.cjs +69 -47
  28. package/index.d.cts +80 -7
  29. package/index.d.ts +80 -7
  30. package/index.min.js +1 -1
  31. package/lib/core/codec-pool.js +6 -2
  32. package/lib/core/options.js +4 -0
  33. package/lib/core/streams/aes-crypto-stream.js +4 -4
  34. package/lib/core/streams/codec-stream.js +4 -0
  35. package/lib/core/streams/common-crypto.js +2 -0
  36. package/lib/core/streams/zip-entry-stream.js +12 -8
  37. package/lib/core/web-worker-inline-native.js +1 -1
  38. package/lib/core/web-worker-inline-wasm.js +1 -1
  39. package/lib/core/web-worker-wasm.js +4 -8
  40. package/lib/core/zip-entry.js +3 -0
  41. package/lib/core/zip-reader.js +35 -26
  42. package/lib/core/zip-writer.js +16 -7
  43. package/lib/zip-core-reader.js +2 -0
  44. package/package.json +1 -1
  45. package/worker-message-property-names.js +1 -1
@@ -33,6 +33,8 @@ import {
33
33
  CODEC_INFLATE,
34
34
  CODEC_DEFLATE,
35
35
  ERR_INVALID_SIGNATURE,
36
+ ERR_INVALID_CRC32,
37
+ ERR_INVALID_AUTHENTICATION_CODE,
36
38
  ERR_INVALID_UNCOMPRESSED_SIZE,
37
39
  ERR_INVALID_PASSWORD,
38
40
  ERR_INVALID_COMPRESSED_DATA,
@@ -52,6 +54,8 @@ export {
52
54
  CODEC_DEFLATE,
53
55
  CODEC_INFLATE,
54
56
  ERR_INVALID_SIGNATURE,
57
+ ERR_INVALID_CRC32,
58
+ ERR_INVALID_AUTHENTICATION_CODE,
55
59
  ERR_INVALID_UNCOMPRESSED_SIZE,
56
60
  ERR_INVALID_PASSWORD,
57
61
  ERR_INVALID_COMPRESSED_DATA,
@@ -62,7 +66,7 @@ let indexWorker = 0;
62
66
 
63
67
  async function runWorker(stream, workerOptions) {
64
68
  const { options, config } = workerOptions;
65
- const { transferStreams, useWebWorkers, useCompressionStream, compressed, signed, encrypted, format, codecURI } = options;
69
+ const { transferStreams, useWebWorkers, useCompressionStream, compressed, checkCrc32, computeCrc32, encrypted, format, codecURI } = options;
66
70
  const { workerURI, maxWorkers } = config;
67
71
  if (format) {
68
72
  if (codecURI) {
@@ -71,7 +75,7 @@ async function runWorker(stream, workerOptions) {
71
75
  await ensureCodecStreams(format, options.codecURI);
72
76
  }
73
77
  workerOptions.transferStreams = transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams);
74
- const streamCopy = !compressed && !signed && !encrypted;
78
+ const streamCopy = !compressed && !checkCrc32 && !computeCrc32 && !encrypted;
75
79
  const workerSupported = format === UNDEFINED_VALUE || Boolean(options.codecURI);
76
80
  workerOptions.useWebWorkers = !streamCopy && workerSupported && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
77
81
  workerOptions.workerURI = workerOptions.useWebWorkers && workerURI ? workerURI : UNDEFINED_VALUE;
@@ -40,6 +40,8 @@ const OPTION_CHECK_OVERLAPPING_ENTRY_ONLY = "checkOverlappingEntryOnly";
40
40
  const OPTION_CHECK_OVERLAPPING_ENTRY = "checkOverlappingEntry";
41
41
  const OPTION_CHECK_AMBIGUITY = "checkAmbiguity";
42
42
  const OPTION_CHECK_SIGNATURE = "checkSignature";
43
+ const OPTION_CHECK_CRC32 = "checkCrc32";
44
+ const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
43
45
  const OPTION_USE_WEB_WORKERS = "useWebWorkers";
44
46
  const OPTION_USE_COMPRESSION_STREAM = "useCompressionStream";
45
47
  const OPTION_TRANSFER_STREAMS = "transferStreams";
@@ -80,6 +82,8 @@ export {
80
82
  OPTION_CHECK_OVERLAPPING_ENTRY,
81
83
  OPTION_CHECK_AMBIGUITY,
82
84
  OPTION_CHECK_SIGNATURE,
85
+ OPTION_CHECK_CRC32,
86
+ OPTION_CHECK_AUTHENTICATION_CODE,
83
87
  OPTION_USE_WEB_WORKERS,
84
88
  OPTION_USE_COMPRESSION_STREAM,
85
89
  OPTION_TRANSFER_STREAMS,
@@ -40,7 +40,7 @@ import {
40
40
  } from "./codecs/sjcl.js";
41
41
  import {
42
42
  ERR_INVALID_PASSWORD,
43
- ERR_INVALID_SIGNATURE,
43
+ ERR_INVALID_AUTHENTICATION_CODE,
44
44
  ERR_ABORT_CHECK_PASSWORD,
45
45
  getRandomValues
46
46
  } from "./common-crypto.js";
@@ -71,7 +71,7 @@ let DERIVE_BITS_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && type
71
71
 
72
72
  class AESDecryptionStream extends TransformStream {
73
73
 
74
- constructor({ password, rawPassword, encryptionStrength, checkPasswordOnly }) {
74
+ constructor({ password, rawPassword, encryptionStrength, checkPasswordOnly, checkAuthenticationCode = true }) {
75
75
  super({
76
76
  start() {
77
77
  initAesCrypto(this, password, rawPassword, encryptionStrength);
@@ -121,8 +121,8 @@ class AESDecryptionStream extends TransformStream {
121
121
  for (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
122
122
  invalidSignature |= signature[indexSignature] ^ originalSignature[indexSignature];
123
123
  }
124
- if (invalidSignature) {
125
- throw new Error(ERR_INVALID_SIGNATURE);
124
+ if (invalidSignature && checkAuthenticationCode) {
125
+ throw new Error(ERR_INVALID_AUTHENTICATION_CODE);
126
126
  }
127
127
  controller.enqueue(decryptedChunkArray);
128
128
  }
@@ -40,6 +40,8 @@ import { UNDEFINED_VALUE } from "../constants.js";
40
40
  import {
41
41
  ERR_INVALID_PASSWORD,
42
42
  ERR_INVALID_SIGNATURE,
43
+ ERR_INVALID_CRC32,
44
+ ERR_INVALID_AUTHENTICATION_CODE,
43
45
  ERR_INVALID_UNCOMPRESSED_SIZE,
44
46
  ERR_INVALID_COMPRESSED_DATA,
45
47
  ERR_ABORT_CHECK_PASSWORD,
@@ -72,6 +74,8 @@ export {
72
74
  MESSAGE_READY,
73
75
  ERR_INVALID_PASSWORD,
74
76
  ERR_INVALID_SIGNATURE,
77
+ ERR_INVALID_CRC32,
78
+ ERR_INVALID_AUTHENTICATION_CODE,
75
79
  ERR_INVALID_UNCOMPRESSED_SIZE,
76
80
  ERR_INVALID_COMPRESSED_DATA,
77
81
  ERR_ABORT_CHECK_PASSWORD,
@@ -34,6 +34,7 @@ const GET_RANDOM_VALUES_SUPPORTED = typeof crypto != UNDEFINED_TYPE && typeof cr
34
34
 
35
35
  const ERR_INVALID_PASSWORD = "Invalid password";
36
36
  const ERR_INVALID_SIGNATURE = "Invalid signature";
37
+ const ERR_INVALID_AUTHENTICATION_CODE = ERR_INVALID_SIGNATURE;
37
38
  const ERR_ABORT_CHECK_PASSWORD = "zipjs-abort-check-password";
38
39
  const ERR_UNSUPPORTED_CRYPTO_API = "Crypto API not supported";
39
40
 
@@ -41,6 +42,7 @@ export {
41
42
  getRandomValues,
42
43
  ERR_INVALID_PASSWORD,
43
44
  ERR_INVALID_SIGNATURE,
45
+ ERR_INVALID_AUTHENTICATION_CODE,
44
46
  ERR_ABORT_CHECK_PASSWORD
45
47
  };
46
48
 
@@ -42,6 +42,7 @@ import {
42
42
  import {
43
43
  ERR_INVALID_PASSWORD,
44
44
  ERR_INVALID_SIGNATURE,
45
+ ERR_INVALID_AUTHENTICATION_CODE,
45
46
  ERR_ABORT_CHECK_PASSWORD
46
47
  } from "./common-crypto.js";
47
48
  import { UNDEFINED_VALUE } from "../constants.js";
@@ -51,6 +52,7 @@ import { getCodecStreams } from "../codec-registry.js";
51
52
 
52
53
  const ERR_INVALID_UNCOMPRESSED_SIZE = "Invalid uncompressed size";
53
54
  const ERR_INVALID_COMPRESSED_DATA = "Invalid compressed data";
55
+ const ERR_INVALID_CRC32 = ERR_INVALID_SIGNATURE;
54
56
  const ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
55
57
  const FORMAT_DEFLATE_RAW = "deflate-raw";
56
58
  const FORMAT_DEFLATE64_RAW = "deflate64-raw";
@@ -64,14 +66,14 @@ class DeflateStream extends TransformStream {
64
66
 
65
67
  constructor(options, { chunkSize, CompressionStreamZlib, CompressionStream }) {
66
68
  super({});
67
- const { compressed, encrypted, useCompressionStream, zipCrypto, signed, level, deflate64, format, compressionMethod } = options;
69
+ const { compressed, encrypted, useCompressionStream, zipCrypto, computeCrc32, level, deflate64, format, compressionMethod } = options;
68
70
  const stream = this;
69
71
  let crc32Stream, encryptionStream, gzipCrc32Stream;
70
72
  let readable = super.readable;
71
73
  const codecStreams = format && getCodecStreams(format);
72
- const useGzipCrc32 = signed && compressed && !deflate64 && !codecStreams && (!encrypted || zipCrypto) &&
74
+ const useGzipCrc32 = computeCrc32 && compressed && !deflate64 && !codecStreams && (!encrypted || zipCrypto) &&
73
75
  Boolean(useCompressionStream && CompressionStream);
74
- if ((!encrypted || zipCrypto) && signed && !useGzipCrc32) {
76
+ if ((!encrypted || zipCrypto) && computeCrc32 && !useGzipCrc32) {
75
77
  crc32Stream = new Crc32Stream();
76
78
  readable = pipeThrough(readable, crc32Stream);
77
79
  }
@@ -110,7 +112,7 @@ class DeflateStream extends TransformStream {
110
112
  if (encrypted && !zipCrypto) {
111
113
  signature = encryptionStream.signature;
112
114
  }
113
- if ((!encrypted || zipCrypto) && signed) {
115
+ if ((!encrypted || zipCrypto) && computeCrc32) {
114
116
  signature = useGzipCrc32 ? gzipCrc32Stream.signature : new DataView(crc32Stream.value.buffer).getUint32(0);
115
117
  }
116
118
  stream.signature = signature;
@@ -233,7 +235,7 @@ class InflateStream extends TransformStream {
233
235
 
234
236
  constructor(options, { chunkSize, DecompressionStreamZlib, DecompressionStream }) {
235
237
  super({});
236
- const { zipCrypto, encrypted, signed, signature, compressed, useCompressionStream, deflate64, format, compressionMethod, rawBitFlag, outputSize } = options;
238
+ const { zipCrypto, encrypted, checkCrc32, signature, compressed, useCompressionStream, deflate64, format, compressionMethod, rawBitFlag, outputSize } = options;
237
239
  let crc32Stream, decryptionStream;
238
240
  let readable = super.readable;
239
241
  if (encrypted) {
@@ -266,15 +268,15 @@ class InflateStream extends TransformStream {
266
268
  }
267
269
  readable = mapInflateStreamError(readable);
268
270
  }
269
- if ((!encrypted || zipCrypto) && signed) {
271
+ if (checkCrc32) {
270
272
  crc32Stream = new Crc32Stream();
271
273
  readable = pipeThrough(readable, crc32Stream);
272
274
  }
273
275
  setReadable(this, readable, () => {
274
- if ((!encrypted || zipCrypto) && signed) {
276
+ if (checkCrc32) {
275
277
  const dataViewSignature = new DataView(crc32Stream.value.buffer);
276
278
  if (signature != dataViewSignature.getUint32(0, false)) {
277
- throw new Error(ERR_INVALID_SIGNATURE);
279
+ throw new Error(ERR_INVALID_CRC32);
278
280
  }
279
281
  }
280
282
  });
@@ -320,6 +322,8 @@ export {
320
322
  supportsGzip,
321
323
  ERR_INVALID_PASSWORD,
322
324
  ERR_INVALID_SIGNATURE,
325
+ ERR_INVALID_CRC32,
326
+ ERR_INVALID_AUTHENTICATION_CODE,
323
327
  ERR_INVALID_UNCOMPRESSED_SIZE,
324
328
  ERR_INVALID_COMPRESSED_DATA,
325
329
  ERR_ABORT_CHECK_PASSWORD
@@ -1 +1 @@
1
- const r=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],n=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],e=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],f=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],i=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],l=new Uint8Array(288);l.fill(8,0,144),l.fill(9,144,256),l.fill(7,256,280),l.fill(8,280,288);const o=new Uint8Array(30).fill(5);function h(r){const n=new Uint16Array(16);for(const e of r)n[e]++;n[0]=0;const e=new Uint16Array(17);for(let r=1;15>=r;r++)e[r+1]=e[r]+n[r];const f=new Uint16Array(r.length);for(let n=0;n<r.length;n++)r[n]&&(f[e[r[n]]++]=n);return{l:n,symbols:f}}const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function q(q){q({workerURI:q=>{const s="text/javascript",w=(t=>{let q=0,s=0,w=0,U=new Uint8Array(1024),y=0,c=0;for(;!c;){c=X(1);const r=X(2);if(0==r)j();else if(1==r)x(h(l),h(o));else{if(2!=r)throw Error("invalid deflate block type");x(...M())}}return U.subarray(0,y);function u(){if(q>=t.length)throw Error("unexpected end of deflate data");return t[q++]}function X(r){for(;r>w;)s|=u()<<w,w+=8;const n=s&(1<<r)-1;return s>>>=r,w-=r,n}function j(){s=0,w=0;const r=u()|u()<<8;q+=2,W(y+r);for(let n=0;r>n;n++)U[y++]=u()}function x(i,l){let o=z(i);for(;256!=o;){if(256>o)W(y+1),U[y++]=o;else{const i=o-257,h=r[i]+X(n[i]),t=z(l),q=e[t]+X(f[t]);W(y+h);const s=y-q;for(let r=0;h>r;r++)U[y++]=U[s+r]}o=z(i)}}function M(){const r=X(5)+257,n=X(5)+1,e=X(4)+4,f=new Uint8Array(19);for(let r=0;e>r;r++)f[i[r]]=X(3);const l=h(f),o=new Uint8Array(r+n);let t=0;for(;t<o.length;){const r=z(l);if(16>r)o[t++]=r;else if(16==r){const r=o[t-1];let n=X(2)+3;for(;n--;)o[t++]=r}else t+=17==r?X(3)+3:X(7)+11}return[h(o.subarray(0,r)),h(o.subarray(r))]}function z(r){const{l:n,symbols:e}=r;let f=0,i=0,l=0;for(let r=1;15>=r;r++){f|=X(1);const o=n[r];if(o>f-i)return e[l+(f-i)];l+=o,i=i+o<<1,f<<=1}throw Error("invalid huffman code")}function W(r){if(U.length<r){let n=2*U.length;for(;r>n;)n*=2;const e=new Uint8Array(n);e.set(U.subarray(0,y)),U=e}}})((r=>{const n=(r=(r+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,e=[];for(let f=0;n>f;f+=4){const n=t.indexOf(r[f])<<18|t.indexOf(r[f+1])<<12|(63&t.indexOf(r[f+2]))<<6|63&t.indexOf(r[f+3]);e.push(n>>16&255),"="!==r[f+2]&&e.push(n>>8&255),"="!==r[f+3]&&e.push(255&n)}return new Uint8Array(e)})("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"));if(q){const r=new Blob([w],{type:s});return URL.createObjectURL(r)}return"data:"+s+";base64,"+(r=>{let n="";const e=r.length;let f=0;for(;e>f+2;f+=3){const e=r[f]<<16|r[f+1]<<8|r[f+2];n+=t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+t[63&e]}const i=e-f;if(1===i){const e=r[f]<<16;n+=t[e>>18&63]+t[e>>12&63]+"=="}else if(2===i){const e=r[f]<<16|r[f+1]<<8;n+=t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+"="}return n})(w)}})}export{q as configureWebWorker};
1
+ const t=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],e=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],n=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],h=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],r=new Uint8Array(288);r.fill(8,0,144),r.fill(9,144,256),r.fill(7,256,280),r.fill(8,280,288);const s=new Uint8Array(30).fill(5);function u(t){const e=new Uint16Array(16);for(const o of t)e[o]++;e[0]=0;const o=new Uint16Array(17);for(let t=1;15>=t;t++)o[t+1]=o[t]+e[t];const n=new Uint16Array(t.length);for(let e=0;e<t.length;e++)t[e]&&(n[o[t[e]]++]=e);return{o:e,symbols:n}}const b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function f(f){f({workerURI:f=>{const i="text/javascript",w=(b=>{let f=0,i=0,w=0,M=new Uint8Array(1024),c=0,z=0;for(;!z;){z=V(1);const t=V(2);if(0==t)a();else if(1==t)W(u(r),u(s));else{if(2!=t)throw Error("invalid deflate block type");W(...m())}}return M.subarray(0,c);function F(){if(f>=b.length)throw Error("unexpected end of deflate data");return b[f++]}function V(t){for(;t>w;)i|=F()<<w,w+=8;const e=i&(1<<t)-1;return i>>>=t,w-=t,e}function a(){i=0,w=0;const t=F()|F()<<8;f+=2,G(c+t);for(let e=0;t>e;e++)M[c++]=F()}function W(h,r){let s=Z(h);for(;256!=s;){if(256>s)G(c+1),M[c++]=s;else{const h=s-257,u=t[h]+V(e[h]),b=Z(r),f=o[b]+V(n[b]);G(c+u);const i=c-f;for(let t=0;u>t;t++)M[c++]=M[i+t]}s=Z(h)}}function m(){const t=V(5)+257,e=V(5)+1,o=V(4)+4,n=new Uint8Array(19);for(let t=0;o>t;t++)n[h[t]]=V(3);const r=u(n),s=new Uint8Array(t+e);let b=0;for(;b<s.length;){const t=Z(r);if(16>t)s[b++]=t;else if(16==t){const t=s[b-1];let e=V(2)+3;for(;e--;)s[b++]=t}else b+=17==t?V(3)+3:V(7)+11}return[u(s.subarray(0,t)),u(s.subarray(t))]}function Z(t){const{o:e,symbols:o}=t;let n=0,h=0,r=0;for(let t=1;15>=t;t++){n|=V(1);const s=e[t];if(s>n-h)return o[r+(n-h)];r+=s,h=h+s<<1,n<<=1}throw Error("invalid huffman code")}function G(t){if(M.length<t){let e=2*M.length;for(;t>e;)e*=2;const o=new Uint8Array(e);o.set(M.subarray(0,c)),M=o}}})((t=>{const e=(t=(t+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,o=[];for(let n=0;e>n;n+=4){const e=b.indexOf(t[n])<<18|b.indexOf(t[n+1])<<12|(63&b.indexOf(t[n+2]))<<6|63&b.indexOf(t[n+3]);o.push(e>>16&255),"="!==t[n+2]&&o.push(e>>8&255),"="!==t[n+3]&&o.push(255&e)}return new Uint8Array(o)})("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"));if(f){const t=new Blob([w],{type:i});return URL.createObjectURL(t)}return"data:"+i+";base64,"+(t=>{let e="";const o=t.length;let n=0;for(;o>n+2;n+=3){const o=t[n]<<16|t[n+1]<<8|t[n+2];e+=b[o>>18&63]+b[o>>12&63]+b[o>>6&63]+b[63&o]}const h=o-n;if(1===h){const o=t[n]<<16;e+=b[o>>18&63]+b[o>>12&63]+"=="}else if(2===h){const o=t[n]<<16|t[n+1]<<8;e+=b[o>>18&63]+b[o>>12&63]+b[o>>6&63]+"="}return e})(w)}})}export{f as configureWebWorker};
@@ -1 +1 @@
1
- function t(t){const e='(t=>{"function"==typeof define&&define.amd?define(t):t()})(function(){"use strict";const{Array:t,Object:e,Number:n,Math:s,Error:r,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:l,Promise:w,TextEncoder:u,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:g,DecompressionStream:S}=self,v=void 0,b="undefined",z="function",k=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;256>t;t++){let e=t;for(let t=0;8>t;t++)e=1&e?e>>>1^3988292384:e>>>1;C[0][t]=e}for(let t=0;256>t;t++)for(let e=1;8>e;e++){const n=C[e-1][t];C[e][t]=n>>>8^C[0][255&n]}const[A,I,x,M,P,B,D,R]=C;class U{constructor(t){this.o=t||-1}append(t){let e=0|this.o;const n=0|t.length;let s=0;if(n>=8&&t.buffer){const r=new l(t.buffer,t.byteOffset,n),o=n-8;for(;o>=s;s+=8){const t=e^r.getInt32(s,!0),n=r.getInt32(s+4,!0);e=R[255&t]^D[t>>>8&255]^B[t>>>16&255]^P[t>>>24&255]^M[255&n]^x[n>>>8&255]^I[n>>>16&255]^A[n>>>24&255]}}for(;n>s;s++)e=e>>>8^A[255&(e^t[s])];this.o=e}get(){return~this.o}}class W extends d{constructor(){let t;const e=new U;super({transform(t,n){e.append(t),n.enqueue(t)},flush(){const n=new o(4);new l(n.buffer).setUint32(0,e.get()),t.value=n}}),t=this}}function _(t,e){const n=new o(t.length+e.length);return n.set(t),n.set(e,t.length),n}function T(t){return new l(t.buffer,t.byteOffset,t.byteLength)}const V={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=V.l(n);return 32===s?t.concat(e):V.h(e,s,0|n,t.slice(0,t.length-1))},m(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+V.l(n)},S(t,e){if(32*t.length<e)return t;const n=(t=t.slice(0,s.ceil(e/32))).length;return e&=31,n>0&&e&&(t[n-1]=V.v(e,t[n-1]&2147483648>>e-1,1)),t},v:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,e,n,s){for(void 0===s&&(s=[]);e>=32;e-=32)s.push(n),n=0;if(0===e)return s.concat(t);for(let r=0;r<t.length;r++)s.push(n|t[r]>>>e),n=t[r]<<32-e;const r=t.length?t[t.length-1]:0,o=V.l(r);return s.push(V.v(e+o&31,e+o>32?n:s.pop(),1)),s}},K={bytes:{C(t){const e=V.m(t)/8,n=new o(e);let s;for(let r=0;e>r;r++)3&r||(s=t[r/4]),n[r]=s>>>24,s<<=8;return n},A(t){const e=[];let n,s=0;for(n=0;n<t.length;n++)s=s<<8|t[n],3&~n||(e.push(s),s=0);return 3&n&&e.push(V.v(8*(3&n),s)),e}}},E=class{constructor(t){const e=this;e.blockSize=512,e.I=[1732584193,4023233417,2562383102,271733878,3285377520],e.M=[1518500249,1859775393,2400959708,3395469782],t?(e.P=t.P.slice(0),e.B=t.B.slice(0),e.D=t.D):e.reset()}reset(){const t=this;return t.P=t.I.slice(0),t.B=[],t.D=0,t}update(t){const e=this;"string"==typeof t&&(t=K.R.A(t));const n=e.B=V.concat(e.B,t),s=e.D,o=e.D=s+V.m(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new i(n);let a=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e.U(c.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}W(){const t=this;let e=t.B;const n=t.P;e=V.concat(e,[V.v(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.D/4294967296)),e.push(0|t.D);e.length;)t.U(e.splice(0,16));return t.reset(),n}_(t,e,n,s){return t>19?t>39?t>59?t>79?void 0:e^n^s:e&n|e&s|n&s:e^n^s:e&n|~e&s}T(t,e){return e<<t|e>>>32-t}U(e){const n=this,r=n.P,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let c=r[0],i=r[1],a=r[2],f=r[3],l=r[4];for(let t=0;79>=t;t++){16>t||(o[t]=n.T(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.T(5,c)+n._(t,i,a,f)+l+o[t]+n.M[s.floor(t/20)]|0;l=f,f=a,a=n.T(30,i),i=c,c=e}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]+l|0}},F={importKey:t=>new F.V(K.bytes.A(t)),K(t,e,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let c,i,a,f,w;const u=new ArrayBuffer(o),h=new l(u);let p=0;const d=V;for(e=K.bytes.A(e),w=1;(o||1)>p;w++){for(c=i=t.encrypt(d.concat(e,[w])),a=1;n>a;a++)for(i=t.encrypt(i),f=0;f<i.length;f++)c[f]^=i[f];for(a=0;(o||1)>p&&a<c.length;a++)h.setInt32(p,c[a]),p+=4}return u.slice(0,s/8)},V:class{constructor(t){const e=this,n=e.F=E,s=[[],[]];e.L=[new n,new n];const r=e.L[0].blockSize/32;t.length>r&&(t=(new n).update(t).W());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.L[0].update(s[0]),e.L[1].update(s[1]),e.O=new n(e.L[0])}reset(){const t=this;t.O=new t.F(t.L[0]),t.j=!1}update(t){this.j=!0,this.O.update(t)}digest(){const t=this,e=t.O.W(),n=new t.F(t.L[1]).update(e).W();return t.reset(),n}encrypt(t){if(this.j)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},L=typeof h!=b&&typeof h.getRandomValues==z,O="Invalid password",j="Invalid signature",H="zipjs-abort-check-password";function Z(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const N=16,q={name:"PBKDF2"},G=e.assign({hash:{name:"HMAC"}},q),J=e.assign({iterations:1e3,hash:{name:"SHA-1"}},q),Q=["deriveBits"],X=[8,12,16],Y=[16,24,32],$=10,tt=[0,0,0,0],et=typeof h!=b,nt=et&&h.subtle,st=et&&typeof nt!=b,rt=K.bytes,ot=class{constructor(t){const e=this;e.H=[[[],[],[],[],[]],[[],[],[],[],[]]],e.H[0][0][0]||e.Z();const n=e.H[0][4],s=e.H[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(e.M=[i=t.slice(0),a=[]],c=o;4*o+28>c;c++){let t=i[c-1];(c%o===0||8===o&&c%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[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 e=i[3&t?c:c-4];a[t]=4>=c||4>t?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}Z(){const t=this.H[0],e=this.H[1],n=t[4],s=e[4],r=[],o=[];let c,i,a,f;for(let t=0;256>t;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let l=c=0;!n[l];l^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,n[l]=o,s[o]=l,f=r[a=r[i=r[l]]];let w=16843009*f^65537*a^257*i^16843008*l,u=257*r[o]^16843008*o;for(let n=0;4>n;n++)t[n][l]=u=u<<24^u>>>8,e[n][o]=w=w<<24^w>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}N(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.M[e],s=n.length/4-2,o=[0,0,0,0],c=this.H[e],i=c[0],a=c[1],f=c[2],l=c[3],w=c[4];let u,h,p,d=t[0]^n[0],y=t[e?3:1]^n[1],m=t[2]^n[2],g=t[e?1:3]^n[3],S=4;for(let t=0;s>t;t++)u=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&g]^n[S],h=i[y>>>24]^a[m>>16&255]^f[g>>8&255]^l[255&d]^n[S+1],p=i[m>>>24]^a[g>>16&255]^f[d>>8&255]^l[255&y]^n[S+2],g=i[g>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[S+3],S+=4,d=u,y=h,m=p;for(let t=0;4>t;t++)o[e?3&-t:t]=w[d>>>24]<<24^w[y>>16&255]<<16^w[m>>8&255]<<8^w[255&g]^n[S++],u=d,d=y,y=m,m=g,g=u;return o}},ct=class{constructor(t,e){this.G=t,this.J=e,this.X=e}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}$(t){if(255&~(t>>24))t+=1<<24;else{let e=t>>16&255,n=t>>8&255,s=255&t;255===e?(e=0,255===n?(n=0,255===s?s=0:++s):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=s}return t}et(t){0===(t[0]=this.$(t[0]))&&(t[1]=this.$(t[1]))}Y(t,e,n){let s;if(!(s=e.length))return[];const r=V.m(e);for(let r=0;s>r;r+=4){this.et(n);const s=t.encrypt(n);e[r]^=s[0],e[r+1]^=s[1],e[r+2]^=s[2],e[r+3]^=s[3]}return V.S(e,r)}},it=F.V;let at=et&&st&&typeof nt.importKey==z,ft=et&&st&&typeof nt.deriveBits==z;class lt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s}){super({start(){ut(this,t,e,n)},async transform(t,e){const n=this,{password:c,strength:i,nt:a,ready:f}=n;c?(await(async(t,e,n,s)=>{const o=await pt(t,e,n,yt(s,0,X[e])),c=yt(s,X[e]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)})(n,i,c,yt(t,0,X[i]+2)),t=yt(t,X[i]+2),s?e.error(new r(H)):a()):await f;const l=new o(t.length-$-(t.length-$)%N);e.enqueue(ht(n,t,l,0,$,!0))},async flush(t){const{st:e,ot:n,pending:s,ready:o}=this;if(n&&e){await o;const c=yt(s,0,s.length-$),i=yt(s,s.length-$);let a=k;if(c.length){const t=gt(rt,c);n.update(t);const s=e.update(t);a=mt(rt,s)}const f=yt(mt(rt,n.digest()),0,$);let l=s.length<$?1:0;for(let t=0;$>t;t++)l|=f[t]^i[t];if(l)throw new r(j);t.enqueue(a)}}})}}class wt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){let s;super({start(){ut(this,t,e,n)},async transform(t,e){const n=this,{password:s,strength:r,nt:c,ready:i}=n;let a=k;s?(a=await(async(t,e,n)=>{const s=Z(new o(X[e]));return _(s,await pt(t,e,n,s))})(n,r,s),c()):await i;const f=new o(a.length+t.length-t.length%N);f.set(a,0),e.enqueue(ht(n,t,f,a.length,0))},async flush(t){const{st:e,ot:n,pending:r,ready:o}=this;if(n&&e){await o;let c=k;if(r.length){const t=e.update(gt(rt,r));n.update(t),c=mt(rt,t)}s.signature=mt(rt,n.digest()).slice(0,$),t.enqueue(_(c,s.signature))}}}),s=this}}function ut(t,n,s,r){e.assign(t,{ready:new w(e=>t.nt=e),password:dt(n,s),strength:r-1,pending:k})}function ht(t,e,n,s,r,c){const{st:i,ot:a,pending:f}=t;f.length&&(e=_(f,e));const l=e.length-r;let w;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(l-l%N)),w=0;l-N>=w;w+=N){const t=gt(rt,yt(e,w,w+N));c&&a.update(t);const r=i.update(t);c||a.update(r),n.set(mt(rt,r),w+s)}return t.pending=yt(e,w),n}async function pt(n,s,r,c){n.password=null;const i=await(async(t,e,n,s,r)=>{if(!at)return F.importKey(e);try{return await nt.importKey("raw",e,n,!1,r)}catch{return at=!1,F.importKey(e)}})(0,r,G,0,Q),a=await(async(t,e,n)=>{if(!ft)return F.K(e,t.salt,J.iterations,n);try{return await nt.deriveBits(t,e,n)}catch{return ft=!1,F.K(e,t.salt,J.iterations,n)}})(e.assign({salt:c},J),i,8*(2*Y[s]+2)),f=new o(a),l=gt(rt,yt(f,0,Y[s])),w=gt(rt,yt(f,Y[s],2*Y[s])),u=yt(f,2*Y[s]);return e.assign(n,{keys:{key:l,ct:w,passwordVerification:u},st:new ct(new ot(l),t.from(tt)),ot:new it(w)}),u}function dt(t,e){return e===v?(t=>{if(typeof u==b){const e=new o((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new u).encode(t)})(t):e}function yt(t,e,n){return t.subarray(e,n)}function mt(t,e){return t.C(e)}function gt(t,e){return t.A(e)}class St extends d{constructor({password:t,rawPassword:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){bt(this,t,e,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=zt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e[11]^n.passwordVerification))throw new r(O);t=t.subarray(12)}s?e.error(new r(H)):e.enqueue(zt(n,t))}})}}class vt extends d{constructor({password:t,rawPassword:e,passwordVerification:n}){super({start(){bt(this,t,e,n)},transform(t,e){const n=this;let s,r;if(n.password||n.rawPassword){n.password=n.rawPassword=null;const e=Z(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(kt(n,e),0),r=12}else s=new o(t.length),r=0;s.set(kt(n,t),r),e.enqueue(s)}})}}function bt(t,n,s,r){e.assign(t,{password:n,rawPassword:s,passwordVerification:r}),((t,n,s)=>{const r=[305419896,591751049,878082192];if(e.assign(t,{keys:r,it:new U(r[0]),ft:new U(r[2])}),s)for(let e=0;e<s.length;e++)Ct(t,s[e]);else for(let e=0;e<n.length;e++)Ct(t,n.charCodeAt(e))})(t,n,s)}function zt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=At(t)^e[s],Ct(t,n[s]);return n}function kt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=At(t)^e[s],Ct(t,e[s]);return n}function Ct(t,e){let[,n]=t.keys;t.it.append([e]);const r=~t.it.get();n=xt(s.imul(xt(n+It(r)),134775813)+1),t.ft.append([n>>>24]);const o=~t.ft.get();t.keys=[r,n,o]}function At(t){const e=2|t.keys[2];return It(s.imul(e,1^e)>>>8)}function It(t){return 255&t}function xt(t){return 4294967295&t}const Mt=new f;function Pt(t){return Mt.get(t)}const Bt="Invalid uncompressed size",Dt="deflate-raw",Rt="gzip",Ut=[31,139,8];class Wt extends d{constructor(t,{chunkSize:e,CompressionStreamZlib:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,signed:a,level:f,deflate64:w,format:u,compressionMethod:h}=t,p=this;let d,y,m,g=super.readable;const S=u&&Pt(u),v=a&&r&&!w&&!S&&(!o||i)&&!(!c||!s);if(o&&!i||!a||v||(d=new W,g=Lt(g,d)),r)if(S)g=Ot(g,Et(S.CompressionStream,u,{level:f,chunkSize:e,compressionMethod:h}));else if(v)m=new _t,g=Ot(g,new s(Rt)),g=Lt(g,m);else try{g=Ft(g,c,{level:f,chunkSize:e},s,n)}catch(t){let e;try{e=new s(Rt)}catch{throw t}g=Ot(g,e),g=Lt(g,new _t)}o&&(i?g=Lt(g,new vt(t)):(y=new wt(t),g=Lt(g,y))),Kt(p,g,()=>{let t;o&&!i&&(t=y.signature),o&&!i||!a||(t=v?m.signature:new l(d.value.buffer).getUint32(0)),p.signature=t})}}class _t extends d{constructor(){let t,e=10,n=new o(0);super({transform(t,r){if(e){const n=s.min(e,t.length);if(e-=n,!(t=t.subarray(n)).length)return}const o=n.length+t.length;if(8>=o)return void(n=_(n,t));const c=o-8,i=s.min(c,n.length);r.enqueue(_(n.subarray(0,i),t.subarray(0,c-i))),n=_(n.subarray(i),t.subarray(c-i))},flush(){const e=T(n);t.signature=e.getUint32(0,!0),t.uncompressedSize=e.getUint32(4,!0)}}),t=this}}class Tt extends d{constructor(t,{chunkSize:e,DecompressionStreamZlib:n,DecompressionStream:s}){super({});const{zipCrypto:c,encrypted:i,signed:a,signature:f,compressed:u,useCompressionStream:h,deflate64:p,format:m,compressionMethod:g,rawBitFlag:S,outputSize:b}=t;let z,k,C=super.readable;if(i&&(c?C=Lt(C,new St(t)):(k=new lt(t),C=Lt(C,k))),u){const t=m&&Pt(m);if(t)C=Ot(C,Et(t.DecompressionStream,m,{chunkSize:e,compressionMethod:g,rawBitFlag:S,uncompressedSize:b}));else try{C=Ft(C,h,{chunkSize:e,deflate64:p},s,n)}catch(t){if(p||b===v)throw t;let e;try{e=new s(Rt)}catch{throw t}C=((t,e,n)=>{const s=new U;let c,i,a,f=0,l=!1;const u=new w((t,e)=>{i=t,a=e});u.catch(()=>{}),n||i();const h=new d({start(t){const e=new o(10);e.set(Ut),t.enqueue(e)},transform(t,e){e.enqueue(t)},async flush(t){l=!0,y();try{await u}finally{m()}const e=new o(8),r=T(e);r.setUint32(0,s.get(),!0),r.setUint32(4,n,!0),t.enqueue(e)},cancel(t){a(t)}}),p=new d({transform(t,e){s.append(t),f+=t.length,n>f?l&&y():i(),e.enqueue(t)},cancel(t){a(t)}});return t=Lt(t,h),Lt(t=Ot(t,e),p);function y(){m(),c=setTimeout(()=>a(new r(Bt)),5e3)}function m(){clearTimeout(c)}})(C,e,b)}C=(t=>{const e=t.getReader();return new y({async pull(t){let n;try{n=await e.read()}catch(t){if(t&&t.message)throw t;const e=new r("Invalid compressed data");throw e.cause=t,e}const{value:s,done:o}=n;o?t.close():t.enqueue(s)},cancel:t=>e.cancel(t)})})(C)}i&&!c||!a||(z=new W,C=Lt(C,z)),Kt(this,C,()=>{if((!i||c)&&a){const t=new l(z.value.buffer);if(f!=t.getUint32(0,!1))throw new r(j)}})}}const Vt=new f;function Kt(t,n,s){n=Lt(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Et(t,e,n){if(!t)throw new r("Compression method not supported");return new t(e,n)}function Ft(t,e,n,s,r){const o=e&&s?s:r||s,c=n.deflate64?"deflate64-raw":Dt;let i;try{i=new o(c,n)}catch(t){if(!e||!r||o==r)throw t;i=new r(c,n)}return Ot(t,i)}function Lt(t,e){return(t=>{if(t instanceof y)return t;const e=t.getReader();return new y({async pull(t){const{value:n,done:s}=await e.read();s?t.close():t.enqueue(n)},cancel:t=>e.cancel(t)})})(t).pipeThrough(e)}function Ot(t,e){const n=e.writable.getWriter(),s=t.getReader();return(async()=>{try{for(;;){await n.ready;const t=await s.read();if(t.done){await n.close();break}await n.write(t.value)}}catch(t){await(async(t,e)=>{try{await t.abort(e)}catch{}})(n,t),await(async(t,e)=>{try{await t.cancel(e)}catch{}})(s,t)}})(),e.readable}const jt="data",Ht="close",Zt="deflate";class Nt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let c;o.startsWith(Zt)?c=Wt:o.startsWith("inflate")&&(c=Tt),s.outputSize=0;let i=0;const a=new c(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(i+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:i})}}),w=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r(Bt)},flush(){const{signature:t}=a;e.assign(s,{signature:t,inputSize:i})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(a).pipeThrough(w)})}}class qt extends d{constructor(t){const e=[];let s=0;function r(){const n=new o(t);let r=0;for(;t>r;){const s=e[0],o=t-r;s.length>o?(n.set(s.subarray(0,o),r),e[0]=s.subarray(o),r+=o):(n.set(s,r),r+=s.length,e.shift())}return s-=t,n}n.isFinite(t)&&t>=1||(t=65536),super({transform(n,o){for(e.push(n),s+=n.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(((t,e)=>{const n=new o(e);let s=0;for(const e of t)n.set(e,s),s+=e.length;return n})(e,s))}})}}let Gt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Gt=navigator.hardwareConcurrency)}catch{}const Jt=new f,Qt=new f;let Xt,Yt,$t,te,ee,ne,se=0;async function re(t){let e,o;try{const{options:c,config:i}=t;if(c.format&&await(async(t,e)=>{!Mt.has(t)&&e&&((t,e)=>{const{CompressionStream:n,DecompressionStream:s}=e;if(typeof n!=z&&typeof s!=z)throw new r("Invalid codec module");Mt.set(t,{CompressionStream:n,DecompressionStream:s})})(t,await(import(e)))})(c.format,c.codecURI),i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream,c.compressed&&!c.format)if(c.useCompressionStream){if(!((t,e)=>{if(!t)return!1;let n=Vt.get(t);n||(n=new f,Vt.set(t,n));let s=n.get(e);if(s===v){try{new t(e),s=!0}catch{s=!1}n.set(e,s)}return s})(c.codecType.startsWith(Zt)?i.CompressionStream:i.DecompressionStream,Dt))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{c.useCompressionStream=!0}const a={highWaterMark:1},l=t.readable||new y({async pull(t){const e=new w(t=>Jt.set(se,t));oe({type:"pull",messageId:se}),se=(se+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);o=t.writable||new m({async write(t){let e;const s=new w(t=>e=t);Qt.set(se,e),oe({type:jt,value:t,messageId:se}),se=(se+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Nt(c,i),Xt=new AbortController;const{signal:u}=Xt;await l.pipeThrough(e).pipeThrough(new qt((t=>s.max(t.chunkSize,64))(i))).pipeTo(o,{signal:u,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{signature:h,inputSize:p,outputSize:d}=e;oe({type:Ht,result:{signature:h,inputSize:p,outputSize:d}})}catch(t){if(t.outputSize=e?e.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}ce(t)}}function oe(t){const{value:e}=t;if(e)if(e.length)try{t.value=(n=e,n.byteOffset||n.byteLength!=n.buffer.byteLength?new o(n):n).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var n}function ce(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:c,cause:i}=t,a={message:e,stack:n,code:s,name:o,outputSize:c};i&&(a.cause={name:i.name,message:i.message}),p({error:a})}function ie(t,e,n={}){if(!Yt){const t=new r("WASM module not loaded");throw t.cause=ne,t}const c="number"==typeof n.level?n.level:-1,i="number"==typeof n.outBuffer?n.outBuffer:65536,a="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.lt=$t(i),this.in=$t(a),this.inBufferSize=a,!this.lt||!this.in)throw new r("allocation failed");if(this.wt=new o(i),t?(this.ut=Yt.deflate_process,this.ht=Yt.deflate_last_consumed,this.yt=Yt.deflate_end,this.gt=Yt.deflate_new(),n="gzip"===e?Yt.deflate_init_gzip(this.gt,c):"deflate-raw"===e?Yt.deflate_init_raw(this.gt,c):Yt.deflate_init(this.gt,c)):"deflate64-raw"===e?(this.ut=Yt.inflate9_process,this.ht=Yt.inflate9_last_consumed,this.yt=Yt.inflate9_end,this.gt=Yt.inflate9_new(),n=Yt.inflate9_init_raw(this.gt)):(this.ut=Yt.inflate_process,this.ht=Yt.inflate_last_consumed,this.yt=Yt.inflate_end,this.gt=Yt.inflate_new(),n="deflate-raw"===e?Yt.inflate_init_raw(this.gt):"gzip"===e?Yt.inflate_init_gzip(this.gt):Yt.inflate_init(this.gt)),0!==n)throw new r("init failed:"+n)}catch(t){throw f(this),t}},transform(e,n){try{const c=e,a=new o(ee.buffer),f=this.ut,l=this.ht,w=this.lt,u=this.wt;let h=0;for(;h<c.length;){const e=s.min(c.length-h,32768);if((!this.in||this.inBufferSize<e)&&(this.in&&te&&(te(this.in),this.in=0),this.in=$t(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");a.set(c.subarray(h,h+e),this.in);const o=f(this.gt,this.in,e,w,i,0),p=16777215&o;if(p&&(u.set(a.subarray(w,w+p),0),n.enqueue(u.slice(0,p))),!t){const t=o>>24&255,e=128&t?t-256:t;if(0>e)throw new r("process error:"+e)}const d=l(this.gt);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(ee.buffer),s=this.ut,c=this.lt,a=this.wt;for(;;){const o=s(this.gt,0,0,c,i,4),f=16777215&o,l=o>>24&255;if(!t){const t=128&l?l-256:l;if(0>t)throw new r("process error:"+t)}if(f&&(a.set(n.subarray(c,c+f),0),e.enqueue(a.slice(0,f))),1===l||0===f)break}}catch(t){e.error(t)}finally{const t=f(this);0!==t&&e.error(new r("end error:"+t))}},cancel(){f(this)}});function f(t){let e=0;return t.gt&&t.yt&&(e=t.yt(t.gt)),t.gt=0,t.in&&te&&te(t.in),t.in=0,t.lt&&te&&te(t.lt),t.lt=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&re(t),e==jt){const t=Jt.get(n);Jt.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=Qt.get(n);Qt.delete(n),t()}e==Ht&&Xt.abort()}catch(t){ce(t)}}),p({type:"ready"});class ae{constructor(t="deflate",e){return ie(!0,t,e)}}class fe{constructor(t="deflate",e){return ie(!1,t,e)}}ae.St=!0,fe.St=!0;let le=!1;self.initModule=async t=>{try{const e=await(async(t,{baseURI:e})=>{if(!le)try{await(async(t,e)=>{let n,s;try{try{s=new URL(t,e)}catch{}const r=await fetch(s);n=await r.arrayBuffer()}catch(e){if(!t.startsWith("data:application/wasm;base64,"))throw e;n=(t=>{const e=t.split(",")[1],n=atob(e),s=n.length,r=new o(s);for(let t=0;s>t;++t)r[t]=n.charCodeAt(t);return r.buffer})(t)}(t=>{if(Yt=t,({malloc:$t,free:te,memory:ee}=Yt),"function"!=typeof $t||"function"!=typeof te||!ee)throw Yt=$t=te=ee=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports)})(t,e),le=!0}catch(t){throw(t=>{ne=t})(t),t}})(t.wasmURI,t);return t.CompressionStreamZlib=ae,t.DecompressionStreamZlib=fe,e}catch{}}});\n';t({workerURI:t=>{const n="text/javascript";if(t){const t=new Blob([e],{type:n});return URL.createObjectURL(t)}return"data:"+n+","+encodeURIComponent(e)}})}export{t as configureWebWorker};
1
+ function t(t){const e='(t=>{"function"==typeof define&&define.amd?define(t):t()})(function(){"use strict";const{Array:t,Object:e,Number:n,Math:s,Error:r,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:l,Promise:u,TextEncoder:w,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:g,DecompressionStream:S}=self,v=void 0,b="undefined",k="function",z=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;256>t;t++){let e=t;for(let t=0;8>t;t++)e=1&e?e>>>1^3988292384:e>>>1;C[0][t]=e}for(let t=0;256>t;t++)for(let e=1;8>e;e++){const n=C[e-1][t];C[e][t]=n>>>8^C[0][255&n]}const[A,I,x,M,P,B,D,R]=C;class U{constructor(t){this.o=t||-1}append(t){let e=0|this.o;const n=0|t.length;let s=0;if(n>=8&&t.buffer){const r=new l(t.buffer,t.byteOffset,n),o=n-8;for(;o>=s;s+=8){const t=e^r.getInt32(s,!0),n=r.getInt32(s+4,!0);e=R[255&t]^D[t>>>8&255]^B[t>>>16&255]^P[t>>>24&255]^M[255&n]^x[n>>>8&255]^I[n>>>16&255]^A[n>>>24&255]}}for(;n>s;s++)e=e>>>8^A[255&(e^t[s])];this.o=e}get(){return~this.o}}class W extends d{constructor(){let t;const e=new U;super({transform(t,n){e.append(t),n.enqueue(t)},flush(){const n=new o(4);new l(n.buffer).setUint32(0,e.get()),t.value=n}}),t=this}}function _(t,e){const n=new o(t.length+e.length);return n.set(t),n.set(e,t.length),n}function T(t){return new l(t.buffer,t.byteOffset,t.byteLength)}const V={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=V.l(n);return 32===s?t.concat(e):V.h(e,s,0|n,t.slice(0,t.length-1))},m(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+V.l(n)},S(t,e){if(32*t.length<e)return t;const n=(t=t.slice(0,s.ceil(e/32))).length;return e&=31,n>0&&e&&(t[n-1]=V.v(e,t[n-1]&2147483648>>e-1,1)),t},v:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,e,n,s){for(void 0===s&&(s=[]);e>=32;e-=32)s.push(n),n=0;if(0===e)return s.concat(t);for(let r=0;r<t.length;r++)s.push(n|t[r]>>>e),n=t[r]<<32-e;const r=t.length?t[t.length-1]:0,o=V.l(r);return s.push(V.v(e+o&31,e+o>32?n:s.pop(),1)),s}},K={bytes:{C(t){const e=V.m(t)/8,n=new o(e);let s;for(let r=0;e>r;r++)3&r||(s=t[r/4]),n[r]=s>>>24,s<<=8;return n},A(t){const e=[];let n,s=0;for(n=0;n<t.length;n++)s=s<<8|t[n],3&~n||(e.push(s),s=0);return 3&n&&e.push(V.v(8*(3&n),s)),e}}},E=class{constructor(t){const e=this;e.blockSize=512,e.I=[1732584193,4023233417,2562383102,271733878,3285377520],e.M=[1518500249,1859775393,2400959708,3395469782],t?(e.P=t.P.slice(0),e.B=t.B.slice(0),e.D=t.D):e.reset()}reset(){const t=this;return t.P=t.I.slice(0),t.B=[],t.D=0,t}update(t){const e=this;"string"==typeof t&&(t=K.R.A(t));const n=e.B=V.concat(e.B,t),s=e.D,o=e.D=s+V.m(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new i(n);let a=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e.U(c.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}W(){const t=this;let e=t.B;const n=t.P;e=V.concat(e,[V.v(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.D/4294967296)),e.push(0|t.D);e.length;)t.U(e.splice(0,16));return t.reset(),n}_(t,e,n,s){return t>19?t>39?t>59?t>79?void 0:e^n^s:e&n|e&s|n&s:e^n^s:e&n|~e&s}T(t,e){return e<<t|e>>>32-t}U(e){const n=this,r=n.P,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let c=r[0],i=r[1],a=r[2],f=r[3],l=r[4];for(let t=0;79>=t;t++){16>t||(o[t]=n.T(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.T(5,c)+n._(t,i,a,f)+l+o[t]+n.M[s.floor(t/20)]|0;l=f,f=a,a=n.T(30,i),i=c,c=e}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]+l|0}},F={importKey:t=>new F.V(K.bytes.A(t)),K(t,e,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let c,i,a,f,u;const w=new ArrayBuffer(o),h=new l(w);let p=0;const d=V;for(e=K.bytes.A(e),u=1;(o||1)>p;u++){for(c=i=t.encrypt(d.concat(e,[u])),a=1;n>a;a++)for(i=t.encrypt(i),f=0;f<i.length;f++)c[f]^=i[f];for(a=0;(o||1)>p&&a<c.length;a++)h.setInt32(p,c[a]),p+=4}return w.slice(0,s/8)},V:class{constructor(t){const e=this,n=e.F=E,s=[[],[]];e.L=[new n,new n];const r=e.L[0].blockSize/32;t.length>r&&(t=(new n).update(t).W());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.L[0].update(s[0]),e.L[1].update(s[1]),e.O=new n(e.L[0])}reset(){const t=this;t.O=new t.F(t.L[0]),t.j=!1}update(t){this.j=!0,this.O.update(t)}digest(){const t=this,e=t.O.W(),n=new t.F(t.L[1]).update(e).W();return t.reset(),n}encrypt(t){if(this.j)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="Invalid signature",H=j,Z="zipjs-abort-check-password";function N(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const q=16,G={name:"PBKDF2"},J=e.assign({hash:{name:"HMAC"}},G),Q=e.assign({iterations:1e3,hash:{name:"SHA-1"}},G),X=["deriveBits"],Y=[8,12,16],$=[16,24,32],tt=10,et=[0,0,0,0],nt=typeof h!=b,st=nt&&h.subtle,rt=nt&&typeof st!=b,ot=K.bytes,ct=class{constructor(t){const e=this;e.H=[[[],[],[],[],[]],[[],[],[],[],[]]],e.H[0][0][0]||e.Z();const n=e.H[0][4],s=e.H[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(e.M=[i=t.slice(0),a=[]],c=o;4*o+28>c;c++){let t=i[c-1];(c%o===0||8===o&&c%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[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 e=i[3&t?c:c-4];a[t]=4>=c||4>t?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}Z(){const t=this.H[0],e=this.H[1],n=t[4],s=e[4],r=[],o=[];let c,i,a,f;for(let t=0;256>t;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let l=c=0;!n[l];l^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,n[l]=o,s[o]=l,f=r[a=r[i=r[l]]];let u=16843009*f^65537*a^257*i^16843008*l,w=257*r[o]^16843008*o;for(let n=0;4>n;n++)t[n][l]=w=w<<24^w>>>8,e[n][o]=u=u<<24^u>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}N(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.M[e],s=n.length/4-2,o=[0,0,0,0],c=this.H[e],i=c[0],a=c[1],f=c[2],l=c[3],u=c[4];let w,h,p,d=t[0]^n[0],y=t[e?3:1]^n[1],m=t[2]^n[2],g=t[e?1:3]^n[3],S=4;for(let t=0;s>t;t++)w=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&g]^n[S],h=i[y>>>24]^a[m>>16&255]^f[g>>8&255]^l[255&d]^n[S+1],p=i[m>>>24]^a[g>>16&255]^f[d>>8&255]^l[255&y]^n[S+2],g=i[g>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[S+3],S+=4,d=w,y=h,m=p;for(let t=0;4>t;t++)o[e?3&-t:t]=u[d>>>24]<<24^u[y>>16&255]<<16^u[m>>8&255]<<8^u[255&g]^n[S++],w=d,d=y,y=m,m=g,g=w;return o}},it=class{constructor(t,e){this.G=t,this.J=e,this.X=e}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}$(t){if(255&~(t>>24))t+=1<<24;else{let e=t>>16&255,n=t>>8&255,s=255&t;255===e?(e=0,255===n?(n=0,255===s?s=0:++s):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=s}return t}et(t){0===(t[0]=this.$(t[0]))&&(t[1]=this.$(t[1]))}Y(t,e,n){let s;if(!(s=e.length))return[];const r=V.m(e);for(let r=0;s>r;r+=4){this.et(n);const s=t.encrypt(n);e[r]^=s[0],e[r+1]^=s[1],e[r+2]^=s[2],e[r+3]^=s[3]}return V.S(e,r)}},at=F.V;let ft=nt&&rt&&typeof st.importKey==k,lt=nt&&rt&&typeof st.deriveBits==k;class ut extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s,checkAuthenticationCode:c=!0}){super({start(){ht(this,t,e,n)},async transform(t,e){const n=this,{password:c,strength:i,nt:a,ready:f}=n;c?(await(async(t,e,n,s)=>{const o=await dt(t,e,n,mt(s,0,Y[e])),c=mt(s,Y[e]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)})(n,i,c,mt(t,0,Y[i]+2)),t=mt(t,Y[i]+2),s?e.error(new r(Z)):a()):await f;const l=new o(t.length-tt-(t.length-tt)%q);e.enqueue(pt(n,t,l,0,tt,!0))},async flush(t){const{st:e,ot:n,pending:s,ready:o}=this;if(n&&e){await o;const i=mt(s,0,s.length-tt),a=mt(s,s.length-tt);let f=z;if(i.length){const t=St(ot,i);n.update(t);const s=e.update(t);f=gt(ot,s)}const l=mt(gt(ot,n.digest()),0,tt);let u=s.length<tt?1:0;for(let t=0;tt>t;t++)u|=l[t]^a[t];if(u&&c)throw new r(H);t.enqueue(f)}}})}}class wt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){let s;super({start(){ht(this,t,e,n)},async transform(t,e){const n=this,{password:s,strength:r,nt:c,ready:i}=n;let a=z;s?(a=await(async(t,e,n)=>{const s=N(new o(Y[e]));return _(s,await dt(t,e,n,s))})(n,r,s),c()):await i;const f=new o(a.length+t.length-t.length%q);f.set(a,0),e.enqueue(pt(n,t,f,a.length,0))},async flush(t){const{st:e,ot:n,pending:r,ready:o}=this;if(n&&e){await o;let c=z;if(r.length){const t=e.update(St(ot,r));n.update(t),c=gt(ot,t)}s.signature=gt(ot,n.digest()).slice(0,tt),t.enqueue(_(c,s.signature))}}}),s=this}}function ht(t,n,s,r){e.assign(t,{ready:new u(e=>t.nt=e),password:yt(n,s),strength:r-1,pending:z})}function pt(t,e,n,s,r,c){const{st:i,ot:a,pending:f}=t;f.length&&(e=_(f,e));const l=e.length-r;let u;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(l-l%q)),u=0;l-q>=u;u+=q){const t=St(ot,mt(e,u,u+q));c&&a.update(t);const r=i.update(t);c||a.update(r),n.set(gt(ot,r),u+s)}return t.pending=mt(e,u),n}async function dt(n,s,r,c){n.password=null;const i=await(async(t,e,n,s,r)=>{if(!ft)return F.importKey(e);try{return await st.importKey("raw",e,n,!1,r)}catch{return ft=!1,F.importKey(e)}})(0,r,J,0,X),a=await(async(t,e,n)=>{if(!lt)return F.K(e,t.salt,Q.iterations,n);try{return await st.deriveBits(t,e,n)}catch{return lt=!1,F.K(e,t.salt,Q.iterations,n)}})(e.assign({salt:c},Q),i,8*(2*$[s]+2)),f=new o(a),l=St(ot,mt(f,0,$[s])),u=St(ot,mt(f,$[s],2*$[s])),w=mt(f,2*$[s]);return e.assign(n,{keys:{key:l,ct:u,passwordVerification:w},st:new it(new ct(l),t.from(et)),ot:new at(u)}),w}function yt(t,e){return e===v?(t=>{if(typeof w==b){const e=new o((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new w).encode(t)})(t):e}function mt(t,e,n){return t.subarray(e,n)}function gt(t,e){return t.C(e)}function St(t,e){return t.A(e)}class vt extends d{constructor({password:t,rawPassword:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){kt(this,t,e,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=zt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e[11]^n.passwordVerification))throw new r(O);t=t.subarray(12)}s?e.error(new r(Z)):e.enqueue(zt(n,t))}})}}class bt extends d{constructor({password:t,rawPassword:e,passwordVerification:n}){super({start(){kt(this,t,e,n)},transform(t,e){const n=this;let s,r;if(n.password||n.rawPassword){n.password=n.rawPassword=null;const e=N(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(Ct(n,e),0),r=12}else s=new o(t.length),r=0;s.set(Ct(n,t),r),e.enqueue(s)}})}}function kt(t,n,s,r){e.assign(t,{password:n,rawPassword:s,passwordVerification:r}),((t,n,s)=>{const r=[305419896,591751049,878082192];if(e.assign(t,{keys:r,it:new U(r[0]),ft:new U(r[2])}),s)for(let e=0;e<s.length;e++)At(t,s[e]);else for(let e=0;e<n.length;e++)At(t,n.charCodeAt(e))})(t,n,s)}function zt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=It(t)^e[s],At(t,n[s]);return n}function Ct(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=It(t)^e[s],At(t,e[s]);return n}function At(t,e){let[,n]=t.keys;t.it.append([e]);const r=~t.it.get();n=Mt(s.imul(Mt(n+xt(r)),134775813)+1),t.ft.append([n>>>24]);const o=~t.ft.get();t.keys=[r,n,o]}function It(t){const e=2|t.keys[2];return xt(s.imul(e,1^e)>>>8)}function xt(t){return 255&t}function Mt(t){return 4294967295&t}const Pt=new f;function Bt(t){return Pt.get(t)}const Dt="Invalid uncompressed size",Rt=j,Ut="deflate-raw",Wt="gzip",_t=[31,139,8];class Tt extends d{constructor(t,{chunkSize:e,CompressionStreamZlib:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,computeCrc32:a,level:f,deflate64:u,format:w,compressionMethod:h}=t,p=this;let d,y,m,g=super.readable;const S=w&&Bt(w),v=a&&r&&!u&&!S&&(!o||i)&&!(!c||!s);if(o&&!i||!a||v||(d=new W,g=jt(g,d)),r)if(S)g=Ht(g,Lt(S.CompressionStream,w,{level:f,chunkSize:e,compressionMethod:h}));else if(v)m=new Vt,g=Ht(g,new s(Wt)),g=jt(g,m);else try{g=Ot(g,c,{level:f,chunkSize:e},s,n)}catch(t){let e;try{e=new s(Wt)}catch{throw t}g=Ht(g,e),g=jt(g,new Vt)}o&&(i?g=jt(g,new bt(t)):(y=new wt(t),g=jt(g,y))),Ft(p,g,()=>{let t;o&&!i&&(t=y.signature),o&&!i||!a||(t=v?m.signature:new l(d.value.buffer).getUint32(0)),p.signature=t})}}class Vt extends d{constructor(){let t,e=10,n=new o(0);super({transform(t,r){if(e){const n=s.min(e,t.length);if(e-=n,!(t=t.subarray(n)).length)return}const o=n.length+t.length;if(8>=o)return void(n=_(n,t));const c=o-8,i=s.min(c,n.length);r.enqueue(_(n.subarray(0,i),t.subarray(0,c-i))),n=_(n.subarray(i),t.subarray(c-i))},flush(){const e=T(n);t.signature=e.getUint32(0,!0),t.uncompressedSize=e.getUint32(4,!0)}}),t=this}}class Kt extends d{constructor(t,{chunkSize:e,DecompressionStreamZlib:n,DecompressionStream:s}){super({});const{zipCrypto:c,encrypted:i,checkCrc32:a,signature:f,compressed:w,useCompressionStream:h,deflate64:p,format:m,compressionMethod:g,rawBitFlag:S,outputSize:b}=t;let k,z,C=super.readable;if(i&&(c?C=jt(C,new vt(t)):(z=new ut(t),C=jt(C,z))),w){const t=m&&Bt(m);if(t)C=Ht(C,Lt(t.DecompressionStream,m,{chunkSize:e,compressionMethod:g,rawBitFlag:S,uncompressedSize:b}));else try{C=Ot(C,h,{chunkSize:e,deflate64:p},s,n)}catch(t){if(p||b===v)throw t;let e;try{e=new s(Wt)}catch{throw t}C=((t,e,n)=>{const s=new U;let c,i,a,f=0,l=!1;const w=new u((t,e)=>{i=t,a=e});w.catch(()=>{}),n||i();const h=new d({start(t){const e=new o(10);e.set(_t),t.enqueue(e)},transform(t,e){e.enqueue(t)},async flush(t){l=!0,y();try{await w}finally{m()}const e=new o(8),r=T(e);r.setUint32(0,s.get(),!0),r.setUint32(4,n,!0),t.enqueue(e)},cancel(t){a(t)}}),p=new d({transform(t,e){s.append(t),f+=t.length,n>f?l&&y():i(),e.enqueue(t)},cancel(t){a(t)}});return t=jt(t,h),jt(t=Ht(t,e),p);function y(){m(),c=setTimeout(()=>a(new r(Dt)),5e3)}function m(){clearTimeout(c)}})(C,e,b)}C=(t=>{const e=t.getReader();return new y({async pull(t){let n;try{n=await e.read()}catch(t){if(t&&t.message)throw t;const e=new r("Invalid compressed data");throw e.cause=t,e}const{value:s,done:o}=n;o?t.close():t.enqueue(s)},cancel:t=>e.cancel(t)})})(C)}a&&(k=new W,C=jt(C,k)),Ft(this,C,()=>{if(a){const t=new l(k.value.buffer);if(f!=t.getUint32(0,!1))throw new r(Rt)}})}}const Et=new f;function Ft(t,n,s){n=jt(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Lt(t,e,n){if(!t)throw new r("Compression method not supported");return new t(e,n)}function Ot(t,e,n,s,r){const o=e&&s?s:r||s,c=n.deflate64?"deflate64-raw":Ut;let i;try{i=new o(c,n)}catch(t){if(!e||!r||o==r)throw t;i=new r(c,n)}return Ht(t,i)}function jt(t,e){return(t=>{if(t instanceof y)return t;const e=t.getReader();return new y({async pull(t){const{value:n,done:s}=await e.read();s?t.close():t.enqueue(n)},cancel:t=>e.cancel(t)})})(t).pipeThrough(e)}function Ht(t,e){const n=e.writable.getWriter(),s=t.getReader();return(async()=>{try{for(;;){await n.ready;const t=await s.read();if(t.done){await n.close();break}await n.write(t.value)}}catch(t){await(async(t,e)=>{try{await t.abort(e)}catch{}})(n,t),await(async(t,e)=>{try{await t.cancel(e)}catch{}})(s,t)}})(),e.readable}const Zt="data",Nt="close",qt="deflate";class Gt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let c;o.startsWith(qt)?c=Tt:o.startsWith("inflate")&&(c=Kt),s.outputSize=0;let i=0;const a=new c(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(i+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:i})}}),u=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r(Dt)},flush(){const{signature:t}=a;e.assign(s,{signature:t,inputSize:i})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(a).pipeThrough(u)})}}class Jt extends d{constructor(t){const e=[];let s=0;function r(){const n=new o(t);let r=0;for(;t>r;){const s=e[0],o=t-r;s.length>o?(n.set(s.subarray(0,o),r),e[0]=s.subarray(o),r+=o):(n.set(s,r),r+=s.length,e.shift())}return s-=t,n}n.isFinite(t)&&t>=1||(t=65536),super({transform(n,o){for(e.push(n),s+=n.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(((t,e)=>{const n=new o(e);let s=0;for(const e of t)n.set(e,s),s+=e.length;return n})(e,s))}})}}let Qt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Qt=navigator.hardwareConcurrency)}catch{}const Xt=new f,Yt=new f;let $t,te,ee,ne,se,re,oe=0;async function ce(t){let e,o;try{const{options:c,config:i}=t;if(c.format&&await(async(t,e)=>{!Pt.has(t)&&e&&((t,e)=>{const{CompressionStream:n,DecompressionStream:s}=e;if(typeof n!=k&&typeof s!=k)throw new r("Invalid codec module");Pt.set(t,{CompressionStream:n,DecompressionStream:s})})(t,await(import(e)))})(c.format,c.codecURI),i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream,c.compressed&&!c.format)if(c.useCompressionStream){if(!((t,e)=>{if(!t)return!1;let n=Et.get(t);n||(n=new f,Et.set(t,n));let s=n.get(e);if(s===v){try{new t(e),s=!0}catch{s=!1}n.set(e,s)}return s})(c.codecType.startsWith(qt)?i.CompressionStream:i.DecompressionStream,Ut))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{c.useCompressionStream=!0}const a={highWaterMark:1},l=t.readable||new y({async pull(t){const e=new u(t=>Xt.set(oe,t));ie({type:"pull",messageId:oe}),oe=(oe+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);o=t.writable||new m({async write(t){let e;const s=new u(t=>e=t);Yt.set(oe,e),ie({type:Zt,value:t,messageId:oe}),oe=(oe+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Gt(c,i),$t=new AbortController;const{signal:w}=$t;await l.pipeThrough(e).pipeThrough(new Jt((t=>s.max(t.chunkSize,64))(i))).pipeTo(o,{signal:w,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{signature:h,inputSize:p,outputSize:d}=e;ie({type:Nt,result:{signature:h,inputSize:p,outputSize:d}})}catch(t){if(t.outputSize=e?e.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}ae(t)}}function ie(t){const{value:e}=t;if(e)if(e.length)try{t.value=(n=e,n.byteOffset||n.byteLength!=n.buffer.byteLength?new o(n):n).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var n}function ae(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:c,cause:i}=t,a={message:e,stack:n,code:s,name:o,outputSize:c};i&&(a.cause={name:i.name,message:i.message}),p({error:a})}function fe(t,e,n={}){if(!te){const t=new r("WASM module not loaded");throw t.cause=re,t}const c="number"==typeof n.level?n.level:-1,i="number"==typeof n.outBuffer?n.outBuffer:65536,a="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.lt=ee(i),this.in=ee(a),this.inBufferSize=a,!this.lt||!this.in)throw new r("allocation failed");if(this.ut=new o(i),t?(this.wt=te.deflate_process,this.ht=te.deflate_last_consumed,this.yt=te.deflate_end,this.gt=te.deflate_new(),n="gzip"===e?te.deflate_init_gzip(this.gt,c):"deflate-raw"===e?te.deflate_init_raw(this.gt,c):te.deflate_init(this.gt,c)):"deflate64-raw"===e?(this.wt=te.inflate9_process,this.ht=te.inflate9_last_consumed,this.yt=te.inflate9_end,this.gt=te.inflate9_new(),n=te.inflate9_init_raw(this.gt)):(this.wt=te.inflate_process,this.ht=te.inflate_last_consumed,this.yt=te.inflate_end,this.gt=te.inflate_new(),n="deflate-raw"===e?te.inflate_init_raw(this.gt):"gzip"===e?te.inflate_init_gzip(this.gt):te.inflate_init(this.gt)),0!==n)throw new r("init failed:"+n)}catch(t){throw f(this),t}},transform(e,n){try{const c=e,a=new o(se.buffer),f=this.wt,l=this.ht,u=this.lt,w=this.ut;let h=0;for(;h<c.length;){const e=s.min(c.length-h,32768);if((!this.in||this.inBufferSize<e)&&(this.in&&ne&&(ne(this.in),this.in=0),this.in=ee(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");a.set(c.subarray(h,h+e),this.in);const o=f(this.gt,this.in,e,u,i,0),p=16777215&o;if(p&&(w.set(a.subarray(u,u+p),0),n.enqueue(w.slice(0,p))),!t){const t=o>>24&255,e=128&t?t-256:t;if(0>e)throw new r("process error:"+e)}const d=l(this.gt);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(se.buffer),s=this.wt,c=this.lt,a=this.ut;for(;;){const o=s(this.gt,0,0,c,i,4),f=16777215&o,l=o>>24&255;if(!t){const t=128&l?l-256:l;if(0>t)throw new r("process error:"+t)}if(f&&(a.set(n.subarray(c,c+f),0),e.enqueue(a.slice(0,f))),1===l||0===f)break}}catch(t){e.error(t)}finally{const t=f(this);0!==t&&e.error(new r("end error:"+t))}},cancel(){f(this)}});function f(t){let e=0;return t.gt&&t.yt&&(e=t.yt(t.gt)),t.gt=0,t.in&&ne&&ne(t.in),t.in=0,t.lt&&ne&&ne(t.lt),t.lt=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&ce(t),e==Zt){const t=Xt.get(n);Xt.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=Yt.get(n);Yt.delete(n),t()}e==Nt&&$t.abort()}catch(t){ae(t)}}),p({type:"ready"});class le{constructor(t="deflate",e){return fe(!0,t,e)}}class ue{constructor(t="deflate",e){return fe(!1,t,e)}}le.St=!0,ue.St=!0;let we=!1;self.initModule=async t=>{const e=await(async(t,{baseURI:e})=>{if(!we)try{await(async(t,e)=>{let n,s;try{try{s=new URL(t,e)}catch{}const r=await fetch(s);n=await r.arrayBuffer()}catch(e){if(!t.startsWith("data:application/wasm;base64,"))throw e;n=(t=>{const e=t.split(",")[1],n=atob(e),s=n.length,r=new o(s);for(let t=0;s>t;++t)r[t]=n.charCodeAt(t);return r.buffer})(t)}(t=>{if(te=t,({malloc:ee,free:ne,memory:se}=te),"function"!=typeof ee||"function"!=typeof ne||!se)throw te=ee=ne=se=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports)})(t,e),we=!0}catch(t){throw(t=>{re=t})(t),t}})(t.wasmURI,t);return t.CompressionStreamZlib=le,t.DecompressionStreamZlib=ue,e}});\n';t({workerURI:t=>{const n="text/javascript";if(t){const t=new Blob([e],{type:n});return URL.createObjectURL(t)}return"data:"+n+","+encodeURIComponent(e)}})}export{t as configureWebWorker};
@@ -36,12 +36,8 @@ import {
36
36
  } from "./streams/zlib-wasm/zlib-streams-loader.js";
37
37
 
38
38
  self.initModule = async config => {
39
- try {
40
- const result = await init(config.wasmURI, config);
41
- config.CompressionStreamZlib = CompressionStreamZlib;
42
- config.DecompressionStreamZlib = DecompressionStreamZlib;
43
- return result;
44
- } catch {
45
- // ignored
46
- }
39
+ const result = await init(config.wasmURI, config);
40
+ config.CompressionStreamZlib = CompressionStreamZlib;
41
+ config.DecompressionStreamZlib = DecompressionStreamZlib;
42
+ return result;
47
43
  };
@@ -54,6 +54,7 @@ const PROPERTY_NAME_DIRECTORY = "directory";
54
54
  const PROPERTY_NAME_EXECUTABLE = "executable";
55
55
  const PROPERTY_NAME_COMPRESSION_METHOD = "compressionMethod";
56
56
  const PROPERTY_NAME_SIGNATURE = "signature";
57
+ const PROPERTY_NAME_CRC32 = "crc32";
57
58
  const PROPERTY_NAME_EXTRA_FIELD = "extraField";
58
59
  const PROPERTY_NAME_EXTRA_FIELD_INFOZIP = "extraFieldInfoZip";
59
60
  const PROPERTY_NAME_EXTRA_FIELD_UNIX = "extraFieldUnix";
@@ -102,6 +103,7 @@ const PROPERTY_NAMES = [
102
103
  PROPERTY_NAME_EXECUTABLE,
103
104
  PROPERTY_NAME_COMPRESSION_METHOD,
104
105
  PROPERTY_NAME_SIGNATURE,
106
+ PROPERTY_NAME_CRC32,
105
107
  PROPERTY_NAME_EXTRA_FIELD,
106
108
  PROPERTY_NAME_EXTRA_FIELD_UNIX,
107
109
  PROPERTY_NAME_EXTRA_FIELD_INFOZIP,
@@ -160,6 +162,7 @@ export {
160
162
  PROPERTY_NAME_EXECUTABLE,
161
163
  PROPERTY_NAME_COMPRESSION_METHOD,
162
164
  PROPERTY_NAME_SIGNATURE,
165
+ PROPERTY_NAME_CRC32,
163
166
  PROPERTY_NAME_EXTRA_FIELD,
164
167
  PROPERTY_NAME_GID,
165
168
  PROPERTY_NAME_UID,