diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-24 16:41:59 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-24 16:41:59 +0100 |
| commit | b2323081234b8635681062d7737daabd7ab837a9 (patch) | |
| tree | b4385a3bbdeb461c1bce00b9d8b01d50cd595529 /static/service-worker/worker.js | |
| parent | 4b6e37397d3a9a80db0c20484b712175c7b9c9c7 (diff) | |
add modules to importmap
Diffstat (limited to 'static/service-worker/worker.js')
| -rw-r--r-- | static/service-worker/worker.js | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/static/service-worker/worker.js b/static/service-worker/worker.js index ad5a374..be23018 100644 --- a/static/service-worker/worker.js +++ b/static/service-worker/worker.js @@ -1,18 +1,45 @@ -const putInCache = async (request, response) => { - const cache = await caches.open("v1"); - await cache.put(request, response); +const cachable_api = [ + '/image/', + '/profile/', +]; + +const is_cachable = (url) => { + if (!url.includes('/api/') || url.endsWith('.js')) { + return true; + } + + for (const api of cachable_api) { + if (url.includes(api)) { + return true; + } + } + + return false; +} + +const put_in_cache = async (request, response) => { + const cache = await caches.open("v1"); + await cache.put(request, response); }; -const cacheFirst = async (request, event) => { - const responseFromCache = await caches.match(request); - if (responseFromCache) { - return responseFromCache; - } - const responseFromNetwork = await fetch(request); - event.waitUntil(putInCache(request, responseFromNetwork.clone())); - return responseFromNetwork; +const cache_first = async (request, event) => { + if (request.method !== 'GET') { + return await fetch(request); + } + + if (!is_cachable(request.url)) { + return await fetch(request); + } + + const responseFromCache = await caches.match(request); + if (responseFromCache) { + return responseFromCache; + } + const responseFromNetwork = await fetch(request); + event.waitUntil(put_in_cache(request, responseFromNetwork.clone())); + return responseFromNetwork; }; self.addEventListener("fetch", (event) => { - event.respondWith(cacheFirst(event.request, event)); + event.respondWith(cache_first(event.request, event)); }); |