From 34f42b997a376718565b5fa415c5df80b1c93839 Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 12 Dec 2023 17:18:22 +0100 Subject: [PATCH] fix: service workers --- src/service-worker.ts | 82 +++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 42 deletions(-) diff --git a/src/service-worker.ts b/src/service-worker.ts index f7d58c58d..84273f8d2 100644 --- a/src/service-worker.ts +++ b/src/service-worker.ts @@ -1,51 +1,49 @@ -import { dev } from '$app/environment'; import { version, build, files } from '$service-worker'; -if (!dev) { - const name = `cache-${version}`; - const cachedFiles = [...build, ...files]; - self.addEventListener('install', (event: ExtendableEvent) => { - event.waitUntil(caches.open(name).then((cache) => cache.addAll(cachedFiles))); - }); +const name = `cache-${version}`; +const cachedFiles = [...build, ...files]; - self.addEventListener('activate', (event: ExtendableEvent) => { - event.waitUntil( - caches.keys().then(async (keys) => { - for (const key of keys) { - if (!key.includes(version)) caches.delete(key); - } - }) - ); - }); +self.addEventListener('install', (event: ExtendableEvent) => { + event.waitUntil(caches.open(name).then((cache) => cache.addAll(cachedFiles))); +}); - self.addEventListener('fetch', (event: FetchEvent) => { - const { request } = event; +self.addEventListener('activate', (event: ExtendableEvent) => { + event.waitUntil( + caches.keys().then(async (keys) => { + for (const key of keys) { + if (!key.includes(version)) caches.delete(key); + } + }) + ); +}); - if (request.method !== 'GET' || request.headers.has('range')) return; +self.addEventListener('fetch', (event: FetchEvent) => { + const { request } = event; - const url = new URL(request.url); - const cached = caches.match(request); + if (request.method !== 'GET' || request.headers.has('range')) return; - if (url.origin === location.origin && cachedFiles.includes(url.pathname)) { - // always return build files from cache - event.respondWith(cached); - } else if (url.protocol === 'https:' || location.hostname === 'localhost') { - // hit the network for everything else... - const promise = fetch(request); + const url = new URL(request.url); + const cached = caches.match(request); - // ...and cache successful responses... - promise.then((response) => { - // cache successful responses - if (response.ok && response.type === 'basic') { - const clone = response.clone(); - caches.open(name).then((cache) => { - cache.put(request, clone); - }); - } - }); + if (url.origin === location.origin && cachedFiles.includes(url.pathname)) { + // always return build files from cache + event.respondWith(cached); + } else if (url.protocol === 'https:' || location.hostname === 'localhost') { + // hit the network for everything else... + const promise = fetch(request); - // ...but if it fails, fall back to cache if available - event.respondWith(promise.catch(() => cached || promise)); - } - }); -} + // ...and cache successful responses... + promise.then((response) => { + // cache successful responses + if (response.ok && response.type === 'basic') { + const clone = response.clone(); + caches.open(name).then((cache) => { + cache.put(request, clone); + }); + } + }); + + // ...but if it fails, fall back to cache if available + event.respondWith(promise.catch(() => cached || promise)); + } +});