Spaces:
Sleeping
Sleeping
File size: 1,608 Bytes
7aec436 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
// These will be replaced at build-time by generate-service-worker-plugin.js
const ASSETS = [/* __ASSETS__ */];
const CACHE_NAME = __CACHE_NAME__;
const IS_PRODUCTION = __IS_PRODUCTION__;
const base = location.pathname.substr(0, location.pathname.indexOf('sw.js'));
self.addEventListener('install', event => {
self.skipWaiting();
event.waitUntil(caches.open(CACHE_NAME).then(cache => cache.addAll(ASSETS.map(i => i === '' ? base : i))));
});
self.addEventListener('activate', event => {
event.waitUntil(
caches.keys().then(keys => Promise.all(keys.filter(i => i !== CACHE_NAME).map(i => caches.delete(i))))
);
});
const fetchWithTimeout = (req) => new Promise((resolve, reject) => {
const timeout = setTimeout(reject, 5000);
fetch(req)
.then((res) => {
clearTimeout(timeout);
resolve(res);
})
.catch((err) => {
clearTimeout(timeout);
reject(err);
});
});
self.addEventListener('fetch', event => {
if (event.request.method !== 'GET') return;
const url = new URL(event.request.url);
if (url.origin !== location.origin) return;
const relativePathname = url.pathname.substr(base.length);
if (IS_PRODUCTION && ASSETS.includes(relativePathname)) {
url.search = '';
const immutable = !!relativePathname;
if (immutable) {
event.respondWith(
caches.match(new Request(url)).then((res) => res || fetch(event.request))
);
} else {
event.respondWith(
fetchWithTimeout(event.request).catch(() => caches.match(new Request(url)))
);
}
}
});
|