importScripts('./assets/js/data/swconf.js'); const purge = swconf.purge; const denyRegexes = swconf.denyUrls.map((regex) => new RegExp(regex)); function verifyUrl(url) { const requestUrl = new URL(url); if (requestUrl.protocol !== 'http:' && requestUrl.protocol !== 'https:') { return false; } return !denyRegexes.some((regex) => regex.test(url)); } self.addEventListener('install', (event) => { if (purge) { return; } event.waitUntil( caches.open(swconf.cacheName).then((cache) => { return cache.addAll(swconf.precacheUrls); }) ); }); self.addEventListener('activate', (event) => { event.waitUntil( caches.keys().then((keyList) => { return Promise.all( keyList.map((key) => { if (purge) { return caches.delete(key); } else { if (key !== swconf.cacheName) { return caches.delete(key); } } }) ); }) ); }); self.addEventListener('message', (event) => { if (event.data === 'SKIP_WAITING') { self.skipWaiting(); } }); self.addEventListener('fetch', (event) => { if (event.request.headers.has('range')) { return; } event.respondWith( caches.match(event.request).then((response) => { if (response) { return response; } return fetch(event.request).then((response) => { const url = event.request.url; if (purge || event.request.method !== 'GET' || !verifyUrl(url)) { return response; } // See: let responseToCache = response.clone(); caches.open(swconf.cacheName).then((cache) => { cache.put(event.request, responseToCache); }); return response; }); }) ); });