Refactor sw.js to support custom headers in registerCache function

This commit is contained in:
kwaroran
2024-01-06 01:28:00 +09:00
parent 0ca4ec3695
commit 66c6511684

View File

@@ -11,11 +11,20 @@ self.addEventListener('fetch', (event) => {
break break
} }
case "img": { case "img": {
event.respondWith(getImg(url)) event.respondWith(getSource(url))
break break
} }
case "register": { 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 break
} }
case "init":{ case "init":{
@@ -31,6 +40,17 @@ self.addEventListener('fetch', (event) => {
event.respondWith(new Response(`${error}`)) 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') const cache = await caches.open('risuCache')
return await cache.match(url) 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 cache = await caches.open('risuCache')
const url = new URL(urlr) const url = new URL(urlr)
let path = url.pathname.split('/') let path = url.pathname.split('/')
path[2] = 'img' path[2] = 'img'
url.pathname = path.join('/') url.pathname = path.join('/')
const buf = new Uint8Array(await buffer) 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, { await cache.put(url, new Response(buf, {
headers: { headers
"cache-control": "max-age=604800",
"content-type": "image/png"
}
})) }))
return new Response(JSON.stringify({ return new Response(JSON.stringify({
"done": true "done": true