zip-peek 0.6.7 → 0.7.0-beta.2
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 +13 -6
- package/dist/index.d.ts +12 -5
- package/dist/index.js +128 -32
- package/dist/types.d.ts +17 -4
- package/dist/types.js +28 -4
- package/dist/zip-utils.d.ts +4 -0
- package/dist/zip-utils.js +16 -0
- package/dist/zipServiceWorker.js +1 -1
- package/dist/zipServiceWorker.js.map +1 -1
- package/package.json +1 -1
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.ZIP_PEEK_ERROR_PREFIX=void 0,t.formatZipPeekError=n,t.createZipPeekError=function(e){return new Error(n(e))},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.errorMessage=function(e){return e instanceof Error?e.message:String(e)},t.ZIP_PEEK_ERROR_PREFIX="[zip-peek-error]"},314(e,t,n){t.persistAllowedZipUrlsConfig=a,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();Array.isArray(n.allowedZipUrls)?(0,s.setAllowedZipUrls)(new Set(n.allowedZipUrls.filter(e=>"string"==typeof e).map(e=>(0,r.normalizeZipUrl)(e)))):(0,s.setAllowedZipUrls)(null)}catch(e){(0,i.warn)("failed to load runtime config",e)}})();return(0,s.setAllowedZipUrlsLoaded)(e),e},t.applyRuntimeConfig=async function(e){if(!e)return;let t=Object.assign({},s.runtimeConfig),n=!1;if("string"==typeof e.zipAssetCacheName&&e.zipAssetCacheName.trim()&&(t.zipAssetCacheName=e.zipAssetCacheName,n=!0),"number"==typeof e.assetCacheTtlMs&&Number.isFinite(e.assetCacheTtlMs)&&(t.assetCacheTtlMs=e.assetCacheTtlMs,n=!0),"string"==typeof e.logPrefix&&e.logPrefix.trim()&&(t.logPrefix=e.logPrefix,n=!0),"boolean"==typeof e.requireExactManifestPath&&(t.requireExactManifestPath=e.requireExactManifestPath,n=!0),n&&(0,s.setRuntimeConfig)(t),"allowedZipUrls"in e){const t=Array.isArray(e.allowedZipUrls)?e.allowedZipUrls.map(e=>(0,r.normalizeZipUrl)(e)):null;(0,s.setAllowedZipUrls)(t?new Set(t):null),(0,s.setAllowedZipUrlsLoaded)(Promise.resolve()),await a(t)}},t.isZipUrlAllowed=function(e){return null===s.allowedZipUrls||s.allowedZipUrls.has(e)};const r=n(343),s=n(262),i=n(266);async function a(e){try{const t=await caches.open(s.CONFIG_CACHE_NAME);await t.put(new Request(s.CONFIG_CACHE_KEY),new Response(JSON.stringify({allowedZipUrls:e}),{headers:{"Content-Type":"application/json"}}))}catch(e){(0,i.warn)("failed to persist runtime config",e)}}},800(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(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,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,i=(0,s.parseZipAssetRequest)(r);i&&!t.has(i.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),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(o.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(o.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;if(o.allowedZipUrls){const e=new Set(o.allowedZipUrls);e.delete(n),e.add(l),(0,o.setAllowedZipUrls)(e),(0,o.setAllowedZipUrlsLoaded)(Promise.resolve()),await(0,i.persistAllowedZipUrlsConfig)(Array.from(e))}const c=o.zipManifests.get(n);c&&(o.zipManifests.set(l,c),o.zipManifests.delete(n));const f=o.pendingManifestLoads.get(n);f&&(o.pendingManifestLoads.set(l,f),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,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)}`)}};const r=n(553),s=n(343),i=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=s.inFlightZipAssets.get(n);if(r)return r;let i,a;const o=new Promise((e,t)=>{i=e,a=t}),l={resultPromise:t(),cacheFillPromise:o,leaderClaimed:!1,resolveCacheFill:i,rejectCacheFill:a};return o.finally(()=>{s.inFlightZipAssets.delete(n)}),s.inFlightZipAssets.set(n,l),l},t.completeInFlightAssetLoad=function(e,t){const n=s.inFlightZipAssets.get(e);n&&(void 0!==t?n.rejectCacheFill(t):n.resolveCacheFill())},t.remapInFlightZipAssetsForRenewal=function(e,t){const n=(0,r.normalizeZipUrl)(e),i=(0,r.normalizeZipUrl)(t);for(const[e,t]of[...s.inFlightZipAssets]){const a=(0,r.parseZipAssetRequest)(e);if(a&&(0,r.normalizeZipUrl)(a.zipUrl)===n){const n=(0,r.canonicalZipAssetRequestUrl)(i,a.internalPath);s.inFlightZipAssets.delete(e),s.inFlightZipAssets.set(n,t)}}};const r=n(343),s=n(262)},982(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;const p="HEAD"===e.method,g=(0,s.parseZipAssetRequest)(e.url),m=(0,s.normalizeZipUrl)(g.zipUrl),w=g.internalPath,E=(0,s.normalizeZipEntryPath)(w);try{if(await(0,i.ensureAllowedZipUrlsLoaded)(),!(0,i.isZipUrlAllowed)(m))return(0,c.warn)("zip URL not allowed",{requestedZipUrl:m}),{response:(0,u.corsErrorResponse)(`ZIP URL not allowed (not in allowedZipUrls): ${m}`,403)};let s=l.zipManifests.get(m);if(s||(s=null!==(n=await(0,f.ensureManifestAvailable)(m,t))&&void 0!==n?n:void 0),!s){const e=Array.from(l.zipManifests.keys());return(0,c.warn)("manifest missing for zipUrl",{requestedZipUrl:m,knownZipUrls:e}),{response:(0,u.corsErrorResponse)(`ZIP manifest not loaded for ${m}. Ensure the ZIP is reachable and supports byte-range requests.`,404)}}const g=(0,f.resolveManifestEntry)(s,E,m,l.runtimeConfig.requireExactManifestPath);if(!g){const e=Array.from(s.keys()).slice(0,50);return(0,c.warn)("file not in manifest",{zipUrl:m,internalPathRaw:w,internalPathNormalized:E,requireExactManifestPath:l.runtimeConfig.requireExactManifestPath,manifestSize:s.size,sampleKeys:e}),{response:(0,u.corsErrorResponse)(`File "${w}" not found in ZIP manifest for ${m}`,404)}}const{key:A,info:y,matchKind:U}=g;if("zipBasenameFallback"===U&&((0,c.log)("resolved via zip-basename folder fallback",{requested:E,manifestKey:A}),(0,c.reportClientError)(new Error((0,r.formatZipPeekError)("Exact manifest path not found; resolved via zip-basename folder fallback")),`Exact manifest key "${E}" not found in ${m}; resolved using "${A}"`)),p)return{response:h(e,A,y)};const v=(0,a.canonicalAssetRequest)(m,A),R=await(0,a.readCachedZipAssetIfFresh)(v),C=(0,f.entryUncompressedSize)(y),Z=(0,u.getMimeType)(A);if(R.response)return{response:d(R.response.body,Z,C,R.assetSource,e.headers.get("range"))};const S=(0,o.getOrStartInFlightAsset)(v,()=>(0,u.fetchUncompressedZipEntryFromNetwork)(m,A,y)),z=await S.resultPromise;if(!z.ok)return(0,o.completeInFlightAssetLoad)(v.url),{response:z.response};const _=!S.leaderClaimed&&(S.leaderClaimed=!0),b=8===y.compression?null:e.headers.get("range");if(!_){await S.cacheFillPromise;const t=await(0,a.readCachedZipAssetIfFresh)(v);return t.response?{response:d(t.response.body,Z,C,t.assetSource,e.headers.get("range"))}:{response:(0,u.corsErrorResponse)(`Failed to serve "${A}" from ${m}: asset cache was not ready after in-flight load`,500)}}const[P,M]=z.stream.tee(),I={"Content-Type":z.contentType};null!==z.contentLength&&(I["Content-Length"]=String(z.contentLength));const T=v.url,L=(0,a.putCachedFullAssetIfAbsent)(v,new Response(M,{status:200,headers:I})).then(()=>{(0,o.completeInFlightAssetLoad)(T)}).catch(e=>{throw(0,o.completeInFlightAssetLoad)(T,e),e});return{response:d(P,z.contentType,z.contentLength,"network",b),background:L}}catch(e){return(0,c.error)("fetch handler failed",{zipUrl:m,internalPath:w,message:(0,r.errorMessage)(e)}),{response:(0,u.corsErrorResponse)(`Failed to serve "${w}" from ${m}: ${(0,r.errorMessage)(e)}`,500)}}}(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),s=n(343),i=n(314),a=n(800),o=n(30),l=n(262),c=n(266),f=n(346),u=n(254);function p(e){return{"Access-Control-Allow-Origin":"*","Access-Control-Expose-Headers":l.ASSET_SOURCE_HEADER,[l.ASSET_SOURCE_HEADER]:e}}function d(e,t,n,r,s){if(s){if(null===n)return null==e||e.cancel(),new Response(null,{status:416,headers:p(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}`},p(r))});const[a,o]=i.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}`},p(r))});const f=Math.min(c,n-1),u=f-l+1,d=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:a,value:o}=await r.read();if(a)return i=!0,void e.close();const l=o,c=s,f=s+l.byteLength-1;if(s+=l.byteLength,f<t)continue;if(c>n)return i=!0,void e.close();const u=Math.max(0,t-c),p=Math.min(l.byteLength,n-c+1);if(p>u&&e.enqueue(l.subarray(u,p)),f>=n)return i=!0,void e.close()}},cancel:e=>r.cancel(e)})}(e,l,f);return new Response(d,{status:206,headers:Object.assign({"Content-Type":t,"Content-Range":`bytes ${l}-${f}/${n}`,"Content-Length":u.toString(),"Accept-Ranges":"bytes"},p(r))})}const i=Object.assign({"Content-Type":t},p(r));return null!==n&&(i["Content-Length"]=n.toString(),i["Accept-Ranges"]="bytes"),new Response(e,{status:200,headers:i})}function h(e,t,n){const r=(0,u.getMimeType)(t),s=(0,f.entryUncompressedSize)(n),i=e.headers.get("range");if(null!==s&&i)return d(null,r,s,"manifest",i);const a=Object.assign({"Content-Type":r},p("manifest"));return null!==s&&(a["Content-Length"]=s.toString(),a["Accept-Ranges"]="bytes"),new Response(null,{status:200,headers:a})}},262(e,t){t.CONFIG_CACHE_KEY=t.allowedZipUrlsLoaded=t.allowedZipUrls=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.setAllowedZipUrls=function(e){t.allowedZipUrls=e},t.setAllowedZipUrlsLoaded=function(e){t.allowedZipUrlsLoaded=e},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.allowedZipUrls=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(s.runtimeConfig.logPrefix,...e)},t.warn=function(...e){console.warn(s.runtimeConfig.logPrefix,...e)},t.error=function(...e){console.error(s.runtimeConfig.logPrefix,r.ZIP_PEEK_ERROR_PREFIX,...e)},t.reportClientError=i,t.installClientErrorReporting=function(){self.addEventListener("error",e=>{var t;i(null!==(t=e.error)&&void 0!==t?t:e.message,"Service worker uncaught error")}),self.addEventListener("unhandledrejection",e=>{i(e.reason,"Service worker unhandled promise rejection")})};const r=n(553),s=n(262);function i(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:t?(0,r.formatZipPeekError)(t):void 0};for(const t of e)t.postMessage(s)})}},346(e,t,n){t.manifestFilesToMap=a,t.sendManifestToClientId=l,t.ensureManifestAvailable=function(e,t){const n=s.zipManifests.get(e);if(n)return Promise.resolve(n);let c=s.pendingManifestLoads.get(e);return c||(c=(async()=>{const n=await async function(e,t){const n=await o(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,i.warn)("failed to request manifest from client",e),n(null)}})}(n,e):null}(e,t);if(n)return s.zipManifests.set(e,n),(0,i.log)("restored manifest from client memory",{zipUrl:e,entryCount:n.size}),n;const c=await async function(e){const t=await fetch(e,{headers:{Range:"bytes=-65536"}});if(206!==t.status)return(0,i.error)("range requests not supported for ZIP manifest",{zipUrl:e,status:t.status}),null;const n=await t.arrayBuffer(),s=new DataView(n);let a=-1;for(let e=n.byteLength-22;e>=0;e--)if(101010256===s.getUint32(e,!0)){a=e;break}if(-1===a)return(0,i.error)("EOCD not found in last 64KB of ZIP file",e),null;const o=s.getUint32(a+16,!0),l=s.getUint32(a+12,!0);let c=n,f=-1;const u=t.headers.get("Content-Range");let p=0;if(u){const e=u.match(/\/(\d+)$/);e&&(p=parseInt(e[1],10))}if(p<=0)return(0,i.error)("could not determine ZIP file size from Content-Range header",{zipUrl:e,contentRange:u}),null;const d=p-n.byteLength;if(o>=d)f=o-d;else{const t=await fetch(e,{headers:{Range:`bytes=${o}-${o+l-1}`}});if(206!==t.status)return(0,i.error)("failed to fetch ZIP central directory",{zipUrl:e,status:t.status,cdOffset:o,cdSize:l}),null;c=await t.arrayBuffer(),f=0}return function(e,t,n,s){const a=new DataView(e);let o=t;const l=[];for(;o+46<=e.byteLength&&33639248===a.getUint32(o,!0);){const t=a.getUint16(o+10,!0),n=a.getUint32(o+20,!0),s=a.getUint32(o+24,!0),i=a.getUint16(o+28,!0),c=a.getUint16(o+30,!0),f=a.getUint16(o+32,!0),u=a.getUint32(o+42,!0),p=new TextDecoder;if(o+46+i>e.byteLength)break;const d=new Uint8Array(e,o+46,i),h=p.decode(d),g=(0,r.normalizeZipEntryPath)(h);""!==g&&l.push({filename:g,offset:u,compressedSize:n,uncompressedSize:s,compression:t}),o+=46+i+c+f}if(0===l.length)return(0,i.error)("no files parsed from central directory",s),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],s=(0,r.normalizeZipEntryPath)(t.filename);""!==s&&(c.has(s)&&(0,i.warn)("duplicate manifest key after normalize; overwriting",s),c.set(s,{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,f,o,e)}(e);return c&&(s.zipManifests.set(e,c),await l(e,c,t),(0,i.log)("manifest fetched and stored in memory",{zipUrl:e,entryCount:c.size})),c})().finally(()=>{s.pendingManifestLoads.delete(e)}),s.pendingManifestLoads.set(e,c),c)},t.entryUncompressedSize=function(e){return void 0!==e.uncompressedSize?e.uncompressedSize:0===e.compression?e.compressedSize:null},t.resolveManifestEntry=function(e,t,n,s){if(e.has(t))return{key:t,info:e.get(t),matchKind:"exact"};if(s)return null;const i=(0,r.zipBasenameWithoutExtension)(n);if(!i)return null;const a=`${i}/${t}`;return e.has(a)?{key:a,info:e.get(a),matchKind:"zipBasenameFallback"}:null};const r=n(343),s=n(262),i=n(266);function a(e){const t=new Map;for(const n of e){const e=(0,r.normalizeZipEntryPath)(n.filename);""!==e&&(t.has(e)&&(0,i.warn)("duplicate manifest key after normalize; overwriting",e),t.set(e,n))}return t.size>0?t:null}async function o(e){if(!e)return null;const t=await self.clients.get(e);return"window"===(null==t?void 0:t.type)?t:null}async function l(e,t,n){const r=await o(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,i.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:p,config:d,allowedZipUrls:h,previousUrl:g,nextUrl:m}=e.data,w=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,i.applyRuntimeConfig)(d).then(()=>u(e,{ok:!0})).catch(t=>u(e,f(t)));return void e.waitUntil(t)}if("ZIP_MANIFEST"===t){if(n&&p){const t=(0,s.normalizeZipUrl)(n),r=(0,c.manifestFilesToMap)(p),i=o.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});o.zipManifests.set(t,r),e.waitUntil((0,c.sendManifestToClientId)(t,r,w));const a=Array.from(r.keys()).slice(0,40);(0,l.log)("ZIP_MANIFEST loaded",{zipUrl:t,entryCount:r.size,sampleKeys:a,replacedExistingSize:i?i.size:0})}}else if("CLEAR_ZIP_ASSETS_EXCEPT_ALLOWED"===t&&h){const t=(0,a.clearZipAssetsExceptAllowed)(h).then(()=>u(e,{ok:!0})).catch(t=>u(e,f(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,f(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)}))),s=n.filter(e=>!e.manifest).map(e=>e.zipUrl);if(s.length>0)throw(0,r.createZipPeekError)(`Failed to preload ZIP manifest(s): ${s.join(", ")}`)}(h,w).then(()=>u(e,{ok:!0})).catch(t=>u(e,f(t)));e.waitUntil(t)}else if("RENEW_ZIP_URL"===t&&g&&m){const t=(0,a.renewZipUrl)(g,m).then(()=>u(e,{ok:!0})).catch(t=>u(e,f(t)));e.waitUntil(t)}})};const r=n(553),s=n(343),i=n(314),a=n(800),o=n(262),l=n(266),c=n(346);function f(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)}},254(e,t,n){t.corsErrorResponse=c,t.getMimeType=f,t.fetchUncompressedZipEntryFromNetwork=async function(e,t,n){var s;const o=n.offset,l=n.nextOffset-1;(0,a.log)("fetching zip chunk from",{zipUrl:e,rangeStart:o,rangeEnd:l});const p=await fetch(e,{headers:{Range:`bytes=${o}-${l}`}});if(206!==p.status){const n=p.status>=400?p.status:502;return{ok:!1,response:c(`ZIP entry fetch for "${t}" expected HTTP 206 Partial Content from ${e}, got ${p.status}`,n,{upstreamStatus:p.status})}}if(!p.body)return{ok:!1,response:c(`ZIP entry fetch for "${t}" in ${e} returned no response body`,502)};const d=p.body.getReader();let h,g;try{({headerAndPayload:h,dataStart:g}=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=u(t,r)}const n=new DataView(t.buffer,t.byteOffset,t.byteLength);if(n.getUint32(0,!0)!==i.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=u(t,r)}return{headerAndPayload:t,dataStart:r}}(d))}catch(n){return await d.cancel(n),{ok:!1,response:c(`Invalid local file header for "${t}" in ${e}: ${n instanceof Error?n.message:String(n)}`,500)}}const m=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:a}=await e.read();if(r)return void t.error(new Error(`ZIP entry ended after ${s} of ${n} compressed bytes`));i=a}const a=n-s,o=i.byteLength>a?i.subarray(0,a):i;s+=o.byteLength,t.enqueue(o),s>=n&&(await e.cancel(),t.close())},cancel:t=>e.cancel(t)})}(d,h.subarray(g),n.compressedSize),w=null!==(s=n.uncompressedSize)&&void 0!==s?s:0===n.compression?n.compressedSize:null;let E;if(8===n.compression)E=function(e,t){const n=e.getReader();let s,i=0,a=!1;return new ReadableStream({start(e){s=new r.Inflate(t=>{i+=t.byteLength,e.enqueue(t)})},async pull(e){for(;!a;){const{done:r,value:o}=await n.read();if(r)return a=!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(o)}},cancel:e=>n.cancel(e)})}(m,w);else{if(0!==n.compression)return await d.cancel(),{ok:!1,response:c(`Unsupported compression method ${n.compression} for "${t}" in ${e} (only stored/0 and DEFLATE/8 are supported)`,500)};E=m}return{ok:!0,stream:E,contentLength:w,contentType:f(t)}};const r=n(612),s=n(553),i=n(262),a=n(266);function o(e){return e.replace(/[\r\n]+/g," ").trim()}function l(e,t){const n=[i.ASSET_ERROR_HEADER],r={"Access-Control-Allow-Origin":"*",[i.ASSET_ERROR_HEADER]:o(e)},s=null==t?void 0:t.upstreamStatus;return void 0!==s&&(r[i.ASSET_UPSTREAM_STATUS_HEADER]=String(s),n.push(i.ASSET_UPSTREAM_STATUS_HEADER)),r["Access-Control-Expose-Headers"]=n.join(", "),r}function c(e,t,n){const r=(0,s.formatZipPeekError)(e);return new Response(r,{status:t,headers:l(r,n)})}function f(e){var t,n;const r=null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase();return r&&null!==(n=i.MIME_TYPES[r])&&void 0!==n?n:"application/octet-stream"}function u(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}}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 a=e.indexOf("#",i),o=e.substring(0,i),l=-1===a?e.substring(i+1):e.substring(i+1,a),c=r||-1===a?"":e.substring(a),f=l.split("&").filter(e=>{const t=e.indexOf("=");return"t"!==(-1===t?e:e.substring(0,t))});return 0===f.length?o+c:o+"?"+f.join("&")+c},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("?"),a=-1===s?t:t.substring(0,s);return""===a?null:{zipUrl:i,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),f=c.indexOf("?"),u=-1===f?c:c.substring(0,f);return""===u?null:{zipUrl:i+l,internalPath:n(u)}},t.canonicalZipAssetRequestUrl=function(e,t){return e+"/"+encodeURIComponent(t)}},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]),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),i=0;i<31;++i)n[i]=t+=1<<e[i-1];var a=new s(n[30]);for(i=1;i<30;++i)for(var o=n[i];o<n[i+1];++o)a[o]=o-n[i]<<5|i;return{b:n,r:a}},c=l(i,2),f=c.b,u=c.r;f[28]=258,u[258]=28;for(var p=l(a,0),d=p.b,h=(p.r,new r(32768)),g=0;g<32768;++g){var m=(43690&g)>>1|(21845&g)<<1;m=(61680&(m=(52428&m)>>2|(13107&m)<<2))>>4|(3855&m)<<4,h[g]=((65280&m)>>8|(255&m)<<8)>>1}var w=function(e,t,n){for(var s=e.length,i=0,a=new r(t);i<s;++i)e[i]&&++a[e[i]-1];var o,l=new r(t);for(i=1;i<t;++i)l[i]=l[i-1]+a[i-1]<<1;if(n){o=new r(1<<t);var c=15-t;for(i=0;i<s;++i)if(e[i])for(var f=i<<4|e[i],u=t-e[i],p=l[e[i]-1]++<<u,d=p|(1<<u)-1;p<=d;++p)o[h[p]>>c]=f}else for(o=new r(s),i=0;i<s;++i)e[i]&&(o[i]=h[l[e[i]-1]++]>>15-e[i]);return o},E=new n(288);for(g=0;g<144;++g)E[g]=8;for(g=144;g<256;++g)E[g]=9;for(g=256;g<280;++g)E[g]=7;for(g=280;g<288;++g)E[g]=8;var A=new n(32);for(g=0;g<32;++g)A[g]=5;var y=w(E,9,1),U=w(A,5,1),v=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},C=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},S=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))},z=["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"],_=function(e,t,n){var r=new Error(t||z[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,_),!n)throw r;return r},b=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 u=!r,p=u||2!=t.i,h=t.i;u&&(r=new n(3*l));var g=function(e){var t=r.length;if(e>t){var s=new n(Math.max(2*t,e));s.set(r),r=s}},m=t.f||0,E=t.p||0,A=t.b||0,z=t.l,b=t.d,P=t.m,M=t.n,I=8*l;do{if(!z){m=R(e,E,1);var T=R(e,E+1,3);if(E+=3,!T){var L=e[(W=Z(E)+4)-4]|e[W-3]<<8,k=W+L;if(k>l){h&&_(0);break}p&&g(A+L),r.set(e.subarray(W,k),A),t.b=A+=L,t.p=E=8*k,t.f=m;continue}if(1==T)z=y,b=U,P=9,M=5;else if(2==T){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),$=0;$<x;++$)H[o[$]]=R(e,E+3*$,7);E+=3*x;var D=v(H),q=(1<<D)-1,j=w(H,D,1);for($=0;$<O;){var W,K=j[R(e,E,q)];if(E+=15&K,(W=K>>4)<16)N[$++]=W;else{var G=0,X=0;for(16==W?(X=3+R(e,E,3),E+=2,G=N[$-1]):17==W?(X=3+R(e,E,7),E+=3):18==W&&(X=11+R(e,E,127),E+=7);X--;)N[$++]=G}}var B=N.subarray(0,F),Y=N.subarray(F);P=v(B),M=v(Y),z=w(B,P,1),b=w(Y,M,1)}else _(1);if(E>I){h&&_(0);break}}p&&g(A+131072);for(var V=(1<<P)-1,J=(1<<M)-1,Q=E;;Q=E){var ee=(G=z[C(e,E)&V])>>4;if((E+=15&G)>I){h&&_(0);break}if(G||_(2),ee<256)r[A++]=ee;else{if(256==ee){Q=E,z=null;break}var te=ee-254;if(ee>264){var ne=i[$=ee-257];te=R(e,E,(1<<ne)-1)+f[$],E+=ne}var re=b[C(e,E)&J],se=re>>4;if(re||_(3),E+=15&re,Y=d[se],se>3&&(ne=a[se],Y+=C(e,E)&(1<<ne)-1,E+=ne),E>I){h&&_(0);break}p&&g(A+131072);var ie=A+te;if(A<Y){var ae=c-Y,oe=Math.min(Y,ie);for(ae+A<0&&_(3);A<oe;++A)r[A]=s[ae+A]}for(;A<ie;++A)r[A]=r[A-Y]}}t.l=z,t.p=Q,t.b=A,t.f=m,z&&(m=1,t.m=P,t.d=b,t.n=M)}while(!m);return A!=r.length&&u?S(r,0,A):r.subarray(0,A)},P=new n(0);var M=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||_(5),this.d&&_(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=b(this.p,this.s,this.o);this.ondata(S(n,t,this.s.b),this.d),this.o=S(n,this.s.b-32768),this.s.b=this.o.length,this.p=S(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=M;var I="undefined"!=typeof TextDecoder&&new TextDecoder;try{I.decode(P,{stream:!0})}catch(e){}"function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout&&setTimeout}};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(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={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)()})()})();
|
|
2
2
|
//# sourceMappingURL=zipServiceWorker.js.map
|