blob: f45c8df804c6266ebfddf2820375adee8871c6a2 [file] [log] [blame]
/**
* Welcome to your Workbox-powered service worker!
*
* You'll need to register this file in your web app and you should
* disable HTTP caching for this file too.
* See https://goo.gl/nhQhGp
*
* The rest of the code is auto-generated. Please don't update this file
* directly; instead, make changes to your Workbox build configuration
* and re-run your build process.
* See https://goo.gl/2aRDsh
*/
importScripts("workbox-v4.3.1/workbox-sw.js");
workbox.setConfig({modulePathPrefix: "workbox-v4.3.1"});
workbox.core.setCacheNameDetails({prefix: "gatsby-plugin-offline"});
workbox.core.skipWaiting();
workbox.core.clientsClaim();
/**
* The workboxSW.precacheAndRoute() method efficiently caches and responds to
* requests for URLs in the manifest.
* See https://goo.gl/S9QRab
*/
self.__precacheManifest = [
{
"url": "webpack-runtime-4c66ddc09838456ab29f.js"
},
{
"url": "framework-305b3707783ccc9d7ca6.js"
},
{
"url": "f0e45107-02a22ac72de90821f3f0.js"
},
{
"url": "app-6f502540d49f2ff8e8f7.js"
},
{
"url": "offline-plugin-app-shell-fallback/index.html",
"revision": "9dcb84db087c17ae87e70dc24fee14dc"
},
{
"url": "component---cache-caches-gatsby-plugin-offline-app-shell-js-241020a1cf7d0f317bbe.js"
},
{
"url": "page-data/offline-plugin-app-shell-fallback/page-data.json",
"revision": "0282e2b86db56eb397d1111699dffeba"
},
{
"url": "page-data/app-data.json",
"revision": "5b41f88babef003da91120720598e3cf"
},
{
"url": "polyfill-5204fa10d5950c3006a4.js"
},
{
"url": "manifest.webmanifest",
"revision": "cdbe61b8a9e88deda0d49fb45970be87"
}
].concat(self.__precacheManifest || []);
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
workbox.routing.registerRoute(/(\.js$|\.css$|static\/)/, new workbox.strategies.CacheFirst(), 'GET');
workbox.routing.registerRoute(/^https?:.*\/page-data\/.*\.json/, new workbox.strategies.StaleWhileRevalidate(), 'GET');
workbox.routing.registerRoute(/^https?:.*\.(png|jpg|jpeg|webp|svg|gif|tiff|js|woff|woff2|json|css)$/, new workbox.strategies.StaleWhileRevalidate(), 'GET');
workbox.routing.registerRoute(/^https?:\/\/fonts\.googleapis\.com\/css/, new workbox.strategies.StaleWhileRevalidate(), 'GET');
/* global importScripts, workbox, idbKeyval */
importScripts(`idb-keyval-3.2.0-iife.min.js`)
const { NavigationRoute } = workbox.routing
let lastNavigationRequest = null
let offlineShellEnabled = true
// prefer standard object syntax to support more browsers
const MessageAPI = {
setPathResources: (event, { path, resources }) => {
event.waitUntil(idbKeyval.set(`resources:${path}`, resources))
},
clearPathResources: event => {
event.waitUntil(idbKeyval.clear())
},
enableOfflineShell: () => {
offlineShellEnabled = true
},
disableOfflineShell: () => {
offlineShellEnabled = false
},
}
self.addEventListener(`message`, event => {
const { gatsbyApi: api } = event.data
if (api) MessageAPI[api](event, event.data)
})
function handleAPIRequest({ event }) {
const { pathname } = new URL(event.request.url)
const params = pathname.match(/:(.+)/)[1]
const data = {}
if (params.includes(`=`)) {
params.split(`&`).forEach(param => {
const [key, val] = param.split(`=`)
data[key] = val
})
} else {
data.api = params
}
if (MessageAPI[data.api] !== undefined) {
MessageAPI[data.api]()
}
if (!data.redirect) {
return new Response()
}
return new Response(null, {
status: 302,
headers: {
Location: lastNavigationRequest,
},
})
}
const navigationRoute = new NavigationRoute(async ({ event }) => {
// handle API requests separately to normal navigation requests, so do this
// check first
if (event.request.url.match(/\/.gatsby-plugin-offline:.+/)) {
return handleAPIRequest({ event })
}
if (!offlineShellEnabled) {
return await fetch(event.request)
}
lastNavigationRequest = event.request.url
let { pathname } = new URL(event.request.url)
pathname = pathname.replace(new RegExp(`^`), ``)
// Check for resources + the app bundle
// The latter may not exist if the SW is updating to a new version
const resources = await idbKeyval.get(`resources:${pathname}`)
if (!resources || !(await caches.match(`/app-6f502540d49f2ff8e8f7.js`))) {
return await fetch(event.request)
}
for (const resource of resources) {
// As soon as we detect a failed resource, fetch the entire page from
// network - that way we won't risk being in an inconsistent state with
// some parts of the page failing.
if (!(await caches.match(resource))) {
return await fetch(event.request)
}
}
const offlineShell = `/offline-plugin-app-shell-fallback/index.html`
const offlineShellWithKey = workbox.precaching.getCacheKeyForURL(offlineShell)
return await caches.match(offlineShellWithKey)
})
workbox.routing.registerRoute(navigationRoute)
// this route is used when performing a non-navigation request (e.g. fetch)
workbox.routing.registerRoute(/\/.gatsby-plugin-offline:.+/, handleAPIRequest)