/* eslint-disable @typescript-eslint/no-unused-vars */ const CACHE_NAME = "pwa-cache-v10"; const PRECACHE_URLS = [ "/", "/manifest.webmanifest", "/manifest.json", "/images/icons/192x192.png", "/images/icons/256x256.png", "/images/icons/512x512.png", "/images/icons/apple-touch-icon.png", "/images/icons/maskable-192.png", "/images/icons/maskable-512.png", "/favicon.png", ]; self.addEventListener("install", (event) => { event.waitUntil( caches.open(CACHE_NAME).then((cache) => cache.addAll(PRECACHE_URLS)) ); self.skipWaiting(); }); self.addEventListener("activate", (event) => { event.waitUntil( caches .keys() .then((keys) => Promise.all( keys.filter((key) => key !== CACHE_NAME).map((key) => caches.delete(key)) ) ) .then(() => self.clients.claim()) ); }); self.addEventListener("fetch", (event) => { const url = new URL(event.request.url); if (event.request.mode === "navigate") { event.respondWith(fetch(event.request)); return; } if ( url.pathname.startsWith("/images/icons/") || url.pathname.endsWith("manifest.webmanifest") || url.pathname.endsWith("manifest.json") || url.pathname.endsWith("favicon.png") ) { event.respondWith( fetch(event.request) .then((res) => { if (res.ok) { const clone = res.clone(); caches.open(CACHE_NAME).then((cache) => cache.put(event.request, clone)); } return res; }) .catch(() => caches.match(event.request)) ); return; } if ( url.pathname.startsWith("/images/") || url.pathname.endsWith(".png") || url.pathname.endsWith(".jpg") || url.pathname.endsWith(".jpeg") || url.pathname.endsWith(".gif") || url.pathname.endsWith(".webp") ) { event.respondWith( caches.match(event.request).then((cached) => { const networkFetch = fetch(event.request).then((res) => { if (res.ok) { const clone = res.clone(); caches .open(CACHE_NAME) .then((cache) => cache.put(event.request, clone)); } return res; }); return cached || networkFetch; }) ); } });