const CACHE = "psu-shell-__REVISION__"; const ASSETS = /* build assets */ []; self.addEventListener("install", (event) => { event.waitUntil( caches .open(CACHE) .then((cache) => cache.addAll(ASSETS)) .then(() => self.skipWaiting()), ); }); self.addEventListener("activate", (event) => { event.waitUntil( caches .keys() .then((keys) => Promise.all( keys .filter((key) => key.startsWith("psu-shell-") && key !== CACHE) .map((key) => caches.delete(key)), ), ) .then(() => self.clients.claim()), ); }); self.addEventListener("fetch", (event) => { const url = new URL(event.request.url); if ( event.request.method !== "GET" || url.origin !== self.location.origin || url.pathname.startsWith("/api/") ) return; event.respondWith( fetch(event.request) .then((response) => { if (response.ok) { const copy = response.clone(); event.waitUntil( caches.open(CACHE).then((cache) => cache.put(event.request, copy)), ); } return response; }) .catch( async () => (await caches.match(event.request)) || (event.request.mode === "navigate" ? await caches.match("/") : Response.error()), ), ); });