zip-peek 0.7.1 → 0.7.3-beta
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/README.md +3 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +39 -23
- package/dist/types.d.ts +11 -2
- package/dist/types.js +5 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.js +5 -0
- package/dist/zipServiceWorker.js +1 -1
- package/dist/zipServiceWorker.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -101,7 +101,7 @@ type InitZipPeekOptions = {
|
|
|
101
101
|
zipAssetCacheName?: string;
|
|
102
102
|
assetCacheTtlMs?: number;
|
|
103
103
|
logPrefix?: string;
|
|
104
|
-
onError?: (error: Error, info
|
|
104
|
+
onError?: (error: Error, info: string | undefined, level: "error" | "warn") => void;
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
type ZipCacheClearingStrategy = "keep-all" | "keep-allowed-urls" | "clear-all";
|
|
@@ -188,10 +188,10 @@ When fallback resolution succeeds, the asset is still served normally, but `onEr
|
|
|
188
188
|
|
|
189
189
|
`onError`
|
|
190
190
|
|
|
191
|
-
Optional error handler for zip-peek failures and informational reports from the service worker. Receives `(error, info
|
|
191
|
+
Optional error handler for zip-peek failures and informational reports from the service worker. Receives `(error, info, level)`. `level` is `"warn"` for a thrown network fetch, a file missing from the manifest, and a successful zip-basename fallback. Every other report is `"error"`.
|
|
192
192
|
|
|
193
193
|
- `error.message` is a **stable title** for telemetry grouping, always prefixed with `[zip-peek-error]`. Unique presigned query strings are not included in the title.
|
|
194
|
-
- `info` holds request-specific details (`path=… zipPath=… reason=… status=… cause=…`).
|
|
194
|
+
- `info` holds request-specific details (`path=… zipPath=… reason=… status=… cause=… zipSW=… zipPeek=…`). `zipSW` is the service-worker build version (the package version baked into `zipServiceWorker.js`). `zipPeek` is the zip-peek package version running on the page. They match on a fresh install and differ when a cached worker is older than the page. Manifest preload and manifest fetch failures also include `phase` (`tail` or `cd`) and `online`. The init step label is kept in front of those fields.
|
|
195
195
|
|
|
196
196
|
Service-worker fetch failures post `ZIP_SW_ERROR` so `onError` runs (allow-list 403, missing manifest/file 404, renew 502, origin/handler 500). A thrown `fetch()` (offline, DNS, CORS) uses `[zip-peek-error] [NetworkError] ZIP asset fetch failed` or `[zip-peek-error] [NetworkError] ZIP manifest fetch failed`. An HTTP error response from origin is not tagged `[NetworkError]`.
|
|
197
197
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { InitZipPeekOptions, InitZipPeekResult, RenewPresignedUrlOptions } from "./types";
|
|
2
2
|
import { isZipPackage } from "./zip-utils";
|
|
3
|
-
export type { InitZipPeekOptions, InitZipPeekResult, RenewPresignedUrlOptions, ZipCacheClearingStrategy, ZipPeekErrorHandler, ZipPeekUrlExpiryHandler, ZipWorkerConfig, } from "./types";
|
|
3
|
+
export type { InitZipPeekOptions, InitZipPeekResult, RenewPresignedUrlOptions, ZipCacheClearingStrategy, ZipPeekErrorHandler, ZipPeekLogLevel, ZipPeekUrlExpiryHandler, ZipWorkerConfig, } from "./types";
|
|
4
4
|
export { getPresignedUrlExpiryMs, isPresignedUrlExpired } from "./zip-utils";
|
|
5
5
|
/**
|
|
6
6
|
* Registers the zip-peek service worker and configures lazy ZIP asset loading.
|
package/dist/index.js
CHANGED
|
@@ -4,11 +4,21 @@ exports.isZipPackage = exports.isPresignedUrlExpired = exports.getPresignedUrlEx
|
|
|
4
4
|
exports.initZipPeek = initZipPeek;
|
|
5
5
|
exports.renewPresignedUrl = renewPresignedUrl;
|
|
6
6
|
const types_1 = require("./types");
|
|
7
|
+
const version_1 = require("./version");
|
|
7
8
|
const zip_utils_1 = require("./zip-utils");
|
|
8
9
|
Object.defineProperty(exports, "isZipPackage", { enumerable: true, get: function () { return zip_utils_1.isZipPackage; } });
|
|
9
10
|
var zip_utils_2 = require("./zip-utils");
|
|
10
11
|
Object.defineProperty(exports, "getPresignedUrlExpiryMs", { enumerable: true, get: function () { return zip_utils_2.getPresignedUrlExpiryMs; } });
|
|
11
12
|
Object.defineProperty(exports, "isPresignedUrlExpired", { enumerable: true, get: function () { return zip_utils_2.isPresignedUrlExpired; } });
|
|
13
|
+
const ZIP_PEEK_VERSION_FIELD = `zipPeek=${version_1.ZIP_PEEK_VERSION}`;
|
|
14
|
+
/** Append the page package version. Kept off error.message so titles stay stable. */
|
|
15
|
+
function withPackageVersion(info) {
|
|
16
|
+
if (!info)
|
|
17
|
+
return ZIP_PEEK_VERSION_FIELD;
|
|
18
|
+
if (info.includes("zipPeek="))
|
|
19
|
+
return info;
|
|
20
|
+
return `${info} ${ZIP_PEEK_VERSION_FIELD}`;
|
|
21
|
+
}
|
|
12
22
|
/** Default lead time before presigned URL expiry when scheduling renewal. */
|
|
13
23
|
const URL_EXPIRY_LEAD_MS = 10000;
|
|
14
24
|
/** Retry delay when onUrlExpiry runs but the URL is still tracked (renew failed / skipped). */
|
|
@@ -79,7 +89,7 @@ async function unregisterMismatchedScopeZipServiceWorkerIfNeeded(expectedWorkerU
|
|
|
79
89
|
const regScopePath = normalizeScopePath(reg.scope);
|
|
80
90
|
if (regScopePath !== wantScopePath) {
|
|
81
91
|
await reg.unregister();
|
|
82
|
-
console.log(`Unregistered zip service worker (scope ${reg.scope}); re-registering with ${expectedScopeUrl}`);
|
|
92
|
+
console.log(ZIP_PEEK_VERSION_FIELD, `Unregistered zip service worker (scope ${reg.scope}); re-registering with ${expectedScopeUrl}`);
|
|
83
93
|
}
|
|
84
94
|
}
|
|
85
95
|
}
|
|
@@ -97,16 +107,16 @@ async function ensureZipServiceWorkerRegistered({ workerUrl, scopeUrl, reloadOnF
|
|
|
97
107
|
if (!alreadyRegistered) {
|
|
98
108
|
try {
|
|
99
109
|
await navigator.serviceWorker.register(workerUrl, { scope: scopeUrl });
|
|
100
|
-
console.log("Zip service worker registered successfully");
|
|
110
|
+
console.log(ZIP_PEEK_VERSION_FIELD, "Zip service worker registered successfully");
|
|
101
111
|
}
|
|
102
112
|
catch (error) {
|
|
103
113
|
const context = describeRegistrationFailureContext();
|
|
104
|
-
console.error("zip-peek: service worker registration failed", context, error);
|
|
114
|
+
console.error(ZIP_PEEK_VERSION_FIELD, "zip-peek: service worker registration failed", context, error);
|
|
105
115
|
throw attachZipPeekInfo(error, `Service worker registration failed (${context})`);
|
|
106
116
|
}
|
|
107
117
|
}
|
|
108
118
|
else {
|
|
109
|
-
console.log("Zip service worker already registered; skipping register().");
|
|
119
|
+
console.log(ZIP_PEEK_VERSION_FIELD, "Zip service worker already registered; skipping register().");
|
|
110
120
|
}
|
|
111
121
|
await navigator.serviceWorker.ready;
|
|
112
122
|
if (reloadOnFirstInstall && !navigator.serviceWorker.controller) {
|
|
@@ -138,21 +148,26 @@ function describeRegistrationFailureContext() {
|
|
|
138
148
|
}
|
|
139
149
|
function attachZipPeekInfo(error, info) {
|
|
140
150
|
const err = (0, types_1.toZipPeekError)(error);
|
|
141
|
-
if (info)
|
|
142
|
-
err
|
|
143
|
-
|
|
151
|
+
if (!info)
|
|
152
|
+
return err;
|
|
153
|
+
const step = (0, types_1.formatZipPeekError)(info);
|
|
154
|
+
err.zipPeekInfo = err.zipPeekInfo ? `${step} ${err.zipPeekInfo}` : step;
|
|
144
155
|
return err;
|
|
145
156
|
}
|
|
146
157
|
function reportZipPeekError(onError, error, info) {
|
|
147
158
|
const err = (0, types_1.toZipPeekError)(error);
|
|
148
|
-
onError === null || onError === void 0 ? void 0 : onError(err, info !== null && info !== void 0 ? info : err.zipPeekInfo);
|
|
159
|
+
onError === null || onError === void 0 ? void 0 : onError(err, withPackageVersion(info !== null && info !== void 0 ? info : err.zipPeekInfo), err.zipPeekLevel);
|
|
149
160
|
}
|
|
150
161
|
function errorFromWorkerResponse(response) {
|
|
151
|
-
var _a;
|
|
162
|
+
var _a, _b;
|
|
152
163
|
const error = new Error((_a = response.error) !== null && _a !== void 0 ? _a : (0, types_1.formatZipPeekError)("Service worker did not acknowledge the message."));
|
|
153
164
|
if (response.errorStack) {
|
|
154
165
|
error.stack = response.errorStack;
|
|
155
166
|
}
|
|
167
|
+
if (response.info) {
|
|
168
|
+
error.zipPeekInfo = response.info;
|
|
169
|
+
}
|
|
170
|
+
error.zipPeekLevel = (_b = response.level) !== null && _b !== void 0 ? _b : "error";
|
|
156
171
|
return error;
|
|
157
172
|
}
|
|
158
173
|
function clearUrlExpiryTimer(normalizedZipUrl) {
|
|
@@ -312,7 +327,7 @@ function ensureClientMessageListener() {
|
|
|
312
327
|
}
|
|
313
328
|
clientMessageListenerInstalled = true;
|
|
314
329
|
navigator.serviceWorker.addEventListener("message", (event) => {
|
|
315
|
-
var _a, _b, _c;
|
|
330
|
+
var _a, _b, _c, _d;
|
|
316
331
|
const data = event.data;
|
|
317
332
|
if (!data) {
|
|
318
333
|
return;
|
|
@@ -364,7 +379,7 @@ function ensureClientMessageListener() {
|
|
|
364
379
|
if ((_c = data.error) === null || _c === void 0 ? void 0 : _c.stack) {
|
|
365
380
|
error.stack = data.error.stack;
|
|
366
381
|
}
|
|
367
|
-
currentOnError(error, data.info ? (0, types_1.formatZipPeekError)(data.info) : undefined);
|
|
382
|
+
currentOnError(error, withPackageVersion(data.info ? (0, types_1.formatZipPeekError)(data.info) : undefined), (_d = data.level) !== null && _d !== void 0 ? _d : "error");
|
|
368
383
|
});
|
|
369
384
|
}
|
|
370
385
|
function normalizeAllowedZipUrls(allowedZipUrls) {
|
|
@@ -372,22 +387,23 @@ function normalizeAllowedZipUrls(allowedZipUrls) {
|
|
|
372
387
|
return undefined;
|
|
373
388
|
}
|
|
374
389
|
if (allowedZipUrls.length === 0) {
|
|
375
|
-
throw (0, types_1.createZipPeekError)("allowedZipUrls must contain at least one ZIP URL when provided.");
|
|
390
|
+
throw (0, types_1.createZipPeekError)("allowedZipUrls must contain at least one ZIP URL when provided.", "error");
|
|
376
391
|
}
|
|
377
392
|
const normalized = new Set();
|
|
378
393
|
for (const zipUrl of allowedZipUrls) {
|
|
379
394
|
const resolvedZipUrl = new URL(zipUrl, window.location.href).href;
|
|
380
395
|
if (!(0, zip_utils_1.isZipPackage)(resolvedZipUrl)) {
|
|
381
|
-
throw (0, types_1.createZipPeekError)(`allowedZipUrls contains a non-ZIP URL: ${zipUrl}
|
|
396
|
+
throw (0, types_1.createZipPeekError)(`allowedZipUrls contains a non-ZIP URL: ${zipUrl}`, "error");
|
|
382
397
|
}
|
|
383
398
|
normalized.add((0, zip_utils_1.normalizeZipUrl)(resolvedZipUrl));
|
|
384
399
|
}
|
|
385
400
|
return Array.from(normalized);
|
|
386
401
|
}
|
|
387
|
-
function postWorkerMessage(message) {
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
402
|
+
async function postWorkerMessage(message) {
|
|
403
|
+
var _a;
|
|
404
|
+
const worker = (_a = navigator.serviceWorker.controller) !== null && _a !== void 0 ? _a : (await navigator.serviceWorker.ready).active;
|
|
405
|
+
if (!worker) {
|
|
406
|
+
throw (0, types_1.createZipPeekError)("No active service worker.", "error");
|
|
391
407
|
}
|
|
392
408
|
return new Promise((resolve, reject) => {
|
|
393
409
|
const channel = new MessageChannel();
|
|
@@ -403,9 +419,9 @@ function postWorkerMessage(message) {
|
|
|
403
419
|
};
|
|
404
420
|
channel.port1.onmessageerror = () => {
|
|
405
421
|
channel.port1.close();
|
|
406
|
-
reject((0, types_1.createZipPeekError)("Failed to deserialize the service worker response on MessageChannel."));
|
|
422
|
+
reject((0, types_1.createZipPeekError)("Failed to deserialize the service worker response on MessageChannel.", "error"));
|
|
407
423
|
};
|
|
408
|
-
|
|
424
|
+
worker.postMessage(message, [channel.port2]);
|
|
409
425
|
});
|
|
410
426
|
}
|
|
411
427
|
async function postWorkerMessageOrThrow(message, info) {
|
|
@@ -447,11 +463,11 @@ async function initZipPeek({ workerUrl, scopeUrl, reloadOnFirstInstall = true, c
|
|
|
447
463
|
try {
|
|
448
464
|
const normalizedAllowedZipUrls = normalizeAllowedZipUrls(allowedZipUrls);
|
|
449
465
|
if (cacheClearingStrategy === "keep-allowed-urls" && !normalizedAllowedZipUrls) {
|
|
450
|
-
throw (0, types_1.createZipPeekError)('cacheClearingStrategy "keep-allowed-urls" requires a non-empty allowedZipUrls allow-list.');
|
|
466
|
+
throw (0, types_1.createZipPeekError)('cacheClearingStrategy "keep-allowed-urls" requires a non-empty allowedZipUrls allow-list.', "error");
|
|
451
467
|
}
|
|
452
468
|
if (!("serviceWorker" in navigator)) {
|
|
453
469
|
// Usually happens in the built in Facebook/Messenger browser.
|
|
454
|
-
console.warn("zip-peek: Service Worker API not supported in this browser.");
|
|
470
|
+
console.warn(ZIP_PEEK_VERSION_FIELD, "zip-peek: Service Worker API not supported in this browser.");
|
|
455
471
|
alert("Browser not supported. Please try a different browser.");
|
|
456
472
|
return { reloaded: false, initialized: false };
|
|
457
473
|
}
|
|
@@ -539,7 +555,7 @@ async function renewPresignedUrl({ previousUrl, nextUrl }) {
|
|
|
539
555
|
if (!("serviceWorker" in navigator)) {
|
|
540
556
|
// Usually happens in the built in Facebook/Messenger browser.
|
|
541
557
|
alert("Browser not supported. Please try a different browser.");
|
|
542
|
-
throw (0, types_1.createZipPeekError)("Service Worker API not supported in this browser.");
|
|
558
|
+
throw (0, types_1.createZipPeekError)("Service Worker API not supported in this browser.", "error");
|
|
543
559
|
}
|
|
544
560
|
// Prefer the host-provided absolute strings as-is so SigV4 query encoding is
|
|
545
561
|
// preserved; only resolve relative URLs against the page location.
|
|
@@ -550,7 +566,7 @@ async function renewPresignedUrl({ previousUrl, nextUrl }) {
|
|
|
550
566
|
? nextUrl
|
|
551
567
|
: new URL(nextUrl, window.location.href).href;
|
|
552
568
|
if (!(0, zip_utils_1.isZipPackage)(resolvedPrevious) || !(0, zip_utils_1.isZipPackage)(resolvedNext)) {
|
|
553
|
-
throw (0, types_1.createZipPeekError)("renewPresignedUrl requires both previousUrl and nextUrl to be ZIP package URLs.");
|
|
569
|
+
throw (0, types_1.createZipPeekError)("renewPresignedUrl requires both previousUrl and nextUrl to be ZIP package URLs.", "error");
|
|
554
570
|
}
|
|
555
571
|
const previous = (0, zip_utils_1.normalizeZipUrl)(resolvedPrevious);
|
|
556
572
|
const next = (0, zip_utils_1.normalizeZipUrl)(resolvedNext);
|
package/dist/types.d.ts
CHANGED
|
@@ -9,7 +9,8 @@ export type ZipCacheClearingStrategy = "keep-all" | "keep-allowed-urls" | "clear
|
|
|
9
9
|
* client claims** (all tabs under the same service worker scope that have
|
|
10
10
|
* configured `allowedZipUrls`), not only the calling tab's list.
|
|
11
11
|
*/
|
|
12
|
-
export type
|
|
12
|
+
export type ZipPeekLogLevel = "error" | "warn";
|
|
13
|
+
export type ZipPeekErrorHandler = (error: Error, info: string | undefined, level: ZipPeekLogLevel) => void;
|
|
13
14
|
/**
|
|
14
15
|
* Invoked shortly before a tracked presigned ZIP URL expires.
|
|
15
16
|
*/
|
|
@@ -51,6 +52,9 @@ export type WorkerMessageResponse = {
|
|
|
51
52
|
ok: boolean;
|
|
52
53
|
error?: string;
|
|
53
54
|
errorStack?: string;
|
|
55
|
+
/** `key=value` diagnostics (`phase`, `zipPath`, `online`, `reason`, `status`, `cause`). */
|
|
56
|
+
info?: string;
|
|
57
|
+
level?: ZipPeekLogLevel;
|
|
54
58
|
};
|
|
55
59
|
export declare const ZIP_PEEK_ERROR_PREFIX = "[zip-peek-error]";
|
|
56
60
|
export declare const NETWORK_ERROR_PREFIX = "[NetworkError]";
|
|
@@ -59,8 +63,13 @@ export declare function formatZipPeekError(message: string): string;
|
|
|
59
63
|
export declare function zipErrorInfo(fields: Record<string, string | number | boolean | null | undefined>): string;
|
|
60
64
|
export type ZipPeekError = Error & {
|
|
61
65
|
zipPeekInfo?: string;
|
|
66
|
+
/** HTTP status to return for this failure. Unset means the fetch-handler default (500). */
|
|
67
|
+
httpStatus?: number;
|
|
68
|
+
/** Origin status when the response status was remapped (for example 200 → 502). */
|
|
69
|
+
upstreamStatus?: number;
|
|
70
|
+
zipPeekLevel: ZipPeekLogLevel;
|
|
62
71
|
};
|
|
63
|
-
export declare function createZipPeekError(message: string, info?: string):
|
|
72
|
+
export declare function createZipPeekError(message: string, level: ZipPeekLogLevel, info?: string): ZipPeekError;
|
|
64
73
|
export declare function toZipPeekError(error: unknown): ZipPeekError;
|
|
65
74
|
export declare function zipPeekErrorInfo(error: unknown): string | undefined;
|
|
66
75
|
export declare function errorMessage(error: unknown): string;
|
package/dist/types.js
CHANGED
|
@@ -26,8 +26,9 @@ function zipErrorInfo(fields) {
|
|
|
26
26
|
.map(([key, value]) => `${key}=${String(value)}`)
|
|
27
27
|
.join(" ");
|
|
28
28
|
}
|
|
29
|
-
function createZipPeekError(message, info) {
|
|
29
|
+
function createZipPeekError(message, level, info) {
|
|
30
30
|
const err = new Error(formatZipPeekError(message));
|
|
31
|
+
err.zipPeekLevel = level;
|
|
31
32
|
if (info) {
|
|
32
33
|
err.zipPeekInfo = info;
|
|
33
34
|
}
|
|
@@ -38,6 +39,9 @@ function toZipPeekError(error) {
|
|
|
38
39
|
if (!err.message.startsWith(exports.ZIP_PEEK_ERROR_PREFIX)) {
|
|
39
40
|
err.message = formatZipPeekError(err.message);
|
|
40
41
|
}
|
|
42
|
+
if (!err.zipPeekLevel) {
|
|
43
|
+
err.zipPeekLevel = "error";
|
|
44
|
+
}
|
|
41
45
|
return err;
|
|
42
46
|
}
|
|
43
47
|
function zipPeekErrorInfo(error) {
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ZIP_PEEK_VERSION = void 0;
|
|
4
|
+
/** Package version. The page reads the installed package; the worker build inlines this number. */
|
|
5
|
+
exports.ZIP_PEEK_VERSION = require("../package.json").version;
|
package/dist/zipServiceWorker.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(()=>{"use strict";var e={553(e,t){function n(e){const n=e.trim();return n.startsWith(t.ZIP_PEEK_ERROR_PREFIX)?n:`${t.ZIP_PEEK_ERROR_PREFIX} ${n}`}t.NETWORK_ERROR_PREFIX=t.ZIP_PEEK_ERROR_PREFIX=void 0,t.formatZipPeekError=n,t.zipErrorInfo=function(e){return Object.entries(e).filter(e=>{const t=e[1];return null!=t&&""!==t}).map(([e,t])=>`${e}=${String(t)}`).join(" ")},t.createZipPeekError=function(e,t){const r=new Error(n(e));return t&&(r.zipPeekInfo=t),r},t.toZipPeekError=function(e){const r=e instanceof Error?e:new Error(String(e));return r.message.startsWith(t.ZIP_PEEK_ERROR_PREFIX)||(r.message=n(r.message)),r},t.zipPeekErrorInfo=function(e){if(e&&"object"==typeof e&&"zipPeekInfo"in e){return e.zipPeekInfo||void 0}},t.errorMessage=function(e){return e instanceof Error?e.message:String(e)},t.ZIP_PEEK_ERROR_PREFIX="[zip-peek-error]",t.NETWORK_ERROR_PREFIX="[NetworkError]"},314(e,t,n){t.clearAllClientClaims=void 0,t.persistAllowListState=a,t.ensureAllowedZipUrlsLoaded=async function(){if(i.allowedZipUrlsLoaded)return i.allowedZipUrlsLoaded;const e=(async()=>{try{const e=await caches.open(i.CONFIG_CACHE_NAME),t=await e.match(i.CONFIG_CACHE_KEY);if(!t)return;const n=await t.json();if(Array.isArray(n.allowedZipUrls)){const e=new Set(n.allowedZipUrls.filter(e=>"string"==typeof e).map(e=>(0,r.normalizeZipUrl)(e)));(0,i.setAllowListRestricted)(!1!==n.restricted),(0,i.setPersistedAllowUnion)(e)}else(0,i.setAllowListRestricted)(!1),(0,i.setPersistedAllowUnion)(null)}catch(e){(0,s.warn)("failed to load runtime config",e)}})();return(0,i.setAllowedZipUrlsLoaded)(e),e},t.clearZipAssetsExceptLiveClaims=async function(e){if(await l(),!i.allowListRestricted)return;if(await async function(){const e=await self.clients.matchAll({type:"window",includeUncontrolled:!0});await Promise.all(e.map(e=>async function(e){await new Promise(t=>{const n=new MessageChannel,a=setTimeout(()=>{n.port1.onmessage=null,n.port1.close(),t()},400);n.port1.onmessage=s=>{clearTimeout(a);const o=s.data;o&&"allowedZipUrls"in o&&(Array.isArray(o.allowedZipUrls)?(0,i.setClientAllowedZipUrls)(e.id,o.allowedZipUrls.map(e=>(0,r.normalizeZipUrl)(e))):null===o.allowedZipUrls&&i.clientAllowedZipUrls.delete(e.id)),n.port1.onmessage=null,n.port1.close(),t()};try{e.postMessage({type:"ZIP_SW_CLAIM_REQUEST"},[n.port2])}catch(e){clearTimeout(a),n.port1.close(),(0,s.warn)("failed to post ZIP_SW_CLAIM_REQUEST",e),t()}})}(e))),i.clientAllowedZipUrls.size>0?((0,i.setAllowListRestricted)(!0),await a()):e.length>0&&((0,i.setAllowListRestricted)(!1),(0,i.setPersistedAllowUnion)(null),await o(null,!1))}(),await l(),!i.allowListRestricted)return;const t=(0,i.getClaimsUnion)();await e(Array.from(t)),await a()},t.applyRuntimeConfig=async function(e,t){if(!e)return;let n=Object.assign({},i.runtimeConfig),s=!1;if("string"==typeof e.zipAssetCacheName&&e.zipAssetCacheName.trim()&&(n.zipAssetCacheName=e.zipAssetCacheName,s=!0),"number"==typeof e.assetCacheTtlMs&&Number.isFinite(e.assetCacheTtlMs)&&(n.assetCacheTtlMs=e.assetCacheTtlMs,s=!0),"string"==typeof e.logPrefix&&e.logPrefix.trim()&&(n.logPrefix=e.logPrefix,s=!0),"boolean"==typeof e.requireExactManifestPath&&(n.requireExactManifestPath=e.requireExactManifestPath,s=!0),s&&(0,i.setRuntimeConfig)(n),"allowedZipUrls"in e){const n=Array.isArray(e.allowedZipUrls)?e.allowedZipUrls.map(e=>(0,r.normalizeZipUrl)(e)):null;if(!t)return null===n?((0,i.clearAllClientClaims)(),(0,i.setAllowedZipUrlsLoaded)(Promise.resolve()),void await o(null,!1)):((0,i.setAllowListRestricted)(!0),(0,i.setPersistedAllowUnion)(new Set(n)),(0,i.setAllowedZipUrlsLoaded)(Promise.resolve()),void await o(n,!0));if(null===n){if(i.clientAllowedZipUrls.delete(t),await l(),0===i.clientAllowedZipUrls.size)return(0,i.setAllowListRestricted)(!1),(0,i.setPersistedAllowUnion)(null),(0,i.setAllowedZipUrlsLoaded)(Promise.resolve()),void await o(null,!1)}else(0,i.setClientAllowedZipUrls)(t,n);await l(),(0,i.setAllowedZipUrlsLoaded)(Promise.resolve()),await a()}},t.renewAllowedZipUrlClaims=function(e,t){let n=!1;for(const r of i.clientAllowedZipUrls.values())r.has(e)&&(r.delete(e),r.add(t),n=!0);if(!n)for(const e of i.clientAllowedZipUrls.values())e.add(t);const r=new Set(null!==i.persistedAllowUnion&&void 0!==i.persistedAllowUnion?i.persistedAllowUnion:[]);r.delete(e),r.add(t),(0,i.setPersistedAllowUnion)(r)},t.isZipUrlAllowed=function(e){const t=(0,i.getAllowedZipUrlsUnion)();return null===t||t.has(e)};const r=n(343),i=n(262);Object.defineProperty(t,"clearAllClientClaims",{enumerable:!0,get:function(){return i.clearAllClientClaims}});const s=n(266);async function a(){if(!i.allowListRestricted)return(0,i.setPersistedAllowUnion)(null),void await o(null,!1);const e=(0,i.getClaimsUnion)(),t=e.size>0?Array.from(e):Array.from(null!==i.persistedAllowUnion&&void 0!==i.persistedAllowUnion?i.persistedAllowUnion:[]);(0,i.setPersistedAllowUnion)(new Set(t)),await o(t,!0)}async function o(e,t=null!==e){try{const n=await caches.open(i.CONFIG_CACHE_NAME);await n.put(new Request(i.CONFIG_CACHE_KEY),new Response(JSON.stringify({allowedZipUrls:e,restricted:t}),{headers:{"Content-Type":"application/json"}}))}catch(e){(0,s.warn)("failed to persist runtime config",e)}}async function l(){const e=await self.clients.matchAll({type:"window",includeUncontrolled:!0}),t=new Set(e.map(e=>e.id));for(const e of[...i.clientAllowedZipUrls.keys()])t.has(e)||i.clientAllowedZipUrls.delete(e);0===i.clientAllowedZipUrls.size&&i.allowListRestricted?((0,i.setPersistedAllowUnion)(null),await o([],!0)):i.clientAllowedZipUrls.size>0&&await a()}},800(e,t,n){t.canonicalAssetRequest=function(e,t){return new Request((0,i.canonicalZipAssetRequestUrl)(e,t),{method:"GET"})},t.clearAllZipAssets=async function(){const e=await caches.open(o.runtimeConfig.zipAssetCacheName),t=await e.keys();await Promise.all(t.map(t=>e.delete(t))),await caches.delete(o.CONFIG_CACHE_NAME),o.zipManifests.clear(),o.pendingManifestLoads.clear(),o.inFlightZipAssets.clear(),(0,s.clearAllClientClaims)(),(0,o.setAllowedZipUrlsLoaded)(Promise.resolve())},t.clearZipAssetsExceptAllowed=async function(e){try{const t=new Set(e),n=await caches.open(o.runtimeConfig.zipAssetCacheName),r=await n.keys();for(const e of r){const r=e.url,s=(0,i.parseZipAssetRequest)(r);s&&!t.has(s.zipUrl)&&await n.delete(e)}for(const e of o.zipManifests.keys())t.has(e)||o.zipManifests.delete(e)}catch(e){throw(0,r.createZipPeekError)(`Failed to clear zip assets except allowed URLs: ${(0,r.errorMessage)(e)}`)}},t.putCachedFullAssetIfAbsent=async function(e,t){var n;try{const r=await caches.open(o.runtimeConfig.zipAssetCacheName),i=await r.match(e);if(i&&!c(i))return void await(null===(n=t.body)||void 0===n?void 0:n.cancel());const s=new Headers(t.headers);s.set(o.ASSET_CACHED_AT_HEADER,String(Date.now())),s.set("Access-Control-Allow-Origin","*"),await r.put(e,new Response(t.body,{status:t.status,statusText:t.statusText,headers:s}))}catch(e){t.body&&!t.body.locked&&await t.body.cancel(e),(0,l.warn)("asset cache put failed",e)}},t.readCachedZipAssetIfFresh=async function(e){let t=null,n="network";try{const r=await caches.open(o.runtimeConfig.zipAssetCacheName),i=await r.match(e);if(i)if(c(i))try{await r.delete(e)}catch(e){(0,l.warn)("asset cache delete expired failed",e)}else t=i,n="cache-api"}catch(e){(0,l.warn)("asset cache read failed",e)}return{response:t,assetSource:n}},t.renewZipUrl=async function(e,t){const n=(0,i.normalizeZipUrl)(e),l=(0,i.normalizeZipUrl)(t);if(n===l)return;await(0,s.ensureAllowedZipUrlsLoaded)(),o.allowListRestricted&&((0,s.renewAllowedZipUrlClaims)(n,l),(0,o.setAllowedZipUrlsLoaded)(Promise.resolve()),await(0,s.persistAllowListState)());const c=o.zipManifests.get(n);c&&(o.zipManifests.set(l,c),o.zipManifests.delete(n));const p=o.pendingManifestLoads.get(n);p&&(o.pendingManifestLoads.set(l,p),o.pendingManifestLoads.delete(n)),(0,a.remapInFlightZipAssetsForRenewal)(n,l);try{const e=await caches.open(o.runtimeConfig.zipAssetCacheName),t=await e.keys();for(const r of t){const t=r.url,s=(0,i.parseZipAssetRequest)(t);s&&(0,i.normalizeZipUrl)(s.zipUrl)===n&&await e.delete(r)}}catch(e){throw(0,r.createZipPeekError)(`Failed to clear cached assets for renewed ZIP URL: ${(0,r.errorMessage)(e)}`)}};const r=n(553),i=n(343),s=n(314),a=n(30),o=n(262),l=n(266);function c(e){const t=e.headers.get(o.ASSET_CACHED_AT_HEADER);if(!t)return!0;const n=parseInt(t,10);return!Number.isFinite(n)||Date.now()-n>o.runtimeConfig.assetCacheTtlMs}},30(e,t,n){t.getOrStartInFlightAsset=function(e,t){const n=e.url,r=i.inFlightZipAssets.get(n);if(r)return r;let a,o;const l=new Promise((e,t)=>{a=e,o=t}),c={resultPromise:t(),cacheFillPromise:l,leaderClaimed:!1,resolveCacheFill:a,rejectCacheFill:o};return l.finally(()=>{!function(e){for(const[t,n]of i.inFlightZipAssets)n===e&&i.inFlightZipAssets.delete(t)}(c)}).catch(()=>{}),c.resultPromise.then(e=>{e.ok||s(c)},e=>{s(c,e)}),i.inFlightZipAssets.set(n,c),c},t.completeInFlightAssetLoad=function(e,t){const n=i.inFlightZipAssets.get(e);n&&s(n,t)},t.remapInFlightZipAssetsForRenewal=function(e,t){const n=(0,r.normalizeZipUrl)(e),s=(0,r.normalizeZipUrl)(t);for(const[e,t]of[...i.inFlightZipAssets]){const a=(0,r.parseZipAssetRequest)(e);if(a&&(0,r.normalizeZipUrl)(a.zipUrl)===n){const n=(0,r.canonicalZipAssetRequestUrl)(s,a.internalPath);i.inFlightZipAssets.delete(e),i.inFlightZipAssets.set(n,t)}}};const r=n(343),i=n(262);function s(e,t){void 0!==t?e.rejectCacheFill(t):e.resolveCacheFill()}},982(e,t,n){t.installFetchHandler=function(){self.addEventListener("fetch",e=>{const t=e.request.method;if("GET"!==t&&"HEAD"!==t)return;if(!(0,i.parseZipAssetRequest)(e.request.url))return;const n=async function(e,t){var n;const h="HEAD"===e.method,m=(0,i.parseZipAssetRequest)(e.url);let E=(0,i.normalizeZipUrl)(m.zipUrl);const A=m.internalPath,y=(0,i.normalizeZipEntryPath)(A);let U;try{let m;if(await(0,s.ensureAllowedZipUrlsLoaded)(),E=(0,u.resolveAllowedZipUrlByPathname)(E),!(0,s.isZipUrlAllowed)(E)&&(0,i.isPresignedUrlExpired)(E)){const e=await(0,u.requestClientRenewal)(E,t);e.ok?E=e.nextUrl:m=e.reason}if(!(0,s.isZipUrlAllowed)(E))return(0,c.warn)("zip URL not allowed",{requestedZipUrl:E}),d("ZIP URL not allowed",403,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(E),reason:m}));let P=l.zipManifests.get(E);if(P&&!h){const t=(0,p.resolveManifestEntry)(P,y,E,l.runtimeConfig.requireExactManifestPath);if(t){const n=(0,a.canonicalAssetRequest)(E,t.key),r=await(0,a.readCachedZipAssetIfFresh)(n);if(r.response){const n=(0,p.entryUncompressedSize)(t.info);return{response:w(r.response.body,(0,f.getMimeType)(t.key),n,r.assetSource,e.headers.get("range"))}}}}if((0,i.isPresignedUrlExpired)(E)&&(!h||!P)){const e=await(0,u.requestClientRenewal)(E,t);if(!e.ok)return d("Failed to renew expired presigned ZIP URL",502,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(E),reason:e.reason}));E=e.nextUrl,P=l.zipManifests.get(E)}if(P||(P=null!==(n=await(0,p.ensureManifestAvailable)(E,t))&&void 0!==n?n:void 0),!P){const e=Array.from(l.zipManifests.keys());return(0,c.warn)("manifest missing for zipUrl",{requestedZipUrl:E,knownZipUrls:e}),d("ZIP manifest not loaded",404,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(E)}))}const R=(0,p.resolveManifestEntry)(P,y,E,l.runtimeConfig.requireExactManifestPath);if(!R){const e=Array.from(P.keys()).slice(0,50);return(0,c.warn)("file not in manifest",{zipUrl:E,internalPathRaw:A,internalPathNormalized:y,requireExactManifestPath:l.runtimeConfig.requireExactManifestPath,manifestSize:P.size,sampleKeys:e}),d("File not found in ZIP manifest",404,(0,r.zipErrorInfo)({path:y,zipPath:(0,i.zipPackagePathname)(E)}))}const{key:Z,info:z,matchKind:C}=R;if("zipBasenameFallback"===C&&((0,c.log)("resolved via zip-basename folder fallback",{requested:y,manifestKey:Z}),(0,c.reportClientError)(new Error((0,r.formatZipPeekError)("Exact manifest path not found; resolved via zip-basename folder fallback")),`Exact manifest key "${y}" not found in ${E}; resolved using "${Z}"`)),h)return{response:g(e,Z,z)};const v=(0,a.canonicalAssetRequest)(E,Z),S=await(0,a.readCachedZipAssetIfFresh)(v),_=(0,p.entryUncompressedSize)(z),b=(0,f.getMimeType)(Z);if(S.response)return{response:w(S.response.body,b,_,S.assetSource,e.headers.get("range"))};const I=(0,o.getOrStartInFlightAsset)(v,()=>(0,f.fetchUncompressedZipEntryFromNetwork)(E,Z,z));U=v.url;const M=await I.resultPromise;if(!M.ok)return(0,o.completeInFlightAssetLoad)(v.url),{response:M.response};const k=!I.leaderClaimed&&(I.leaderClaimed=!0),L=8===z.compression?null:e.headers.get("range");if(!k){await I.cacheFillPromise;const t=await(0,a.readCachedZipAssetIfFresh)(v);return t.response?{response:w(t.response.body,b,_,t.assetSource,e.headers.get("range"))}:d("Asset cache was not ready after in-flight load",500,(0,r.zipErrorInfo)({path:Z,zipPath:(0,i.zipPackagePathname)(E)}))}const[T,F]=M.stream.tee(),x={"Content-Type":M.contentType};null!==M.contentLength&&(x["Content-Length"]=String(M.contentLength));const O=v.url,N=(0,a.putCachedFullAssetIfAbsent)(v,new Response(F,{status:200,headers:x})).then(()=>{(0,o.completeInFlightAssetLoad)(O)}).catch(e=>{throw(0,o.completeInFlightAssetLoad)(O,e),e});return{response:w(T,M.contentType,M.contentLength,"network",L),background:N}}catch(e){U&&(0,o.completeInFlightAssetLoad)(U,e),(0,c.error)("fetch handler failed",{zipUrl:E,internalPath:A,message:(0,r.errorMessage)(e)});const t=(0,r.errorMessage)(e),n=t.includes(r.NETWORK_ERROR_PREFIX)?t.startsWith(r.ZIP_PEEK_ERROR_PREFIX)?t.slice(r.ZIP_PEEK_ERROR_PREFIX.length).trim():t:"ZIP asset request failed",s=(0,r.zipPeekErrorInfo)(e);return d(n,500,[(0,r.zipErrorInfo)({path:A,zipPath:(0,i.zipPackagePathname)(E),cause:s?void 0:(0,r.errorMessage)(e)}),s].filter(Boolean).join(" "))}}(e.request,e.clientId||void 0);e.respondWith(n.then(({response:e})=>e)),e.waitUntil(n.then(({background:e})=>e).catch(e=>{(0,c.warn)("background asset cache failed",(0,r.errorMessage)(e))}))})};const r=n(553),i=n(343),s=n(314),a=n(800),o=n(30),l=n(262),c=n(266),p=n(346),u=n(933),f=n(254);function d(e,t,n,i){return(0,c.reportClientError)((0,r.createZipPeekError)(e),n),{response:(0,f.corsErrorResponse)(e,t,i)}}function h(e){return{"Access-Control-Allow-Origin":"*","Access-Control-Expose-Headers":l.ASSET_SOURCE_HEADER,[l.ASSET_SOURCE_HEADER]:e}}function w(e,t,n,r,i){if(i){if(null===n)return null==e||e.cancel(),new Response(null,{status:416,headers:h(r)});const s=i.replace(/^bytes=/,"");if(s.includes(","))return null==e||e.cancel(),new Response(null,{status:416,headers:Object.assign({"Content-Range":`bytes */${n}`},h(r))});const[a,o]=s.split("-"),l=""!==a?parseInt(a,10):NaN,c=""!==o?parseInt(o,10):n-1;if(isNaN(l)||isNaN(c)||l<0||c<l||l>=n)return null==e||e.cancel(),new Response(null,{status:416,headers:Object.assign({"Content-Range":`bytes */${n}`},h(r))});const p=Math.min(c,n-1),u=p-l+1,f=null===e?null:function(e,t,n){const r=e.getReader();let i=0,s=!1;return new ReadableStream({async pull(e){for(;!s;){const{done:a,value:o}=await r.read();if(a)return s=!0,void e.close();const l=o,c=i,p=i+l.byteLength-1;if(i+=l.byteLength,p<t)continue;if(c>n)return s=!0,void e.close();const u=Math.max(0,t-c),f=Math.min(l.byteLength,n-c+1);if(f>u&&e.enqueue(l.subarray(u,f)),p>=n)return s=!0,void e.close()}},cancel:e=>r.cancel(e)})}(e,l,p);return new Response(f,{status:206,headers:Object.assign({"Content-Type":t,"Content-Range":`bytes ${l}-${p}/${n}`,"Content-Length":u.toString(),"Accept-Ranges":"bytes"},h(r))})}const s=Object.assign({"Content-Type":t},h(r));return null!==n&&(s["Content-Length"]=n.toString(),s["Accept-Ranges"]="bytes"),new Response(e,{status:200,headers:s})}function g(e,t,n){const r=(0,f.getMimeType)(t),i=(0,p.entryUncompressedSize)(n),s=e.headers.get("range");if(null!==i&&s)return w(null,r,i,"manifest",s);const a=Object.assign({"Content-Type":r},h("manifest"));return null!==i&&(a["Content-Length"]=i.toString(),a["Accept-Ranges"]="bytes"),new Response(null,{status:200,headers:a})}},262(e,t){function n(){const e=new Set;for(const n of t.clientAllowedZipUrls.values())for(const t of n)e.add(t);return e}t.CONFIG_CACHE_KEY=t.allowedZipUrlsLoaded=t.persistedAllowUnion=t.allowListRestricted=t.clientAllowedZipUrls=t.runtimeConfig=t.inFlightZipAssets=t.pendingManifestLoads=t.zipManifests=t.LOCAL_FILE_HEADER_SIG=t.MIME_TYPES=t.ASSET_UPSTREAM_STATUS_HEADER=t.ASSET_ERROR_HEADER=t.ASSET_SOURCE_HEADER=t.ASSET_CACHED_AT_HEADER=t.CONFIG_CACHE_NAME=t.kF=t.o2=void 0,t.setRuntimeConfig=function(e){t.runtimeConfig=e},t.setAllowListRestricted=function(e){t.allowListRestricted=e},t.setPersistedAllowUnion=function(e){t.persistedAllowUnion=e},t.setAllowedZipUrlsLoaded=function(e){t.allowedZipUrlsLoaded=e},t.getClaimsUnion=n,t.getAllowedZipUrlsUnion=function(){return t.allowListRestricted?t.clientAllowedZipUrls.size>0?n():null!==t.persistedAllowUnion&&void 0!==t.persistedAllowUnion?t.persistedAllowUnion:new Set:null},t.setClientAllowedZipUrls=function(e,n){if(null===n)return void t.clientAllowedZipUrls.delete(e);t.allowListRestricted=!0;const r=t.clientAllowedZipUrls.get(e);if(r)for(const e of n)r.add(e);else t.clientAllowedZipUrls.set(e,new Set(n))},t.clearAllClientClaims=function(){t.clientAllowedZipUrls.clear(),t.allowListRestricted=!1,t.persistedAllowUnion=null},t.o2="zip-cache-v1",t.kF=72e5,t.CONFIG_CACHE_NAME="zip-peek-config-v1",t.o2,t.CONFIG_CACHE_NAME,t.ASSET_CACHED_AT_HEADER="X-ZipSW-Cached-At",t.ASSET_SOURCE_HEADER="X-ZipSW-Asset-Source",t.ASSET_ERROR_HEADER="X-ZipSW-Error",t.ASSET_UPSTREAM_STATUS_HEADER="X-ZipSW-Upstream-Status",t.MIME_TYPES={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",json:"application/json",js:"application/javascript",css:"text/css; charset=utf-8",html:"text/html; charset=utf-8",txt:"text/plain; charset=utf-8",mp4:"video/mp4",webm:"video/webm",mp3:"audio/mpeg",wav:"audio/wav",oga:"audio/ogg",ogg:"audio/ogg",xml:"application/xml",wasm:"application/wasm"},t.LOCAL_FILE_HEADER_SIG=67324752,t.zipManifests=new Map,t.pendingManifestLoads=new Map,t.inFlightZipAssets=new Map,t.runtimeConfig={zipAssetCacheName:t.o2,assetCacheTtlMs:t.kF,logPrefix:"[zipSW]",requireExactManifestPath:!1},t.clientAllowedZipUrls=new Map,t.allowListRestricted=!1,t.persistedAllowUnion=null,t.allowedZipUrlsLoaded=null,t.CONFIG_CACHE_KEY=new URL("__zip_peek_runtime_config__",self.registration.scope).href},266(e,t,n){t.log=function(...e){console.log(i.runtimeConfig.logPrefix,...e)},t.warn=function(...e){console.warn(i.runtimeConfig.logPrefix,...e)},t.error=function(...e){console.error(i.runtimeConfig.logPrefix,r.ZIP_PEEK_ERROR_PREFIX,...e)},t.reportClientError=s,t.installClientErrorReporting=function(){self.addEventListener("error",e=>{var t;s(null!==(t=e.error)&&void 0!==t?t:e.message,"Service worker uncaught error")}),self.addEventListener("unhandledrejection",e=>{s(e.reason,"Service worker unhandled promise rejection")})};const r=n(553),i=n(262);function s(e,t){const n=(0,r.toZipPeekError)(e);self.clients.matchAll({type:"window",includeUncontrolled:!0}).then(e=>{const i={type:"ZIP_SW_ERROR",error:{message:n.message,stack:n.stack},info:t?(0,r.formatZipPeekError)(t):void 0};for(const t of e)t.postMessage(i)})}},346(e,t,n){t.manifestFilesToMap=o,t.sendManifestToClientId=c,t.ensureManifestAvailable=function(e,t){const n=s.zipManifests.get(e);if(n)return Promise.resolve(n);let p=s.pendingManifestLoads.get(e);return p||(p=(async()=>{const n=await async function(e,t){const n=await l(t);return n?function(e,t){return new Promise(n=>{const r=new MessageChannel,i=setTimeout(()=>{r.port1.close(),n(null)},500);r.port1.onmessage=e=>{clearTimeout(i),r.port1.close();const t=e.data;(null==t?void 0:t.ok)&&Array.isArray(t.files)?n(o(t.files)):n(null)},r.port1.onmessageerror=()=>{clearTimeout(i),r.port1.close(),n(null)};try{e.postMessage({type:"ZIP_SW_MANIFEST_REQUEST",zipUrl:t},[r.port2])}catch(e){clearTimeout(i),r.port1.close(),(0,a.warn)("failed to request manifest from client",e),n(null)}})}(n,e):null}(e,t);if(n)return s.zipManifests.set(e,n),(0,a.log)("restored manifest from client memory",{zipUrl:e,entryCount:n.size}),n;const p=await async function(e){let t;try{t=await fetch(e,{headers:{Range:"bytes=-65536"}})}catch(t){throw(0,r.createZipPeekError)(`${r.NETWORK_ERROR_PREFIX} ZIP manifest fetch failed`,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(e),cause:(0,r.errorMessage)(t)}))}if(206!==t.status)return(0,a.error)("range requests not supported for ZIP manifest",{zipUrl:e,status:t.status}),null;const n=await t.arrayBuffer(),s=new DataView(n);let o=-1;for(let e=n.byteLength-22;e>=0;e--)if(101010256===s.getUint32(e,!0)){o=e;break}if(-1===o)return(0,a.error)("EOCD not found in last 64KB of ZIP file",e),null;const l=s.getUint32(o+16,!0),c=s.getUint32(o+12,!0);let p=n,u=-1;const f=t.headers.get("Content-Range");let d=0;if(f){const e=f.match(/\/(\d+)$/);e&&(d=parseInt(e[1],10))}if(d<=0)return(0,a.error)("could not determine ZIP file size from Content-Range header",{zipUrl:e,contentRange:f}),null;const h=d-n.byteLength;if(l>=h)u=l-h;else{let t;try{t=await fetch(e,{headers:{Range:`bytes=${l}-${l+c-1}`}})}catch(t){throw(0,r.createZipPeekError)(`${r.NETWORK_ERROR_PREFIX} ZIP manifest fetch failed`,(0,r.zipErrorInfo)({zipPath:(0,i.zipPackagePathname)(e),cause:(0,r.errorMessage)(t)}))}if(206!==t.status)return(0,a.error)("failed to fetch ZIP central directory",{zipUrl:e,status:t.status,cdOffset:l,cdSize:c}),null;p=await t.arrayBuffer(),u=0}return function(e,t,n,r){const s=new DataView(e);let o=t;const l=[];for(;o+46<=e.byteLength&&33639248===s.getUint32(o,!0);){const t=s.getUint16(o+10,!0),n=s.getUint32(o+20,!0),r=s.getUint32(o+24,!0),a=s.getUint16(o+28,!0),c=s.getUint16(o+30,!0),p=s.getUint16(o+32,!0),u=s.getUint32(o+42,!0),f=new TextDecoder;if(o+46+a>e.byteLength)break;const d=new Uint8Array(e,o+46,a),h=f.decode(d),w=(0,i.normalizeZipEntryPath)(h);""!==w&&l.push({filename:w,offset:u,compressedSize:n,uncompressedSize:r,compression:t}),o+=46+a+c+p}if(0===l.length)return(0,a.error)("no files parsed from central directory",r),null;l.sort((e,t)=>e.offset-t.offset);const c=new Map;for(let e=0;e<l.length;e++){const t=l[e],r=(0,i.normalizeZipEntryPath)(t.filename);""!==r&&(c.has(r)&&(0,a.warn)("duplicate manifest key after normalize; overwriting",r),c.set(r,{filename:t.filename,offset:t.offset,compressedSize:t.compressedSize,uncompressedSize:t.uncompressedSize,compression:t.compression,nextOffset:e<l.length-1?l[e+1].offset:n}))}return c.size>0?c:null}(p,u,l,e)}(e);return p&&(s.zipManifests.set(e,p),await c(e,p,t),(0,a.log)("manifest fetched and stored in memory",{zipUrl:e,entryCount:p.size})),p})().finally(()=>{s.pendingManifestLoads.delete(e)}),s.pendingManifestLoads.set(e,p),p)},t.entryUncompressedSize=function(e){return void 0!==e.uncompressedSize?e.uncompressedSize:0===e.compression?e.compressedSize:null},t.resolveManifestEntry=function(e,t,n,r){if(e.has(t))return{key:t,info:e.get(t),matchKind:"exact"};if(r)return null;const s=(0,i.zipBasenameWithoutExtension)(n);if(!s)return null;const a=`${s}/${t}`;return e.has(a)?{key:a,info:e.get(a),matchKind:"zipBasenameFallback"}:null};const r=n(553),i=n(343),s=n(262),a=n(266);function o(e){const t=new Map;for(const n of e){const e=(0,i.normalizeZipEntryPath)(n.filename);""!==e&&(t.has(e)&&(0,a.warn)("duplicate manifest key after normalize; overwriting",e),t.set(e,n))}return t.size>0?t:null}async function l(e){if(!e)return null;const t=await self.clients.get(e);return"window"===(null==t?void 0:t.type)?t:null}async function c(e,t,n){const r=await l(n);if(!r)return;const i=Array.from(t.values());try{r.postMessage({type:"ZIP_SW_MANIFEST_CREATED",zipUrl:e,files:i})}catch(e){(0,a.warn)("failed to send manifest to client",e)}}},993(e,t,n){t.installMessageHandler=function(){self.addEventListener("message",e=>{if(!e.data)return;const{type:t,zipUrl:n,files:f,config:d,allowedZipUrls:h,previousUrl:w,nextUrl:g}=e.data,m=function(e){if(!e||!("id"in e))return;const t=e.id;return"string"==typeof t?t:void 0}(e.source);if("ZIP_SW_CONFIG"===t){const t=(0,s.applyRuntimeConfig)(d,m).then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));return void e.waitUntil(t)}if("ZIP_MANIFEST"===t){if(n&&f){const t=(0,i.normalizeZipUrl)(n),r=(0,c.manifestFilesToMap)(f),s=o.zipManifests.get(t);if(!r)return void(0,l.warn)("rejecting empty manifest; keeping existing",{zipUrl:t,existingSize:s?s.size:0});if(s&&s.size>r.size)return void(0,l.warn)("rejecting smaller manifest; keeping existing",{zipUrl:t,incomingSize:r.size,existingSize:s.size});o.zipManifests.set(t,r),e.waitUntil((0,c.sendManifestToClientId)(t,r,m));const a=Array.from(r.keys()).slice(0,40);(0,l.log)("ZIP_MANIFEST loaded",{zipUrl:t,entryCount:r.size,sampleKeys:a,replacedExistingSize:s?s.size:0})}}else if("CLEAR_ZIP_ASSETS_EXCEPT_ALLOWED"===t){const t=(0,s.clearZipAssetsExceptLiveClaims)(a.clearZipAssetsExceptAllowed).then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));e.waitUntil(t)}else if("CLEAR_ALL_ZIP_ASSETS"===t){const t=(0,a.clearAllZipAssets)().then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));e.waitUntil(t)}else if("PRELOAD_ZIP_MANIFESTS"===t&&h){const t=async function(e,t){const n=await Promise.all(e.map(async e=>({zipUrl:e,manifest:await(0,c.ensureManifestAvailable)(e,t)}))),i=n.filter(e=>!e.manifest).map(e=>e.zipUrl);if(i.length>0)throw(0,r.createZipPeekError)(`Failed to preload ZIP manifest(s): ${i.join(", ")}`)}(h,m).then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));e.waitUntil(t)}else if("RENEW_ZIP_URL"===t&&w&&g){const t=(0,a.renewZipUrl)(w,g).then(()=>u(e,{ok:!0})).catch(t=>u(e,p(t)));e.waitUntil(t)}})};const r=n(553),i=n(343),s=n(314),a=n(800),o=n(262),l=n(266),c=n(346);function p(e){const t=(0,r.toZipPeekError)(e);return{ok:!1,error:t.message,errorStack:t.stack}}function u(e,t){var n;null===(n=e.ports[0])||void 0===n||n.postMessage(t)}},933(e,t,n){t.resolveAllowedZipUrlByPathname=function(e){const t=(0,i.getAllowedZipUrlsUnion)();if(null===t||t.has(e))return e;const n=(0,r.zipPackagePathname)(e);for(const e of t)if((0,r.zipPackagePathname)(e)===n)return e;return e},t.requestClientRenewal=function(e,t){if(null==(0,r.getPresignedUrlExpiryMs)(e))return Promise.resolve({ok:!1,reason:"not-presigned"});const n=(0,r.zipPackagePathname)(e)||(0,r.normalizeZipUrl)(e),i=a.get(n);if(i)return i;const o=async function(e,t){var n;let i=await async function(e){if(!e)return null;const t=await self.clients.get(e);return"window"===(null==t?void 0:t.type)?t:null}(t);if(!i){const e=await self.clients.matchAll({type:"window"});i=null!==(n=e[0])&&void 0!==n?n:null}return i?new Promise(t=>{const n=new MessageChannel;let a=!1;const o=e=>{a||(a=!0,n.port1.onmessage=null,n.port1.onmessageerror=null,n.port1.close(),t(e))};n.port1.onmessage=e=>{const t=e.data;if(!(null==t?void 0:t.ok)||"string"!=typeof t.nextUrl||""===t.nextUrl)return void o({ok:!1,reason:"page-rejected"});const n=(0,r.normalizeZipUrl)(t.nextUrl);(0,r.isPresignedUrlExpired)(n)?o({ok:!1,reason:"still-expired"}):o({ok:!0,nextUrl:n})},n.port1.onmessageerror=()=>{o({ok:!1,reason:"page-rejected"})};try{i.postMessage({type:"ZIP_SW_RENEW_REQUEST",zipUrl:e},[n.port2])}catch(e){(0,s.warn)("failed to post ZIP_SW_RENEW_REQUEST",e),o({ok:!1,reason:"page-rejected"})}}):{ok:!1,reason:"no-window-client"}}(e,t).finally(()=>{a.delete(n)});return a.set(n,o),o};const r=n(343),i=n(262),s=n(266),a=new Map},254(e,t,n){t.corsErrorResponse=p,t.getMimeType=f,t.fetchUncompressedZipEntryFromNetwork=async function(e,t,n){var l;const c=n.offset,p=n.nextOffset-1,h=(0,s.zipPackagePathname)(e);let w;(0,o.log)("fetching zip chunk from",{zipUrl:e,rangeStart:c,rangeEnd:p});try{w=await fetch(e,{headers:{Range:`bytes=${c}-${p}`}})}catch(e){return u(`${i.NETWORK_ERROR_PREFIX} ZIP asset fetch failed`,500,(0,i.zipErrorInfo)({path:t,zipPath:h,cause:(0,i.errorMessage)(e)}))}if(206!==w.status)return u("ZIP origin fetch failed",w.status>=400?w.status:502,(0,i.zipErrorInfo)({path:t,zipPath:h,status:w.status}),{upstreamStatus:w.status});if(!w.body)return u("ZIP origin fetch failed",502,(0,i.zipErrorInfo)({path:t,zipPath:h,reason:"empty-body"}));const g=w.body.getReader();let m,E;try{({headerAndPayload:m,dataStart:E}=await async function(e){let t=new Uint8Array(0);for(;t.byteLength<30;){const{done:n,value:r}=await e.read();if(n)throw new Error("ZIP entry ended before its local file header was complete");t=d(t,r)}const n=new DataView(t.buffer,t.byteOffset,t.byteLength);if(n.getUint32(0,!0)!==a.LOCAL_FILE_HEADER_SIG)throw new Error("Invalid local file header (expected ZIP signature 0x04034b50)");const r=30+n.getUint16(26,!0)+n.getUint16(28,!0);for(;t.byteLength<r;){const{done:n,value:r}=await e.read();if(n)throw new Error("ZIP entry ended before its local file header fields were complete");t=d(t,r)}return{headerAndPayload:t,dataStart:r}}(g))}catch(e){return await g.cancel(e),u("ZIP asset request failed",500,(0,i.zipErrorInfo)({path:t,zipPath:h,cause:(0,i.errorMessage)(e)}))}const A=function(e,t,n){let r=t,i=0;return new ReadableStream({async pull(t){if(i>=n)return await e.cancel(),void t.close();let s;if(r.byteLength>0)s=r,r=new Uint8Array(0);else{const{done:r,value:a}=await e.read();if(r)return void t.error(new Error(`ZIP entry ended after ${i} of ${n} compressed bytes`));s=a}const a=n-i,o=s.byteLength>a?s.subarray(0,a):s;i+=o.byteLength,t.enqueue(o),i>=n&&(await e.cancel(),t.close())},cancel:t=>e.cancel(t)})}(g,m.subarray(E),n.compressedSize),y=null!==(l=n.uncompressedSize)&&void 0!==l?l:0===n.compression?n.compressedSize:null;let U;if(8===n.compression)U=function(e,t){const n=e.getReader();let i,s=0,a=!1;return new ReadableStream({start(e){i=new r.Inflate(t=>{s+=t.byteLength,e.enqueue(t)})},async pull(e){for(;!a;){const{done:r,value:o}=await n.read();if(r)return a=!0,i.push(new Uint8Array(0),!0),null!==t&&s!==t?void e.error(new Error(`Inflated ZIP entry size mismatch: expected ${t}, received ${s}`)):void e.close();i.push(o)}},cancel:e=>n.cancel(e)})}(A,y);else{if(0!==n.compression)return await g.cancel(),u("ZIP asset request failed",500,(0,i.zipErrorInfo)({path:t,zipPath:h,reason:"unsupported-compression",method:n.compression}));U=A}return{ok:!0,stream:U,contentLength:y,contentType:f(t)}};const r=n(612),i=n(553),s=n(343),a=n(262),o=n(266);function l(e){return e.replace(/[\r\n]+/g," ").trim()}function c(e,t){const n=[a.ASSET_ERROR_HEADER],r={"Access-Control-Allow-Origin":"*",[a.ASSET_ERROR_HEADER]:l(e)},i=null==t?void 0:t.upstreamStatus;return void 0!==i&&(r[a.ASSET_UPSTREAM_STATUS_HEADER]=String(i),n.push(a.ASSET_UPSTREAM_STATUS_HEADER)),r["Access-Control-Expose-Headers"]=n.join(", "),r}function p(e,t,n){const r=(0,i.formatZipPeekError)(e);return new Response(r,{status:t,headers:c(r,n)})}function u(e,t,n,r){return(0,o.reportClientError)((0,i.createZipPeekError)(e),n),{ok:!1,response:p(e,t,r)}}function f(e){var t,n;const r=null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase();return r&&null!==(n=a.MIME_TYPES[r])&&void 0!==n?n:"application/octet-stream"}function d(e,t){const n=new Uint8Array(e.byteLength+t.byteLength);return n.set(e),n.set(t,e.byteLength),n}},343(e,t){function n(e){try{return decodeURIComponent(e)}catch(t){return e}}function r(e){const t=t=>function(e,t,n={}){const{stopAtPathSeparator:r=!0}=n,i=e.indexOf("?");if(-1===i)return null;const s=e.indexOf("#",i),a=-1===s?e.substring(i+1):e.substring(i+1,s),o=r?a.indexOf("/"):-1,l=-1===o?a:a.substring(0,o);for(const e of l.split("&")){const n=e.indexOf("=");if((-1===n?e:e.substring(0,n))===t)return-1===n?"":e.substring(n+1)}return null}(e,t,{stopAtPathSeparator:!1}),n=t("Expires");if(null!=n&&""!==n){const e=Number(n);if(Number.isFinite(e)&&e>0)return 1e3*e}const r=t("X-Amz-Date"),i=t("X-Amz-Expires");if(r&&i){const e=/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z$/.exec(r);if(!e)return null;const[,t,n,s,a,o,l]=e,c=Date.UTC(Number(t),Number(n)-1,Number(s),Number(a),Number(o),Number(l)),p=Number(i);return!Number.isFinite(c)||!Number.isFinite(p)||p<=0?null:c+1e3*p}return null}t.normalizeZipUrl=function(e,t={}){const{stripCacheBuster:n=!0,stripHash:r=!0}=t,i=e=>r?e.split("#")[0]:e;if(!n)return i(e);const s=e.indexOf("?");if(-1===s)return i(e);const a=e.indexOf("#",s),o=e.substring(0,s),l=-1===a?e.substring(s+1):e.substring(s+1,a),c=r||-1===a?"":e.substring(a),p=l.split("&").filter(e=>{const t=e.indexOf("=");return"t"!==(-1===t?e:e.substring(0,t))});return 0===p.length?o+c:o+"?"+p.join("&")+c},t.zipPackagePathname=function(e){try{return new URL(e).pathname}catch(t){return e.split("?")[0].split("#")[0]}},t.isPresignedUrlExpired=function(e){const t=r(e);return null!=t&&t<=Date.now()},t.zipBasenameWithoutExtension=function(e){var t,n;try{const n=null!==(t=new URL(e,"http://local").pathname.split("/").pop())&&void 0!==t?t:"";return n.endsWith(".zip")?n.slice(0,-4):n}catch(t){const r=null!==(n=e.split("?")[0].split("#")[0].split("/").pop())&&void 0!==n?n:"";return r.endsWith(".zip")?r.slice(0,-4):r}},t.normalizeZipEntryPath=function(e){let t=e.replace(/\\/g,"/");for(;t.startsWith("/");)t=t.slice(1);return t},t.parseZipAssetRequest=function(e){const t=/\.zip([/?])/.exec(e);if(!t)return null;const r=t.index+4,i=t[1],s=e.substring(0,r);if("/"===i){const t=e.substring(r+1),i=t.indexOf("?"),a=-1===i?t:t.substring(0,i);return""===a?null:{zipUrl:s,internalPath:n(a)}}const a=e.substring(r),o=a.indexOf("/");if(-1===o)return null;const l=a.substring(0,o),c=a.substring(o+1),p=c.indexOf("?"),u=-1===p?c:c.substring(0,p);return""===u?null:{zipUrl:s+l,internalPath:n(u)}},t.canonicalZipAssetRequestUrl=function(e,t){return e+"/"+encodeURIComponent(t)},t.getPresignedUrlExpiryMs=r},612(e,t){var n=Uint8Array,r=Uint16Array,i=Int32Array,s=new 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,0,0,0]),a=new 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,0,0]),o=new n([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),l=function(e,t){for(var n=new r(31),s=0;s<31;++s)n[s]=t+=1<<e[s-1];var a=new i(n[30]);for(s=1;s<30;++s)for(var o=n[s];o<n[s+1];++o)a[o]=o-n[s]<<5|s;return{b:n,r:a}},c=l(s,2),p=c.b,u=c.r;p[28]=258,u[258]=28;for(var f=l(a,0),d=f.b,h=(f.r,new r(32768)),w=0;w<32768;++w){var g=(43690&w)>>1|(21845&w)<<1;g=(61680&(g=(52428&g)>>2|(13107&g)<<2))>>4|(3855&g)<<4,h[w]=((65280&g)>>8|(255&g)<<8)>>1}var m=function(e,t,n){for(var i=e.length,s=0,a=new r(t);s<i;++s)e[s]&&++a[e[s]-1];var o,l=new r(t);for(s=1;s<t;++s)l[s]=l[s-1]+a[s-1]<<1;if(n){o=new r(1<<t);var c=15-t;for(s=0;s<i;++s)if(e[s])for(var p=s<<4|e[s],u=t-e[s],f=l[e[s]-1]++<<u,d=f|(1<<u)-1;f<=d;++f)o[h[f]>>c]=p}else for(o=new r(i),s=0;s<i;++s)e[s]&&(o[s]=h[l[e[s]-1]++]>>15-e[s]);return o},E=new n(288);for(w=0;w<144;++w)E[w]=8;for(w=144;w<256;++w)E[w]=9;for(w=256;w<280;++w)E[w]=7;for(w=280;w<288;++w)E[w]=8;var A=new n(32);for(w=0;w<32;++w)A[w]=5;var y=m(E,9,1),U=m(A,5,1),P=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},R=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(7&t)&n},Z=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(7&t)},z=function(e){return(e+7)/8|0},C=function(e,t,r){return(null==t||t<0)&&(t=0),(null==r||r>e.length)&&(r=e.length),new n(e.subarray(t,r))},v=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],S=function(e,t,n){var r=new Error(t||v[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,S),!n)throw r;return r},_=function(e,t,r,i){var l=e.length,c=i?i.length:0;if(!l||t.f&&!t.l)return r||new n(0);var u=!r,f=u||2!=t.i,h=t.i;u&&(r=new n(3*l));var w=function(e){var t=r.length;if(e>t){var i=new n(Math.max(2*t,e));i.set(r),r=i}},g=t.f||0,E=t.p||0,A=t.b||0,v=t.l,_=t.d,b=t.m,I=t.n,M=8*l;do{if(!v){g=R(e,E,1);var k=R(e,E+1,3);if(E+=3,!k){var L=e[($=z(E)+4)-4]|e[$-3]<<8,T=$+L;if(T>l){h&&S(0);break}f&&w(A+L),r.set(e.subarray($,T),A),t.b=A+=L,t.p=E=8*T,t.f=g;continue}if(1==k)v=y,_=U,b=9,I=5;else if(2==k){var F=R(e,E,31)+257,x=R(e,E+10,15)+4,O=F+R(e,E+5,31)+1;E+=14;for(var N=new n(O),H=new n(19),q=0;q<x;++q)H[o[q]]=R(e,E+3*q,7);E+=3*x;var D=P(H),j=(1<<D)-1,W=m(H,D,1);for(q=0;q<O;){var $,K=W[R(e,E,j)];if(E+=15&K,($=K>>4)<16)N[q++]=$;else{var X=0,G=0;for(16==$?(G=3+R(e,E,3),E+=2,X=N[q-1]):17==$?(G=3+R(e,E,7),E+=3):18==$&&(G=11+R(e,E,127),E+=7);G--;)N[q++]=X}}var B=N.subarray(0,F),Y=N.subarray(F);b=P(B),I=P(Y),v=m(B,b,1),_=m(Y,I,1)}else S(1);if(E>M){h&&S(0);break}}f&&w(A+131072);for(var Q=(1<<b)-1,V=(1<<I)-1,J=E;;J=E){var ee=(X=v[Z(e,E)&Q])>>4;if((E+=15&X)>M){h&&S(0);break}if(X||S(2),ee<256)r[A++]=ee;else{if(256==ee){J=E,v=null;break}var te=ee-254;if(ee>264){var ne=s[q=ee-257];te=R(e,E,(1<<ne)-1)+p[q],E+=ne}var re=_[Z(e,E)&V],ie=re>>4;if(re||S(3),E+=15&re,Y=d[ie],ie>3&&(ne=a[ie],Y+=Z(e,E)&(1<<ne)-1,E+=ne),E>M){h&&S(0);break}f&&w(A+131072);var se=A+te;if(A<Y){var ae=c-Y,oe=Math.min(Y,se);for(ae+A<0&&S(3);A<oe;++A)r[A]=i[ae+A]}for(;A<se;++A)r[A]=r[A-Y]}}t.l=v,t.p=J,t.b=A,t.f=g,v&&(g=1,t.m=b,t.d=_,t.n=I)}while(!g);return A!=r.length&&u?C(r,0,A):r.subarray(0,A)},b=new n(0);var I=function(){function e(e,t){"function"==typeof e&&(t=e,e={}),this.ondata=t;var r=e&&e.dictionary&&e.dictionary.subarray(-32768);this.s={i:0,b:r?r.length:0},this.o=new n(32768),this.p=new n(0),r&&this.o.set(r)}return e.prototype.e=function(e){if(this.ondata||S(5),this.d&&S(4),this.p.length){if(e.length){var t=new n(this.p.length+e.length);t.set(this.p),t.set(e,this.p.length),this.p=t}}else this.p=e},e.prototype.c=function(e){this.s.i=+(this.d=e||!1);var t=this.s.b,n=_(this.p,this.s,this.o);this.ondata(C(n,t,this.s.b),this.d),this.o=C(n,this.s.b-32768),this.s.b=this.o.length,this.p=C(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}();t.Inflate=I;var M="undefined"!=typeof TextDecoder&&new TextDecoder;try{M.decode(b,{stream:!0})}catch(e){}"function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout&&setTimeout}};const t={};function n(r){const i=t[r];if(void 0!==i)return i.exports;const s=t[r]={exports:{}};return e[r](s,s.exports,n),s.exports}(()=>{const e=n(266),t=n(982),r=n(993);self.addEventListener("install",()=>{self.skipWaiting()}),self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim())}),(0,e.installClientErrorReporting)(),(0,r.installMessageHandler)(),(0,t.installFetchHandler)()})()})();
|
|
1
|
+
(()=>{"use strict";var e={616(e,t){function n(e){const n=e.trim();return n.startsWith(t.ZIP_PEEK_ERROR_PREFIX)?n:`${t.ZIP_PEEK_ERROR_PREFIX} ${n}`}t.NETWORK_ERROR_PREFIX=t.ZIP_PEEK_ERROR_PREFIX=void 0,t.formatZipPeekError=n,t.zipErrorInfo=function(e){return Object.entries(e).filter(e=>{const t=e[1];return null!=t&&""!==t}).map(([e,t])=>`${e}=${String(t)}`).join(" ")},t.createZipPeekError=function(e,t,r){const s=new Error(n(e));return s.zipPeekLevel=t,r&&(s.zipPeekInfo=r),s},t.toZipPeekError=function(e){const r=e instanceof Error?e:new Error(String(e));return r.message.startsWith(t.ZIP_PEEK_ERROR_PREFIX)||(r.message=n(r.message)),r.zipPeekLevel||(r.zipPeekLevel="error"),r},t.zipPeekErrorInfo=function(e){if(e&&"object"==typeof e&&"zipPeekInfo"in e){return e.zipPeekInfo||void 0}},t.errorMessage=function(e){return e instanceof Error?e.message:String(e)},t.ZIP_PEEK_ERROR_PREFIX="[zip-peek-error]",t.NETWORK_ERROR_PREFIX="[NetworkError]"},285(e,t,n){t.ZIP_PEEK_VERSION=void 0,t.ZIP_PEEK_VERSION=n(330).version},887(e,t,n){t.clearAllClientClaims=void 0,t.persistAllowListState=o,t.ensureAllowedZipUrlsLoaded=async function(){if(s.allowedZipUrlsLoaded)return s.allowedZipUrlsLoaded;const e=(async()=>{try{const e=await caches.open(s.CONFIG_CACHE_NAME),t=await e.match(s.CONFIG_CACHE_KEY);if(!t)return;const n=await t.json();if(Array.isArray(n.allowedZipUrls)){const e=new Set(n.allowedZipUrls.filter(e=>"string"==typeof e).map(e=>(0,r.normalizeZipUrl)(e)));(0,s.setAllowListRestricted)(!1!==n.restricted),(0,s.setPersistedAllowUnion)(e)}else(0,s.setAllowListRestricted)(!1),(0,s.setPersistedAllowUnion)(null)}catch(e){(0,i.warn)("failed to load runtime config",e)}})();return(0,s.setAllowedZipUrlsLoaded)(e),e},t.clearZipAssetsExceptLiveClaims=async function(e){if(await l(),!s.allowListRestricted)return;if(await async function(){const e=await self.clients.matchAll({type:"window",includeUncontrolled:!0});await Promise.all(e.map(e=>async function(e){await new Promise(t=>{const n=new MessageChannel,o=setTimeout(()=>{n.port1.onmessage=null,n.port1.close(),t()},400);n.port1.onmessage=i=>{clearTimeout(o);const a=i.data;a&&"allowedZipUrls"in a&&(Array.isArray(a.allowedZipUrls)?(0,s.setClientAllowedZipUrls)(e.id,a.allowedZipUrls.map(e=>(0,r.normalizeZipUrl)(e))):null===a.allowedZipUrls&&s.clientAllowedZipUrls.delete(e.id)),n.port1.onmessage=null,n.port1.close(),t()};try{e.postMessage({type:"ZIP_SW_CLAIM_REQUEST"},[n.port2])}catch(e){clearTimeout(o),n.port1.close(),(0,i.warn)("failed to post ZIP_SW_CLAIM_REQUEST",e),t()}})}(e))),s.clientAllowedZipUrls.size>0?((0,s.setAllowListRestricted)(!0),await o()):e.length>0&&((0,s.setAllowListRestricted)(!1),(0,s.setPersistedAllowUnion)(null),await a(null,!1))}(),await l(),!s.allowListRestricted)return;const t=(0,s.getClaimsUnion)();await e(Array.from(t)),await o()},t.applyRuntimeConfig=async function(e,t){if(!e)return;let n=Object.assign({},s.runtimeConfig),i=!1;if("string"==typeof e.zipAssetCacheName&&e.zipAssetCacheName.trim()&&(n.zipAssetCacheName=e.zipAssetCacheName,i=!0),"number"==typeof e.assetCacheTtlMs&&Number.isFinite(e.assetCacheTtlMs)&&(n.assetCacheTtlMs=e.assetCacheTtlMs,i=!0),"string"==typeof e.logPrefix&&e.logPrefix.trim()&&(n.logPrefix=e.logPrefix,i=!0),"boolean"==typeof e.requireExactManifestPath&&(n.requireExactManifestPath=e.requireExactManifestPath,i=!0),i&&(0,s.setRuntimeConfig)(n),"allowedZipUrls"in e){const n=Array.isArray(e.allowedZipUrls)?e.allowedZipUrls.map(e=>(0,r.normalizeZipUrl)(e)):null;if(!t)return null===n?((0,s.clearAllClientClaims)(),(0,s.setAllowedZipUrlsLoaded)(Promise.resolve()),void await a(null,!1)):((0,s.setAllowListRestricted)(!0),(0,s.setPersistedAllowUnion)(new Set(n)),(0,s.setAllowedZipUrlsLoaded)(Promise.resolve()),void await a(n,!0));if(null===n){if(s.clientAllowedZipUrls.delete(t),await l(),0===s.clientAllowedZipUrls.size)return(0,s.setAllowListRestricted)(!1),(0,s.setPersistedAllowUnion)(null),(0,s.setAllowedZipUrlsLoaded)(Promise.resolve()),void await a(null,!1)}else(0,s.setClientAllowedZipUrls)(t,n);await l(),(0,s.setAllowedZipUrlsLoaded)(Promise.resolve()),await o()}},t.renewAllowedZipUrlClaims=function(e,t){let n=!1;for(const r of s.clientAllowedZipUrls.values())r.has(e)&&(r.delete(e),r.add(t),n=!0);if(!n)for(const e of s.clientAllowedZipUrls.values())e.add(t);const r=new Set(null!==s.persistedAllowUnion&&void 0!==s.persistedAllowUnion?s.persistedAllowUnion:[]);r.delete(e),r.add(t),(0,s.setPersistedAllowUnion)(r)},t.isZipUrlAllowed=function(e){const t=(0,s.getAllowedZipUrlsUnion)();return null===t||t.has(e)};const r=n(602),s=n(803);Object.defineProperty(t,"clearAllClientClaims",{enumerable:!0,get:function(){return s.clearAllClientClaims}});const i=n(997);async function o(){if(!s.allowListRestricted)return(0,s.setPersistedAllowUnion)(null),void await a(null,!1);const e=(0,s.getClaimsUnion)(),t=e.size>0?Array.from(e):Array.from(null!==s.persistedAllowUnion&&void 0!==s.persistedAllowUnion?s.persistedAllowUnion:[]);(0,s.setPersistedAllowUnion)(new Set(t)),await a(t,!0)}async function a(e,t=null!==e){try{const n=await caches.open(s.CONFIG_CACHE_NAME);await n.put(new Request(s.CONFIG_CACHE_KEY),new Response(JSON.stringify({allowedZipUrls:e,restricted:t}),{headers:{"Content-Type":"application/json"}}))}catch(e){(0,i.warn)("failed to persist runtime config",e)}}async function l(){const e=await self.clients.matchAll({type:"window",includeUncontrolled:!0}),t=new Set(e.map(e=>e.id));for(const e of[...s.clientAllowedZipUrls.keys()])t.has(e)||s.clientAllowedZipUrls.delete(e);0===s.clientAllowedZipUrls.size&&s.allowListRestricted?((0,s.setPersistedAllowUnion)(null),await a([],!0)):s.clientAllowedZipUrls.size>0&&await o()}},531(e,t,n){t.canonicalAssetRequest=function(e,t){return new Request((0,s.canonicalZipAssetRequestUrl)(e,t),{method:"GET"})},t.clearAllZipAssets=async function(){const e=await caches.open(a.runtimeConfig.zipAssetCacheName),t=await e.keys();await Promise.all(t.map(t=>e.delete(t))),await caches.delete(a.CONFIG_CACHE_NAME),a.zipManifests.clear(),a.pendingManifestLoads.clear(),a.inFlightZipAssets.clear(),(0,i.clearAllClientClaims)(),(0,a.setAllowedZipUrlsLoaded)(Promise.resolve())},t.clearZipAssetsExceptAllowed=async function(e){try{const t=new Set(e),n=await caches.open(a.runtimeConfig.zipAssetCacheName),r=await n.keys();for(const e of r){const r=e.url,i=(0,s.parseZipAssetRequest)(r);i&&!t.has(i.zipUrl)&&await n.delete(e)}for(const e of a.zipManifests.keys())t.has(e)||a.zipManifests.delete(e)}catch(e){throw(0,r.createZipPeekError)(`Failed to clear zip assets except allowed URLs: ${(0,r.errorMessage)(e)}`,"error")}},t.putCachedFullAssetIfAbsent=async function(e,t){var n;try{const r=await caches.open(a.runtimeConfig.zipAssetCacheName),s=await r.match(e);if(s&&!c(s))return void await(null===(n=t.body)||void 0===n?void 0:n.cancel());const i=new Headers(t.headers);i.set(a.ASSET_CACHED_AT_HEADER,String(Date.now())),i.set("Access-Control-Allow-Origin","*"),await r.put(e,new Response(t.body,{status:t.status,statusText:t.statusText,headers:i}))}catch(e){t.body&&!t.body.locked&&await t.body.cancel(e),(0,l.warn)("asset cache put failed",e)}},t.readCachedZipAssetIfFresh=async function(e){let t=null,n="network";try{const r=await caches.open(a.runtimeConfig.zipAssetCacheName),s=await r.match(e);if(s)if(c(s))try{await r.delete(e)}catch(e){(0,l.warn)("asset cache delete expired failed",e)}else t=s,n="cache-api"}catch(e){(0,l.warn)("asset cache read failed",e)}return{response:t,assetSource:n}},t.renewZipUrl=async function(e,t){const n=(0,s.normalizeZipUrl)(e),l=(0,s.normalizeZipUrl)(t);if(n===l)return;await(0,i.ensureAllowedZipUrlsLoaded)(),a.allowListRestricted&&((0,i.renewAllowedZipUrlClaims)(n,l),(0,a.setAllowedZipUrlsLoaded)(Promise.resolve()),await(0,i.persistAllowListState)());const c=a.zipManifests.get(n);c&&(a.zipManifests.set(l,c),a.zipManifests.delete(n));const u=a.pendingManifestLoads.get(n);u&&(a.pendingManifestLoads.set(l,u),a.pendingManifestLoads.delete(n)),(0,o.remapInFlightZipAssetsForRenewal)(n,l);try{const e=await caches.open(a.runtimeConfig.zipAssetCacheName),t=await e.keys();for(const r of t){const t=r.url,i=(0,s.parseZipAssetRequest)(t);i&&(0,s.normalizeZipUrl)(i.zipUrl)===n&&await e.delete(r)}}catch(e){throw(0,r.createZipPeekError)(`Failed to clear cached assets for renewed ZIP URL: ${(0,r.errorMessage)(e)}`,"error")}};const r=n(616),s=n(602),i=n(887),o=n(489),a=n(803),l=n(997);function c(e){const t=e.headers.get(a.ASSET_CACHED_AT_HEADER);if(!t)return!0;const n=parseInt(t,10);return!Number.isFinite(n)||Date.now()-n>a.runtimeConfig.assetCacheTtlMs}},489(e,t,n){t.getOrStartInFlightAsset=function(e,t){const n=e.url,r=s.inFlightZipAssets.get(n);if(r)return r;let o,a;const l=new Promise((e,t)=>{o=e,a=t}),c={resultPromise:t(),cacheFillPromise:l,leaderClaimed:!1,resolveCacheFill:o,rejectCacheFill:a};return l.finally(()=>{!function(e){for(const[t,n]of s.inFlightZipAssets)n===e&&s.inFlightZipAssets.delete(t)}(c)}).catch(()=>{}),c.resultPromise.then(e=>{e.ok||i(c)},e=>{i(c,e)}),s.inFlightZipAssets.set(n,c),c},t.completeInFlightAssetLoad=function(e,t){const n=s.inFlightZipAssets.get(e);n&&i(n,t)},t.remapInFlightZipAssetsForRenewal=function(e,t){const n=(0,r.normalizeZipUrl)(e),i=(0,r.normalizeZipUrl)(t);for(const[e,t]of[...s.inFlightZipAssets]){const o=(0,r.parseZipAssetRequest)(e);if(o&&(0,r.normalizeZipUrl)(o.zipUrl)===n){const n=(0,r.canonicalZipAssetRequestUrl)(i,o.internalPath);s.inFlightZipAssets.delete(e),s.inFlightZipAssets.set(n,t)}}};const r=n(602),s=n(803);function i(e,t){void 0!==t?e.rejectCacheFill(t):e.resolveCacheFill()}},629(e,t,n){t.installFetchHandler=function(){self.addEventListener("fetch",e=>{const t=e.request.method;if("GET"!==t&&"HEAD"!==t)return;if(!(0,s.parseZipAssetRequest)(e.request.url))return;const n=async function(e,t){var n,w,m;const E="HEAD"===e.method,A=(0,s.parseZipAssetRequest)(e.url);let y=(0,s.normalizeZipUrl)(A.zipUrl);const P=A.internalPath,U=(0,s.normalizeZipEntryPath)(P);let R;try{let w;if(await(0,i.ensureAllowedZipUrlsLoaded)(),y=(0,p.resolveAllowedZipUrlByPathname)(y),!(0,i.isZipUrlAllowed)(y)&&(0,s.isPresignedUrlExpired)(y)){const e=await(0,p.requestClientRenewal)(y,t);e.ok?y=e.nextUrl:w=e.reason}if(!(0,i.isZipUrlAllowed)(y))return(0,c.warn)("zip URL not allowed",{requestedZipUrl:y}),d("ZIP URL not allowed",403,(0,r.zipErrorInfo)({zipPath:(0,s.zipPackagePathname)(y),reason:w}),"error");let m=l.zipManifests.get(y);if(m&&!E){const t=(0,u.resolveManifestEntry)(m,U,y,l.runtimeConfig.requireExactManifestPath);if(t){const n=(0,o.canonicalAssetRequest)(y,t.key),r=await(0,o.readCachedZipAssetIfFresh)(n);if(r.response){const n=(0,u.entryUncompressedSize)(t.info);return{response:h(r.response.body,(0,f.getMimeType)(t.key),n,r.assetSource,e.headers.get("range"))}}}}if((0,s.isPresignedUrlExpired)(y)&&(!E||!m)){const e=await(0,p.requestClientRenewal)(y,t);if(!e.ok)return d("Failed to renew expired presigned ZIP URL",502,(0,r.zipErrorInfo)({zipPath:(0,s.zipPackagePathname)(y),reason:e.reason}),"error");y=e.nextUrl,m=l.zipManifests.get(y)}if(m||(m=null!==(n=await(0,u.ensureManifestAvailable)(y,t))&&void 0!==n?n:void 0),!m){const e=Array.from(l.zipManifests.keys());return(0,c.warn)("manifest missing for zipUrl",{requestedZipUrl:y,knownZipUrls:e}),d("ZIP manifest not loaded",404,(0,r.zipErrorInfo)({zipPath:(0,s.zipPackagePathname)(y)}),"error")}const A=(0,u.resolveManifestEntry)(m,U,y,l.runtimeConfig.requireExactManifestPath);if(!A){const e=Array.from(m.keys()).slice(0,50);return(0,c.warn)("file not in manifest",{zipUrl:y,internalPathRaw:P,internalPathNormalized:U,requireExactManifestPath:l.runtimeConfig.requireExactManifestPath,manifestSize:m.size,sampleKeys:e}),d("File not found in ZIP manifest",404,(0,r.zipErrorInfo)({path:U,zipPath:(0,s.zipPackagePathname)(y)}),"warn")}const{key:v,info:Z,matchKind:z}=A;if("zipBasenameFallback"===z&&((0,c.log)("resolved via zip-basename folder fallback",{requested:U,manifestKey:v}),(0,c.reportClientError)((0,r.createZipPeekError)("Exact manifest path not found; resolved via zip-basename folder fallback","warn"),`Exact manifest key "${U}" not found in ${y}; resolved using "${v}"`)),E)return{response:g(e,v,Z)};const S=(0,o.canonicalAssetRequest)(y,v),C=await(0,o.readCachedZipAssetIfFresh)(S),_=(0,u.entryUncompressedSize)(Z),b=(0,f.getMimeType)(v);if(C.response)return{response:h(C.response.body,b,_,C.assetSource,e.headers.get("range"))};const I=(0,a.getOrStartInFlightAsset)(S,()=>(0,f.fetchUncompressedZipEntryFromNetwork)(y,v,Z));R=S.url;const k=await I.resultPromise;if(!k.ok)return(0,a.completeInFlightAssetLoad)(S.url),{response:k.response};const L=!I.leaderClaimed&&(I.leaderClaimed=!0),M=8===Z.compression?null:e.headers.get("range");if(!L){await I.cacheFillPromise;const t=await(0,o.readCachedZipAssetIfFresh)(S);return t.response?{response:h(t.response.body,b,_,t.assetSource,e.headers.get("range"))}:d("Asset cache was not ready after in-flight load",500,(0,r.zipErrorInfo)({path:v,zipPath:(0,s.zipPackagePathname)(y)}),"error")}const[T,x]=k.stream.tee(),F={"Content-Type":k.contentType};null!==k.contentLength&&(F["Content-Length"]=String(k.contentLength));const O=S.url,N=(0,o.putCachedFullAssetIfAbsent)(S,new Response(x,{status:200,headers:F})).then(()=>{(0,a.completeInFlightAssetLoad)(O)}).catch(e=>{throw(0,a.completeInFlightAssetLoad)(O,e),e});return{response:h(T,k.contentType,k.contentLength,"network",M),background:N}}catch(e){R&&(0,a.completeInFlightAssetLoad)(R,e),(0,c.error)("fetch handler failed",{zipUrl:y,internalPath:P,message:(0,r.errorMessage)(e)});const t=(0,r.errorMessage)(e),n=t.startsWith(r.ZIP_PEEK_ERROR_PREFIX)?t.slice(r.ZIP_PEEK_ERROR_PREFIX.length).trim():t.includes(r.NETWORK_ERROR_PREFIX)?t:"ZIP asset request failed",i=(0,r.zipPeekErrorInfo)(e),o=e;return d(n,null!==(w=o.httpStatus)&&void 0!==w?w:500,[(0,r.zipErrorInfo)({path:P,zipPath:(0,s.zipPackagePathname)(y),cause:i?void 0:(0,r.errorMessage)(e)}),i].filter(Boolean).join(" "),null!==(m=o.zipPeekLevel)&&void 0!==m?m:"error",void 0!==o.upstreamStatus?{upstreamStatus:o.upstreamStatus}:void 0)}}(e.request,e.clientId||void 0);e.respondWith(n.then(({response:e})=>e)),e.waitUntil(n.then(({background:e})=>e).catch(e=>{(0,c.warn)("background asset cache failed",(0,r.errorMessage)(e))}))})};const r=n(616),s=n(602),i=n(887),o=n(531),a=n(489),l=n(803),c=n(997),u=n(479),p=n(965),f=n(321);function d(e,t,n,s,i){return(0,c.reportClientError)((0,r.createZipPeekError)(e,s),n),{response:(0,f.corsErrorResponse)(e,t,i)}}function w(e){return{"Access-Control-Allow-Origin":"*","Access-Control-Expose-Headers":l.ASSET_SOURCE_HEADER,[l.ASSET_SOURCE_HEADER]:e}}function h(e,t,n,r,s){if(s){if(null===n)return null==e||e.cancel(),new Response(null,{status:416,headers:w(r)});const i=s.replace(/^bytes=/,"");if(i.includes(","))return null==e||e.cancel(),new Response(null,{status:416,headers:Object.assign({"Content-Range":`bytes */${n}`},w(r))});const[o,a]=i.split("-"),l=""!==o?parseInt(o,10):NaN,c=""!==a?parseInt(a,10):n-1;if(isNaN(l)||isNaN(c)||l<0||c<l||l>=n)return null==e||e.cancel(),new Response(null,{status:416,headers:Object.assign({"Content-Range":`bytes */${n}`},w(r))});const u=Math.min(c,n-1),p=u-l+1,f=null===e?null:function(e,t,n){const r=e.getReader();let s=0,i=!1;return new ReadableStream({async pull(e){for(;!i;){const{done:o,value:a}=await r.read();if(o)return i=!0,void e.close();const l=a,c=s,u=s+l.byteLength-1;if(s+=l.byteLength,u<t)continue;if(c>n)return i=!0,void e.close();const p=Math.max(0,t-c),f=Math.min(l.byteLength,n-c+1);if(f>p&&e.enqueue(l.subarray(p,f)),u>=n)return i=!0,void e.close()}},cancel:e=>r.cancel(e)})}(e,l,u);return new Response(f,{status:206,headers:Object.assign({"Content-Type":t,"Content-Range":`bytes ${l}-${u}/${n}`,"Content-Length":p.toString(),"Accept-Ranges":"bytes"},w(r))})}const i=Object.assign({"Content-Type":t},w(r));return null!==n&&(i["Content-Length"]=n.toString(),i["Accept-Ranges"]="bytes"),new Response(e,{status:200,headers:i})}function g(e,t,n){const r=(0,f.getMimeType)(t),s=(0,u.entryUncompressedSize)(n),i=e.headers.get("range");if(null!==s&&i)return h(null,r,s,"manifest",i);const o=Object.assign({"Content-Type":r},w("manifest"));return null!==s&&(o["Content-Length"]=s.toString(),o["Accept-Ranges"]="bytes"),new Response(null,{status:200,headers:o})}},803(e,t){function n(){const e=new Set;for(const n of t.clientAllowedZipUrls.values())for(const t of n)e.add(t);return e}t.CONFIG_CACHE_KEY=t.allowedZipUrlsLoaded=t.persistedAllowUnion=t.allowListRestricted=t.clientAllowedZipUrls=t.runtimeConfig=t.inFlightZipAssets=t.pendingManifestLoads=t.zipManifests=t.LOCAL_FILE_HEADER_SIG=t.MIME_TYPES=t.ASSET_UPSTREAM_STATUS_HEADER=t.ASSET_ERROR_HEADER=t.ASSET_SOURCE_HEADER=t.ASSET_CACHED_AT_HEADER=t.CONFIG_CACHE_NAME=t.kF=t.o2=void 0,t.setRuntimeConfig=function(e){t.runtimeConfig=e},t.setAllowListRestricted=function(e){t.allowListRestricted=e},t.setPersistedAllowUnion=function(e){t.persistedAllowUnion=e},t.setAllowedZipUrlsLoaded=function(e){t.allowedZipUrlsLoaded=e},t.getClaimsUnion=n,t.getAllowedZipUrlsUnion=function(){return t.allowListRestricted?t.clientAllowedZipUrls.size>0?n():null!==t.persistedAllowUnion&&void 0!==t.persistedAllowUnion?t.persistedAllowUnion:new Set:null},t.setClientAllowedZipUrls=function(e,n){if(null===n)return void t.clientAllowedZipUrls.delete(e);t.allowListRestricted=!0;const r=t.clientAllowedZipUrls.get(e);if(r)for(const e of n)r.add(e);else t.clientAllowedZipUrls.set(e,new Set(n))},t.clearAllClientClaims=function(){t.clientAllowedZipUrls.clear(),t.allowListRestricted=!1,t.persistedAllowUnion=null},t.o2="zip-cache-v1",t.kF=72e5,t.CONFIG_CACHE_NAME="zip-peek-config-v1",t.o2,t.CONFIG_CACHE_NAME,t.ASSET_CACHED_AT_HEADER="X-ZipSW-Cached-At",t.ASSET_SOURCE_HEADER="X-ZipSW-Asset-Source",t.ASSET_ERROR_HEADER="X-ZipSW-Error",t.ASSET_UPSTREAM_STATUS_HEADER="X-ZipSW-Upstream-Status",t.MIME_TYPES={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",json:"application/json",js:"application/javascript",css:"text/css; charset=utf-8",html:"text/html; charset=utf-8",txt:"text/plain; charset=utf-8",mp4:"video/mp4",webm:"video/webm",mp3:"audio/mpeg",wav:"audio/wav",oga:"audio/ogg",ogg:"audio/ogg",xml:"application/xml",wasm:"application/wasm"},t.LOCAL_FILE_HEADER_SIG=67324752,t.zipManifests=new Map,t.pendingManifestLoads=new Map,t.inFlightZipAssets=new Map,t.runtimeConfig={zipAssetCacheName:t.o2,assetCacheTtlMs:t.kF,logPrefix:"[zipSW]",requireExactManifestPath:!1},t.clientAllowedZipUrls=new Map,t.allowListRestricted=!1,t.persistedAllowUnion=null,t.allowedZipUrlsLoaded=null,t.CONFIG_CACHE_KEY=new URL("__zip_peek_runtime_config__",self.registration.scope).href},997(e,t,n){t.withVersion=a,t.log=function(...e){console.log(i.runtimeConfig.logPrefix,o,...e)},t.warn=function(...e){console.warn(i.runtimeConfig.logPrefix,o,...e)},t.error=function(...e){console.error(i.runtimeConfig.logPrefix,o,r.ZIP_PEEK_ERROR_PREFIX,...e)},t.reportClientError=l,t.installClientErrorReporting=function(){self.addEventListener("error",e=>{var t;l(null!==(t=e.error)&&void 0!==t?t:e.message,"Service worker uncaught error")}),self.addEventListener("unhandledrejection",e=>{l(e.reason,"Service worker unhandled promise rejection")})};const r=n(616),s=n(285),i=n(803),o=`zipSW=${s.ZIP_PEEK_VERSION}`;function a(e){return e?e.includes("zipSW=")?e:`${e} ${o}`:o}function l(e,t){const n=(0,r.toZipPeekError)(e);self.clients.matchAll({type:"window",includeUncontrolled:!0}).then(e=>{const s={type:"ZIP_SW_ERROR",error:{message:n.message,stack:n.stack},info:(0,r.formatZipPeekError)(a(t)),level:n.zipPeekLevel};for(const t of e)t.postMessage(s)})}},479(e,t,n){t.manifestFilesToMap=a,t.sendManifestToClientId=c,t.ensureManifestAvailable=function(e,t){const n=i.zipManifests.get(e);if(n)return Promise.resolve(n);let r=i.pendingManifestLoads.get(e);return r||(r=(async()=>{const n=await async function(e,t){const n=await l(t);return n?function(e,t){return new Promise(n=>{const r=new MessageChannel,s=setTimeout(()=>{r.port1.close(),n(null)},500);r.port1.onmessage=e=>{clearTimeout(s),r.port1.close();const t=e.data;(null==t?void 0:t.ok)&&Array.isArray(t.files)?n(a(t.files)):n(null)},r.port1.onmessageerror=()=>{clearTimeout(s),r.port1.close(),n(null)};try{e.postMessage({type:"ZIP_SW_MANIFEST_REQUEST",zipUrl:t},[r.port2])}catch(e){clearTimeout(s),r.port1.close(),(0,o.warn)("failed to request manifest from client",e),n(null)}})}(n,e):null}(e,t);if(n)return i.zipManifests.set(e,n),(0,o.log)("restored manifest from client memory",{zipUrl:e,entryCount:n.size}),n;const r=await async function(e){const{response:t,buffer:n}=await f(e,"bytes=-65536","tail"),r=new DataView(n);let i=-1;for(let e=n.byteLength-22;e>=0;e--)if(101010256===r.getUint32(e,!0)){i=e;break}if(-1===i)throw p(e,"tail",{network:!1,reason:"no-eocd"});const a=r.getUint32(i+16,!0),l=r.getUint32(i+12,!0);let c=n,u=-1,d="tail";const w=t.headers.get("Content-Range");let h=0;if(w){const e=w.match(/\/(\d+)$/);e&&(h=parseInt(e[1],10))}if(h<=0)throw p(e,"tail",{network:!1,reason:"no-content-range"});const g=h-n.byteLength;a>=g?u=a-g:(d="cd",c=(await f(e,`bytes=${a}-${a+l-1}`,d)).buffer,u=0);const m=function(e,t,n,r){const i=new DataView(e);let a=t;const l=[];for(;a+46<=e.byteLength&&33639248===i.getUint32(a,!0);){const t=i.getUint16(a+10,!0),n=i.getUint32(a+20,!0),r=i.getUint32(a+24,!0),o=i.getUint16(a+28,!0),c=i.getUint16(a+30,!0),u=i.getUint16(a+32,!0),p=i.getUint32(a+42,!0),f=new TextDecoder;if(a+46+o>e.byteLength)break;const d=new Uint8Array(e,a+46,o),w=f.decode(d),h=(0,s.normalizeZipEntryPath)(w);""!==h&&l.push({filename:h,offset:p,compressedSize:n,uncompressedSize:r,compression:t}),a+=46+o+c+u}if(0===l.length)return(0,o.error)("no files parsed from central directory",r),null;l.sort((e,t)=>e.offset-t.offset);const c=new Map;for(let e=0;e<l.length;e++){const t=l[e],r=(0,s.normalizeZipEntryPath)(t.filename);""!==r&&(c.has(r)&&(0,o.warn)("duplicate manifest key after normalize; overwriting",r),c.set(r,{filename:t.filename,offset:t.offset,compressedSize:t.compressedSize,uncompressedSize:t.uncompressedSize,compression:t.compression,nextOffset:e<l.length-1?l[e+1].offset:n}))}return c.size>0?c:null}(c,u,a,e);if(!m)throw p(e,d,{network:!1,reason:"empty-manifest"});return m}(e);return i.zipManifests.set(e,r),await c(e,r,t),(0,o.log)("manifest fetched and stored in memory",{zipUrl:e,entryCount:r.size}),r})().finally(()=>{i.pendingManifestLoads.delete(e)}),i.pendingManifestLoads.set(e,r),r)},t.entryUncompressedSize=function(e){return void 0!==e.uncompressedSize?e.uncompressedSize:0===e.compression?e.compressedSize:null},t.resolveManifestEntry=function(e,t,n,r){if(e.has(t))return{key:t,info:e.get(t),matchKind:"exact"};if(r)return null;const i=(0,s.zipBasenameWithoutExtension)(n);if(!i)return null;const o=`${i}/${t}`;return e.has(o)?{key:o,info:e.get(o),matchKind:"zipBasenameFallback"}:null};const r=n(616),s=n(602),i=n(803),o=n(997);function a(e){const t=new Map;for(const n of e){const e=(0,s.normalizeZipEntryPath)(n.filename);""!==e&&(t.has(e)&&(0,o.warn)("duplicate manifest key after normalize; overwriting",e),t.set(e,n))}return t.size>0?t:null}async function l(e){if(!e)return null;const t=await self.clients.get(e);return"window"===(null==t?void 0:t.type)?t:null}async function c(e,t,n){const r=await l(n);if(!r)return;const s=Array.from(t.values());try{r.postMessage({type:"ZIP_SW_MANIFEST_CREATED",zipUrl:e,files:s})}catch(e){(0,o.warn)("failed to send manifest to client",e)}}function u(e){return e instanceof Error?e.name&&"Error"!==e.name?`${e.name}: ${e.message}`:e.message:String(e)}function p(e,t,n){const i=(0,r.zipErrorInfo)({phase:t,zipPath:(0,s.zipPackagePathname)(e),online:navigator.onLine,status:n.status,reason:n.reason,cause:n.cause});(0,o.error)("ZIP manifest fetch failed",i);const a=(0,r.createZipPeekError)(n.network?`${r.NETWORK_ERROR_PREFIX} ZIP manifest fetch failed`:"ZIP manifest fetch failed",n.network?"warn":"error",i);return n.network?a.httpStatus=500:null!=n.status&&n.status>=400?(a.httpStatus=n.status,a.upstreamStatus=n.status):(a.httpStatus=502,null!=n.status&&(a.upstreamStatus=n.status)),a}async function f(e,t,n){let r;try{r=await fetch(e,{headers:{Range:t}})}catch(t){throw p(e,n,{network:!0,cause:u(t)})}if(206!==r.status)throw p(e,n,{network:!1,status:r.status});try{const e=await r.arrayBuffer();return{response:r,buffer:e}}catch(t){throw p(e,n,{network:!0,reason:"body",status:r.status,cause:u(t)})}}},866(e,t,n){t.installMessageHandler=function(){self.addEventListener("message",e=>{if(!e.data)return;const{type:t,zipUrl:n,files:u,config:f,allowedZipUrls:d,previousUrl:w,nextUrl:h}=e.data,g=function(e){if(!e||!("id"in e))return;const t=e.id;return"string"==typeof t?t:void 0}(e.source);if("ZIP_SW_CONFIG"!==t)if("ZIP_MANIFEST"===t){if(n&&u){const t=(0,s.normalizeZipUrl)(n),r=(0,c.manifestFilesToMap)(u),i=a.zipManifests.get(t);if(!r)return void(0,l.warn)("rejecting empty manifest; keeping existing",{zipUrl:t,existingSize:i?i.size:0});if(i&&i.size>r.size)return void(0,l.warn)("rejecting smaller manifest; keeping existing",{zipUrl:t,incomingSize:r.size,existingSize:i.size});a.zipManifests.set(t,r),e.waitUntil((0,c.sendManifestToClientId)(t,r,g));const o=Array.from(r.keys()).slice(0,40);(0,l.log)("ZIP_MANIFEST loaded",{zipUrl:t,entryCount:r.size,sampleKeys:o,replacedExistingSize:i?i.size:0})}}else"CLEAR_ZIP_ASSETS_EXCEPT_ALLOWED"===t?p(e,()=>(0,i.clearZipAssetsExceptLiveClaims)(o.clearZipAssetsExceptAllowed)):"CLEAR_ALL_ZIP_ASSETS"===t?p(e,()=>(0,o.clearAllZipAssets)()):"PRELOAD_ZIP_MANIFESTS"===t&&d?p(e,()=>async function(e,t){const n=[];if(await Promise.all(e.map(async e=>{try{await(0,c.ensureManifestAvailable)(e,t)}catch(e){n.push(e)}})),1===n.length)throw n[0];if(n.length>1){const e=n.map(e=>(0,r.toZipPeekError)(e));throw(0,r.createZipPeekError)("ZIP manifest fetch failed",e.every(e=>"warn"===e.zipPeekLevel)?"warn":"error",e.map(e=>{var t;return null!==(t=(0,r.zipPeekErrorInfo)(e))&&void 0!==t?t:e.message}).join(" | "))}}(d,g)):"RENEW_ZIP_URL"===t&&w&&h&&p(e,()=>(0,o.renewZipUrl)(w,h));else p(e,()=>(0,i.applyRuntimeConfig)(f,g))})};const r=n(616),s=n(602),i=n(887),o=n(531),a=n(803),l=n(997),c=n(479);function u(e,t){var n;null===(n=e.ports[0])||void 0===n||n.postMessage(t)}function p(e,t){e.waitUntil(self.clients.claim().then(t).then(()=>u(e,{ok:!0})).catch(t=>u(e,function(e){const t=(0,r.toZipPeekError)(e);return{ok:!1,error:t.message,errorStack:t.stack,info:(0,l.withVersion)((0,r.zipPeekErrorInfo)(t)),level:t.zipPeekLevel}}(t))))}},965(e,t,n){t.resolveAllowedZipUrlByPathname=function(e){const t=(0,s.getAllowedZipUrlsUnion)();if(null===t||t.has(e))return e;const n=(0,r.zipPackagePathname)(e);for(const e of t)if((0,r.zipPackagePathname)(e)===n)return e;return e},t.requestClientRenewal=function(e,t){if(null==(0,r.getPresignedUrlExpiryMs)(e))return Promise.resolve({ok:!1,reason:"not-presigned"});const n=(0,r.zipPackagePathname)(e)||(0,r.normalizeZipUrl)(e),s=o.get(n);if(s)return s;const a=async function(e,t){var n;let s=await async function(e){if(!e)return null;const t=await self.clients.get(e);return"window"===(null==t?void 0:t.type)?t:null}(t);if(!s){const e=await self.clients.matchAll({type:"window"});s=null!==(n=e[0])&&void 0!==n?n:null}return s?new Promise(t=>{const n=new MessageChannel;let o=!1;const a=e=>{o||(o=!0,n.port1.onmessage=null,n.port1.onmessageerror=null,n.port1.close(),t(e))};n.port1.onmessage=e=>{const t=e.data;if(!(null==t?void 0:t.ok)||"string"!=typeof t.nextUrl||""===t.nextUrl)return void a({ok:!1,reason:"page-rejected"});const n=(0,r.normalizeZipUrl)(t.nextUrl);(0,r.isPresignedUrlExpired)(n)?a({ok:!1,reason:"still-expired"}):a({ok:!0,nextUrl:n})},n.port1.onmessageerror=()=>{a({ok:!1,reason:"page-rejected"})};try{s.postMessage({type:"ZIP_SW_RENEW_REQUEST",zipUrl:e},[n.port2])}catch(e){(0,i.warn)("failed to post ZIP_SW_RENEW_REQUEST",e),a({ok:!1,reason:"page-rejected"})}}):{ok:!1,reason:"no-window-client"}}(e,t).finally(()=>{o.delete(n)});return o.set(n,a),a};const r=n(602),s=n(803),i=n(997),o=new Map},321(e,t,n){t.corsErrorResponse=u,t.getMimeType=f,t.fetchUncompressedZipEntryFromNetwork=async function(e,t,n){var l;const c=n.offset,u=n.nextOffset-1,w=(0,i.zipPackagePathname)(e);let h;(0,a.log)("fetching zip chunk from",{zipUrl:e,rangeStart:c,rangeEnd:u});try{h=await fetch(e,{headers:{Range:`bytes=${c}-${u}`}})}catch(e){return p(`${s.NETWORK_ERROR_PREFIX} ZIP asset fetch failed`,500,(0,s.zipErrorInfo)({path:t,zipPath:w,cause:(0,s.errorMessage)(e)}),"warn")}if(206!==h.status)return p("ZIP origin fetch failed",h.status>=400?h.status:502,(0,s.zipErrorInfo)({path:t,zipPath:w,status:h.status}),"error",{upstreamStatus:h.status});if(!h.body)return p("ZIP origin fetch failed",502,(0,s.zipErrorInfo)({path:t,zipPath:w,reason:"empty-body"}),"error");const g=h.body.getReader();let m,E;try{({headerAndPayload:m,dataStart:E}=await async function(e){let t=new Uint8Array(0);for(;t.byteLength<30;){const{done:n,value:r}=await e.read();if(n)throw new Error("ZIP entry ended before its local file header was complete");t=d(t,r)}const n=new DataView(t.buffer,t.byteOffset,t.byteLength);if(n.getUint32(0,!0)!==o.LOCAL_FILE_HEADER_SIG)throw new Error("Invalid local file header (expected ZIP signature 0x04034b50)");const r=30+n.getUint16(26,!0)+n.getUint16(28,!0);for(;t.byteLength<r;){const{done:n,value:r}=await e.read();if(n)throw new Error("ZIP entry ended before its local file header fields were complete");t=d(t,r)}return{headerAndPayload:t,dataStart:r}}(g))}catch(e){return await g.cancel(e),p("ZIP asset request failed",500,(0,s.zipErrorInfo)({path:t,zipPath:w,cause:(0,s.errorMessage)(e)}),"error")}const A=function(e,t,n){let r=t,s=0;return new ReadableStream({async pull(t){if(s>=n)return await e.cancel(),void t.close();let i;if(r.byteLength>0)i=r,r=new Uint8Array(0);else{const{done:r,value:o}=await e.read();if(r)return void t.error(new Error(`ZIP entry ended after ${s} of ${n} compressed bytes`));i=o}const o=n-s,a=i.byteLength>o?i.subarray(0,o):i;s+=a.byteLength,t.enqueue(a),s>=n&&(await e.cancel(),t.close())},cancel:t=>e.cancel(t)})}(g,m.subarray(E),n.compressedSize),y=null!==(l=n.uncompressedSize)&&void 0!==l?l:0===n.compression?n.compressedSize:null;let P;if(8===n.compression)P=function(e,t){const n=e.getReader();let s,i=0,o=!1;return new ReadableStream({start(e){s=new r.Inflate(t=>{i+=t.byteLength,e.enqueue(t)})},async pull(e){for(;!o;){const{done:r,value:a}=await n.read();if(r)return o=!0,s.push(new Uint8Array(0),!0),null!==t&&i!==t?void e.error(new Error(`Inflated ZIP entry size mismatch: expected ${t}, received ${i}`)):void e.close();s.push(a)}},cancel:e=>n.cancel(e)})}(A,y);else{if(0!==n.compression)return await g.cancel(),p("ZIP asset request failed",500,(0,s.zipErrorInfo)({path:t,zipPath:w,reason:"unsupported-compression",method:n.compression}),"error");P=A}return{ok:!0,stream:P,contentLength:y,contentType:f(t)}};const r=n(612),s=n(616),i=n(602),o=n(803),a=n(997);function l(e){return e.replace(/[\r\n]+/g," ").trim()}function c(e,t){const n=[o.ASSET_ERROR_HEADER],r={"Access-Control-Allow-Origin":"*",[o.ASSET_ERROR_HEADER]:l(e)},s=null==t?void 0:t.upstreamStatus;return void 0!==s&&(r[o.ASSET_UPSTREAM_STATUS_HEADER]=String(s),n.push(o.ASSET_UPSTREAM_STATUS_HEADER)),r["Access-Control-Expose-Headers"]=n.join(", "),r}function u(e,t,n){const r=(0,s.formatZipPeekError)(e);return new Response(r,{status:t,headers:c(r,n)})}function p(e,t,n,r,i){return(0,a.reportClientError)((0,s.createZipPeekError)(e,r),n),{ok:!1,response:u(e,t,i)}}function f(e){var t,n;const r=null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase();return r&&null!==(n=o.MIME_TYPES[r])&&void 0!==n?n:"application/octet-stream"}function d(e,t){const n=new Uint8Array(e.byteLength+t.byteLength);return n.set(e),n.set(t,e.byteLength),n}},602(e,t){function n(e){try{return decodeURIComponent(e)}catch(t){return e}}function r(e){const t=t=>function(e,t,n={}){const{stopAtPathSeparator:r=!0}=n,s=e.indexOf("?");if(-1===s)return null;const i=e.indexOf("#",s),o=-1===i?e.substring(s+1):e.substring(s+1,i),a=r?o.indexOf("/"):-1,l=-1===a?o:o.substring(0,a);for(const e of l.split("&")){const n=e.indexOf("=");if((-1===n?e:e.substring(0,n))===t)return-1===n?"":e.substring(n+1)}return null}(e,t,{stopAtPathSeparator:!1}),n=t("Expires");if(null!=n&&""!==n){const e=Number(n);if(Number.isFinite(e)&&e>0)return 1e3*e}const r=t("X-Amz-Date"),s=t("X-Amz-Expires");if(r&&s){const e=/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z$/.exec(r);if(!e)return null;const[,t,n,i,o,a,l]=e,c=Date.UTC(Number(t),Number(n)-1,Number(i),Number(o),Number(a),Number(l)),u=Number(s);return!Number.isFinite(c)||!Number.isFinite(u)||u<=0?null:c+1e3*u}return null}t.normalizeZipUrl=function(e,t={}){const{stripCacheBuster:n=!0,stripHash:r=!0}=t,s=e=>r?e.split("#")[0]:e;if(!n)return s(e);const i=e.indexOf("?");if(-1===i)return s(e);const o=e.indexOf("#",i),a=e.substring(0,i),l=-1===o?e.substring(i+1):e.substring(i+1,o),c=r||-1===o?"":e.substring(o),u=l.split("&").filter(e=>{const t=e.indexOf("=");return"t"!==(-1===t?e:e.substring(0,t))});return 0===u.length?a+c:a+"?"+u.join("&")+c},t.zipPackagePathname=function(e){try{return new URL(e).pathname}catch(t){return e.split("?")[0].split("#")[0]}},t.isPresignedUrlExpired=function(e){const t=r(e);return null!=t&&t<=Date.now()},t.zipBasenameWithoutExtension=function(e){var t,n;try{const n=null!==(t=new URL(e,"http://local").pathname.split("/").pop())&&void 0!==t?t:"";return n.endsWith(".zip")?n.slice(0,-4):n}catch(t){const r=null!==(n=e.split("?")[0].split("#")[0].split("/").pop())&&void 0!==n?n:"";return r.endsWith(".zip")?r.slice(0,-4):r}},t.normalizeZipEntryPath=function(e){let t=e.replace(/\\/g,"/");for(;t.startsWith("/");)t=t.slice(1);return t},t.parseZipAssetRequest=function(e){const t=/\.zip([/?])/.exec(e);if(!t)return null;const r=t.index+4,s=t[1],i=e.substring(0,r);if("/"===s){const t=e.substring(r+1),s=t.indexOf("?"),o=-1===s?t:t.substring(0,s);return""===o?null:{zipUrl:i,internalPath:n(o)}}const o=e.substring(r),a=o.indexOf("/");if(-1===a)return null;const l=o.substring(0,a),c=o.substring(a+1),u=c.indexOf("?"),p=-1===u?c:c.substring(0,u);return""===p?null:{zipUrl:i+l,internalPath:n(p)}},t.canonicalZipAssetRequestUrl=function(e,t){return e+"/"+encodeURIComponent(t)},t.getPresignedUrlExpiryMs=r},612(e,t){var n=Uint8Array,r=Uint16Array,s=Int32Array,i=new 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,0,0,0]),o=new 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,0,0]),a=new n([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),l=function(e,t){for(var n=new r(31),i=0;i<31;++i)n[i]=t+=1<<e[i-1];var o=new s(n[30]);for(i=1;i<30;++i)for(var a=n[i];a<n[i+1];++a)o[a]=a-n[i]<<5|i;return{b:n,r:o}},c=l(i,2),u=c.b,p=c.r;u[28]=258,p[258]=28;for(var f=l(o,0),d=f.b,w=(f.r,new r(32768)),h=0;h<32768;++h){var g=(43690&h)>>1|(21845&h)<<1;g=(61680&(g=(52428&g)>>2|(13107&g)<<2))>>4|(3855&g)<<4,w[h]=((65280&g)>>8|(255&g)<<8)>>1}var m=function(e,t,n){for(var s=e.length,i=0,o=new r(t);i<s;++i)e[i]&&++o[e[i]-1];var a,l=new r(t);for(i=1;i<t;++i)l[i]=l[i-1]+o[i-1]<<1;if(n){a=new r(1<<t);var c=15-t;for(i=0;i<s;++i)if(e[i])for(var u=i<<4|e[i],p=t-e[i],f=l[e[i]-1]++<<p,d=f|(1<<p)-1;f<=d;++f)a[w[f]>>c]=u}else for(a=new r(s),i=0;i<s;++i)e[i]&&(a[i]=w[l[e[i]-1]++]>>15-e[i]);return a},E=new n(288);for(h=0;h<144;++h)E[h]=8;for(h=144;h<256;++h)E[h]=9;for(h=256;h<280;++h)E[h]=7;for(h=280;h<288;++h)E[h]=8;var A=new n(32);for(h=0;h<32;++h)A[h]=5;var y=m(E,9,1),P=m(A,5,1),U=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},R=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(7&t)&n},v=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(7&t)},Z=function(e){return(e+7)/8|0},z=function(e,t,r){return(null==t||t<0)&&(t=0),(null==r||r>e.length)&&(r=e.length),new n(e.subarray(t,r))},S=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],C=function(e,t,n){var r=new Error(t||S[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,C),!n)throw r;return r},_=function(e,t,r,s){var l=e.length,c=s?s.length:0;if(!l||t.f&&!t.l)return r||new n(0);var p=!r,f=p||2!=t.i,w=t.i;p&&(r=new n(3*l));var h=function(e){var t=r.length;if(e>t){var s=new n(Math.max(2*t,e));s.set(r),r=s}},g=t.f||0,E=t.p||0,A=t.b||0,S=t.l,_=t.d,b=t.m,I=t.n,k=8*l;do{if(!S){g=R(e,E,1);var L=R(e,E+1,3);if(E+=3,!L){var M=e[($=Z(E)+4)-4]|e[$-3]<<8,T=$+M;if(T>l){w&&C(0);break}f&&h(A+M),r.set(e.subarray($,T),A),t.b=A+=M,t.p=E=8*T,t.f=g;continue}if(1==L)S=y,_=P,b=9,I=5;else if(2==L){var x=R(e,E,31)+257,F=R(e,E+10,15)+4,O=x+R(e,E+5,31)+1;E+=14;for(var N=new n(O),H=new n(19),q=0;q<F;++q)H[a[q]]=R(e,E+3*q,7);E+=3*F;var D=U(H),W=(1<<D)-1,j=m(H,D,1);for(q=0;q<O;){var $,K=j[R(e,E,W)];if(E+=15&K,($=K>>4)<16)N[q++]=$;else{var X=0,G=0;for(16==$?(G=3+R(e,E,3),E+=2,X=N[q-1]):17==$?(G=3+R(e,E,7),E+=3):18==$&&(G=11+R(e,E,127),E+=7);G--;)N[q++]=X}}var B=N.subarray(0,x),V=N.subarray(x);b=U(B),I=U(V),S=m(B,b,1),_=m(V,I,1)}else C(1);if(E>k){w&&C(0);break}}f&&h(A+131072);for(var Y=(1<<b)-1,Q=(1<<I)-1,J=E;;J=E){var ee=(X=S[v(e,E)&Y])>>4;if((E+=15&X)>k){w&&C(0);break}if(X||C(2),ee<256)r[A++]=ee;else{if(256==ee){J=E,S=null;break}var te=ee-254;if(ee>264){var ne=i[q=ee-257];te=R(e,E,(1<<ne)-1)+u[q],E+=ne}var re=_[v(e,E)&Q],se=re>>4;if(re||C(3),E+=15&re,V=d[se],se>3&&(ne=o[se],V+=v(e,E)&(1<<ne)-1,E+=ne),E>k){w&&C(0);break}f&&h(A+131072);var ie=A+te;if(A<V){var oe=c-V,ae=Math.min(V,ie);for(oe+A<0&&C(3);A<ae;++A)r[A]=s[oe+A]}for(;A<ie;++A)r[A]=r[A-V]}}t.l=S,t.p=J,t.b=A,t.f=g,S&&(g=1,t.m=b,t.d=_,t.n=I)}while(!g);return A!=r.length&&p?z(r,0,A):r.subarray(0,A)},b=new n(0);var I=function(){function e(e,t){"function"==typeof e&&(t=e,e={}),this.ondata=t;var r=e&&e.dictionary&&e.dictionary.subarray(-32768);this.s={i:0,b:r?r.length:0},this.o=new n(32768),this.p=new n(0),r&&this.o.set(r)}return e.prototype.e=function(e){if(this.ondata||C(5),this.d&&C(4),this.p.length){if(e.length){var t=new n(this.p.length+e.length);t.set(this.p),t.set(e,this.p.length),this.p=t}}else this.p=e},e.prototype.c=function(e){this.s.i=+(this.d=e||!1);var t=this.s.b,n=_(this.p,this.s,this.o);this.ondata(z(n,t,this.s.b),this.d),this.o=z(n,this.s.b-32768),this.s.b=this.o.length,this.p=z(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}();t.Inflate=I;var k="undefined"!=typeof TextDecoder&&new TextDecoder;try{k.decode(b,{stream:!0})}catch(e){}"function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout&&setTimeout},330(e){e.exports=JSON.parse('{"version":"0.7.3-beta"}')}};const t={};function n(r){const s=t[r];if(void 0!==s)return s.exports;const i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}(()=>{const e=n(997),t=n(629),r=n(866);self.addEventListener("install",()=>{self.skipWaiting()}),self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim())}),(0,e.installClientErrorReporting)(),(0,r.installMessageHandler)(),(0,t.installFetchHandler)()})()})();
|
|
2
2
|
//# sourceMappingURL=zipServiceWorker.js.map
|