Refactor sw.js to support custom headers in registerCache function
This commit is contained in:
40
public/sw.js
40
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
|
||||
|
||||
Reference in New Issue
Block a user