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
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user