@zip.js/zip.js 2.8.30 → 2.8.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BENCHMARKS.md +82 -1
- package/deno.json +5 -4
- package/dist/zip-core.js +403 -339
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core.js +116 -278
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-native.js +440 -378
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +439 -377
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +408 -344
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-module.wasm +0 -0
- package/dist/zip-native.js +411 -347
- 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 +410 -346
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +440 -378
- package/index-native.min.js +1 -1
- package/index.cjs +439 -377
- package/index.d.cts +2853 -0
- package/index.d.ts +278 -1
- package/index.min.js +1 -1
- package/lib/core/codec-worker.js +1 -11
- package/lib/core/configuration.js +21 -33
- package/lib/core/constants.js +3 -0
- package/lib/core/io.js +11 -19
- package/lib/core/streams/aes-crypto-stream.js +16 -20
- package/lib/core/streams/common-crypto.js +0 -2
- package/lib/core/streams/zip-crypto-stream.js +12 -16
- package/lib/core/streams/zip-entry-stream.js +2 -32
- package/lib/core/streams/zlib-js/zlib-streams.min.js +1 -1
- package/lib/core/streams/zlib-wasm/zlib-streams-loader.js +1 -3
- package/lib/core/streams/zlib-wasm/zlib-streams.wasm +0 -0
- package/lib/core/util/base64.js +68 -0
- package/lib/core/util/blob-temp-stream.js +124 -0
- package/lib/core/util/decode-text.js +0 -1
- package/lib/core/util/default-mime-type.js +0 -3
- package/lib/core/util/inflate.js +194 -0
- package/lib/core/util/mime-type.js +26 -22
- package/lib/core/util/opfs-temp-stream.js +1 -37
- package/lib/core/util/sync-access-handle-temp-stream.js +147 -0
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/web-worker-inline-template-native.js +5 -5
- package/lib/core/web-worker-inline-wasm.js +1 -1
- package/lib/core/zip-fs.js +6 -13
- package/lib/core/zip-reader.js +48 -127
- package/lib/core/zip-writer.js +27 -45
- package/lib/core/zlib-streams-inline-template.js +3 -2
- package/lib/core/zlib-streams-inline.js +1 -1
- package/lib/zip-core-base.js +10 -2
- package/package.json +9 -6
- package/reserved-property-names.js +50 -0
- package/lib/core/util/mini-lz.js +0 -198
|
@@ -222,7 +222,6 @@ const table = {
|
|
|
222
222
|
"x-doom": "wad",
|
|
223
223
|
"x-dvi": "dvi",
|
|
224
224
|
"x-httpd-eruby": "rhtml",
|
|
225
|
-
"x-font": "pcf.Z",
|
|
226
225
|
"x-freemind": "mm",
|
|
227
226
|
"x-gnumeric": "gnumeric",
|
|
228
227
|
"x-go-sgf": "sgf",
|
|
@@ -909,7 +908,7 @@ const table = {
|
|
|
909
908
|
"x-msbinder": "obd",
|
|
910
909
|
"x-mscardfile": "crd",
|
|
911
910
|
"x-msclip": "clp",
|
|
912
|
-
"
|
|
911
|
+
"x-ms-installer": "msi",
|
|
913
912
|
"x-msmediaview": [
|
|
914
913
|
"mvb",
|
|
915
914
|
"m13",
|
|
@@ -1272,7 +1271,10 @@ const table = {
|
|
|
1272
1271
|
],
|
|
1273
1272
|
"x-tga": "tga",
|
|
1274
1273
|
"cis-cod": "cod",
|
|
1275
|
-
"avif":
|
|
1274
|
+
"avif": [
|
|
1275
|
+
"avif",
|
|
1276
|
+
"avifs"
|
|
1277
|
+
],
|
|
1276
1278
|
"heic": [
|
|
1277
1279
|
"heif",
|
|
1278
1280
|
"heic"
|
|
@@ -1491,7 +1493,6 @@ const table = {
|
|
|
1491
1493
|
"vnd.wap.sl": "sl"
|
|
1492
1494
|
},
|
|
1493
1495
|
"video": {
|
|
1494
|
-
"avif": "avif",
|
|
1495
1496
|
"3gpp": "3gp",
|
|
1496
1497
|
"annodex": "axv",
|
|
1497
1498
|
"dl": "dl",
|
|
@@ -1610,28 +1611,31 @@ const table = {
|
|
|
1610
1611
|
}
|
|
1611
1612
|
};
|
|
1612
1613
|
|
|
1613
|
-
|
|
1614
|
-
const mimeTypes = {};
|
|
1615
|
-
for (const type of Object.keys(table)) {
|
|
1616
|
-
for (const subtype of Object.keys(table[type])) {
|
|
1617
|
-
const value = table[type][subtype];
|
|
1618
|
-
if (typeof value == "string") {
|
|
1619
|
-
mimeTypes[value] = type + "/" + subtype;
|
|
1620
|
-
} else {
|
|
1621
|
-
for (let indexMimeType = 0; indexMimeType < value.length; indexMimeType++) {
|
|
1622
|
-
mimeTypes[value[indexMimeType]] = type + "/" + subtype;
|
|
1623
|
-
}
|
|
1624
|
-
}
|
|
1625
|
-
}
|
|
1626
|
-
}
|
|
1627
|
-
return mimeTypes;
|
|
1628
|
-
})();
|
|
1614
|
+
let mimeTypes;
|
|
1629
1615
|
|
|
1630
1616
|
export {
|
|
1631
|
-
mimeTypes,
|
|
1632
1617
|
getMimeType
|
|
1633
1618
|
};
|
|
1634
1619
|
|
|
1635
1620
|
function getMimeType(filename) {
|
|
1636
|
-
return filename &&
|
|
1621
|
+
return filename && getMimeTypes()[filename.split(".").pop().toLowerCase()] || getDefaultMimeType();
|
|
1622
|
+
}
|
|
1623
|
+
|
|
1624
|
+
function getMimeTypes() {
|
|
1625
|
+
if (!mimeTypes) {
|
|
1626
|
+
mimeTypes = {};
|
|
1627
|
+
for (const type of Object.keys(table)) {
|
|
1628
|
+
for (const subtype of Object.keys(table[type])) {
|
|
1629
|
+
const value = table[type][subtype];
|
|
1630
|
+
if (typeof value == "string") {
|
|
1631
|
+
mimeTypes[value] = type + "/" + subtype;
|
|
1632
|
+
} else {
|
|
1633
|
+
for (let indexMimeType = 0; indexMimeType < value.length; indexMimeType++) {
|
|
1634
|
+
mimeTypes[value[indexMimeType]] = type + "/" + subtype;
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1640
|
+
return mimeTypes;
|
|
1637
1641
|
}
|
|
@@ -35,36 +35,12 @@ export {
|
|
|
35
35
|
const DEFAULT_THRESHOLD = 1024 * 1024;
|
|
36
36
|
const DEFAULT_DIRECTORY_NAME = ".zip.js-temp";
|
|
37
37
|
|
|
38
|
-
// Builds a `createTempStream` factory (see `ZipWriter`'s option of the same name) that spills the
|
|
39
|
-
// data of a buffered entry to the Origin Private File System (OPFS) instead of keeping it in memory.
|
|
40
|
-
//
|
|
41
|
-
// It is meant for the buffered-write path (keep-order concurrent `add()`, non-seekable output, ...),
|
|
42
|
-
// where the compressed data of an entry has to be held until the writer is free. In memory that data
|
|
43
|
-
// grows with the entry size; here it is written to an OPFS file and streamed back, so peak memory
|
|
44
|
-
// stays bounded.
|
|
45
|
-
//
|
|
46
|
-
// It is hybrid on purpose: an entry stays fully in memory until it exceeds `thresholdBytes`, and only
|
|
47
|
-
// then spills to a file. Small entries never touch the disk, so a workload made of many tiny entries
|
|
48
|
-
// keeps the speed of the in-memory default; only genuinely large entries pay for (and benefit from)
|
|
49
|
-
// the file round-trip.
|
|
50
|
-
//
|
|
51
|
-
// OPFS is a browser/worker feature; there is no fallback here. Feature-detect
|
|
52
|
-
// `navigator.storage.getDirectory` (or inject `getDirectory`) before using it, and let the writer use
|
|
53
|
-
// its in-memory default elsewhere.
|
|
54
|
-
//
|
|
55
|
-
// Options:
|
|
56
|
-
// thresholdBytes spill to a file once a buffered entry exceeds this size (default 1 MiB).
|
|
57
|
-
// directoryName name of the OPFS sub-directory holding the temp files (default ".zip.js-temp").
|
|
58
|
-
// getDirectory returns (or resolves to) the root `FileSystemDirectoryHandle`. Defaults to
|
|
59
|
-
// `navigator.storage.getDirectory()`. Inject it to run inside a worker with a
|
|
60
|
-
// pre-obtained handle, or to test against a mock.
|
|
61
38
|
function createOPFSTempStream(options = {}) {
|
|
62
39
|
const {
|
|
63
40
|
thresholdBytes = DEFAULT_THRESHOLD,
|
|
64
41
|
directoryName = DEFAULT_DIRECTORY_NAME,
|
|
65
42
|
getDirectory = () => navigator.storage.getDirectory()
|
|
66
43
|
} = options;
|
|
67
|
-
// The temp directory is resolved once and shared by every entry of this factory.
|
|
68
44
|
let directoryHandlePromise;
|
|
69
45
|
function getTempDirectory() {
|
|
70
46
|
if (!directoryHandlePromise) {
|
|
@@ -73,15 +49,12 @@ function createOPFSTempStream(options = {}) {
|
|
|
73
49
|
}
|
|
74
50
|
return directoryHandlePromise;
|
|
75
51
|
}
|
|
76
|
-
return
|
|
52
|
+
return function () {
|
|
77
53
|
const memoryChunks = [];
|
|
78
54
|
let bufferedSize = 0;
|
|
79
55
|
let spilled = false;
|
|
80
56
|
let fileName, fileHandle, fileWriter, fileReader;
|
|
81
57
|
|
|
82
|
-
// Move whatever is buffered in memory to a fresh OPFS file, then keep writing to that file.
|
|
83
|
-
// `FileSystemWritableFileStream` is a `WritableStream`, so it is driven through the standard
|
|
84
|
-
// writer API rather than its non-standard `write()`/`seek()` convenience methods.
|
|
85
58
|
async function spillToFile() {
|
|
86
59
|
const directoryHandle = await getTempDirectory();
|
|
87
60
|
fileName = crypto.randomUUID();
|
|
@@ -91,7 +64,6 @@ function createOPFSTempStream(options = {}) {
|
|
|
91
64
|
for (const chunk of memoryChunks) {
|
|
92
65
|
await fileWriter.write(chunk);
|
|
93
66
|
}
|
|
94
|
-
// Release the in-memory copy; from now on data lives in the file.
|
|
95
67
|
memoryChunks.length = 0;
|
|
96
68
|
}
|
|
97
69
|
|
|
@@ -115,9 +87,6 @@ function createOPFSTempStream(options = {}) {
|
|
|
115
87
|
}
|
|
116
88
|
});
|
|
117
89
|
|
|
118
|
-
// The writer always closes `writable` before reading `readable`, so `spilled` is final by the
|
|
119
|
-
// time `pull` runs. It is read lazily here (not in `start`, which runs at construction time,
|
|
120
|
-
// before anything is written and before `spilled` is known).
|
|
121
90
|
let memoryIndex = 0;
|
|
122
91
|
const readable = new ReadableStream({
|
|
123
92
|
async pull(controller) {
|
|
@@ -144,11 +113,6 @@ function createOPFSTempStream(options = {}) {
|
|
|
144
113
|
}
|
|
145
114
|
}
|
|
146
115
|
}, { highWaterMark: 0 });
|
|
147
|
-
// highWaterMark 0: do not pull (and possibly close on an empty buffer) until the consumer
|
|
148
|
-
// actually reads, which the writer only does once the data has been fully written.
|
|
149
|
-
|
|
150
|
-
// Called by the writer on every exit path (success, error, abort). Best-effort: it must never
|
|
151
|
-
// throw. Closes any still-open file writer, then deletes the temp file.
|
|
152
116
|
async function dispose() {
|
|
153
117
|
if (fileWriter) {
|
|
154
118
|
try {
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
3
|
+
|
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
|
6
|
+
|
|
7
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
8
|
+
this list of conditions and the following disclaimer.
|
|
9
|
+
|
|
10
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
11
|
+
notice, this list of conditions and the following disclaimer in
|
|
12
|
+
the documentation and/or other materials provided with the distribution.
|
|
13
|
+
|
|
14
|
+
3. The names of the authors may not be used to endorse or promote products
|
|
15
|
+
derived from this software without specific prior written permission.
|
|
16
|
+
|
|
17
|
+
THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
|
18
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
|
20
|
+
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
21
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
22
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
23
|
+
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
26
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/* global navigator, crypto, FileSystemFileHandle, ReadableStream, WritableStream */
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
createSyncAccessHandleTempStream
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const DEFAULT_THRESHOLD = 1024 * 1024;
|
|
36
|
+
const DEFAULT_DIRECTORY_NAME = ".zip.js-temp";
|
|
37
|
+
const READ_CHUNK_SIZE = 512 * 1024;
|
|
38
|
+
const ERR_UNSUPPORTED_CONTEXT = "createSyncAccessHandle is only available in dedicated workers";
|
|
39
|
+
|
|
40
|
+
function createSyncAccessHandleTempStream(options = {}) {
|
|
41
|
+
const {
|
|
42
|
+
thresholdBytes = DEFAULT_THRESHOLD,
|
|
43
|
+
directoryName = DEFAULT_DIRECTORY_NAME,
|
|
44
|
+
getDirectory
|
|
45
|
+
} = options;
|
|
46
|
+
if (!getDirectory &&
|
|
47
|
+
(typeof FileSystemFileHandle == "undefined" || !FileSystemFileHandle.prototype.createSyncAccessHandle)) {
|
|
48
|
+
throw new Error(ERR_UNSUPPORTED_CONTEXT);
|
|
49
|
+
}
|
|
50
|
+
const getRootDirectory = getDirectory || (() => navigator.storage.getDirectory());
|
|
51
|
+
let directoryHandlePromise;
|
|
52
|
+
function getTempDirectory() {
|
|
53
|
+
if (!directoryHandlePromise) {
|
|
54
|
+
directoryHandlePromise = Promise.resolve(getRootDirectory())
|
|
55
|
+
.then(root => root.getDirectoryHandle(directoryName, { create: true }));
|
|
56
|
+
}
|
|
57
|
+
return directoryHandlePromise;
|
|
58
|
+
}
|
|
59
|
+
return function () {
|
|
60
|
+
const memoryChunks = [];
|
|
61
|
+
let bufferedSize = 0;
|
|
62
|
+
let spilled = false;
|
|
63
|
+
let fileName, accessHandle;
|
|
64
|
+
let writeOffset = 0;
|
|
65
|
+
let readOffset = 0;
|
|
66
|
+
|
|
67
|
+
async function spillToFile() {
|
|
68
|
+
const directoryHandle = await getTempDirectory();
|
|
69
|
+
fileName = crypto.randomUUID();
|
|
70
|
+
const fileHandle = await directoryHandle.getFileHandle(fileName, { create: true });
|
|
71
|
+
accessHandle = await fileHandle.createSyncAccessHandle();
|
|
72
|
+
spilled = true;
|
|
73
|
+
for (const chunk of memoryChunks) {
|
|
74
|
+
accessHandle.write(chunk, { at: writeOffset });
|
|
75
|
+
writeOffset += chunk.length;
|
|
76
|
+
}
|
|
77
|
+
memoryChunks.length = 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const writable = new WritableStream({
|
|
81
|
+
async write(chunk) {
|
|
82
|
+
if (spilled) {
|
|
83
|
+
accessHandle.write(chunk, { at: writeOffset });
|
|
84
|
+
writeOffset += chunk.length;
|
|
85
|
+
} else {
|
|
86
|
+
memoryChunks.push(chunk);
|
|
87
|
+
bufferedSize += chunk.length;
|
|
88
|
+
if (bufferedSize > thresholdBytes) {
|
|
89
|
+
await spillToFile();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
close() {
|
|
94
|
+
if (accessHandle) {
|
|
95
|
+
accessHandle.flush();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
let memoryIndex = 0;
|
|
101
|
+
const readable = new ReadableStream({
|
|
102
|
+
pull(controller) {
|
|
103
|
+
if (spilled) {
|
|
104
|
+
const remaining = writeOffset - readOffset;
|
|
105
|
+
if (remaining <= 0) {
|
|
106
|
+
controller.close();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const buffer = new Uint8Array(Math.min(READ_CHUNK_SIZE, remaining));
|
|
110
|
+
const read = accessHandle.read(buffer, { at: readOffset });
|
|
111
|
+
if (read) {
|
|
112
|
+
readOffset += read;
|
|
113
|
+
controller.enqueue(buffer.subarray(0, read));
|
|
114
|
+
} else {
|
|
115
|
+
controller.close();
|
|
116
|
+
}
|
|
117
|
+
} else if (memoryIndex < memoryChunks.length) {
|
|
118
|
+
controller.enqueue(memoryChunks[memoryIndex++]);
|
|
119
|
+
} else {
|
|
120
|
+
controller.close();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}, { highWaterMark: 0 });
|
|
124
|
+
async function dispose() {
|
|
125
|
+
if (accessHandle) {
|
|
126
|
+
try {
|
|
127
|
+
accessHandle.close();
|
|
128
|
+
} catch {
|
|
129
|
+
// ignored
|
|
130
|
+
}
|
|
131
|
+
accessHandle = null;
|
|
132
|
+
}
|
|
133
|
+
if (fileName) {
|
|
134
|
+
try {
|
|
135
|
+
const directoryHandle = await getTempDirectory();
|
|
136
|
+
await directoryHandle.removeEntry(fileName);
|
|
137
|
+
} catch {
|
|
138
|
+
// ignored
|
|
139
|
+
}
|
|
140
|
+
fileName = null;
|
|
141
|
+
}
|
|
142
|
+
memoryChunks.length = 0;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return { writable, readable, dispose };
|
|
146
|
+
};
|
|
147
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function g(g){g({workerURI:g=>{const B="text/javascript",I=(g=>{g=(g=>{const B=(g=(g+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,I=[];for(let E=0;B>E;E+=4){const B=A.indexOf(g[E])<<18|A.indexOf(g[E+1])<<12|(63&A.indexOf(g[E+2]))<<6|63&A.indexOf(g[E+3]);I.push(B>>16&255),"="!==g[E+2]&&I.push(B>>8&255),"="!==g[E+3]&&I.push(255&B)}return new Uint8Array(I)})(g);let B=new Uint8Array(1024),I=0;for(let A=0;A<g.length;){const C=g[A++];if(128&C){const Y=3+(127&C),Q=g[A++]<<8|g[A++],F=I-Q;E(I+Y);for(let A=0;Y>A;A++)B[I++]=B[F+A]}else{const Y=C;E(I+Y);for(let E=0;Y>E&&A<g.length;E++)B[I++]=g[A++]}}return(g=>{let B="";const I=g.length;let E=0;for(;I>E+2;E+=3){const I=g[E]<<16|g[E+1]<<8|g[E+2];B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+A[63&I]}const C=I-E;if(1===C){const I=g[E]<<16;B+=A[I>>18&63]+A[I>>12&63]+"=="}else if(2===C){const I=g[E]<<16|g[E+1]<<8;B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+"="}return B})(new Uint8Array(B.buffer.slice(0,I)));function E(A){if(B.length<A){let g=2*B.length;for(;A>g;)g*=2;const E=new Uint8Array(g);E.set(B.subarray(0,I)),B=E}}})("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");if(g){const A=atob(I),g=new Blob([A],{type:B});return URL.createObjectURL(g)}return"data:"+B+";base64,"+I}})}export{g 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],r=[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],n=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],e=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],q=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],f=new Uint8Array(288);f.fill(8,0,144),f.fill(9,144,256),f.fill(7,256,280),f.fill(8,280,288);const l=new Uint8Array(30).fill(5);function L(t){const r=new Uint16Array(16);for(const n of t)r[n]++;r[0]=0;const n=new Uint16Array(17);for(let t=1;15>=t;t++)n[t+1]=n[t]+r[t];const e=new Uint16Array(t.length);for(let r=0;r<t.length;r++)t[r]&&(e[n[t[r]]++]=r);return{t:r,symbols:e}}const o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function i(i){i({workerURI:i=>{const U="text/javascript",W=(o=>{let i=0,U=0,W=0,c=new Uint8Array(1024),R=0,a=0;for(;!a;){a=h(1);const t=h(2);if(0==t)x();else if(1==t)G(L(f),L(l));else{if(2!=t)throw Error("invalid deflate block type");G(...d())}}return c.subarray(0,R);function F(){if(i>=o.length)throw Error("unexpected end of deflate data");return o[i++]}function h(t){for(;t>W;)U|=F()<<W,W+=8;const r=U&(1<<t)-1;return U>>>=t,W-=t,r}function x(){U=0,W=0;const t=F()|F()<<8;i+=2,v(R+t);for(let r=0;t>r;r++)c[R++]=F()}function G(q,f){let l=I(q);for(;256!=l;){if(256>l)v(R+1),c[R++]=l;else{const q=l-257,L=t[q]+h(r[q]),o=I(f),i=n[o]+h(e[o]);v(R+L);const U=R-i;for(let t=0;L>t;t++)c[R++]=c[U+t]}l=I(q)}}function d(){const t=h(5)+257,r=h(5)+1,n=h(4)+4,e=new Uint8Array(19);for(let t=0;n>t;t++)e[q[t]]=h(3);const f=L(e),l=new Uint8Array(t+r);let o=0;for(;o<l.length;){const t=I(f);if(16>t)l[o++]=t;else if(16==t){const t=l[o-1];let r=h(2)+3;for(;r--;)l[o++]=t}else o+=17==t?h(3)+3:h(7)+11}return[L(l.subarray(0,t)),L(l.subarray(t))]}function I(t){const{t:r,symbols:n}=t;let e=0,q=0,f=0;for(let t=1;15>=t;t++){e|=h(1);const l=r[t];if(l>e-q)return n[f+(e-q)];f+=l,q=q+l<<1,e<<=1}throw Error("invalid huffman code")}function v(t){if(c.length<t){let r=2*c.length;for(;t>r;)r*=2;const n=new Uint8Array(r);n.set(c.subarray(0,R)),c=n}}})((t=>{const r=(t=(t+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,n=[];for(let e=0;r>e;e+=4){const r=o.indexOf(t[e])<<18|o.indexOf(t[e+1])<<12|(63&o.indexOf(t[e+2]))<<6|63&o.indexOf(t[e+3]);n.push(r>>16&255),"="!==t[e+2]&&n.push(r>>8&255),"="!==t[e+3]&&n.push(255&r)}return new Uint8Array(n)})("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"));if(i){const t=new Blob([W],{type:U});return URL.createObjectURL(t)}return"data:"+U+";base64,"+(t=>{let r="";const n=t.length;let e=0;for(;n>e+2;e+=3){const n=t[e]<<16|t[e+1]<<8|t[e+2];r+=o[n>>18&63]+o[n>>12&63]+o[n>>6&63]+o[63&n]}const q=n-e;if(1===q){const n=t[e]<<16;r+=o[n>>18&63]+o[n>>12&63]+"=="}else if(2===q){const n=t[e]<<16|t[e+1]<<8;r+=o[n>>18&63]+o[n>>12&63]+o[n>>6&63]+"="}return r})(W)}})}export{i as configureWebWorker};
|
|
@@ -26,22 +26,22 @@
|
|
|
26
26
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
-
/* global Blob, URL
|
|
29
|
+
/* global Blob, URL */
|
|
30
30
|
/* eslint-disable quotes */
|
|
31
|
-
import {
|
|
31
|
+
import { inflateRaw } from "./util/inflate.js";
|
|
32
|
+
import { base64Decode, base64Encode } from "./util/base64.js";
|
|
32
33
|
|
|
33
34
|
export function configureWebWorker(configure) {
|
|
34
35
|
const code = `__workerCode__`;
|
|
35
36
|
configure({
|
|
36
37
|
workerURI: (useBlobURI) => {
|
|
37
38
|
const type = "text/javascript";
|
|
38
|
-
const
|
|
39
|
+
const source = inflateRaw(base64Decode(code));
|
|
39
40
|
if (useBlobURI) {
|
|
40
|
-
const source = atob(base64Source);
|
|
41
41
|
const blob = new Blob([source], { type });
|
|
42
42
|
return URL.createObjectURL(blob);
|
|
43
43
|
} else {
|
|
44
|
-
return "data:" + type + ";base64," +
|
|
44
|
+
return "data:" + type + ";base64," + base64Encode(source);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
});
|
|
@@ -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:i,Uint32Array:a,Int32Array:c,Map:w,DataView:f,Promise:l,TextEncoder:u,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:g,DecompressionStream:S}=self,b=void 0,k="undefined",v="function",z=[[],[],[],[],[],[],[],[]];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;z[0][t]=e}for(let t=0;256>t;t++)for(let e=1;8>e;e++){const n=z[e-1][t];z[e][t]=n>>>8^z[0][255&n]}const[C,I,A,x,P,R,U,W]=z;class D{constructor(t){this.t=t||-1}append(t){let e=0|this.t;const n=0|t.length;let s=0;if(n>=8&&t.buffer){const r=new f(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=W[255&t]^U[t>>>8&255]^R[t>>>16&255]^P[t>>>24&255]^x[255&n]^A[n>>>8&255]^I[n>>>16&255]^C[n>>>24&255]}}for(;n>s;s++)e=e>>>8^C[255&(e^t[s])];this.t=e}get(){return~this.t}}class M extends d{constructor(){let t;const e=new D;super({transform(t,n){e.append(t),n.enqueue(t)},flush(){const n=new o(4);new f(n.buffer).setUint32(0,e.get()),t.value=n}}),t=this}}const V={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=V.o(n);return 32===s?t.concat(e):V.i(e,s,0|n,t.slice(0,t.length-1))},l(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+V.o(n)},u(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.h(e,t[n-1]&2147483648>>e-1,1)),t},h:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,o:t=>s.round(t/1099511627776)||32,i(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.o(r);return s.push(V.h(e+o&31,e+o>32?n:s.pop(),1)),s}},_={bytes:{p(t){const e=V.l(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},m(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.h(8*(3&n),s)),e}}},B=class{constructor(t){const e=this;e.blockSize=512,e.S=[1732584193,4023233417,2562383102,271733878,3285377520],e.k=[1518500249,1859775393,2400959708,3395469782],t?(e.v=t.v.slice(0),e.C=t.C.slice(0),e.I=t.I):e.reset()}reset(){const t=this;return t.v=t.S.slice(0),t.C=[],t.I=0,t}update(t){const e=this;"string"==typeof t&&(t=_.A.m(t));const n=e.C=V.concat(e.C,t),s=e.I,o=e.I=s+V.l(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const i=new a(n);let c=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e.P(i.subarray(16*c,16*(c+1))),c+=1;return n.splice(0,16*c),e}R(){const t=this;let e=t.C;const n=t.v;e=V.concat(e,[V.h(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.I/4294967296)),e.push(0|t.I);e.length;)t.P(e.splice(0,16));return t.reset(),n}U(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}W(t,e){return e<<t|e>>>32-t}P(e){const n=this,r=n.v,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let i=r[0],a=r[1],c=r[2],w=r[3],f=r[4];for(let t=0;79>=t;t++){16>t||(o[t]=n.W(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.W(5,i)+n.U(t,a,c,w)+f+o[t]+n.k[s.floor(t/20)]|0;f=w,w=c,c=n.W(30,a),a=i,i=e}r[0]=r[0]+i|0,r[1]=r[1]+a|0,r[2]=r[2]+c|0,r[3]=r[3]+w|0,r[4]=r[4]+f|0}},T={importKey:t=>new T.D(_.bytes.m(t)),M(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 i,a,c,w,l;const u=new ArrayBuffer(o),h=new f(u);let p=0;const d=V;for(e=_.bytes.m(e),l=1;(o||1)>p;l++){for(i=a=t.encrypt(d.concat(e,[l])),c=1;n>c;c++)for(a=t.encrypt(a),w=0;w<a.length;w++)i[w]^=a[w];for(c=0;(o||1)>p&&c<i.length;c++)h.setInt32(p,i[c]),p+=4}return u.slice(0,s/8)},D:class{constructor(t){const e=this,n=e.V=B,s=[[],[]];e._=[new n,new n];const r=e._[0].blockSize/32;t.length>r&&(t=(new n).update(t).R());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e._[0].update(s[0]),e._[1].update(s[1]),e.B=new n(e._[0])}reset(){const t=this;t.B=new t.V(t._[0]),t.T=!1}update(t){this.T=!0,this.B.update(t)}digest(){const t=this,e=t.B.R(),n=new t.V(t._[1]).update(e).R();return t.reset(),n}encrypt(t){if(this.T)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},K=typeof h!=k&&typeof h.getRandomValues==v,j="Invalid password",E="Invalid signature",L="zipjs-abort-check-password";function O(t){if(K)return h.getRandomValues(t);throw new r("Crypto API not supported")}const H=16,Z={name:"PBKDF2"},F=e.assign({hash:{name:"HMAC"}},Z),N=e.assign({iterations:1e3,hash:{name:"SHA-1"}},Z),q=["deriveBits"],G=[8,12,16],J=[16,24,32],Q=10,X=[0,0,0,0],Y=typeof h!=k,$=Y&&h.subtle,tt=Y&&typeof $!=k,et=_.bytes,nt=class{constructor(t){const e=this;e.K=[[[],[],[],[],[]],[[],[],[],[],[]]],e.K[0][0][0]||e.j();const n=e.K[0][4],s=e.K[1],o=t.length;let i,a,c,w=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(e.k=[a=t.slice(0),c=[]],i=o;4*o+28>i;i++){let t=a[i-1];(i%o===0||8===o&&i%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],i%o===0&&(t=t<<8^t>>>24^w<<24,w=w<<1^283*(w>>7))),a[i]=a[i-o]^t}for(let t=0;i;t++,i--){const e=a[3&t?i:i-4];c[t]=4>=i||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.L(t,0)}decrypt(t){return this.L(t,1)}j(){const t=this.K[0],e=this.K[1],n=t[4],s=e[4],r=[],o=[];let i,a,c,w;for(let t=0;256>t;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let f=i=0;!n[f];f^=a||1,i=o[i]||1){let o=i^i<<1^i<<2^i<<3^i<<4;o=o>>8^255&o^99,n[f]=o,s[o]=f,w=r[c=r[a=r[f]]];let l=16843009*w^65537*c^257*a^16843008*f,u=257*r[o]^16843008*o;for(let n=0;4>n;n++)t[n][f]=u=u<<24^u>>>8,e[n][o]=l=l<<24^l>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}L(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.k[e],s=n.length/4-2,o=[0,0,0,0],i=this.K[e],a=i[0],c=i[1],w=i[2],f=i[3],l=i[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=a[d>>>24]^c[y>>16&255]^w[m>>8&255]^f[255&g]^n[S],h=a[y>>>24]^c[m>>16&255]^w[g>>8&255]^f[255&d]^n[S+1],p=a[m>>>24]^c[g>>16&255]^w[d>>8&255]^f[255&y]^n[S+2],g=a[g>>>24]^c[d>>16&255]^w[y>>8&255]^f[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]=l[d>>>24]<<24^l[y>>16&255]<<16^l[m>>8&255]<<8^l[255&g]^n[S++],u=d,d=y,y=m,m=g,g=u;return o}},st=class{constructor(t,e){this.O=t,this.H=e,this.Z=e}reset(){this.Z=this.H}update(t){return this.F(this.O,t,this.Z)}N(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}q(t){0===(t[0]=this.N(t[0]))&&(t[1]=this.N(t[1]))}F(t,e,n){let s;if(!(s=e.length))return[];const r=V.l(e);for(let r=0;s>r;r+=4){this.q(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.u(e,r)}},rt=T.D;let ot=Y&&tt&&typeof $.importKey==v,it=Y&&tt&&typeof $.deriveBits==v;class at extends d{constructor({password:t,rawPassword:n,encryptionStrength:s,checkPasswordOnly:i}){super({start(){e.assign(this,{ready:new l(t=>this.G=t),password:lt(t,n),J:s-1,pending:new o})},async transform(t,e){const n=this,{password:s,J:a,G:c,ready:w}=n;s?(await(async(t,e,n,s)=>{const o=await ft(t,e,n,ht(s,0,G[e])),i=ht(s,G[e]);if(o[0]!=i[0]||o[1]!=i[1])throw new r(j)})(n,a,s,ht(t,0,G[a]+2)),t=ht(t,G[a]+2),i?e.error(new r(L)):c()):await w;const f=new o(t.length-Q-(t.length-Q)%H);e.enqueue(wt(n,t,f,0,Q,!0))},async flush(t){const{X:e,Y:n,pending:s,ready:i}=this;if(n&&e){await i;const a=ht(s,0,s.length-Q),c=ht(s,s.length-Q);let w=new o;if(a.length){const t=dt(et,a);n.update(t);const s=e.update(t);w=pt(et,s)}const f=ht(pt(et,n.digest()),0,Q);let l=s.length<Q?1:0;for(let t=0;Q>t;t++)l|=f[t]^c[t];if(l)throw new r(E);t.enqueue(w)}}})}}class ct extends d{constructor({password:t,rawPassword:n,encryptionStrength:s}){let r;super({start(){e.assign(this,{ready:new l(t=>this.G=t),password:lt(t,n),J:s-1,pending:new o})},async transform(t,e){const n=this,{password:s,J:r,G:i,ready:a}=n;let c=new o;s?(c=await(async(t,e,n)=>{const s=O(new o(G[e]));return ut(s,await ft(t,e,n,s))})(n,r,s),i()):await a;const w=new o(c.length+t.length-t.length%H);w.set(c,0),e.enqueue(wt(n,t,w,c.length,0))},async flush(t){const{X:e,Y:n,pending:s,ready:i}=this;if(n&&e){await i;let a=new o;if(s.length){const t=e.update(dt(et,s));n.update(t),a=pt(et,t)}r.signature=pt(et,n.digest()).slice(0,Q),t.enqueue(ut(a,r.signature))}}}),r=this}}function wt(t,e,n,s,r,i){const{X:a,Y:c,pending:w}=t;w.length&&(e=ut(w,e));const f=e.length-r;let l;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(f-f%H)),l=0;f-H>=l;l+=H){const t=dt(et,ht(e,l,l+H));i&&c.update(t);const r=a.update(t);i||c.update(r),n.set(pt(et,r),l+s)}return t.pending=ht(e,l),n}async function ft(n,s,r,i){n.password=null;const a=await(async(t,e,n,s,r)=>{if(!ot)return T.importKey(e);try{return await $.importKey("raw",e,n,!1,r)}catch{return ot=!1,T.importKey(e)}})(0,r,F,0,q),c=await(async(t,e,n)=>{if(!it)return T.M(e,t.salt,N.iterations,n);try{return await $.deriveBits(t,e,n)}catch{return it=!1,T.M(e,t.salt,N.iterations,n)}})(e.assign({salt:i},N),a,8*(2*J[s]+2)),w=new o(c),f=dt(et,ht(w,0,J[s])),l=dt(et,ht(w,J[s],2*J[s])),u=ht(w,2*J[s]);return e.assign(n,{keys:{key:f,$:l,passwordVerification:u},X:new st(new nt(f),t.from(X)),Y:new rt(l)}),u}function lt(t,e){return e===b?(t=>{if(typeof u==k){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 ut(t,e){let n=t;return t.length+e.length&&(n=new o(t.length+e.length),n.set(t,0),n.set(e,t.length)),n}function ht(t,e,n){return t.subarray(e,n)}function pt(t,e){return t.p(e)}function dt(t,e){return t.m(e)}class yt extends d{constructor({password:t,rawPassword:n,passwordVerification:s,checkPasswordOnly:o}){super({start(){e.assign(this,{password:t,rawPassword:n,passwordVerification:s}),bt(this,t,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=gt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e.at(-1)^n.passwordVerification))throw new r(j);t=t.subarray(12)}o?e.error(new r(L)):e.enqueue(gt(n,t))}})}}class mt extends d{constructor({password:t,rawPassword:n,passwordVerification:s}){super({start(){e.assign(this,{password:t,rawPassword:n,passwordVerification:s}),bt(this,t,n)},transform(t,e){const n=this;let s,r;if(n.password||n.rawPassword){n.password=n.rawPassword=null;const e=O(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(St(n,e),0),r=12}else s=new o(t.length),r=0;s.set(St(n,t),r),e.enqueue(s)}})}}function gt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=vt(t)^e[s],kt(t,n[s]);return n}function St(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=vt(t)^e[s],kt(t,e[s]);return n}function bt(t,n,s){const r=[305419896,591751049,878082192];if(e.assign(t,{keys:r,tt:new D(r[0]),et:new D(r[2])}),s)for(let e=0;e<s.length;e++)kt(t,s[e]);else for(let e=0;e<n.length;e++)kt(t,n.charCodeAt(e))}function kt(t,e){let[,n]=t.keys;t.tt.append([e]);const r=~t.tt.get();n=Ct(s.imul(Ct(n+zt(r)),134775813)+1),t.et.append([n>>>24]);const o=~t.et.get();t.keys=[r,n,o]}function vt(t){const e=2|t.keys[2];return zt(s.imul(e,1^e)>>>8)}function zt(t){return 255&t}function Ct(t){return 4294967295&t}class It extends d{constructor(t,{chunkSize:e,nt:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:i,zipCrypto:a,signed:c,level:w,deflate64:l}=t,u=this;let h,p,d,y=super.readable;const m=c&&r&&!l&&(!o||a)&&!(!i||!s);o&&!a||!c||m||(h=new M,y=Ut(y,h)),r&&(m?(d=new At,y=Wt(y,new s("gzip")),y=Ut(y,d)):y=Rt(y,i,{level:w,chunkSize:e},s,n,s)),o&&(a?y=Ut(y,new mt(t)):(p=new ct(t),y=Ut(y,p))),Pt(u,y,()=>{let t;o&&!a&&(t=p.signature),o&&!a||!c||(t=m?d.signature:new f(h.value.buffer).getUint32(0)),u.signature=t})}}class At 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 i=n.length+t.length;if(8>=i){const e=new o(i);return e.set(n),e.set(t,n.length),void(n=e)}const a=i-8,c=new o(a),w=s.min(a,n.length);c.set(n.subarray(0,w),0),a>w&&c.set(t.subarray(0,a-w),w),r.enqueue(c);const f=new o(8),l=n.length-w;l&&f.set(n.subarray(w),0),f.set(t.subarray(a-w),l),n=f},flush(){const e=new f(n.buffer,n.byteOffset,n.byteLength);t.signature=e.getUint32(0,!0),t.st=e.getUint32(4,!0)}}),t=this}}class xt extends d{constructor(t,{chunkSize:e,rt:n,DecompressionStream:s}){super({});const{zipCrypto:o,encrypted:i,signed:a,signature:c,compressed:w,useCompressionStream:l,deflate64:u}=t;let h,p,d=super.readable;i&&(o?d=Ut(d,new yt(t)):(p=new at(t),d=Ut(d,p))),w&&(d=Rt(d,l,{chunkSize:e,deflate64:u},s,n,s),d=(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)})})(d)),i&&!o||!a||(h=new M,d=Ut(d,h)),Pt(this,d,()=>{if((!i||o)&&a){const t=new f(h.value.buffer);if(c!=t.getUint32(0,!1))throw new r(E)}})}}function Pt(t,n,s){n=Ut(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Rt(t,e,n,s,r,o){const i=e&&s?s:r||o,a=n.deflate64?"deflate64-raw":"deflate-raw";let c;try{c=new i(a,n)}catch(t){if(!e)throw t;if(r)c=new r(a,n);else{if(!o)throw t;c=new o(a,n)}}return Wt(t,c)}function Ut(t,e){return t.pipeThrough(e)}function Wt(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 Dt="data",Mt="close";class Vt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let i;o.startsWith("deflate")?i=It:o.startsWith("inflate")&&(i=xt),s.outputSize=0;let a=0;const c=new i(t,n),w=super.readable,f=new d({transform(t,e){t&&t.length&&(a+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:a})}}),l=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==b&&s.outputSize>t.outputSize))throw new r("Invalid uncompressed size")},flush(){const{signature:t}=c;e.assign(s,{signature:t,inputSize:a})}});e.defineProperty(s,"readable",{get:()=>w.pipeThrough(f).pipeThrough(c).pipeThrough(l)})}}class _t extends d{constructor(t){let e;1>t&&(t=65536),super({transform:(n,s)=>{if(e){const t=new o(e.length+n.length);t.set(e),t.set(n,e.length),n=t,e=null}let r=0;for(;n.length-r>t;)s.enqueue(n.slice(r,r+t)),r+=t;e=r?n.slice(r):n},flush(t){e&&e.length&&t.enqueue(e)}})}}let Bt=2;try{typeof navigator!=k&&navigator.hardwareConcurrency&&(Bt=navigator.hardwareConcurrency)}catch{}const Tt={ot:"./core/web-worker-wasm.js",wasmURI:"./core/streams/zlib-wasm/zlib-streams.wasm",chunkSize:65536,it:Bt,ct:5e3,wt:5e3,ft:!0,useCompressionStream:!0,CompressionStream:typeof g!=k&&g,DecompressionStream:typeof S!=k&&S};e.assign({},Tt);const Kt=new w,jt=new w;let Et,Lt,Ot,Ht,Zt,Ft=0;async function Nt(t){let e,r;try{const{options:o,config:i}=t;if(!o.useCompressionStream)try{await self.initModule(t.config)}catch{o.useCompressionStream=!0}i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream;const a={highWaterMark:1},c=t.readable||new y({async pull(t){const e=new l(t=>Kt.set(Ft,t));qt({type:"pull",messageId:Ft}),Ft=(Ft+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);r=t.writable||new m({async write(t){let e;const s=new l(t=>e=t);jt.set(Ft,e),qt({type:Dt,value:t,messageId:Ft}),Ft=(Ft+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Vt(o,i),Et=new AbortController;const{signal:w}=Et;await c.pipeThrough(e).pipeThrough(new _t((t=>s.max(t.chunkSize,64))(i))).pipeTo(r,{signal:w,preventClose:!0,preventAbort:!0}),await r.getWriter().close();const{signature:f,inputSize:u,outputSize:h}=e;qt({type:Mt,result:{signature:f,inputSize:u,outputSize:h}})}catch(t){if(t.outputSize=e?e.outputSize:0,r&&!r.locked)try{await r.getWriter().close()}catch{}Gt(t)}}function qt(t){let{value:e}=t;if(e)if(e.length)try{e=new o(e),t.value=e.buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t)}function Gt(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:i}=t;p({error:{message:e,stack:n,code:s,name:o,outputSize:i}})}function Jt(t,e,n={}){const i="number"==typeof n.level?n.level:-1,a="number"==typeof n.lt?n.lt:65536,c="number"==typeof n.ut?n.ut:65536;return new d({start(){try{let n;if(this.ht=Ot(a),this.in=Ot(c),this.ut=c,!this.ht||!this.in)throw new r("allocation failed");if(this.dt=new o(a),t?(this.yt=Lt.deflate_process,this.gt=Lt.deflate_last_consumed,this.St=Lt.deflate_end,this.bt=Lt.deflate_new(),n="gzip"===e?Lt.deflate_init_gzip(this.bt,i):"deflate-raw"===e?Lt.deflate_init_raw(this.bt,i):Lt.deflate_init(this.bt,i)):"deflate64-raw"===e?(this.yt=Lt.inflate9_process,this.gt=Lt.inflate9_last_consumed,this.St=Lt.inflate9_end,this.bt=Lt.inflate9_new(),n=Lt.inflate9_init_raw(this.bt)):(this.yt=Lt.inflate_process,this.gt=Lt.inflate_last_consumed,this.St=Lt.inflate_end,this.bt=Lt.inflate_new(),n="deflate-raw"===e?Lt.inflate_init_raw(this.bt):"gzip"===e?Lt.inflate_init_gzip(this.bt):Lt.inflate_init(this.bt)),0!==n)throw new r("init failed:"+n)}catch(t){throw w(this),t}},transform(e,n){try{const i=e,c=new o(Zt.buffer),w=this.yt,f=this.gt,l=this.ht,u=this.dt;let h=0;for(;h<i.length;){const e=s.min(i.length-h,32768);if((!this.in||this.ut<e)&&(this.in&&Ht&&(Ht(this.in),this.in=0),this.in=Ot(e),this.ut=e,!this.in))throw new r("allocation failed");c.set(i.subarray(h,h+e),this.in);const o=w(this.bt,this.in,e,l,a,0),p=16777215&o;if(p&&(u.set(c.subarray(l,l+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=f(this.bt);if(0===d)break;h+=d}}catch(t){w(this),n.error(t)}},flush(e){try{const n=new o(Zt.buffer),s=this.yt,i=this.ht,c=this.dt;for(;;){const o=s(this.bt,0,0,i,a,4),w=16777215&o,f=o>>24&255;if(!t){const t=128&f?f-256:f;if(0>t)throw new r("process error:"+t)}if(w&&(c.set(n.subarray(i,i+w),0),e.enqueue(c.slice(0,w))),1===f||0===w)break}}catch(t){e.error(t)}finally{const t=w(this);0!==t&&e.error(new r("end error:"+t))}},cancel(){w(this)}});function w(t){let e=0;return t.bt&&t.St&&(e=t.St(t.bt)),t.bt=0,t.in&&Ht&&Ht(t.in),t.in=0,t.ht&&Ht&&Ht(t.ht),t.ht=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&Nt(t),e==Dt){const t=Kt.get(n);Kt.delete(n),t({value:new o(s),done:r})}if("ack"==e){const t=jt.get(n);jt.delete(n),t()}e==Mt&&Et.abort()}catch(t){Gt(t)}});class Qt{constructor(t="deflate",e){return Jt(!0,t,e)}}class Xt{constructor(t="deflate",e){return Jt(!1,t,e)}}Qt.kt=!0,Xt.kt=!0;let Yt=!1;self.initModule=async t=>{try{const e=await(async(t,{baseURI:e})=>{if(!Yt){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(Lt=t,({malloc:Ot,free:Ht,memory:Zt}=Lt),"function"!=typeof Ot||"function"!=typeof Ht||!Zt)throw Lt=Ot=Ht=Zt=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports),Yt=!0}})(t.wasmURI,t);return t.nt=Qt,t.rt=Xt,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:i,Uint32Array:a,Int32Array:c,Map:f,DataView:l,Promise:w,TextEncoder:u,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:g,DecompressionStream:S}=self,b=void 0,k="undefined",v="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[I,A,x,P,R,U,W,D]=C;class M{constructor(t){this.t=t||-1}append(t){let e=0|this.t;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=D[255&t]^W[t>>>8&255]^U[t>>>16&255]^R[t>>>24&255]^P[255&n]^x[n>>>8&255]^A[n>>>16&255]^I[n>>>24&255]}}for(;n>s;s++)e=e>>>8^I[255&(e^t[s])];this.t=e}get(){return~this.t}}class _ extends d{constructor(){let t;const e=new M;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}}const B={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=B.o(n);return 32===s?t.concat(e):B.i(e,s,0|n,t.slice(0,t.length-1))},l(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+B.o(n)},u(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]=B.h(e,t[n-1]&2147483648>>e-1,1)),t},h:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,o:t=>s.round(t/1099511627776)||32,i(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=B.o(r);return s.push(B.h(e+o&31,e+o>32?n:s.pop(),1)),s}},T={bytes:{p(t){const e=B.l(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},m(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(B.h(8*(3&n),s)),e}}},V=class{constructor(t){const e=this;e.blockSize=512,e.S=[1732584193,4023233417,2562383102,271733878,3285377520],e.k=[1518500249,1859775393,2400959708,3395469782],t?(e.v=t.v.slice(0),e.C=t.C.slice(0),e.I=t.I):e.reset()}reset(){const t=this;return t.v=t.S.slice(0),t.C=[],t.I=0,t}update(t){const e=this;"string"==typeof t&&(t=T.A.m(t));const n=e.C=B.concat(e.C,t),s=e.I,o=e.I=s+B.l(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const i=new a(n);let c=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e.P(i.subarray(16*c,16*(c+1))),c+=1;return n.splice(0,16*c),e}R(){const t=this;let e=t.C;const n=t.v;e=B.concat(e,[B.h(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.I/4294967296)),e.push(0|t.I);e.length;)t.P(e.splice(0,16));return t.reset(),n}U(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}W(t,e){return e<<t|e>>>32-t}P(e){const n=this,r=n.v,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let i=r[0],a=r[1],c=r[2],f=r[3],l=r[4];for(let t=0;79>=t;t++){16>t||(o[t]=n.W(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.W(5,i)+n.U(t,a,c,f)+l+o[t]+n.k[s.floor(t/20)]|0;l=f,f=c,c=n.W(30,a),a=i,i=e}r[0]=r[0]+i|0,r[1]=r[1]+a|0,r[2]=r[2]+c|0,r[3]=r[3]+f|0,r[4]=r[4]+l|0}},K={importKey:t=>new K.D(T.bytes.m(t)),M(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 i,a,c,f,w;const u=new ArrayBuffer(o),h=new l(u);let p=0;const d=B;for(e=T.bytes.m(e),w=1;(o||1)>p;w++){for(i=a=t.encrypt(d.concat(e,[w])),c=1;n>c;c++)for(a=t.encrypt(a),f=0;f<a.length;f++)i[f]^=a[f];for(c=0;(o||1)>p&&c<i.length;c++)h.setInt32(p,i[c]),p+=4}return u.slice(0,s/8)},D:class{constructor(t){const e=this,n=e._=V,s=[[],[]];e.B=[new n,new n];const r=e.B[0].blockSize/32;t.length>r&&(t=(new n).update(t).R());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.B[0].update(s[0]),e.B[1].update(s[1]),e.T=new n(e.B[0])}reset(){const t=this;t.T=new t._(t.B[0]),t.V=!1}update(t){this.V=!0,this.T.update(t)}digest(){const t=this,e=t.T.R(),n=new t._(t.B[1]).update(e).R();return t.reset(),n}encrypt(t){if(this.V)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},j=typeof h!=k&&typeof h.getRandomValues==v,E="Invalid password",L="Invalid signature",O="zipjs-abort-check-password";function H(t){if(j)return h.getRandomValues(t);throw new r("Crypto API not supported")}const Z=16,F={name:"PBKDF2"},N=e.assign({hash:{name:"HMAC"}},F),q=e.assign({iterations:1e3,hash:{name:"SHA-1"}},F),G=["deriveBits"],J=[8,12,16],Q=[16,24,32],X=10,Y=[0,0,0,0],$=typeof h!=k,tt=$&&h.subtle,et=$&&typeof tt!=k,nt=T.bytes,st=class{constructor(t){const e=this;e.K=[[[],[],[],[],[]],[[],[],[],[],[]]],e.K[0][0][0]||e.j();const n=e.K[0][4],s=e.K[1],o=t.length;let i,a,c,f=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(e.k=[a=t.slice(0),c=[]],i=o;4*o+28>i;i++){let t=a[i-1];(i%o===0||8===o&&i%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],i%o===0&&(t=t<<8^t>>>24^f<<24,f=f<<1^283*(f>>7))),a[i]=a[i-o]^t}for(let t=0;i;t++,i--){const e=a[3&t?i:i-4];c[t]=4>=i||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.L(t,0)}decrypt(t){return this.L(t,1)}j(){const t=this.K[0],e=this.K[1],n=t[4],s=e[4],r=[],o=[];let i,a,c,f;for(let t=0;256>t;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let l=i=0;!n[l];l^=a||1,i=o[i]||1){let o=i^i<<1^i<<2^i<<3^i<<4;o=o>>8^255&o^99,n[l]=o,s[o]=l,f=r[c=r[a=r[l]]];let w=16843009*f^65537*c^257*a^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)}L(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.k[e],s=n.length/4-2,o=[0,0,0,0],i=this.K[e],a=i[0],c=i[1],f=i[2],l=i[3],w=i[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=a[d>>>24]^c[y>>16&255]^f[m>>8&255]^l[255&g]^n[S],h=a[y>>>24]^c[m>>16&255]^f[g>>8&255]^l[255&d]^n[S+1],p=a[m>>>24]^c[g>>16&255]^f[d>>8&255]^l[255&y]^n[S+2],g=a[g>>>24]^c[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}},rt=class{constructor(t,e){this.O=t,this.H=e,this.Z=e}reset(){this.Z=this.H}update(t){return this.F(this.O,t,this.Z)}N(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}q(t){0===(t[0]=this.N(t[0]))&&(t[1]=this.N(t[1]))}F(t,e,n){let s;if(!(s=e.length))return[];const r=B.l(e);for(let r=0;s>r;r+=4){this.q(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 B.u(e,r)}},ot=K.D;let it=$&&et&&typeof tt.importKey==v,at=$&&et&&typeof tt.deriveBits==v;class ct extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s}){super({start(){lt(this,t,e,n)},async transform(t,e){const n=this,{password:i,G:a,J:c,ready:f}=n;i?(await(async(t,e,n,s)=>{const o=await ut(t,e,n,dt(s,0,J[e])),i=dt(s,J[e]);if(o[0]!=i[0]||o[1]!=i[1])throw new r(E)})(n,a,i,dt(t,0,J[a]+2)),t=dt(t,J[a]+2),s?e.error(new r(O)):c()):await f;const l=new o(t.length-X-(t.length-X)%Z);e.enqueue(wt(n,t,l,0,X,!0))},async flush(t){const{X:e,Y:n,pending:s,ready:o}=this;if(n&&e){await o;const i=dt(s,0,s.length-X),a=dt(s,s.length-X);let c=z;if(i.length){const t=mt(nt,i);n.update(t);const s=e.update(t);c=yt(nt,s)}const f=dt(yt(nt,n.digest()),0,X);let l=s.length<X?1:0;for(let t=0;X>t;t++)l|=f[t]^a[t];if(l)throw new r(L);t.enqueue(c)}}})}}class ft extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){let s;super({start(){lt(this,t,e,n)},async transform(t,e){const n=this,{password:s,G:r,J:i,ready:a}=n;let c=z;s?(c=await(async(t,e,n)=>{const s=H(new o(J[e]));return pt(s,await ut(t,e,n,s))})(n,r,s),i()):await a;const f=new o(c.length+t.length-t.length%Z);f.set(c,0),e.enqueue(wt(n,t,f,c.length,0))},async flush(t){const{X:e,Y:n,pending:r,ready:o}=this;if(n&&e){await o;let i=z;if(r.length){const t=e.update(mt(nt,r));n.update(t),i=yt(nt,t)}s.signature=yt(nt,n.digest()).slice(0,X),t.enqueue(pt(i,s.signature))}}}),s=this}}function lt(t,n,s,r){e.assign(t,{ready:new w(e=>t.J=e),password:ht(n,s),G:r-1,pending:z})}function wt(t,e,n,s,r,i){const{X:a,Y:c,pending:f}=t;f.length&&(e=pt(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%Z)),w=0;l-Z>=w;w+=Z){const t=mt(nt,dt(e,w,w+Z));i&&c.update(t);const r=a.update(t);i||c.update(r),n.set(yt(nt,r),w+s)}return t.pending=dt(e,w),n}async function ut(n,s,r,i){n.password=null;const a=await(async(t,e,n,s,r)=>{if(!it)return K.importKey(e);try{return await tt.importKey("raw",e,n,!1,r)}catch{return it=!1,K.importKey(e)}})(0,r,N,0,G),c=await(async(t,e,n)=>{if(!at)return K.M(e,t.salt,q.iterations,n);try{return await tt.deriveBits(t,e,n)}catch{return at=!1,K.M(e,t.salt,q.iterations,n)}})(e.assign({salt:i},q),a,8*(2*Q[s]+2)),f=new o(c),l=mt(nt,dt(f,0,Q[s])),w=mt(nt,dt(f,Q[s],2*Q[s])),u=dt(f,2*Q[s]);return e.assign(n,{keys:{key:l,$:w,passwordVerification:u},X:new rt(new st(l),t.from(Y)),Y:new ot(w)}),u}function ht(t,e){return e===b?(t=>{if(typeof u==k){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 pt(t,e){let n=t;return t.length+e.length&&(n=new o(t.length+e.length),n.set(t,0),n.set(e,t.length)),n}function dt(t,e,n){return t.subarray(e,n)}function yt(t,e){return t.p(e)}function mt(t,e){return t.m(e)}class gt 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=kt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e.at(-1)^n.passwordVerification))throw new r(E);t=t.subarray(12)}s?e.error(new r(O)):e.enqueue(kt(n,t))}})}}class St 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=H(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(vt(n,e),0),r=12}else s=new o(t.length),r=0;s.set(vt(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,tt:new M(r[0]),et:new M(r[2])}),s)for(let e=0;e<s.length;e++)zt(t,s[e]);else for(let e=0;e<n.length;e++)zt(t,n.charCodeAt(e))})(t,n,s)}function kt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=Ct(t)^e[s],zt(t,n[s]);return n}function vt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=Ct(t)^e[s],zt(t,e[s]);return n}function zt(t,e){let[,n]=t.keys;t.tt.append([e]);const r=~t.tt.get();n=At(s.imul(At(n+It(r)),134775813)+1),t.et.append([n>>>24]);const o=~t.et.get();t.keys=[r,n,o]}function Ct(t){const e=2|t.keys[2];return It(s.imul(e,1^e)>>>8)}function It(t){return 255&t}function At(t){return 4294967295&t}class xt extends d{constructor(t,{chunkSize:e,nt:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:i,zipCrypto:a,signed:c,level:f,deflate64:w}=t,u=this;let h,p,d,y=super.readable;const m=c&&r&&!w&&(!o||a)&&!(!i||!s);o&&!a||!c||m||(h=new _,y=Dt(y,h)),r&&(m?(d=new Pt,y=Mt(y,new s("gzip")),y=Dt(y,d)):y=Wt(y,i,{level:f,chunkSize:e},s,n,s)),o&&(a?y=Dt(y,new St(t)):(p=new ft(t),y=Dt(y,p))),Ut(u,y,()=>{let t;o&&!a&&(t=p.signature),o&&!a||!c||(t=m?d.signature:new l(h.value.buffer).getUint32(0)),u.signature=t})}}class Pt 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 i=n.length+t.length;if(8>=i){const e=new o(i);return e.set(n),e.set(t,n.length),void(n=e)}const a=i-8,c=new o(a),f=s.min(a,n.length);c.set(n.subarray(0,f),0),a>f&&c.set(t.subarray(0,a-f),f),r.enqueue(c);const l=new o(8),w=n.length-f;w&&l.set(n.subarray(f),0),l.set(t.subarray(a-f),w),n=l},flush(){const e=new l(n.buffer,n.byteOffset,n.byteLength);t.signature=e.getUint32(0,!0),t.st=e.getUint32(4,!0)}}),t=this}}class Rt extends d{constructor(t,{chunkSize:e,rt:n,DecompressionStream:s}){super({});const{zipCrypto:o,encrypted:i,signed:a,signature:c,compressed:f,useCompressionStream:w,deflate64:u}=t;let h,p,d=super.readable;i&&(o?d=Dt(d,new gt(t)):(p=new ct(t),d=Dt(d,p))),f&&(d=Wt(d,w,{chunkSize:e,deflate64:u},s,n,s),d=(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)})})(d)),i&&!o||!a||(h=new _,d=Dt(d,h)),Ut(this,d,()=>{if((!i||o)&&a){const t=new l(h.value.buffer);if(c!=t.getUint32(0,!1))throw new r(L)}})}}function Ut(t,n,s){n=Dt(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Wt(t,e,n,s,r,o){const i=e&&s?s:r||o,a=n.deflate64?"deflate64-raw":"deflate-raw";let c;try{c=new i(a,n)}catch(t){if(!e)throw t;if(r)c=new r(a,n);else{if(!o)throw t;c=new o(a,n)}}return Mt(t,c)}function Dt(t,e){return t.pipeThrough(e)}function Mt(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 _t="data",Bt="close";class Tt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let i;o.startsWith("deflate")?i=xt:o.startsWith("inflate")&&(i=Rt),s.outputSize=0;let a=0;const c=new i(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(a+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:a})}}),w=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==b&&s.outputSize>t.outputSize))throw new r("Invalid uncompressed size")},flush(){const{signature:t}=c;e.assign(s,{signature:t,inputSize:a})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(c).pipeThrough(w)})}}class Vt extends d{constructor(t){let e;1>t&&(t=65536),super({transform:(n,s)=>{if(e){const t=new o(e.length+n.length);t.set(e),t.set(n,e.length),n=t,e=null}let r=0;for(;n.length-r>t;)s.enqueue(n.slice(r,r+t)),r+=t;e=r?n.slice(r):n},flush(t){e&&e.length&&t.enqueue(e)}})}}let Kt=2;try{typeof navigator!=k&&navigator.hardwareConcurrency&&(Kt=navigator.hardwareConcurrency)}catch{}const jt={ot:"./core/web-worker-wasm.js",wasmURI:"./core/streams/zlib-wasm/zlib-streams.wasm",chunkSize:65536,it:Kt,ct:5e3,ft:5e3,lt:!0,useCompressionStream:!0,CompressionStream:typeof g!=k&&g,DecompressionStream:typeof S!=k&&S};e.assign({},jt);const Et=new f,Lt=new f;let Ot,Ht,Zt,Ft,Nt,qt=0;async function Gt(t){let e,r;try{const{options:o,config:i}=t;if(!o.useCompressionStream)try{await self.initModule(t.config)}catch{o.useCompressionStream=!0}i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream;const a={highWaterMark:1},c=t.readable||new y({async pull(t){const e=new w(t=>Et.set(qt,t));Jt({type:"pull",messageId:qt}),qt=(qt+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);r=t.writable||new m({async write(t){let e;const s=new w(t=>e=t);Lt.set(qt,e),Jt({type:_t,value:t,messageId:qt}),qt=(qt+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Tt(o,i),Ot=new AbortController;const{signal:f}=Ot;await c.pipeThrough(e).pipeThrough(new Vt((t=>s.max(t.chunkSize,64))(i))).pipeTo(r,{signal:f,preventClose:!0,preventAbort:!0}),await r.getWriter().close();const{signature:l,inputSize:u,outputSize:h}=e;Jt({type:Bt,result:{signature:l,inputSize:u,outputSize:h}})}catch(t){if(t.outputSize=e?e.outputSize:0,r&&!r.locked)try{await r.getWriter().close()}catch{}Qt(t)}}function Jt(t){let{value:e}=t;if(e)if(e.length)try{e=new o(e),t.value=e.buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t)}function Qt(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:i}=t;p({error:{message:e,stack:n,code:s,name:o,outputSize:i}})}function Xt(t,e,n={}){const i="number"==typeof n.level?n.level:-1,a="number"==typeof n.outBuffer?n.outBuffer:65536,c="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.wt=Zt(a),this.in=Zt(c),this.inBufferSize=c,!this.wt||!this.in)throw new r("allocation failed");if(this.ut=new o(a),t?(this.ht=Ht.deflate_process,this.dt=Ht.deflate_last_consumed,this.yt=Ht.deflate_end,this.gt=Ht.deflate_new(),n="gzip"===e?Ht.deflate_init_gzip(this.gt,i):"deflate-raw"===e?Ht.deflate_init_raw(this.gt,i):Ht.deflate_init(this.gt,i)):"deflate64-raw"===e?(this.ht=Ht.inflate9_process,this.dt=Ht.inflate9_last_consumed,this.yt=Ht.inflate9_end,this.gt=Ht.inflate9_new(),n=Ht.inflate9_init_raw(this.gt)):(this.ht=Ht.inflate_process,this.dt=Ht.inflate_last_consumed,this.yt=Ht.inflate_end,this.gt=Ht.inflate_new(),n="deflate-raw"===e?Ht.inflate_init_raw(this.gt):"gzip"===e?Ht.inflate_init_gzip(this.gt):Ht.inflate_init(this.gt)),0!==n)throw new r("init failed:"+n)}catch(t){throw f(this),t}},transform(e,n){try{const i=e,c=new o(Nt.buffer),f=this.ht,l=this.dt,w=this.wt,u=this.ut;let h=0;for(;h<i.length;){const e=s.min(i.length-h,32768);if((!this.in||this.inBufferSize<e)&&(this.in&&Ft&&(Ft(this.in),this.in=0),this.in=Zt(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");c.set(i.subarray(h,h+e),this.in);const o=f(this.gt,this.in,e,w,a,0),p=16777215&o;if(p&&(u.set(c.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(Nt.buffer),s=this.ht,i=this.wt,c=this.ut;for(;;){const o=s(this.gt,0,0,i,a,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&&(c.set(n.subarray(i,i+f),0),e.enqueue(c.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&&Ft&&Ft(t.in),t.in=0,t.wt&&Ft&&Ft(t.wt),t.wt=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&Gt(t),e==_t){const t=Et.get(n);Et.delete(n),t({value:new o(s),done:r})}if("ack"==e){const t=Lt.get(n);Lt.delete(n),t()}e==Bt&&Ot.abort()}catch(t){Qt(t)}});class Yt{constructor(t="deflate",e){return Xt(!0,t,e)}}class $t{constructor(t="deflate",e){return Xt(!1,t,e)}}Yt.St=!0,$t.St=!0;let te=!1;self.initModule=async t=>{try{const e=await(async(t,{baseURI:e})=>{if(!te){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(Ht=t,({malloc:Zt,free:Ft,memory:Nt}=Ht),"function"!=typeof Zt||"function"!=typeof Ft||!Nt)throw Ht=Zt=Ft=Nt=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports),te=!0}})(t.wasmURI,t);return t.nt=Yt,t.rt=$t,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};
|