@zip.js/zip.js 2.8.47 → 2.8.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deno.json +1 -1
- package/dist/zip-core-external.js +71 -36
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +71 -36
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +72 -37
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +55 -34
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +72 -37
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +75 -40
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +73 -38
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +73 -38
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +74 -39
- 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 +72 -37
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +75 -40
- package/index-native.min.js +1 -1
- package/index.cjs +73 -38
- package/index.min.js +1 -1
- package/lib/core/codec-pool.js +1 -1
- package/lib/core/codec-worker.js +25 -9
- package/lib/core/io.js +3 -23
- package/lib/core/streams/zlib-js/zlib-streams.min.js +1 -1
- package/lib/core/util/blob-temp-stream.js +4 -2
- package/lib/core/util/compatible-streams.js +30 -2
- package/lib/core/util/opfs-temp-stream.js +8 -1
- package/lib/core/util/sync-access-handle-temp-stream.js +8 -1
- package/lib/core/web-worker-base.js +10 -2
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/web-worker-inline-wasm.js +1 -1
- package/lib/core/zip-fs.js +2 -1
- package/lib/core/zip-reader.js +4 -4
- package/package.json +2 -1
- package/worker-message-property-names.js +1 -1
package/dist/zip-core.js
CHANGED
|
@@ -1874,6 +1874,8 @@
|
|
|
1874
1874
|
*/
|
|
1875
1875
|
|
|
1876
1876
|
|
|
1877
|
+
const HTTP_HEADER_CONTENT_TYPE = "Content-Type";
|
|
1878
|
+
|
|
1877
1879
|
function toCompatibleReadable(readable) {
|
|
1878
1880
|
if (readable instanceof ReadableStream) {
|
|
1879
1881
|
return readable;
|
|
@@ -1894,6 +1896,29 @@
|
|
|
1894
1896
|
});
|
|
1895
1897
|
}
|
|
1896
1898
|
|
|
1899
|
+
function streamToBlob(readable, contentType) {
|
|
1900
|
+
readable = toCompatibleReadable(readable);
|
|
1901
|
+
if (responseSupportsGlobalReadable()) {
|
|
1902
|
+
const options = {};
|
|
1903
|
+
if (contentType) {
|
|
1904
|
+
options.headers = [[HTTP_HEADER_CONTENT_TYPE, contentType]];
|
|
1905
|
+
}
|
|
1906
|
+
return new Response(readable, options).blob();
|
|
1907
|
+
}
|
|
1908
|
+
const chunks = [];
|
|
1909
|
+
return readable
|
|
1910
|
+
.pipeTo(new WritableStream({
|
|
1911
|
+
write(chunk) {
|
|
1912
|
+
chunks.push(chunk);
|
|
1913
|
+
}
|
|
1914
|
+
}))
|
|
1915
|
+
.then(() => new Blob(chunks, contentType ? { type: contentType } : {}));
|
|
1916
|
+
}
|
|
1917
|
+
|
|
1918
|
+
function responseSupportsGlobalReadable() {
|
|
1919
|
+
return typeof Blob.prototype.stream != FUNCTION_TYPE || new Blob([]).stream() instanceof ReadableStream;
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1897
1922
|
function toCompatibleWritable(writable) {
|
|
1898
1923
|
if (writable instanceof WritableStream) {
|
|
1899
1924
|
return writable;
|
|
@@ -2654,14 +2679,16 @@
|
|
|
2654
2679
|
} else {
|
|
2655
2680
|
webWorkerSupported = false;
|
|
2656
2681
|
}
|
|
2657
|
-
|
|
2658
|
-
if (reader) {
|
|
2659
|
-
reader.releaseLock();
|
|
2660
|
-
}
|
|
2661
|
-
workerData.reader = null;
|
|
2662
|
-
workerData.writer = null;
|
|
2682
|
+
releaseWorkerStreams(workerData);
|
|
2663
2683
|
return runWorker$1(workerData, config);
|
|
2664
2684
|
}
|
|
2685
|
+
if (error && error.codecImportFailed) {
|
|
2686
|
+
if (workerData.reader) {
|
|
2687
|
+
releaseWorkerStreams(workerData);
|
|
2688
|
+
return runWorker$1(workerData, config);
|
|
2689
|
+
}
|
|
2690
|
+
workerData.onTaskFinished();
|
|
2691
|
+
}
|
|
2665
2692
|
throw error;
|
|
2666
2693
|
}
|
|
2667
2694
|
}
|
|
@@ -2798,6 +2825,15 @@
|
|
|
2798
2825
|
return { writable, closed, abortPipe: () => abortController.abort() };
|
|
2799
2826
|
}
|
|
2800
2827
|
|
|
2828
|
+
function releaseWorkerStreams(workerData) {
|
|
2829
|
+
const { reader } = workerData;
|
|
2830
|
+
if (reader) {
|
|
2831
|
+
reader.releaseLock();
|
|
2832
|
+
}
|
|
2833
|
+
workerData.reader = null;
|
|
2834
|
+
workerData.writer = null;
|
|
2835
|
+
}
|
|
2836
|
+
|
|
2801
2837
|
function terminateWorker$1(workerData) {
|
|
2802
2838
|
const { worker } = workerData;
|
|
2803
2839
|
if (worker) {
|
|
@@ -2865,7 +2901,7 @@
|
|
|
2865
2901
|
try {
|
|
2866
2902
|
worker = new Worker(resolvedURI, resolvedOptions);
|
|
2867
2903
|
} catch (error) {
|
|
2868
|
-
if (
|
|
2904
|
+
if (isModuleType) {
|
|
2869
2905
|
return getWebWorker(url, baseURI, workerData, false, useBlobURI);
|
|
2870
2906
|
} else {
|
|
2871
2907
|
throw error;
|
|
@@ -2983,12 +3019,15 @@
|
|
|
2983
3019
|
const stale = () => workerData.generation != generation;
|
|
2984
3020
|
try {
|
|
2985
3021
|
if (error) {
|
|
2986
|
-
const { message, stack, code, name, outputSize, cause } = error;
|
|
3022
|
+
const { message, stack, code, name, outputSize, cause, codecImportFailed } = error;
|
|
2987
3023
|
const responseError = new Error(message);
|
|
2988
3024
|
Object.assign(responseError, { stack, code, name, outputSize });
|
|
2989
3025
|
if (cause) {
|
|
2990
3026
|
responseError.cause = Object.assign(new Error(cause.message), { name: cause.name });
|
|
2991
3027
|
}
|
|
3028
|
+
if (codecImportFailed) {
|
|
3029
|
+
responseError.codecImportFailed = true;
|
|
3030
|
+
}
|
|
2992
3031
|
close(responseError);
|
|
2993
3032
|
} else {
|
|
2994
3033
|
if (type == MESSAGE_PULL) {
|
|
@@ -3027,7 +3066,9 @@
|
|
|
3027
3066
|
if (writer) {
|
|
3028
3067
|
writer.releaseLock();
|
|
3029
3068
|
}
|
|
3030
|
-
|
|
3069
|
+
if (!(error && error.codecImportFailed)) {
|
|
3070
|
+
onTaskFinished();
|
|
3071
|
+
}
|
|
3031
3072
|
}
|
|
3032
3073
|
}
|
|
3033
3074
|
|
|
@@ -3077,7 +3118,7 @@
|
|
|
3077
3118
|
}
|
|
3078
3119
|
await ensureCodecStreams(format, options.codecURI);
|
|
3079
3120
|
}
|
|
3080
|
-
workerOptions.transferStreams = transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams);
|
|
3121
|
+
workerOptions.transferStreams = !format && (transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams));
|
|
3081
3122
|
const streamCopy = !compressed && !checkCrc32 && !computeCrc32 && !encrypted;
|
|
3082
3123
|
const workerSupported = format === UNDEFINED_VALUE || Boolean(options.codecURI);
|
|
3083
3124
|
workerOptions.useWebWorkers = !streamCopy && workerSupported && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
|
|
@@ -3233,7 +3274,6 @@
|
|
|
3233
3274
|
const HTTP_HEADER_CONTENT_RANGE = "Content-Range";
|
|
3234
3275
|
const HTTP_HEADER_ACCEPT_RANGES = "Accept-Ranges";
|
|
3235
3276
|
const HTTP_HEADER_RANGE = "Range";
|
|
3236
|
-
const HTTP_HEADER_CONTENT_TYPE = "Content-Type";
|
|
3237
3277
|
const HTTP_HEADER_ETAG = "Etag";
|
|
3238
3278
|
const HTTP_HEADER_LAST_MODIFIED = "Last-Modified";
|
|
3239
3279
|
const HTTP_METHOD_HEAD = "HEAD";
|
|
@@ -3438,10 +3478,6 @@
|
|
|
3438
3478
|
}
|
|
3439
3479
|
}
|
|
3440
3480
|
|
|
3441
|
-
function responseSupportsGlobalReadable() {
|
|
3442
|
-
return typeof Blob.prototype.stream != FUNCTION_TYPE || new Blob([]).stream() instanceof ReadableStream;
|
|
3443
|
-
}
|
|
3444
|
-
|
|
3445
3481
|
class BlobWriter extends Stream {
|
|
3446
3482
|
|
|
3447
3483
|
constructor(contentType) {
|
|
@@ -3453,22 +3489,7 @@
|
|
|
3453
3489
|
return transformStream.writable;
|
|
3454
3490
|
}
|
|
3455
3491
|
});
|
|
3456
|
-
|
|
3457
|
-
const headers = [];
|
|
3458
|
-
if (contentType) {
|
|
3459
|
-
headers.push([HTTP_HEADER_CONTENT_TYPE, contentType]);
|
|
3460
|
-
}
|
|
3461
|
-
writer.blob = new Response(transformStream.readable, { headers }).blob();
|
|
3462
|
-
} else {
|
|
3463
|
-
const chunks = [];
|
|
3464
|
-
writer.blob = transformStream.readable
|
|
3465
|
-
.pipeTo(new WritableStream({
|
|
3466
|
-
write(chunk) {
|
|
3467
|
-
chunks.push(chunk);
|
|
3468
|
-
}
|
|
3469
|
-
}))
|
|
3470
|
-
.then(() => new Blob(chunks, { type: contentType }));
|
|
3471
|
-
}
|
|
3492
|
+
writer.blob = streamToBlob(transformStream.readable, contentType);
|
|
3472
3493
|
writer.blob.catch(() => { });
|
|
3473
3494
|
}
|
|
3474
3495
|
|
|
@@ -4542,7 +4563,7 @@
|
|
|
4542
4563
|
const { config } = zipReader;
|
|
4543
4564
|
await initStream(reader);
|
|
4544
4565
|
if (reader.size === UNDEFINED_VALUE || !reader.readUint8Array) {
|
|
4545
|
-
reader = new BlobReader(await
|
|
4566
|
+
reader = new BlobReader(await streamToBlob(reader.readable));
|
|
4546
4567
|
await initStream(reader);
|
|
4547
4568
|
}
|
|
4548
4569
|
if (reader.size < END_OF_CENTRAL_DIR_LENGTH) {
|
|
@@ -4811,7 +4832,7 @@
|
|
|
4811
4832
|
entry.arrayBuffer = async options => {
|
|
4812
4833
|
const writer = new TransformStream();
|
|
4813
4834
|
const [arrayBuffer] = await Promise.all([
|
|
4814
|
-
|
|
4835
|
+
streamToBlob(writer.readable).then(blob => blob.arrayBuffer()),
|
|
4815
4836
|
fileEntry.getData(writer, entry, zipReader.readRanges, options)]);
|
|
4816
4837
|
return arrayBuffer;
|
|
4817
4838
|
};
|
|
@@ -7619,7 +7640,7 @@
|
|
|
7619
7640
|
|
|
7620
7641
|
async function spillToFile() {
|
|
7621
7642
|
const directoryHandle = await getTempDirectory();
|
|
7622
|
-
fileName =
|
|
7643
|
+
fileName = getRandomFileName$1();
|
|
7623
7644
|
fileHandle = await directoryHandle.getFileHandle(fileName, { create: true });
|
|
7624
7645
|
fileWriter = (await fileHandle.createWritable()).getWriter();
|
|
7625
7646
|
spilled = true;
|
|
@@ -7700,6 +7721,13 @@
|
|
|
7700
7721
|
};
|
|
7701
7722
|
}
|
|
7702
7723
|
|
|
7724
|
+
function getRandomFileName$1() {
|
|
7725
|
+
if (crypto.randomUUID) {
|
|
7726
|
+
return crypto.randomUUID();
|
|
7727
|
+
}
|
|
7728
|
+
return Array.from(crypto.getRandomValues(new Uint8Array(16)), byteValue => byteValue.toString(16).padStart(2, "0")).join("");
|
|
7729
|
+
}
|
|
7730
|
+
|
|
7703
7731
|
/*
|
|
7704
7732
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
7705
7733
|
|
|
@@ -7743,7 +7771,7 @@
|
|
|
7743
7771
|
|
|
7744
7772
|
async function spillToBlob() {
|
|
7745
7773
|
const transformStream = new TransformStream();
|
|
7746
|
-
blobPromise =
|
|
7774
|
+
blobPromise = streamToBlob(transformStream.readable);
|
|
7747
7775
|
blobWriter = transformStream.writable.getWriter();
|
|
7748
7776
|
spilled = true;
|
|
7749
7777
|
for (const chunk of memoryChunks) {
|
|
@@ -7883,7 +7911,7 @@
|
|
|
7883
7911
|
|
|
7884
7912
|
async function spillToFile() {
|
|
7885
7913
|
const directoryHandle = await getTempDirectory();
|
|
7886
|
-
fileName =
|
|
7914
|
+
fileName = getRandomFileName();
|
|
7887
7915
|
const fileHandle = await directoryHandle.getFileHandle(fileName, { create: true });
|
|
7888
7916
|
accessHandle = await fileHandle.createSyncAccessHandle();
|
|
7889
7917
|
spilled = true;
|
|
@@ -7963,6 +7991,13 @@
|
|
|
7963
7991
|
};
|
|
7964
7992
|
}
|
|
7965
7993
|
|
|
7994
|
+
function getRandomFileName() {
|
|
7995
|
+
if (crypto.randomUUID) {
|
|
7996
|
+
return crypto.randomUUID();
|
|
7997
|
+
}
|
|
7998
|
+
return Array.from(crypto.getRandomValues(new Uint8Array(16)), byteValue => byteValue.toString(16).padStart(2, "0")).join("");
|
|
7999
|
+
}
|
|
8000
|
+
|
|
7966
8001
|
/*
|
|
7967
8002
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
7968
8003
|
|