diff --git a/public/sw.js b/public/sw.js index 46549d4c..87117a85 100644 --- a/public/sw.js +++ b/public/sw.js @@ -11,11 +11,20 @@ self.addEventListener('fetch', (event) => { break } case "img": { - event.respondWith(getImg(url)) + event.respondWith(getSource(url)) break } case "register": { - event.respondWith(registerCache(url, event.request.arrayBuffer())) + let targerUrl = url + const headers = event.request.headers + const headerUrl = headers.get('x-register-url') + if(headerUrl){ + targerUrl = new URL(headerUrl) + } + const noContentType = headers.get('x-no-content-type') === 'true' + event.respondWith( + registerCache(targerUrl, event.request.arrayBuffer(), noContentType) + ) break } case "init":{ @@ -31,6 +40,17 @@ self.addEventListener('fetch', (event) => { event.respondWith(new Response(`${error}`)) } } + if(path[1] === 'transformers'){ + event.respondWith((async () => { + const cache = await caches.open('risuCache') + const res = await cache.match(url) + if(res){ + return res + }else{ + return await fetch(event.request) + } + })()) + } }) @@ -42,7 +62,7 @@ async function checkCache(url){ })) } -async function getImg(url){ +async function getSource(url){ const cache = await caches.open('risuCache') return await cache.match(url) } @@ -51,18 +71,22 @@ async function check(){ } -async function registerCache(urlr, buffer){ +async function registerCache(urlr, buffer, noContentType = false){ const cache = await caches.open('risuCache') const url = new URL(urlr) let path = url.pathname.split('/') path[2] = 'img' url.pathname = path.join('/') const buf = new Uint8Array(await buffer) + let headers = { + "cache-control": "max-age=604800", + "content-type": "image/png" + } + if(noContentType){ + delete headers["content-type"] + } await cache.put(url, new Response(buf, { - headers: { - "cache-control": "max-age=604800", - "content-type": "image/png" - } + headers })) return new Response(JSON.stringify({ "done": true