import { baseurl } from '../../_config.yml'; importScripts(`${baseurl}/assets/js/data/swconf.js`); const purge = swconf.purge; const interceptor = swconf.interceptor; function verifyUrl(url) { const requestUrl = new URL(url); const requestPath = requestUrl.pathname; if (!requestUrl.protocol.startsWith('http')) { return false; } for (const prefix of interceptor.urlPrefixes) { if (requestUrl.href.startsWith(prefix)) { return false; } } for (const path of interceptor.paths) { if (requestPath.startsWith(path)) { return false; } } return true; } self.addEventListener('install', (event) => { if (purge) { return; } event.waitUntil( caches.open(swconf.cacheName).then((cache) => { return cache.addAll(swconf.resources); }) ); }); 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; }); }) ); });