PageSourceSearch

https://dungeonkim.github.io/games/PALO2/sw.js

js dungeonkim.github.io collected 2026-10-03 09:05:14 UTC 2,274 bytes, 64 lines download raw bytes

1// FlatFast PWA Service Worker
2const CACHE_NAME = 'ff-pwa-palo2-1789823826731';
3
4// Install event - activate worker immediately
5self.addEventListener('install', (event) => {
6  self.skipWaiting();
7});
8
9// Activate event - clean up stale caches
10self.addEventListener('activate', (event) => {
11  event.waitUntil(
12    caches.keys().then((cacheNames) => {
13      return Promise.all(
14        cacheNames
15          .filter((name) => name.startsWith('ff-pwa-cache-') && name !== CACHE_NAME)
16          .map((name) => caches.delete(name))
17      );
18    }).then(() => self.clients.claim())
19  );
20});
21
22// Fetch event - cache-first with network fallback for static assets, network-first for navigation
23self.addEventListener('fetch', (event) => {
24  const request = event.request;
25
26  // Only handle GET requests and http/https schemes
27  if (request.method !== 'GET') return;
28  if (!request.url.startsWith('http://') && !request.url.startsWith('https://')) return;
29
30  // Audio / video range requests or special endpoints pass directly to network
31  if (request.headers.get('range')) return;
32
33  event.respondWith(
34    caches.open(CACHE_NAME).then(async (cache) => {
35      const cachedResponse = await cache.match(request);
36      if (cachedResponse) {
37        // Fetch in background to update cache (stale-while-revalidate)
38        fetch(request)
39          .then((networkResponse) => {
40            if (networkResponse && networkResponse.status === 200 && networkResponse.type === 'basic') {
41              cache.put(request, networkResponse.clone());
42            }
43          })
44          .catch(() => { /* ignore offline / network errors in background update */ });
45        return cachedResponse;
46      }
47
48      // If not in cache, fetch from network and cache
49      return fetch(request)
50        .then((networkResponse) => {
51          if (networkResponse && networkResponse.status === 200 && networkResponse.type === 'basic') {
52            cache.put(request, networkResponse.clone());
53          }
54          return networkResponse;
55        })
56        .catch(() => {
57          // If offline and requesting html navigation, fallback to root index
58          if (request.mode === 'navigate') {
59            return cache.match('./index.html') || cache.match('./');
60          }
61        });
62    })
63  );
64});

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.