const CACHE_NAME = "wfdash-v1"; const OFFLINE_URL = "/offline"; const PRECACHE_ASSETS = [ "/", "/offline", "/manifest.json", ]; self.addEventListener("install", (event) => { event.waitUntil( caches.open(CACHE_NAME).then((cache) => { return cache.addAll(PRECACHE_ASSETS); }) ); self.skipWaiting(); }); self.addEventListener("activate", (event) => { event.waitUntil( caches.keys().then((keys) => { return Promise.all( keys.filter((key) => key !== CACHE_NAME).map((key) => caches.delete(key)) ); }) ); self.clients.claim(); }); self.addEventListener("fetch", (event) => { if (event.request.method !== "GET") return; if (event.request.url.includes("/api/")) return; event.respondWith( fetch(event.request) .then((response) => { const clone = response.clone(); caches.open(CACHE_NAME).then((cache) => { cache.put(event.request, clone); }); return response; }) .catch(() => { return caches.match(event.request).then((cached) => { if (cached) return cached; if (event.request.mode === "navigate") { return caches.match(OFFLINE_URL); } return new Response("Offline", { status: 503 }); }); }) ); });