Files
risuai/public/sw.js
2023-05-07 12:41:45 +09:00

70 lines
1.8 KiB
JavaScript

// @ts-nocheck
self.addEventListener('fetch', (event) => {
const url = new URL(event.request.url)
const path = url.pathname.split('/')
if(path[1] === 'sw'){
try {
switch (path[2]){
case "check":{
event.respondWith(checkCache(url))
break
}
case "img": {
event.respondWith(getImg(url))
break
}
case "register": {
event.respondWith(registerCache(url, event.request.arrayBuffer()))
break
}
case "init":{
event.respondWith(new Response("true"))
}
default: {
event.respondWith(new Response(
path[2]
))
}
}
} catch (error) {
event.respondWith(new Response(`${error}`))
}
}
})
async function checkCache(url){
const cache = await caches.open('risuCache')
return new Response(JSON.stringify({
"able": !!(await cache.match(url))
}))
}
async function getImg(url){
const cache = await caches.open('risuCache')
return await cache.match(url)
}
async function check(){
}
async function registerCache(urlr, buffer){
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)
await cache.put(url, new Response(buf, {
headers: {
"cache-control": "max-age=604800",
"content-type": "image/png"
}
}))
return new Response(JSON.stringify({
"done": true
}))
}