2025-07-31 11:24:13 -04:00

49 lines
1.3 KiB
JavaScript

const CACHE_NAME = 'timetracker-test-v1';
const urlsToCache = ['/', '/index.html'];
self.addEventListener('install', event => {
console.log('[SW] Install');
event.waitUntil(
caches.open(CACHE_NAME).then(cache => {
console.log('[SW] Caching shell:', urlsToCache);
return cache.addAll(urlsToCache);
}).catch(err => console.error('[SW] Install failed:', err))
);
});
self.addEventListener('activate', event => {
console.log('[SW] Activate');
event.waitUntil(
caches.keys().then(cacheNames =>
Promise.all(
cacheNames.map(name => {
if (name !== CACHE_NAME) {
console.log('[SW] Deleting old cache:', name);
return caches.delete(name);
}
})
)
)
);
});
self.addEventListener('fetch', event => {
if (event.request.method !== 'GET') return;
event.respondWith(
caches.match(event.request).then(cached => {
if (cached) {
console.log('[SW] Cache hit:', event.request.url);
return cached;
}
return fetch(event.request).then(networkRes => {
return networkRes;
}).catch(err => {
console.error('[SW] Fetch failed:', event.request.url, err);
return new Response('Offline', { status: 503 });
});
})
);
});