aboutsummaryrefslogtreecommitdiffhomepage
path: root/public/sw.js
diff options
context:
space:
mode:
authorgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>2022-11-21 22:00:30 +0000
committergithub-actions[bot] <github-actions[bot]@users.noreply.github.com>2022-11-21 22:00:30 +0000
commit6ec00afac5afc892dca5a184b66467d9408f14a5 (patch)
tree6440bf43eafdf75a376b94b9636f3ccac7b3f716 /public/sw.js
parent7fede4ee94880f09f44697104c0696e44fc2f8b6 (diff)
downloadsubmelon.dev-6ec00afac5afc892dca5a184b66467d9408f14a5.tar.gz
submelon.dev-6ec00afac5afc892dca5a184b66467d9408f14a5.tar.bz2
submelon.dev-6ec00afac5afc892dca5a184b66467d9408f14a5.zip
chore: autopublish 2022-11-21T22:00:30Z
Diffstat (limited to 'public/sw.js')
-rw-r--r--public/sw.js175
1 files changed, 175 insertions, 0 deletions
diff --git a/public/sw.js b/public/sw.js
new file mode 100644
index 0000000..a1e4d1a
--- /dev/null
+++ b/public/sw.js
@@ -0,0 +1,175 @@
+/**
+ * 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": "framework-9d7199247c4ea55ff463.js"
+ },
+ {
+ "url": "app-9d6eb0d64c1dfc1dc408.js"
+ },
+ {
+ "url": "offline-plugin-app-shell-fallback/index.html",
+ "revision": "a891777303774a337fe15ef1ac2bddd9"
+ },
+ {
+ "url": "webpack-runtime-016fc6d688e921254335.js"
+ },
+ {
+ "url": "manifest.webmanifest",
+ "revision": "bca2baebe6e7bb39d46fca73f6aa97da"
+ }
+].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|avif|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())
+
+ // We detected compilation hash mismatch
+ // we should clear runtime cache as data
+ // files might be out of sync and we should
+ // do fresh fetches for them
+ event.waitUntil(
+ caches.keys().then(function (keyList) {
+ return Promise.all(
+ keyList.map(function (key) {
+ if (key && key.includes(`runtime`)) {
+ return caches.delete(key)
+ }
+
+ return Promise.resolve()
+ })
+ )
+ })
+ )
+ },
+
+ 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-9d6eb0d64c1dfc1dc408.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)