const cachable_api = [ '/api/image/load/', ]; const is_cachable = (url) => { for (const api of cachable_api) { console.log(api, url); 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 cache_first = async (request, event) => { if (request.method !== 'GET') { return await fetch(request); } if (!is_cachable(request.url)) { return await fetch(request); } const cache_response = await caches.match(request); if (cache_response) { return cache_response; } const network_response = await fetch(request); event.waitUntil(put_in_cache(request, network_response.clone())); return network_response; }; self.addEventListener("fetch", (event) => { event.respondWith(cache_first(event.request, event)); });