text: /**
   * 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-8c7ed7a04e9a8ed150b2.js"
    },
    {
      "url": "styles.9ce2c42c1912f475039c.css"
    },
    {
      "url": "styles-89fd2ae28bdf06750a71.js"
    },
    {
      "url": "framework-a4620de0399b10c30110.js"
    },
    {
      "url": "532a2f07-b004a5d2f37fbac8de1a.js"
    },
    {
      "url": "app-cffcb1e32107683e8c51.js"
    },
    {
      "url": "offline-plugin-app-shell-fallback/index.html",
      "revision": "bbc979e5a0e39394d31c1e06f914108a"
    },
    {
      "url": "component---cache-caches-gatsby-plugin-offline-app-shell-js-c9875e2473a7c518755f.js"
    },
    {
      "url": "polyfill-8ac9cd77b56094f58252.js"
    },
    {
      "url": "manifest.json",
      "revision": "525f8fdc673f544887998e2e653a54c5"
    },
    {
      "url": "manifest.webmanifest",
      "revision": "1910a5d51ae8f97bcdf540a1bd9f5943"
    }
  ].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-cffcb1e32107683e8c51.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)
  