1const CACHE = 'senly-v329'; 2const OFFLINE_URL = '/offline'; 3 4// Alleen offline-essentials precachen. Bewust GEEN '/' of andere HTML â die 5// zou stale worden; navigatie gaat altijd network-first (zie hieronder). 6const PRECACHE = [ 7 '/offline', 8 '/icon-192.png', 9 '/icon-512.png', 10 '/apple-touch-icon.png', 11]; 12 13self.addEventListener('install', (event) => { 14 event.waitUntil( 15 caches.open(CACHE).then((cache) => cache.addAll(PRECACHE)).then(() => self.skipWaiting()) 16 ); 17}); 18 19self.addEventListener('activate', (event) => { 20 event.waitUntil( 21 caches.keys().then((keys) => 22 Promise.all(keys.filter((k) => k !== CACHE).map((k) => caches.delete(k))) 23 ).then(() => self.clients.claim()) 24 ); 25}); 26 27self.addEventListener('fetch', (event) => { 28 if (event.request.method !== 'GET') return; 29 30 const url = new URL(event.request.url); 31 32 // Cross-origin (Pexels CDN, externe afbeeldingen) en API-verzoeken: niet 33 // onderscheppen â volledig aan de browser overlaten. 34 if (url.origin !== self.location.origin) return; 35 if (url.pathname.startsWith('/api/')) return; 36 37 // BELANGRIJK: we cachen GEEN /_next/static/ chunks (of andere assets) meer in 38 // de service worker. Next.js levert die met immutable, content-gehashte URLs; 39 // de browser-HTTP-cache handelt dat correct af. Door ze niet in de SW te 40 // cachen kan de SW na een deploy nooit meer een verouderde bundle serveren 41 // (de oorzaak van "blijft op oude dashboard hangen / 500 na deploy"). 42 // 43 // Alleen navigatie-verzoeken onderscheppen we, puur voor een offline-fallback. 44 if (event.request.mode === 'navigate') { 45 event.respondWith( 46 // bug-audit 2026-09-06: cache-eviction kan OFFLINE_URL wegvegen â nooit undefined teruggeven 47 fetch(event.request).catch(() => 48 caches.match(OFFLINE_URL).then((r) => 49 r || new Response( 50 '<!doctype html><meta charset="utf-8"><title>Offline</title><body style="font:14px system-ui;padding:2rem">Je bent offline. Probeer het straks opnieuw.</body>', 51 { status: 503, headers: { 'Content-Type': 'text/html; charset=utf-8' } } 52 ) 53 ) 54 ) 55 ); 56 } 57 // Alle overige same-origin GET's: niets doen â browser handelt af. 58});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.