Add service-worker.js

This commit is contained in:
Santiago Lo Coco 2024-05-18 22:56:37 +02:00
parent 209355156c
commit 543a1ed63f
1 changed files with 66 additions and 0 deletions

66
src/service-worker.js Normal file
View File

@ -0,0 +1,66 @@
/// <reference types="@sveltejs/kit" />
import { build, files, version } from "$service-worker"
const CACHE = `cache-${version}`
const ASSETS = [...build, ...files]
self.addEventListener("install", (event) => {
async function addFilesToCache() {
const cache = await caches.open(CACHE)
await cache.addAll(ASSETS)
}
event.waitUntil(addFilesToCache())
})
self.addEventListener("activate", (event) => {
async function deleteOldCaches() {
for (const key of await caches.keys()) {
if (key !== CACHE) await caches.delete(key)
}
}
event.waitUntil(deleteOldCaches())
})
self.addEventListener("fetch", (event) => {
if (event.request.method !== "GET") return
async function respond() {
const url = new URL(event.request.url)
const cache = await caches.open(CACHE)
if (ASSETS.includes(url.pathname)) {
const response = await cache.match(url.pathname)
if (response) {
return response
}
}
try {
const response = await fetch(event.request)
if (!(response instanceof Response)) {
throw new Error("invalid response from fetch")
}
if (response.status === 200) {
cache.put(event.request, response.clone())
}
return response
} catch (err) {
const response = await cache.match(event.request)
if (response) {
return response
}
throw err
}
}
event.respondWith(respond())
})