aboutsummaryrefslogtreecommitdiff
path: root/public/service-worker.js
diff options
context:
space:
mode:
authorEugene Sokolov <eug-vs@keemail.me>2020-08-24 22:08:37 +0300
committerGitHub <noreply@github.com>2020-08-24 22:08:37 +0300
commit6a9970e0994b3b9230a5ead21f0a2dd96c81c40c (patch)
treee30b5f131ac652a5783983aa576a7a27b24a8440 /public/service-worker.js
parent89f038c7a0ccf6de94516cba8499a0bc69f8dae1 (diff)
parent18f71aff2c4161792aa2857d0e1b18cf402e55f6 (diff)
downloadwhich-ui-6a9970e0994b3b9230a5ead21f0a2dd96c81c40c.tar.gz
Merge pull request #94 from which-ecosystem/pwa
Configure PWA
Diffstat (limited to 'public/service-worker.js')
-rw-r--r--public/service-worker.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/public/service-worker.js b/public/service-worker.js
new file mode 100644
index 0000000..ddab607
--- /dev/null
+++ b/public/service-worker.js
@@ -0,0 +1,53 @@
+const CACHE_NAME = 'v1.2.5'; // Per-version requests cache
+const IMAGES_CACHE_NAME = 'images' // Long-term images cache
+
+const isS3Url = url => url.includes('amazonaws.com');
+
+this.addEventListener('install', event => {
+ event.waitUntil(
+ caches.open(CACHE_NAME)
+ .then(cache => cache.addAll(['index.html']))
+ .catch(e => console.log(e))
+ );
+})
+
+this.addEventListener('fetch', event => {
+ if (isS3Url(event.request.url)) {
+ event.respondWith(
+ caches.open(IMAGES_CACHE_NAME)
+ .then(cache => cache.match(event.request)
+ .then(match => match || fetch(event.request)
+ .then(response => {
+ cache.put(event.request, response.clone());
+ return response;
+ })
+ )
+ .catch(e => console.log(`Error ${e}`))
+ )
+ );
+ } else {
+ event.respondWith(
+ caches.open(CACHE_NAME)
+ .then(cache => fetch(event.request)
+ .then(response => {
+ cache.put(event.request, response.clone());
+ return response;
+ })
+ .catch(() => cache.match(event.request))
+ )
+ );
+ }
+});
+
+this.addEventListener('activate', event => {
+ const cacheWhiteList = [CACHE_NAME];
+ event.waitUntil(
+ caches.keys()
+ .then(keys => Promise.all(
+ keys.map(key => {
+ if (cacheWhiteList.indexOf(key) === -1) return caches.delete(key);
+ })
+ ))
+ );
+});
+