-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsw.js
More file actions
1 lines (1 loc) · 2.99 KB
/
sw.js
File metadata and controls
1 lines (1 loc) · 2.99 KB
1
const CACHE_NAME="d0j1a1701Cache";let cachelist=[],whitelist=["localhost","api.d0j1a1701.cc"];self.addEventListener("install",async function(e){self.skipWaiting();console.info("[Service Worker] Service Worker加载成功");e.waitUntil(caches.open(CACHE_NAME).then(function(e){console.info("[Service Worker] 缓存已加载");return e.addAll(cachelist)}))});self.addEventListener("fetch",async t=>{try{t.respondWith(handle(t.request))}catch(e){t.respondWith(handleerr(t.request,e))}});const handleerr=async(e,t)=>{return new Response(`<h1>Service Worker遇到了致命错误</h1><b>${t}</b>`,{headers:{"content-type":"text/html; charset=utf-8"}})};let cdn={gh:{jsdelivr:{url:"https://cdn.jsdelivr.net/gh"},jsdelivr_fastly:{url:"https://fastly.jsdelivr.net/gh"},jsdelivr_gcore:{url:"https://gcore.jsdelivr.net/gh"},zzko:{url:"https://jsd.cdn.zzko.cn/gh"}},combine:{jsdelivr:{url:"https://cdn.jsdelivr.net/combine"},jsdelivr_fastly:{url:"https://fastly.jsdelivr.net/combine"},jsdelivr_gcore:{url:"https://gcore.jsdelivr.net/combine"},zzko:{url:"https://jsd.cdn.zzko.cn/gh"}},npm:{eleme:{url:"https://npm.elemecdn.com"},jsdelivr:{url:"https://cdn.jsdelivr.net/npm"},zhimg:{url:"https://unpkg.zhimg.com"},unpkg:{url:"https://unpkg.com"},bdstatic:{url:"https://code.bdstatic.com/npm"},tianli:{url:"https://cdn1.tianli0.top/npm"},sourcegcdn:{url:"https://npm.sourcegcdn.com/npm"},zzko:{url:"https://jsd.cdn.zzko.cn/gh"}}};const fetchFromCache=function(r){return new Promise(t=>{if(r.method=="POST"||r.url.indexOf("chrome-extension://")!=-1){t(fetch(r));return}let e=new URL(r.url),n=e.hostname;if(whitelist.indexOf(n)!=-1){t(fetch(r));return}setTimeout(async()=>{caches.match(r).then(function(e){if(e){t(e);fetch(r).then(function(t){return caches.open(CACHE_NAME).then(function(e){e.delete(r);e.put(r,t.clone());return t})})}else{t(fetch(r).then(function(t){return caches.open(CACHE_NAME).then(function(e){e.delete(r);e.put(r,t.clone());return t})}))}})},0)})};const handle=async function(r){const c=r.url;const e=c.split("/")[2];let s=[];for(let n in cdn){for(let t in cdn[n]){if(e==cdn[n][t].url.split("https://")[1].split("/")[0]&&c.match(cdn[n][t].url)){s=[];for(let e in cdn[n]){s.push(c.replace(cdn[n][t].url,cdn[n][e].url))}if(c.indexOf("@latest/")>-1){return lfetch(s,c)}else{return caches.match(r).then(function(e){return e||lfetch(s,c).then(function(t){return caches.open(CACHE_NAME).then(function(e){e.put(r,t.clone());return t})})})}}}}return fetchFromCache(r)};const lfetch=async(e,t)=>{let r=new AbortController;const c=async e=>{return new Response(await e.arrayBuffer(),{status:e.status,headers:e.headers})};if(!Promise.any){Promise.any=function(e){return new Promise((t,n)=>{e=Array.isArray(e)?e:[];let r=e.length;let c=[];if(r===0)return n(new AggregateError("All promises were rejected"));e.forEach(e=>{e.then(e=>{t(e)},e=>{r--;c.push(e);if(r===0){n(new AggregateError(c))}})})})}}return Promise.any(e.map(e=>{return new Promise((t,n)=>{fetch(e,{signal:r.signal}).then(c).then(e=>{if(e.status==200){r.abort();t(e)}else{n(e)}}).catch(e=>{})})}))};