๐Ÿ“ฆ itsfuad / PokeDraw

๐Ÿ“„ sw.js ยท 76 lines
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
69
70
71
72
73
74
75
76const OFFLINE_VERSION = 355;
const CACHE_NAME = 'offline-draw';
const OFFLINE_URL = '/';

self.addEventListener('install', (event) => {
	event.waitUntil(
		(async () => {
			await caches.keys().then(cacheNames => {
				return Promise.all(
					cacheNames.map(cache => {
						if (cache !== CACHE_NAME+'-'+OFFLINE_VERSION) {
							console.log('%cService Worker: Clearing Old cache', 'color: blue;');
							return caches.delete(cache);
						}
					})
				);
			});
			const cache = await caches.open(CACHE_NAME+'-'+OFFLINE_VERSION);
			await cache.addAll([
				new Request(OFFLINE_URL, { cache: 'reload' }),
			]);
		})()
	);
	self.skipWaiting();
});

self.addEventListener('activate', (event) => {
	event.waitUntil(
		(async () => {
			if ('navigationPreload' in self.registration) {
				await self.registration.navigationPreload.enable();
			}
		})()
	);
	self.clients.claim();
});

self.addEventListener('fetch', (event) => {
	if (event.request.mode === 'navigate') {
		event.respondWith(
			(async () => {
				try {
					const preloadResponse = await event.preloadResponse;
					if (preloadResponse) {
						return preloadResponse;
					}
					const networkResponse = await fetch(event.request);
					return networkResponse;
				} catch (error) {
					console.log('%cFetch failed; returning offline page instead.', 'color: orangered;');
					const cache = await caches.open(CACHE_NAME+'-'+OFFLINE_VERSION);
					const cachedResponse = await cache.match(OFFLINE_URL);
					return cachedResponse;
				}
			})()
		);
	} else {
		event.respondWith(
			(async () => {
				const cache = await caches.open(CACHE_NAME+'-'+OFFLINE_VERSION);
				const cachedResponse = await cache.match(event.request);
				if (cachedResponse) {
					return cachedResponse;
				} else {
					const networkResponse = await fetch(event.request);
					cache.put(event.request, networkResponse.clone());
					return networkResponse;
				}
			})()
		);
	}
});
  

console.log('%cService Worker: Poketab Messenger is running', 'color: limegreen;');