Skip to content

Instantly share code, notes, and snippets.

@Dev-Dipesh
Last active July 11, 2017 19:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Dev-Dipesh/d71fefc7883de33b5416f98dd83035a2 to your computer and use it in GitHub Desktop.
Save Dev-Dipesh/d71fefc7883de33b5416f98dd83035a2 to your computer and use it in GitHub Desktop.
Understanding Service Worker
/* Auto generated from sw-precache-webpack-plugin
* https://github.com/goldhand/sw-precache-webpack-plugin
* in repo create-react-app
* https://github.com/facebookincubator/create-react-app
*/
"use strict";
function setOfCachedUrls(e) {
return e.keys().then(function(e) {
return e.map(function(e) {
return e.url
})
}).then(function(e) {
return new Set(e)
})
}
var precacheConfig = [
["index.html", "1588ed00533efe72538a53544af42dea"],
["static/css/main.68740b45.css", "bb15ddb423624a4104bcdf0ebabcd0f9"],
["static/js/main.83463218.js", "74e9c79c5cd252963515c597a6705d8c"]
],
cacheName = "sw-precache-v3-sw-precache-webpack-plugin-" + (self.registration ? self.registration.scope : ""),
ignoreUrlParametersMatching = [/^utm_/],
addDirectoryIndex = function(e, t) {
var n = new URL(e);
return "/" === n.pathname.slice(-1) && (n.pathname += t), n.toString()
},
cleanResponse = function(e) {
return e.redirected ? ("body" in e ? Promise.resolve(e.body) : e.blob()).then(function(t) {
return new Response(t, {
headers: e.headers,
status: e.status,
statusText: e.statusText
})
}) : Promise.resolve(e)
},
createCacheKey = function(e, t, n, r) {
var a = new URL(e);
return r && a.pathname.match(r) || (a.search += (a.search ? "&" : "") + encodeURIComponent(t) + "=" + encodeURIComponent(n)), a.toString()
},
isPathWhitelisted = function(e, t) {
if (0 === e.length) return !0;
var n = new URL(t).pathname;
return e.some(function(e) {
return n.match(e)
})
},
stripIgnoredUrlParameters = function(e, t) {
var n = new URL(e);
return n.hash = "", n.search = n.search.slice(1).split("&").map(function(e) {
return e.split("=")
}).filter(function(e) {
return t.every(function(t) {
return !t.test(e[0])
})
}).map(function(e) {
return e.join("=")
}).join("&"), n.toString()
},
hashParamName = "_sw-precache",
urlsToCacheKeys = new Map(precacheConfig.map(function(e) {
var t = e[0],
n = e[1],
r = new URL(t, self.location),
a = createCacheKey(r, hashParamName, n, /\.\w{8}\./);
return [r.toString(), a]
}));
self.addEventListener("install", function(e) {
e.waitUntil(caches.open(cacheName).then(function(e) {
return setOfCachedUrls(e).then(function(t) {
return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n) {
if (!t.has(n)) {
var r = new Request(n, {
credentials: "same-origin"
});
return fetch(r).then(function(t) {
if (!t.ok) throw new Error("Request for " + n + " returned a response with status " + t.status);
return cleanResponse(t).then(function(t) {
return e.put(n, t)
})
})
}
}))
})
}).then(function() {
return self.skipWaiting()
}))
}), self.addEventListener("activate", function(e) {
var t = new Set(urlsToCacheKeys.values());
e.waitUntil(caches.open(cacheName).then(function(e) {
return e.keys().then(function(n) {
return Promise.all(n.map(function(n) {
if (!t.has(n.url)) return e.delete(n)
}))
})
}).then(function() {
return self.clients.claim()
}))
}), self.addEventListener("fetch", function(e) {
if ("GET" === e.request.method) {
var t, n = stripIgnoredUrlParameters(e.request.url, ignoreUrlParametersMatching);
t = urlsToCacheKeys.has(n);
t || (n = addDirectoryIndex(n, "index.html"), t = urlsToCacheKeys.has(n));
!t && "navigate" === e.request.mode && isPathWhitelisted(["^(?!\\/__).*"], e.request.url) && (n = new URL("/index.html", self.location).toString(), t = urlsToCacheKeys.has(n)), t && e.respondWith(caches.open(cacheName).then(function(e) {
return e.match(urlsToCacheKeys.get(n)).then(function(e) {
if (e) return e;
throw Error("The cached response that was expected is missing.")
})
}).catch(function(t) {
return console.warn('Couldn\'t serve response for "%s" from cache: %O', e.request.url, t), fetch(e.request)
}))
}
});

Service Worker

The Goal of this gist is to help understand service worker. It's not for diving deep in the core, but to understand the concepts, benefits and trade offs.

I have listed three resources which helped me greatly to unfurl the curtains:

Service Worker Status

Is Service Worker Ready???

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment