summaryrefslogtreecommitdiff
path: root/pwabuilder-sw.js
diff options
context:
space:
mode:
authorNavan Chauhan <navanchauhan@gmail.com>2020-10-02 19:26:57 +0530
committerNavan Chauhan <navanchauhan@gmail.com>2020-10-02 19:26:57 +0530
commit15f935da81e17e5f6a9f0cd6d321d96801d3cb4e (patch)
tree4bf30c0d1763612e69e0851d85dc7acdc2f3f198 /pwabuilder-sw.js
parentf53bab83dbdd414389efefe27eb3c4e0d453e41f (diff)
Publish deploy 2020-10-02 19:26
Diffstat (limited to 'pwabuilder-sw.js')
-rw-r--r--pwabuilder-sw.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/pwabuilder-sw.js b/pwabuilder-sw.js
new file mode 100644
index 0000000..0684da5
--- /dev/null
+++ b/pwabuilder-sw.js
@@ -0,0 +1,83 @@
+// This is the service worker with the Cache-first network
+
+const CACHE = "pwabuilder-precache";
+const precacheFiles = [
+ /* Add an array of files to precache for your app */
+];
+
+self.addEventListener("install", function (event) {
+ console.log("[PWA Builder] Install Event processing");
+
+ console.log("[PWA Builder] Skip waiting on install");
+ self.skipWaiting();
+
+ event.waitUntil(
+ caches.open(CACHE).then(function (cache) {
+ console.log("[PWA Builder] Caching pages during install");
+ return cache.addAll(precacheFiles);
+ })
+ );
+});
+
+// Allow sw to control of current page
+self.addEventListener("activate", function (event) {
+ console.log("[PWA Builder] Claiming clients for current page");
+ event.waitUntil(self.clients.claim());
+});
+
+// If any fetch fails, it will look for the request in the cache and serve it from there first
+self.addEventListener("fetch", function (event) {
+ if (event.request.method !== "GET") return;
+
+ event.respondWith(
+ fromCache(event.request).then(
+ function (response) {
+ // The response was found in the cache so we responde with it and update the entry
+
+ // This is where we call the server to get the newest version of the
+ // file to use the next time we show view
+ event.waitUntil(
+ fetch(event.request).then(function (response) {
+ return updateCache(event.request, response);
+ })
+ );
+
+ return response;
+ },
+ function () {
+ // The response was not found in the cache so we look for it on the server
+ return fetch(event.request)
+ .then(function (response) {
+ // If request was success, add or update it in the cache
+ event.waitUntil(updateCache(event.request, response.clone()));
+
+ return response;
+ })
+ .catch(function (error) {
+ console.log("[PWA Builder] Network request failed and no cache." + error);
+ });
+ }
+ )
+ );
+});
+
+function fromCache(request) {
+ // Check to see if you have it in the cache
+ // Return response
+ // If not in the cache, then return
+ return caches.open(CACHE).then(function (cache) {
+ return cache.match(request).then(function (matching) {
+ if (!matching || matching.status === 404) {
+ return Promise.reject("no-match");
+ }
+
+ return matching;
+ });
+ });
+}
+
+function updateCache(request, response) {
+ return caches.open(CACHE).then(function (cache) {
+ return cache.put(request, response);
+ });
+}