-
Notifications
You must be signed in to change notification settings - Fork 1
/
sw.js
50 lines (42 loc) · 1.19 KB
/
sw.js
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
const CACHE_NAME = `${process.env.NAME}${process.env.VERSION}`;
self.addEventListener('install', event =>
event.waitUntil(
caches.open(CACHE_NAME).then(cache => {
fetch('manifest.json')
.then(response => response.json())
.then(assets => cache.addAll(assets));
}),
),
);
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(response => {
if (response) return response;
const fetchRequest = event.request.clone();
return fetch(fetchRequest).then(response => {
if (!response || response.status !== 200 || response.type !== 'basic')
return response;
const responseToCache = response.clone();
caches
.open(CACHE_NAME)
.then(
cache =>
event.request.method === 'GET' &&
cache.put(event.request, responseToCache),
);
return response;
});
}),
);
});
self.addEventListener('activate', event =>
event.waitUntil(
caches
.keys()
.then(cacheNames =>
Promise.all(
cacheNames.filter(Boolean).map(cacheName => caches.delete(cacheName)),
),
),
),
);