breakoften/src/service-worker.js

53 lines
1.1 KiB
JavaScript

/// <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)) {
return cache.match(event.request)
}
try {
const response = await fetch(event.request)
if (response.status === 200) {
cache.put(event.request, response.clone())
}
return response
} catch {
return cache.match(event.request)
}
}
event.respondWith(respond())
})