/* Basic offline-first service worker */ const CACHE_NAME = 'indieweb-blog-v1'; const OFFLINE_URLS = [ '/', '/assets/css/build.css', '/assets/js/main.js', '/assets/favicon-32x32.png', '/assets/apple-touch-icon.png' ]; self.addEventListener('install', (event) => { event.waitUntil( caches.open(CACHE_NAME).then((cache) => cache.addAll(OFFLINE_URLS)).then(() => self.skipWaiting()) ); }); self.addEventListener('activate', (event) => { event.waitUntil( caches.keys().then((keys) => Promise.all(keys.map((k) => (k === CACHE_NAME ? null : caches.delete(k))))).then(() => self.clients.claim()) ); }); self.addEventListener('fetch', (event) => { const { request } = event; if (request.method !== 'GET') return; event.respondWith( caches.match(request).then((cached) => cached || fetch(request).then((resp) => { const respClone = resp.clone(); caches.open(CACHE_NAME).then((cache) => cache.put(request, respClone)); return resp; }).catch(() => caches.match('/')) ) ); });