PageSourceSearch

https://senly.io/sw.js

js senly.io collected 2026-10-02 01:59:06 UTC 2,214 bytes, 58 lines download raw bytes

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.