/* Service Worker — SLC-Workshop Companion (App-Shell, offline-first) */ const CACHE = "slc-companion-v1"; const ASSETS = ["./", "index.html", "manifest.webmanifest", "icon.svg"]; self.addEventListener("install", (e) => { e.waitUntil( caches.open(CACHE).then((c) => c.addAll(ASSETS)).then(() => self.skipWaiting()) ); }); self.addEventListener("activate", (e) => { e.waitUntil( caches.keys() .then((ks) => Promise.all(ks.filter((k) => k !== CACHE).map((k) => caches.delete(k)))) .then(() => self.clients.claim()) ); }); self.addEventListener("fetch", (e) => { if (e.request.method !== "GET") return; e.respondWith( caches.match(e.request).then((hit) => hit || fetch(e.request) .then((resp) => { const copy = resp.clone(); caches.open(CACHE).then((c) => c.put(e.request, copy)); return resp; }) .catch(() => caches.match("index.html")) ) ); });