coryd.dev/src/assets/scripts/sw.js

56 lines
1.4 KiB
JavaScript

const cacheName = 'coryd.dev-static-assets';
const staticAssets = [
'/assets/styles/index.css',
'/assets/styles/noscript.css',
'/assets/fonts/sg.woff2',
'/assets/fonts/dm.woff2',
'/assets/fonts/dmi.woff2',
'/assets/fonts/ml.woff2',
'/assets/scripts/index.js',
'/assets/scripts/components/select-pagination.js',
];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(cacheName)
.then(cache => cache.addAll(staticAssets))
.then(() => self.skipWaiting())
);
});
self.addEventListener('activate', event => {
event.waitUntil(
(async () => {
const keys = await caches.keys();
await Promise.all(keys.filter(key => key !== cacheName).map(key => caches.delete(key)));
if (self.registration.navigationPreload) await self.registration.navigationPreload.enable();
await self.clients.claim();
})()
);
});
self.addEventListener('fetch', event => {
const request = event.request;
if (request.method !== 'GET') return;
if (request.headers.get('Accept').includes('text/html')) {
event.respondWith(
(async () => {
try {
const preloadResponse = await event.preloadResponse;
if (preloadResponse) return preloadResponse;
return await fetch(request);
} catch (err) {
return Response.error();
}
})()
);
return;
}
event.respondWith(caches.match(request).then(response => response || fetch(request))
);
});