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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
const CACHE_PREFIX = 'dartboat-'
const CACHE_VERSION = '1';
const CACHE_NAME = `${CACHE_PREFIX}${CACHE_VERSION}`;
const FILES = [
'./',
'dartboat.js',
'dartboat_wasm.js',
'dartboat_wasm.wasm',
'style.css',
'icons.woff2',
'inter-num.woff2',
'dartboat_16.png',
'dartboat_32.png',
'dartboat_64.png',
'dartboat_96.png',
'dartboat_128.png',
'dartboat_192.png',
'dartboat_256.png',
'dartboat_512.png'
]
function swlog(str) {
console.log(`[service worker] ${str}`);
}
self.addEventListener('install', e => {
swlog('installing');
e.waitUntil((async() => {
swlog(`initialising cache ${CACHE_NAME}`);
const cache = await caches.open(CACHE_NAME);
await cache.addAll(FILES);
})());
swlog('installed');
});
self.addEventListener('activate', e => {
e.waitUntil(caches.keys().then((keys) => {
return Promise.all(keys.map((k) => {
if (k === CACHE_NAME || !k.startsWith(CACHE_PREFIX))
return;
swlog(`deleting cache ${k}`);
return caches.delete(k);
}));
}));
});
self.addEventListener('fetch', e => {
e.respondWith((async () => {
const cache = await caches.open(CACHE_NAME);
const cached = await cache.match(e.request);
swlog(`${cached ? 'hit' : 'miss'} ${e.request.url}`);
if (cached)
return cached;
if (!(resp = await fetch(e.request)).ok) {
swlog(`ignore status:${resp.status} ${e.request.url}`);
} else {
swlog(`put ${e.request.url}`);
cache.put(e.request, resp.clone());
}
return resp;
})());
});
|