jekyll-pwa-workbox 0.0.7.alpha → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jekyll-pwa-workbox.rb +1 -1
  3. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-background-sync.dev.js +12 -13
  4. data/lib/vendor/workbox-v5.0.0/workbox-background-sync.dev.js.map +1 -0
  5. data/lib/vendor/workbox-v5.0.0/workbox-background-sync.prod.js +2 -0
  6. data/lib/vendor/workbox-v5.0.0/workbox-background-sync.prod.js.map +1 -0
  7. data/lib/vendor/workbox-v5.0.0/workbox-broadcast-update.dev.js +288 -0
  8. data/lib/vendor/workbox-v5.0.0/workbox-broadcast-update.dev.js.map +1 -0
  9. data/lib/vendor/workbox-v5.0.0/workbox-broadcast-update.prod.js +2 -0
  10. data/lib/vendor/workbox-v5.0.0/workbox-broadcast-update.prod.js.map +1 -0
  11. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-cacheable-response.dev.js +6 -7
  12. data/lib/vendor/workbox-v5.0.0/workbox-cacheable-response.dev.js.map +1 -0
  13. data/lib/vendor/workbox-v5.0.0/workbox-cacheable-response.prod.js +2 -0
  14. data/lib/vendor/workbox-v5.0.0/workbox-cacheable-response.prod.js.map +1 -0
  15. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-core.dev.js +306 -67
  16. data/lib/vendor/workbox-v5.0.0/workbox-core.dev.js.map +1 -0
  17. data/lib/vendor/workbox-v5.0.0/workbox-core.prod.js +2 -0
  18. data/lib/vendor/workbox-v5.0.0/workbox-core.prod.js.map +1 -0
  19. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-expiration.dev.js +13 -14
  20. data/lib/vendor/workbox-v5.0.0/workbox-expiration.dev.js.map +1 -0
  21. data/lib/vendor/workbox-v5.0.0/workbox-expiration.prod.js +2 -0
  22. data/lib/vendor/workbox-v5.0.0/workbox-expiration.prod.js.map +1 -0
  23. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-navigation-preload.dev.js +4 -5
  24. data/lib/vendor/workbox-v5.0.0/workbox-navigation-preload.dev.js.map +1 -0
  25. data/lib/vendor/workbox-v5.0.0/workbox-navigation-preload.prod.js +2 -0
  26. data/lib/vendor/workbox-v5.0.0/workbox-navigation-preload.prod.js.map +1 -0
  27. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-offline-ga.dev.js +12 -13
  28. data/lib/vendor/workbox-v5.0.0/workbox-offline-ga.dev.js.map +1 -0
  29. data/lib/vendor/workbox-v5.0.0/workbox-offline-ga.prod.js +2 -0
  30. data/lib/vendor/workbox-v5.0.0/workbox-offline-ga.prod.js.map +1 -0
  31. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-precaching.dev.js +314 -86
  32. data/lib/vendor/workbox-v5.0.0/workbox-precaching.dev.js.map +1 -0
  33. data/lib/vendor/workbox-v5.0.0/workbox-precaching.prod.js +2 -0
  34. data/lib/vendor/workbox-v5.0.0/workbox-precaching.prod.js.map +1 -0
  35. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-range-requests.dev.js +8 -9
  36. data/lib/vendor/workbox-v5.0.0/workbox-range-requests.dev.js.map +1 -0
  37. data/lib/vendor/workbox-v5.0.0/workbox-range-requests.prod.js +2 -0
  38. data/lib/vendor/workbox-v5.0.0/workbox-range-requests.prod.js.map +1 -0
  39. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-routing.dev.js +79 -182
  40. data/lib/vendor/workbox-v5.0.0/workbox-routing.dev.js.map +1 -0
  41. data/lib/vendor/workbox-v5.0.0/workbox-routing.prod.js +2 -0
  42. data/lib/vendor/workbox-v5.0.0/workbox-routing.prod.js.map +1 -0
  43. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-strategies.dev.js +23 -227
  44. data/lib/vendor/workbox-v5.0.0/workbox-strategies.dev.js.map +1 -0
  45. data/lib/vendor/workbox-v5.0.0/workbox-strategies.prod.js +2 -0
  46. data/lib/vendor/workbox-v5.0.0/workbox-strategies.prod.js.map +1 -0
  47. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-streams.dev.js +16 -31
  48. data/lib/vendor/workbox-v5.0.0/workbox-streams.dev.js.map +1 -0
  49. data/lib/vendor/workbox-v5.0.0/workbox-streams.prod.js +2 -0
  50. data/lib/vendor/workbox-v5.0.0/workbox-streams.prod.js.map +1 -0
  51. data/lib/vendor/workbox-v5.0.0/workbox-sw.js +2 -0
  52. data/lib/vendor/workbox-v5.0.0/workbox-sw.js.map +1 -0
  53. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-window.dev.es5.mjs +317 -113
  54. data/lib/vendor/workbox-v5.0.0/workbox-window.dev.es5.mjs.map +1 -0
  55. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-window.dev.mjs +244 -44
  56. data/lib/vendor/workbox-v5.0.0/workbox-window.dev.mjs.map +1 -0
  57. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.0.0}/workbox-window.dev.umd.js +317 -113
  58. data/lib/vendor/workbox-v5.0.0/workbox-window.dev.umd.js.map +1 -0
  59. data/lib/vendor/workbox-v5.0.0/workbox-window.prod.es5.mjs +2 -0
  60. data/lib/vendor/workbox-v5.0.0/workbox-window.prod.es5.mjs.map +1 -0
  61. data/lib/vendor/workbox-v5.0.0/workbox-window.prod.mjs +2 -0
  62. data/lib/vendor/workbox-v5.0.0/workbox-window.prod.mjs.map +1 -0
  63. data/lib/vendor/workbox-v5.0.0/workbox-window.prod.umd.js +2 -0
  64. data/lib/vendor/workbox-v5.0.0/workbox-window.prod.umd.js.map +1 -0
  65. metadata +70 -69
  66. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.dev.js.map +0 -1
  67. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.prod.js +0 -2
  68. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.prod.js.map +0 -1
  69. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.dev.js +0 -486
  70. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.dev.js.map +0 -1
  71. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.prod.js +0 -2
  72. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.prod.js.map +0 -1
  73. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.dev.js.map +0 -1
  74. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.prod.js +0 -2
  75. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.prod.js.map +0 -1
  76. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.dev.js.map +0 -1
  77. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.prod.js +0 -2
  78. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.prod.js.map +0 -1
  79. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.dev.js.map +0 -1
  80. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.prod.js +0 -2
  81. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.prod.js.map +0 -1
  82. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.dev.js.map +0 -1
  83. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.prod.js +0 -2
  84. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.prod.js.map +0 -1
  85. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.dev.js.map +0 -1
  86. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.prod.js +0 -2
  87. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.prod.js.map +0 -1
  88. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.dev.js.map +0 -1
  89. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.prod.js +0 -2
  90. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.prod.js.map +0 -1
  91. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.dev.js.map +0 -1
  92. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.prod.js +0 -2
  93. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.prod.js.map +0 -1
  94. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.dev.js.map +0 -1
  95. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.prod.js +0 -2
  96. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.prod.js.map +0 -1
  97. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.dev.js.map +0 -1
  98. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.prod.js +0 -2
  99. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.prod.js.map +0 -1
  100. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.dev.js.map +0 -1
  101. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.prod.js +0 -2
  102. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.prod.js.map +0 -1
  103. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-sw.js +0 -2
  104. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-sw.js.map +0 -1
  105. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.es5.mjs.map +0 -1
  106. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.mjs.map +0 -1
  107. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.umd.js.map +0 -1
  108. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.es5.mjs +0 -2
  109. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.es5.mjs.map +0 -1
  110. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.mjs +0 -2
  111. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.mjs.map +0 -1
  112. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.umd.js +0 -2
  113. data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.umd.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbox-precaching.dev.js","sources":["../_version.js","../utils/precachePlugins.js","../addPlugins.js","../utils/createCacheKey.js","../utils/printCleanupDetails.js","../utils/printInstallDetails.js","../PrecacheController.js","../utils/getOrCreatePrecacheController.js","../utils/removeIgnoredSearchParams.js","../utils/generateURLVariations.js","../utils/getCacheKeyForURL.js","../utils/addFetchListener.js","../addRoute.js","../utils/deleteOutdatedCaches.js","../cleanupOutdatedCaches.js","../createHandler.js","../createHandlerBoundToURL.js","../getCacheKeyForURL.js","../matchPrecache.js","../precache.js","../precacheAndRoute.js","../index.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:5.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst plugins = [];\nexport const precachePlugins = {\n /*\n * @return {Array}\n * @private\n */\n get() {\n return plugins;\n },\n /*\n * @param {Array} newPlugins\n * @private\n */\n add(newPlugins) {\n plugins.push(...newPlugins);\n },\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { precachePlugins } from './utils/precachePlugins.js';\nimport './_version.js';\n/**\n * Adds plugins to precaching.\n *\n * @param {Array<Object>} newPlugins\n *\n * @memberof module:workbox-precaching\n */\nfunction addPlugins(newPlugins) {\n precachePlugins.add(newPlugins);\n}\n;\nexport { addPlugins };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport '../_version.js';\n/**\n * @param {string} groupTitle\n * @param {Array<string>} deletedURLs\n *\n * @private\n */\nconst logGroup = (groupTitle, deletedURLs) => {\n logger.groupCollapsed(groupTitle);\n for (const url of deletedURLs) {\n logger.log(url);\n }\n logger.groupEnd();\n};\n/**\n * @param {Array<string>} deletedURLs\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function printCleanupDetails(deletedURLs) {\n const deletionCount = deletedURLs.length;\n if (deletionCount > 0) {\n logger.groupCollapsed(`During precaching cleanup, ` +\n `${deletionCount} cached ` +\n `request${deletionCount === 1 ? ' was' : 's were'} deleted.`);\n logGroup('Deleted Cache Requests', deletedURLs);\n logger.groupEnd();\n }\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport '../_version.js';\n/**\n * @param {string} groupTitle\n * @param {Array<string>} urls\n *\n * @private\n */\nfunction _nestedGroup(groupTitle, urls) {\n if (urls.length === 0) {\n return;\n }\n logger.groupCollapsed(groupTitle);\n for (const url of urls) {\n logger.log(url);\n }\n logger.groupEnd();\n}\n/**\n * @param {Array<string>} urlsToPrecache\n * @param {Array<string>} urlsAlreadyPrecached\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function printInstallDetails(urlsToPrecache, urlsAlreadyPrecached) {\n const precachedCount = urlsToPrecache.length;\n const alreadyPrecachedCount = urlsAlreadyPrecached.length;\n if (precachedCount || alreadyPrecachedCount) {\n let message = `Precaching ${precachedCount} file${precachedCount === 1 ? '' : 's'}.`;\n if (alreadyPrecachedCount > 0) {\n message += ` ${alreadyPrecachedCount} ` +\n `file${alreadyPrecachedCount === 1 ? ' is' : 's are'} already cached.`;\n }\n logger.groupCollapsed(message);\n _nestedGroup(`View newly precached URLs.`, urlsToPrecache);\n _nestedGroup(`View previously precached URLs.`, urlsAlreadyPrecached);\n logger.groupEnd();\n }\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof module:workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {string} [cacheName] An optional name for the cache, to override\n * the default precache name.\n */\n constructor(cacheName) {\n this._cacheName = cacheNames.getPrecacheName(cacheName);\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {\n * Array<module:workbox-precaching.PrecacheController.PrecacheEntry|string>\n * } entries Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = (typeof entry !== 'string' && entry.revision) ?\n 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * @param {Object} options\n * @param {Event} [options.event] The install event (if needed).\n * @param {Array<Object>} [options.plugins] Plugins to be used for fetching\n * and caching during install.\n * @return {Promise<module:workbox-precaching.InstallResult>}\n */\n async install({ event, plugins } = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (plugins) {\n assert.isArray(plugins, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'install',\n paramName: 'plugins',\n });\n }\n }\n const toBePrecached = [];\n const alreadyPrecached = [];\n const cache = await self.caches.open(this._cacheName);\n const alreadyCachedRequests = await cache.keys();\n const existingCacheKeys = new Set(alreadyCachedRequests.map((request) => request.url));\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n if (existingCacheKeys.has(cacheKey)) {\n alreadyPrecached.push(url);\n }\n else {\n toBePrecached.push({ cacheKey, url });\n }\n }\n const precacheRequests = toBePrecached.map(({ cacheKey, url }) => {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n return this._addURLToCache({\n cacheKey,\n cacheMode,\n event,\n integrity,\n plugins,\n url,\n });\n });\n await Promise.all(precacheRequests);\n const updatedURLs = toBePrecached.map((item) => item.url);\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, alreadyPrecached);\n }\n return {\n updatedURLs,\n notUpdatedURLs: alreadyPrecached,\n };\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * @return {Promise<module:workbox-precaching.CleanupResult>}\n */\n async activate() {\n const cache = await self.caches.open(this._cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n }\n /**\n * Requests the entry and saves it to the cache if the response is valid.\n * By default, any response with a status code of less than 400 (including\n * opaque responses) is considered valid.\n *\n * If you need to use custom criteria to determine what's valid and what\n * isn't, then pass in an item in `options.plugins` that implements the\n * `cacheWillUpdate()` lifecycle event.\n *\n * @private\n * @param {Object} options\n * @param {string} options.cacheKey The string to use a cache key.\n * @param {string} options.url The URL to fetch and cache.\n * @param {string} [options.cacheMode] The cache mode for the network request.\n * @param {Event} [options.event] The install event (if passed).\n * @param {Array<Object>} [options.plugins] An array of plugins to apply to\n * fetch and caching.\n * @param {string} [options.integrity] The value to use for the `integrity`\n * field when making the request.\n */\n async _addURLToCache({ cacheKey, url, cacheMode, event, plugins, integrity }) {\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n let response = await fetchWrapper.fetch({\n event,\n plugins,\n request,\n });\n // Allow developers to override the default logic about what is and isn't\n // valid by passing in a plugin implementing cacheWillUpdate(), e.g.\n // a `CacheableResponsePlugin` instance.\n let cacheWillUpdatePlugin;\n for (const plugin of (plugins || [])) {\n if ('cacheWillUpdate' in plugin) {\n cacheWillUpdatePlugin = plugin;\n }\n }\n const isValidResponse = cacheWillUpdatePlugin ?\n // Use a callback if provided. It returns a truthy value if valid.\n // NOTE: invoke the method on the plugin instance so the `this` context\n // is correct.\n await cacheWillUpdatePlugin.cacheWillUpdate({ event, request, response }) :\n // Otherwise, default to considering any response status under 400 valid.\n // This includes, by default, considering opaque responses valid.\n response.status < 400;\n // Consider this a failure, leading to the `install` handler failing, if\n // we get back an invalid response.\n if (!isValidResponse) {\n throw new WorkboxError('bad-precaching-response', {\n url,\n status: response.status,\n });\n }\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n if (response.redirected) {\n response = await copyResponse(response);\n }\n await cacheWrapper.put({\n event,\n plugins,\n response,\n // `request` already uses `url`. We may be able to reuse it.\n request: cacheKey === url ? request : new Request(cacheKey),\n cacheName: this._cacheName,\n matchOptions: {\n ignoreSearch: true,\n },\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map<string, string>} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array<string>} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * This acts as a drop-in replacement for [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise<Response|undefined>}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this._cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that can be used within a\n * {@link module:workbox-routing.Route} that will find a response for the\n * incoming request against the precache.\n *\n * If for an unexpected reason there is a cache miss for the request,\n * this will fall back to retrieving the `Response` via `fetch()` when\n * `fallbackToNetwork` is `true`.\n *\n * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the\n * response from the network if there's a precache miss.\n * @return {module:workbox-routing~handlerCallback}\n */\n createHandler(fallbackToNetwork = true) {\n return async ({ request }) => {\n try {\n const response = await this.matchPrecache(request);\n if (response) {\n return response;\n }\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this._cacheName,\n url: request instanceof Request ? request.url : request,\n });\n }\n catch (error) {\n if (fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Unable to respond with precached response. ` +\n `Falling back to network.`, error);\n }\n return fetch(request);\n }\n throw error;\n }\n };\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * If for an unexpected reason there is a cache miss when looking up `url`,\n * this will fall back to retrieving the `Response` via `fetch()` when\n * `fallbackToNetwork` is `true`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the\n * response from the network if there's a precache miss.\n * @return {module:workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url, fallbackToNetwork = true) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n const handler = this.createHandler(fallbackToNetwork);\n const request = new Request(url);\n return () => handler({ request });\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array<RegExp>} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching, directoryIndex, cleanURLs, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './getOrCreatePrecacheController.js';\nimport { generateURLVariations } from './generateURLVariations.js';\nimport '../_version.js';\n/**\n * This function will take the request URL and manipulate it based on the\n * configuration options.\n *\n * @param {string} url\n * @param {Object} options\n * @return {string} Returns the URL in the cache that matches the request,\n * if possible.\n *\n * @private\n */\nexport const getCacheKeyForURL = (url, options) => {\n const precacheController = getOrCreatePrecacheController();\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(url, options)) {\n const possibleCacheKey = urlsToCacheKeys.get(possibleURL);\n if (possibleCacheKey) {\n return possibleCacheKey;\n }\n }\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getCacheKeyForURL } from './getCacheKeyForURL.js';\nimport '../_version.js';\n/**\n * Adds a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * NOTE: when called more than once this method will replace the previously set\n * configuration options. Calling it more than once is not recommended outside\n * of tests.\n *\n * @private\n * @param {Object} [options]\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array<RegExp>} [options.ignoreURLParametersMatching=[/^utm_/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {workbox.precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\nexport const addFetchListener = ({ ignoreURLParametersMatching = [/^utm_/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) => {\n const cacheName = cacheNames.getPrecacheName();\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const precachedURL = getCacheKeyForURL(event.request.url, {\n cleanURLs,\n directoryIndex,\n ignoreURLParametersMatching,\n urlManipulation,\n });\n if (!precachedURL) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` +\n getFriendlyURL(event.request.url));\n }\n return;\n }\n let responsePromise = self.caches.open(cacheName).then((cache) => {\n return cache.match(precachedURL);\n }).then((cachedResponse) => {\n if (cachedResponse) {\n return cachedResponse;\n }\n // Fall back to the network if we don't have a cached response\n // (perhaps due to manual cache cleanup).\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(precachedURL)} in ${cacheName} was not found. ` +\n `Falling back to the network instead.`);\n }\n return fetch(precachedURL);\n });\n if (process.env.NODE_ENV !== 'production') {\n responsePromise = responsePromise.then((response) => {\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` +\n getFriendlyURL(event.request.url));\n logger.log(`Serving the precached url: ${precachedURL}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(event.request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n return response;\n });\n }\n event.respondWith(responsePromise);\n }));\n};\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addFetchListener } from './utils/addFetchListener.js';\nimport './_version.js';\nlet listenerAdded = false;\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options]\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array<RegExp>} [options.ignoreURLParametersMatching=[/^utm_/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {module:workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n *\n * @memberof module:workbox-precaching\n */\nfunction addRoute(options) {\n if (!listenerAdded) {\n addFetchListener(options);\n listenerAdded = true;\n }\n}\n;\nexport { addRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst SUBSTRING_TO_FIND = '-precache-';\n/**\n * Cleans up incompatible precaches that were created by older versions of\n * Workbox, by a service worker registered under the current scope.\n *\n * This is meant to be called as part of the `activate` event.\n *\n * This should be safe to use as long as you don't include `substringToFind`\n * (defaulting to `-precache-`) in your non-precache cache names.\n *\n * @param {string} currentPrecacheName The cache name currently in use for\n * precaching. This cache won't be deleted.\n * @param {string} [substringToFind='-precache-'] Cache names which include this\n * substring will be deleted (excluding `currentPrecacheName`).\n * @return {Array<string>} A list of all the cache names that were deleted.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nconst deleteOutdatedCaches = async (currentPrecacheName, substringToFind = SUBSTRING_TO_FIND) => {\n const cacheNames = await self.caches.keys();\n const cacheNamesToDelete = cacheNames.filter((cacheName) => {\n return cacheName.includes(substringToFind) &&\n cacheName.includes(self.registration.scope) &&\n cacheName !== currentPrecacheName;\n });\n await Promise.all(cacheNamesToDelete.map((cacheName) => self.caches.delete(cacheName)));\n return cacheNamesToDelete;\n};\nexport { deleteOutdatedCaches };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { deleteOutdatedCaches } from './utils/deleteOutdatedCaches.js';\nimport './_version.js';\n/**\n * Adds an `activate` event listener which will clean up incompatible\n * precaches that were created by older versions of Workbox.\n *\n * @memberof module:workbox-precaching\n */\nfunction cleanupOutdatedCaches() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('activate', ((event) => {\n const cacheName = cacheNames.getPrecacheName();\n event.waitUntil(deleteOutdatedCaches(cacheName).then((cachesDeleted) => {\n if (process.env.NODE_ENV !== 'production') {\n if (cachesDeleted.length > 0) {\n logger.log(`The following out-of-date precaches were cleaned up ` +\n `automatically:`, cachesDeleted);\n }\n }\n }));\n }));\n}\n;\nexport { cleanupOutdatedCaches };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Helper function that calls\n * {@link PrecacheController#createHandler} on the default\n * {@link PrecacheController} instance.\n *\n * If you are creating your own {@link PrecacheController}, then call the\n * {@link PrecacheController#createHandler} on that instance,\n * instead of using this function.\n *\n * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the\n * response from the network if there's a precache miss.\n * @return {module:workbox-routing~handlerCallback}\n *\n * @memberof module:workbox-precaching\n */\nfunction createHandler(fallbackToNetwork = true) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.createHandler(fallbackToNetwork);\n}\n;\nexport { createHandler };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Helper function that calls\n * {@link PrecacheController#createHandlerBoundToURL} on the default\n * {@link PrecacheController} instance.\n *\n * If you are creating your own {@link PrecacheController}, then call the\n * {@link PrecacheController#createHandlerBoundToURL} on that instance,\n * instead of using this function.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the\n * response from the network if there's a precache miss.\n * @return {module:workbox-routing~handlerCallback}\n *\n * @memberof module:workbox-precaching\n */\nfunction createHandlerBoundToURL(url) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.createHandlerBoundToURL(url);\n}\n;\nexport { createHandlerBoundToURL };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Takes in a URL, and returns the corresponding URL that could be used to\n * lookup the entry in the precache.\n *\n * If a relative URL is provided, the location of the service worker file will\n * be used as the base.\n *\n * For precached entries without revision information, the cache key will be the\n * same as the original URL.\n *\n * For precached entries with revision information, the cache key will be the\n * original URL with the addition of a query parameter used for keeping track of\n * the revision info.\n *\n * @param {string} url The URL whose cache key to look up.\n * @return {string} The cache key that corresponds to that URL.\n *\n * @memberof module:workbox-precaching\n */\nfunction getCacheKeyForURL(url) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.getCacheKeyForURL(url);\n}\n;\nexport { getCacheKeyForURL };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Helper function that calls\n * {@link PrecacheController#matchPrecache} on the default\n * {@link PrecacheController} instance.\n *\n * If you are creating your own {@link PrecacheController}, then call\n * {@link PrecacheController#matchPrecache} on that instance,\n * instead of using this function.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise<Response|undefined>}\n *\n * @memberof module:workbox-precaching\n */\nfunction matchPrecache(request) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.matchPrecache(request);\n}\n;\nexport { matchPrecache };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { precachePlugins } from './utils/precachePlugins.js';\nimport './_version.js';\nconst installListener = (event) => {\n const precacheController = getOrCreatePrecacheController();\n const plugins = precachePlugins.get();\n event.waitUntil(precacheController.install({ event, plugins })\n .catch((error) => {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Service worker installation failed. It will ` +\n `be retried automatically during the next navigation.`);\n }\n // Re-throw the error to ensure installation fails.\n throw error;\n }));\n};\nconst activateListener = (event) => {\n const precacheController = getOrCreatePrecacheController();\n event.waitUntil(precacheController.activate());\n};\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * [\"precache cache\"]{@link module:workbox-core.cacheNames} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * [addRoute()]{@link module:workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * [precacheAndRoute()]{@link module:workbox-precaching.precacheAndRoute}.\n *\n * @param {Array<Object|string>} [entries=[]] Array of entries to precache.\n *\n * @memberof module:workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.addToCacheList(entries);\n if (entries.length > 0) {\n // NOTE: these listeners will only be added once (even if the `precache()`\n // method is called multiple times) because event listeners are implemented\n // as a set, where each listener must be unique.\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('install', installListener);\n self.addEventListener('activate', activateListener);\n }\n}\n;\nexport { precache };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * [precache()]{@link module:workbox-precaching.precache} and\n * [addRoute()]{@link module:workbox-precaching.addRoute} in a single call.\n *\n * @param {Array<Object|string>} entries Array of entries to precache.\n * @param {Object} [options] See\n * [addRoute() options]{@link module:workbox-precaching.addRoute}.\n *\n * @memberof module:workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\n;\nexport { precacheAndRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { addPlugins } from './addPlugins.js';\nimport { addRoute } from './addRoute.js';\nimport { cleanupOutdatedCaches } from './cleanupOutdatedCaches.js';\nimport { createHandler } from './createHandler.js';\nimport { createHandlerBoundToURL } from './createHandlerBoundToURL.js';\nimport { getCacheKeyForURL } from './getCacheKeyForURL.js';\nimport { matchPrecache } from './matchPrecache.js';\nimport { precache } from './precache.js';\nimport { precacheAndRoute } from './precacheAndRoute.js';\nimport { PrecacheController } from './PrecacheController.js';\nimport './_version.js';\nif (process.env.NODE_ENV !== 'production') {\n assert.isSWEnv('workbox-precaching');\n}\n/**\n * Most consumers of this module will want to use the\n * [precacheAndRoute()]{@link module:workbox-precaching.precacheAndRoute}\n * method to add assets to the Cache and respond to network requests with these\n * cached assets.\n *\n * If you require finer grained control, you can use the\n * [PrecacheController]{@link module:workbox-precaching.PrecacheController}\n * to determine when performed.\n *\n * @module workbox-precaching\n */\nexport { addPlugins, addRoute, cleanupOutdatedCaches, createHandler, createHandlerBoundToURL, getCacheKeyForURL, matchPrecache, precache, precacheAndRoute, PrecacheController, };\n"],"names":["self","_","e","plugins","precachePlugins","get","add","newPlugins","push","addPlugins","REVISION_SEARCH_PARAM","createCacheKey","entry","WorkboxError","urlObject","URL","location","href","cacheKey","url","revision","cacheKeyURL","originalURL","searchParams","set","logGroup","groupTitle","deletedURLs","logger","groupCollapsed","log","groupEnd","printCleanupDetails","deletionCount","length","_nestedGroup","urls","printInstallDetails","urlsToPrecache","urlsAlreadyPrecached","precachedCount","alreadyPrecachedCount","message","PrecacheController","constructor","cacheName","_cacheName","cacheNames","getPrecacheName","_urlsToCacheKeys","Map","_urlsToCacheModes","_cacheKeysToIntegrities","addToCacheList","entries","assert","isArray","moduleName","className","funcName","paramName","urlsToWarnAbout","undefined","cacheMode","has","firstEntry","secondEntry","integrity","warningMessage","join","warn","install","event","toBePrecached","alreadyPrecached","cache","caches","open","alreadyCachedRequests","keys","existingCacheKeys","Set","map","request","precacheRequests","_addURLToCache","Promise","all","updatedURLs","item","notUpdatedURLs","activate","currentlyCachedRequests","expectedCacheKeys","values","delete","Request","credentials","response","fetchWrapper","fetch","cacheWillUpdatePlugin","plugin","isValidResponse","cacheWillUpdate","status","redirected","copyResponse","cacheWrapper","put","matchOptions","ignoreSearch","getURLsToCacheKeys","getCachedURLs","getCacheKeyForURL","matchPrecache","match","createHandler","fallbackToNetwork","error","debug","createHandlerBoundToURL","handler","precacheController","getOrCreatePrecacheController","removeIgnoredSearchParams","ignoreURLParametersMatching","some","regExp","test","generateURLVariations","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","options","urlsToCacheKeys","possibleURL","possibleCacheKey","addFetchListener","addEventListener","precachedURL","getFriendlyURL","responsePromise","then","cachedResponse","respondWith","listenerAdded","addRoute","SUBSTRING_TO_FIND","deleteOutdatedCaches","currentPrecacheName","substringToFind","cacheNamesToDelete","filter","includes","registration","scope","cleanupOutdatedCaches","waitUntil","cachesDeleted","installListener","catch","activateListener","precache","precacheAndRoute","isSWEnv"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ this.workbox=this.workbox||{},this.workbox.precaching=function(t,e,n,i,s,c){"use strict";try{self["workbox:precaching:5.0.0"]&&_()}catch(t){}const o=[],r={get:()=>o,add(t){o.push(...t)}};const a="__WB_REVISION__";function h(t){if(!t)throw new s.WorkboxError("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s.WorkboxError("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),c=new URL(n,location.href);return i.searchParams.set(a,e),{cacheKey:i.href,url:c.href}}class u{constructor(t){this.t=e.cacheNames.getPrecacheName(t),this.i=new Map,this.s=new Map,this.o=new Map}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=h(n),c="string"!=typeof n&&n.revision?"reload":"default";if(this.i.has(i)&&this.i.get(i)!==t)throw new s.WorkboxError("add-to-cache-list-conflicting-entries",{firstEntry:this.i.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.o.has(t)&&this.o.get(t)!==n.integrity)throw new s.WorkboxError("add-to-cache-list-conflicting-integrities",{url:i});this.o.set(t,n.integrity)}if(this.i.set(i,t),this.s.set(i,c),e.length>0){const t="Workbox is precaching URLs without revision "+`info: ${e.join(", ")}\nThis is generally NOT safe. `+"Learn more at https://bit.ly/wb-precache";console.warn(t)}}}async install({event:t,plugins:e}={}){const n=[],i=[],s=await self.caches.open(this.t),c=await s.keys(),o=new Set(c.map(t=>t.url));for(const[t,e]of this.i)o.has(e)?i.push(t):n.push({cacheKey:e,url:t});const r=n.map(({cacheKey:n,url:i})=>{const s=this.o.get(n),c=this.s.get(i);return this.h({cacheKey:n,cacheMode:c,event:t,integrity:s,plugins:e,url:i})});return await Promise.all(r),{updatedURLs:n.map(t=>t.url),notUpdatedURLs:i}}async activate(){const t=await self.caches.open(this.t),e=await t.keys(),n=new Set(this.i.values()),i=[];for(const s of e)n.has(s.url)||(await t.delete(s),i.push(s.url));return{deletedURLs:i}}async h({cacheKey:t,url:e,cacheMode:o,event:r,plugins:a,integrity:h}){const u=new Request(e,{integrity:h,cache:o,credentials:"same-origin"});let l,f=await i.fetchWrapper.fetch({event:r,plugins:a,request:u});for(const t of a||[])"cacheWillUpdate"in t&&(l=t);if(!(l?await l.cacheWillUpdate({event:r,request:u,response:f}):f.status<400))throw new s.WorkboxError("bad-precaching-response",{url:e,status:f.status});f.redirected&&(f=await c.copyResponse(f)),await n.cacheWrapper.put({event:r,plugins:a,response:f,request:t===e?u:new Request(t),cacheName:this.t,matchOptions:{ignoreSearch:!0}})}getURLsToCacheKeys(){return this.i}getCachedURLs(){return[...this.i.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.i.get(e.href)}async matchPrecache(t){const e=t instanceof Request?t.url:t,n=this.getCacheKeyForURL(e);if(n){return(await self.caches.open(this.t)).match(n)}}createHandler(t=!0){return async({request:e})=>{try{const n=await this.matchPrecache(e);if(n)return n;throw new s.WorkboxError("missing-precache-entry",{cacheName:this.t,url:e instanceof Request?e.url:e})}catch(n){if(t)return fetch(e);throw n}}}createHandlerBoundToURL(t,e=!0){if(!this.getCacheKeyForURL(t))throw new s.WorkboxError("non-precached-url",{url:t});const n=this.createHandler(e),i=new Request(t);return()=>n({request:i})}}let l;const f=()=>(l||(l=new u),l);const w=(t,e)=>{const n=f().getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e,directoryIndex:n,cleanURLs:i,urlManipulation:s}={}){const c=new URL(t,location.href);c.hash="",yield c.href;const o=function(t,e=[]){for(const n of[...t.searchParams.keys()])e.some(t=>t.test(n))&&t.searchParams.delete(n);return t}(c,e);if(yield o.href,n&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=n,yield t.href}if(i){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(s){const t=s({url:c});for(const e of t)yield e.href}}(t,e)){const t=n.get(i);if(t)return t}},d=({ignoreURLParametersMatching:t=[/^utm_/],directoryIndex:n="index.html",cleanURLs:i=!0,urlManipulation:s}={})=>{const c=e.cacheNames.getPrecacheName();self.addEventListener("fetch",e=>{const o=w(e.request.url,{cleanURLs:i,directoryIndex:n,ignoreURLParametersMatching:t,urlManipulation:s});if(!o)return;let r=self.caches.open(c).then(t=>t.match(o)).then(t=>t||fetch(o));e.respondWith(r)})};let y=!1;function p(t){y||(d(t),y=!0)}const g=async(t,e="-precache-")=>{const n=(await self.caches.keys()).filter(n=>n.includes(e)&&n.includes(self.registration.scope)&&n!==t);return await Promise.all(n.map(t=>self.caches.delete(t))),n};const R=t=>{const e=f(),n=r.get();t.waitUntil(e.install({event:t,plugins:n}).catch(t=>{throw t}))},L=t=>{const e=f();t.waitUntil(e.activate())};function U(t){f().addToCacheList(t),t.length>0&&(self.addEventListener("install",R),self.addEventListener("activate",L))}return t.PrecacheController=u,t.addPlugins=function(t){r.add(t)},t.addRoute=p,t.cleanupOutdatedCaches=function(){self.addEventListener("activate",t=>{const n=e.cacheNames.getPrecacheName();t.waitUntil(g(n).then(t=>{}))})},t.createHandler=function(t=!0){return f().createHandler(t)},t.createHandlerBoundToURL=function(t){return f().createHandlerBoundToURL(t)},t.getCacheKeyForURL=function(t){return f().getCacheKeyForURL(t)},t.matchPrecache=function(t){return f().matchPrecache(t)},t.precache=U,t.precacheAndRoute=function(t,e){U(t),p(e)},t}({},workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core);
2
+ //# sourceMappingURL=workbox-precaching.prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbox-precaching.prod.js","sources":["../_version.js","../utils/precachePlugins.js","../utils/createCacheKey.js","../PrecacheController.js","../utils/getOrCreatePrecacheController.js","../utils/getCacheKeyForURL.js","../utils/generateURLVariations.js","../utils/removeIgnoredSearchParams.js","../utils/addFetchListener.js","../addRoute.js","../utils/deleteOutdatedCaches.js","../precache.js","../addPlugins.js","../cleanupOutdatedCaches.js","../createHandler.js","../createHandlerBoundToURL.js","../getCacheKeyForURL.js","../matchPrecache.js","../precacheAndRoute.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:5.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst plugins = [];\nexport const precachePlugins = {\n /*\n * @return {Array}\n * @private\n */\n get() {\n return plugins;\n },\n /*\n * @param {Array} newPlugins\n * @private\n */\n add(newPlugins) {\n plugins.push(...newPlugins);\n },\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof module:workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {string} [cacheName] An optional name for the cache, to override\n * the default precache name.\n */\n constructor(cacheName) {\n this._cacheName = cacheNames.getPrecacheName(cacheName);\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {\n * Array<module:workbox-precaching.PrecacheController.PrecacheEntry|string>\n * } entries Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = (typeof entry !== 'string' && entry.revision) ?\n 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * @param {Object} options\n * @param {Event} [options.event] The install event (if needed).\n * @param {Array<Object>} [options.plugins] Plugins to be used for fetching\n * and caching during install.\n * @return {Promise<module:workbox-precaching.InstallResult>}\n */\n async install({ event, plugins } = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (plugins) {\n assert.isArray(plugins, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'install',\n paramName: 'plugins',\n });\n }\n }\n const toBePrecached = [];\n const alreadyPrecached = [];\n const cache = await self.caches.open(this._cacheName);\n const alreadyCachedRequests = await cache.keys();\n const existingCacheKeys = new Set(alreadyCachedRequests.map((request) => request.url));\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n if (existingCacheKeys.has(cacheKey)) {\n alreadyPrecached.push(url);\n }\n else {\n toBePrecached.push({ cacheKey, url });\n }\n }\n const precacheRequests = toBePrecached.map(({ cacheKey, url }) => {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n return this._addURLToCache({\n cacheKey,\n cacheMode,\n event,\n integrity,\n plugins,\n url,\n });\n });\n await Promise.all(precacheRequests);\n const updatedURLs = toBePrecached.map((item) => item.url);\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, alreadyPrecached);\n }\n return {\n updatedURLs,\n notUpdatedURLs: alreadyPrecached,\n };\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * @return {Promise<module:workbox-precaching.CleanupResult>}\n */\n async activate() {\n const cache = await self.caches.open(this._cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n }\n /**\n * Requests the entry and saves it to the cache if the response is valid.\n * By default, any response with a status code of less than 400 (including\n * opaque responses) is considered valid.\n *\n * If you need to use custom criteria to determine what's valid and what\n * isn't, then pass in an item in `options.plugins` that implements the\n * `cacheWillUpdate()` lifecycle event.\n *\n * @private\n * @param {Object} options\n * @param {string} options.cacheKey The string to use a cache key.\n * @param {string} options.url The URL to fetch and cache.\n * @param {string} [options.cacheMode] The cache mode for the network request.\n * @param {Event} [options.event] The install event (if passed).\n * @param {Array<Object>} [options.plugins] An array of plugins to apply to\n * fetch and caching.\n * @param {string} [options.integrity] The value to use for the `integrity`\n * field when making the request.\n */\n async _addURLToCache({ cacheKey, url, cacheMode, event, plugins, integrity }) {\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n let response = await fetchWrapper.fetch({\n event,\n plugins,\n request,\n });\n // Allow developers to override the default logic about what is and isn't\n // valid by passing in a plugin implementing cacheWillUpdate(), e.g.\n // a `CacheableResponsePlugin` instance.\n let cacheWillUpdatePlugin;\n for (const plugin of (plugins || [])) {\n if ('cacheWillUpdate' in plugin) {\n cacheWillUpdatePlugin = plugin;\n }\n }\n const isValidResponse = cacheWillUpdatePlugin ?\n // Use a callback if provided. It returns a truthy value if valid.\n // NOTE: invoke the method on the plugin instance so the `this` context\n // is correct.\n await cacheWillUpdatePlugin.cacheWillUpdate({ event, request, response }) :\n // Otherwise, default to considering any response status under 400 valid.\n // This includes, by default, considering opaque responses valid.\n response.status < 400;\n // Consider this a failure, leading to the `install` handler failing, if\n // we get back an invalid response.\n if (!isValidResponse) {\n throw new WorkboxError('bad-precaching-response', {\n url,\n status: response.status,\n });\n }\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n if (response.redirected) {\n response = await copyResponse(response);\n }\n await cacheWrapper.put({\n event,\n plugins,\n response,\n // `request` already uses `url`. We may be able to reuse it.\n request: cacheKey === url ? request : new Request(cacheKey),\n cacheName: this._cacheName,\n matchOptions: {\n ignoreSearch: true,\n },\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map<string, string>} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array<string>} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * This acts as a drop-in replacement for [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise<Response|undefined>}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this._cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that can be used within a\n * {@link module:workbox-routing.Route} that will find a response for the\n * incoming request against the precache.\n *\n * If for an unexpected reason there is a cache miss for the request,\n * this will fall back to retrieving the `Response` via `fetch()` when\n * `fallbackToNetwork` is `true`.\n *\n * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the\n * response from the network if there's a precache miss.\n * @return {module:workbox-routing~handlerCallback}\n */\n createHandler(fallbackToNetwork = true) {\n return async ({ request }) => {\n try {\n const response = await this.matchPrecache(request);\n if (response) {\n return response;\n }\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this._cacheName,\n url: request instanceof Request ? request.url : request,\n });\n }\n catch (error) {\n if (fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Unable to respond with precached response. ` +\n `Falling back to network.`, error);\n }\n return fetch(request);\n }\n throw error;\n }\n };\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * If for an unexpected reason there is a cache miss when looking up `url`,\n * this will fall back to retrieving the `Response` via `fetch()` when\n * `fallbackToNetwork` is `true`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the\n * response from the network if there's a precache miss.\n * @return {module:workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url, fallbackToNetwork = true) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n const handler = this.createHandler(fallbackToNetwork);\n const request = new Request(url);\n return () => handler({ request });\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './getOrCreatePrecacheController.js';\nimport { generateURLVariations } from './generateURLVariations.js';\nimport '../_version.js';\n/**\n * This function will take the request URL and manipulate it based on the\n * configuration options.\n *\n * @param {string} url\n * @param {Object} options\n * @return {string} Returns the URL in the cache that matches the request,\n * if possible.\n *\n * @private\n */\nexport const getCacheKeyForURL = (url, options) => {\n const precacheController = getOrCreatePrecacheController();\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(url, options)) {\n const possibleCacheKey = urlsToCacheKeys.get(possibleURL);\n if (possibleCacheKey) {\n return possibleCacheKey;\n }\n }\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching, directoryIndex, cleanURLs, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array<RegExp>} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getCacheKeyForURL } from './getCacheKeyForURL.js';\nimport '../_version.js';\n/**\n * Adds a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * NOTE: when called more than once this method will replace the previously set\n * configuration options. Calling it more than once is not recommended outside\n * of tests.\n *\n * @private\n * @param {Object} [options]\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array<RegExp>} [options.ignoreURLParametersMatching=[/^utm_/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {workbox.precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\nexport const addFetchListener = ({ ignoreURLParametersMatching = [/^utm_/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) => {\n const cacheName = cacheNames.getPrecacheName();\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const precachedURL = getCacheKeyForURL(event.request.url, {\n cleanURLs,\n directoryIndex,\n ignoreURLParametersMatching,\n urlManipulation,\n });\n if (!precachedURL) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` +\n getFriendlyURL(event.request.url));\n }\n return;\n }\n let responsePromise = self.caches.open(cacheName).then((cache) => {\n return cache.match(precachedURL);\n }).then((cachedResponse) => {\n if (cachedResponse) {\n return cachedResponse;\n }\n // Fall back to the network if we don't have a cached response\n // (perhaps due to manual cache cleanup).\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(precachedURL)} in ${cacheName} was not found. ` +\n `Falling back to the network instead.`);\n }\n return fetch(precachedURL);\n });\n if (process.env.NODE_ENV !== 'production') {\n responsePromise = responsePromise.then((response) => {\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` +\n getFriendlyURL(event.request.url));\n logger.log(`Serving the precached url: ${precachedURL}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(event.request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n return response;\n });\n }\n event.respondWith(responsePromise);\n }));\n};\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addFetchListener } from './utils/addFetchListener.js';\nimport './_version.js';\nlet listenerAdded = false;\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options]\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array<RegExp>} [options.ignoreURLParametersMatching=[/^utm_/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {module:workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n *\n * @memberof module:workbox-precaching\n */\nfunction addRoute(options) {\n if (!listenerAdded) {\n addFetchListener(options);\n listenerAdded = true;\n }\n}\n;\nexport { addRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst SUBSTRING_TO_FIND = '-precache-';\n/**\n * Cleans up incompatible precaches that were created by older versions of\n * Workbox, by a service worker registered under the current scope.\n *\n * This is meant to be called as part of the `activate` event.\n *\n * This should be safe to use as long as you don't include `substringToFind`\n * (defaulting to `-precache-`) in your non-precache cache names.\n *\n * @param {string} currentPrecacheName The cache name currently in use for\n * precaching. This cache won't be deleted.\n * @param {string} [substringToFind='-precache-'] Cache names which include this\n * substring will be deleted (excluding `currentPrecacheName`).\n * @return {Array<string>} A list of all the cache names that were deleted.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nconst deleteOutdatedCaches = async (currentPrecacheName, substringToFind = SUBSTRING_TO_FIND) => {\n const cacheNames = await self.caches.keys();\n const cacheNamesToDelete = cacheNames.filter((cacheName) => {\n return cacheName.includes(substringToFind) &&\n cacheName.includes(self.registration.scope) &&\n cacheName !== currentPrecacheName;\n });\n await Promise.all(cacheNamesToDelete.map((cacheName) => self.caches.delete(cacheName)));\n return cacheNamesToDelete;\n};\nexport { deleteOutdatedCaches };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { precachePlugins } from './utils/precachePlugins.js';\nimport './_version.js';\nconst installListener = (event) => {\n const precacheController = getOrCreatePrecacheController();\n const plugins = precachePlugins.get();\n event.waitUntil(precacheController.install({ event, plugins })\n .catch((error) => {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Service worker installation failed. It will ` +\n `be retried automatically during the next navigation.`);\n }\n // Re-throw the error to ensure installation fails.\n throw error;\n }));\n};\nconst activateListener = (event) => {\n const precacheController = getOrCreatePrecacheController();\n event.waitUntil(precacheController.activate());\n};\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * [\"precache cache\"]{@link module:workbox-core.cacheNames} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * [addRoute()]{@link module:workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * [precacheAndRoute()]{@link module:workbox-precaching.precacheAndRoute}.\n *\n * @param {Array<Object|string>} [entries=[]] Array of entries to precache.\n *\n * @memberof module:workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.addToCacheList(entries);\n if (entries.length > 0) {\n // NOTE: these listeners will only be added once (even if the `precache()`\n // method is called multiple times) because event listeners are implemented\n // as a set, where each listener must be unique.\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('install', installListener);\n self.addEventListener('activate', activateListener);\n }\n}\n;\nexport { precache };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { precachePlugins } from './utils/precachePlugins.js';\nimport './_version.js';\n/**\n * Adds plugins to precaching.\n *\n * @param {Array<Object>} newPlugins\n *\n * @memberof module:workbox-precaching\n */\nfunction addPlugins(newPlugins) {\n precachePlugins.add(newPlugins);\n}\n;\nexport { addPlugins };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { deleteOutdatedCaches } from './utils/deleteOutdatedCaches.js';\nimport './_version.js';\n/**\n * Adds an `activate` event listener which will clean up incompatible\n * precaches that were created by older versions of Workbox.\n *\n * @memberof module:workbox-precaching\n */\nfunction cleanupOutdatedCaches() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('activate', ((event) => {\n const cacheName = cacheNames.getPrecacheName();\n event.waitUntil(deleteOutdatedCaches(cacheName).then((cachesDeleted) => {\n if (process.env.NODE_ENV !== 'production') {\n if (cachesDeleted.length > 0) {\n logger.log(`The following out-of-date precaches were cleaned up ` +\n `automatically:`, cachesDeleted);\n }\n }\n }));\n }));\n}\n;\nexport { cleanupOutdatedCaches };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Helper function that calls\n * {@link PrecacheController#createHandler} on the default\n * {@link PrecacheController} instance.\n *\n * If you are creating your own {@link PrecacheController}, then call the\n * {@link PrecacheController#createHandler} on that instance,\n * instead of using this function.\n *\n * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the\n * response from the network if there's a precache miss.\n * @return {module:workbox-routing~handlerCallback}\n *\n * @memberof module:workbox-precaching\n */\nfunction createHandler(fallbackToNetwork = true) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.createHandler(fallbackToNetwork);\n}\n;\nexport { createHandler };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Helper function that calls\n * {@link PrecacheController#createHandlerBoundToURL} on the default\n * {@link PrecacheController} instance.\n *\n * If you are creating your own {@link PrecacheController}, then call the\n * {@link PrecacheController#createHandlerBoundToURL} on that instance,\n * instead of using this function.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the\n * response from the network if there's a precache miss.\n * @return {module:workbox-routing~handlerCallback}\n *\n * @memberof module:workbox-precaching\n */\nfunction createHandlerBoundToURL(url) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.createHandlerBoundToURL(url);\n}\n;\nexport { createHandlerBoundToURL };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Takes in a URL, and returns the corresponding URL that could be used to\n * lookup the entry in the precache.\n *\n * If a relative URL is provided, the location of the service worker file will\n * be used as the base.\n *\n * For precached entries without revision information, the cache key will be the\n * same as the original URL.\n *\n * For precached entries with revision information, the cache key will be the\n * original URL with the addition of a query parameter used for keeping track of\n * the revision info.\n *\n * @param {string} url The URL whose cache key to look up.\n * @return {string} The cache key that corresponds to that URL.\n *\n * @memberof module:workbox-precaching\n */\nfunction getCacheKeyForURL(url) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.getCacheKeyForURL(url);\n}\n;\nexport { getCacheKeyForURL };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Helper function that calls\n * {@link PrecacheController#matchPrecache} on the default\n * {@link PrecacheController} instance.\n *\n * If you are creating your own {@link PrecacheController}, then call\n * {@link PrecacheController#matchPrecache} on that instance,\n * instead of using this function.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise<Response|undefined>}\n *\n * @memberof module:workbox-precaching\n */\nfunction matchPrecache(request) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.matchPrecache(request);\n}\n;\nexport { matchPrecache };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * [precache()]{@link module:workbox-precaching.precache} and\n * [addRoute()]{@link module:workbox-precaching.addRoute} in a single call.\n *\n * @param {Array<Object|string>} entries Array of entries to precache.\n * @param {Object} [options] See\n * [addRoute() options]{@link module:workbox-precaching.addRoute}.\n *\n * @memberof module:workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\n;\nexport { precacheAndRoute };\n"],"names":["self","_","e","plugins","precachePlugins","get","add","newPlugins","push","REVISION_SEARCH_PARAM","createCacheKey","entry","WorkboxError","urlObject","URL","location","href","cacheKey","url","revision","cacheKeyURL","originalURL","searchParams","set","PrecacheController","constructor","cacheName","_cacheName","cacheNames","getPrecacheName","_urlsToCacheKeys","Map","_urlsToCacheModes","_cacheKeysToIntegrities","addToCacheList","entries","urlsToWarnAbout","undefined","cacheMode","this","has","firstEntry","secondEntry","integrity","length","warningMessage","join","console","warn","event","toBePrecached","alreadyPrecached","cache","caches","open","alreadyCachedRequests","keys","existingCacheKeys","Set","map","request","precacheRequests","_addURLToCache","Promise","all","updatedURLs","item","notUpdatedURLs","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","delete","Request","credentials","cacheWillUpdatePlugin","response","fetchWrapper","fetch","plugin","cacheWillUpdate","status","redirected","copyResponse","cacheWrapper","put","matchOptions","ignoreSearch","getURLsToCacheKeys","getCachedURLs","getCacheKeyForURL","match","createHandler","fallbackToNetwork","async","matchPrecache","error","createHandlerBoundToURL","handler","precacheController","getOrCreatePrecacheController","options","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","regExp","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","possibleCacheKey","addFetchListener","addEventListener","precachedURL","responsePromise","then","cachedResponse","respondWith","listenerAdded","addRoute","deleteOutdatedCaches","currentPrecacheName","substringToFind","cacheNamesToDelete","filter","includes","registration","scope","installListener","waitUntil","install","catch","activateListener","activate","precache","cachesDeleted"],"mappings":"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"}
@@ -2,9 +2,8 @@ this.workbox = this.workbox || {};
2
2
  this.workbox.rangeRequests = (function (exports, WorkboxError_js, assert_js, logger_js) {
3
3
  'use strict';
4
4
 
5
- // @ts-ignore
6
5
  try {
7
- self['workbox:range-requests:5.0.0-alpha.0'] && _();
6
+ self['workbox:range-requests:5.0.0'] && _();
8
7
  } catch (e) {}
9
8
 
10
9
  /*
@@ -47,14 +46,14 @@ this.workbox.rangeRequests = (function (exports, WorkboxError_js, assert_js, log
47
46
  let effectiveStart;
48
47
  let effectiveEnd;
49
48
 
50
- if (start && end) {
49
+ if (start !== undefined && end !== undefined) {
51
50
  effectiveStart = start; // Range values are inclusive, so add 1 to the value.
52
51
 
53
52
  effectiveEnd = end + 1;
54
- } else if (start && !end) {
53
+ } else if (start !== undefined && end === undefined) {
55
54
  effectiveStart = start;
56
55
  effectiveEnd = blobSize;
57
- } else if (end && !start) {
56
+ } else if (end !== undefined && start === undefined) {
58
57
  effectiveStart = blobSize - end;
59
58
  effectiveEnd = blobSize;
60
59
  }
@@ -144,7 +143,7 @@ this.workbox.rangeRequests = (function (exports, WorkboxError_js, assert_js, log
144
143
  * `Range:` header, or a `416 Range Not Satisfiable` response if the
145
144
  * conditions of the `Range:` header can't be met.
146
145
  *
147
- * @memberof workbox.rangeRequests
146
+ * @memberof module:workbox-range-requests
148
147
  */
149
148
 
150
149
  async function createPartialResponse(request, originalResponse) {
@@ -220,10 +219,10 @@ this.workbox.rangeRequests = (function (exports, WorkboxError_js, assert_js, log
220
219
  * It does this by intercepting the `cachedResponseWillBeUsed` plugin callback
221
220
  * and returning the appropriate subset of the cached response body.
222
221
  *
223
- * @memberof workbox.rangeRequests
222
+ * @memberof module:workbox-range-requests
224
223
  */
225
224
 
226
- class Plugin {
225
+ class RangeRequestsPlugin {
227
226
  constructor() {
228
227
  /**
229
228
  * @param {Object} options
@@ -254,7 +253,7 @@ this.workbox.rangeRequests = (function (exports, WorkboxError_js, assert_js, log
254
253
 
255
254
  }
256
255
 
257
- exports.Plugin = Plugin;
256
+ exports.RangeRequestsPlugin = RangeRequestsPlugin;
258
257
  exports.createPartialResponse = createPartialResponse;
259
258
 
260
259
  return exports;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbox-range-requests.dev.js","sources":["../_version.js","../utils/calculateEffectiveBoundaries.js","../utils/parseRangeHeader.js","../createPartialResponse.js","../RangeRequestsPlugin.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:range-requests:5.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {Blob} blob A source blob.\n * @param {number} [start] The offset to use as the start of the\n * slice.\n * @param {number} [end] The offset to use as the end of the slice.\n * @return {Object} An object with `start` and `end` properties, reflecting\n * the effective boundaries to use given the size of the blob.\n *\n * @private\n */\nfunction calculateEffectiveBoundaries(blob, start, end) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(blob, Blob, {\n moduleName: 'workbox-range-requests',\n funcName: 'calculateEffectiveBoundaries',\n paramName: 'blob',\n });\n }\n const blobSize = blob.size;\n if ((end && end > blobSize) || (start && start < 0)) {\n throw new WorkboxError('range-not-satisfiable', {\n size: blobSize,\n end,\n start,\n });\n }\n let effectiveStart;\n let effectiveEnd;\n if (start !== undefined && end !== undefined) {\n effectiveStart = start;\n // Range values are inclusive, so add 1 to the value.\n effectiveEnd = end + 1;\n }\n else if (start !== undefined && end === undefined) {\n effectiveStart = start;\n effectiveEnd = blobSize;\n }\n else if (end !== undefined && start === undefined) {\n effectiveStart = blobSize - end;\n effectiveEnd = blobSize;\n }\n return {\n start: effectiveStart,\n end: effectiveEnd,\n };\n}\nexport { calculateEffectiveBoundaries };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {string} rangeHeader A Range: header value.\n * @return {Object} An object with `start` and `end` properties, reflecting\n * the parsed value of the Range: header. If either the `start` or `end` are\n * omitted, then `null` will be returned.\n *\n * @private\n */\nfunction parseRangeHeader(rangeHeader) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(rangeHeader, 'string', {\n moduleName: 'workbox-range-requests',\n funcName: 'parseRangeHeader',\n paramName: 'rangeHeader',\n });\n }\n const normalizedRangeHeader = rangeHeader.trim().toLowerCase();\n if (!normalizedRangeHeader.startsWith('bytes=')) {\n throw new WorkboxError('unit-must-be-bytes', { normalizedRangeHeader });\n }\n // Specifying multiple ranges separate by commas is valid syntax, but this\n // library only attempts to handle a single, contiguous sequence of bytes.\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range#Syntax\n if (normalizedRangeHeader.includes(',')) {\n throw new WorkboxError('single-range-only', { normalizedRangeHeader });\n }\n const rangeParts = /(\\d*)-(\\d*)/.exec(normalizedRangeHeader);\n // We need either at least one of the start or end values.\n if (!rangeParts || !(rangeParts[1] || rangeParts[2])) {\n throw new WorkboxError('invalid-range-values', { normalizedRangeHeader });\n }\n return {\n start: rangeParts[1] === '' ? undefined : Number(rangeParts[1]),\n end: rangeParts[2] === '' ? undefined : Number(rangeParts[2]),\n };\n}\nexport { parseRangeHeader };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { calculateEffectiveBoundaries } from './utils/calculateEffectiveBoundaries.js';\nimport { parseRangeHeader } from './utils/parseRangeHeader.js';\nimport './_version.js';\n/**\n * Given a `Request` and `Response` objects as input, this will return a\n * promise for a new `Response`.\n *\n * If the original `Response` already contains partial content (i.e. it has\n * a status of 206), then this assumes it already fulfills the `Range:`\n * requirements, and will return it as-is.\n *\n * @param {Request} request A request, which should contain a Range:\n * header.\n * @param {Response} originalResponse A response.\n * @return {Promise<Response>} Either a `206 Partial Content` response, with\n * the response body set to the slice of content specified by the request's\n * `Range:` header, or a `416 Range Not Satisfiable` response if the\n * conditions of the `Range:` header can't be met.\n *\n * @memberof module:workbox-range-requests\n */\nasync function createPartialResponse(request, originalResponse) {\n try {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-range-requests',\n funcName: 'createPartialResponse',\n paramName: 'request',\n });\n assert.isInstance(originalResponse, Response, {\n moduleName: 'workbox-range-requests',\n funcName: 'createPartialResponse',\n paramName: 'originalResponse',\n });\n }\n if (originalResponse.status === 206) {\n // If we already have a 206, then just pass it through as-is;\n // see https://github.com/GoogleChrome/workbox/issues/1720\n return originalResponse;\n }\n const rangeHeader = request.headers.get('range');\n if (!rangeHeader) {\n throw new WorkboxError('no-range-header');\n }\n const boundaries = parseRangeHeader(rangeHeader);\n const originalBlob = await originalResponse.blob();\n const effectiveBoundaries = calculateEffectiveBoundaries(originalBlob, boundaries.start, boundaries.end);\n const slicedBlob = originalBlob.slice(effectiveBoundaries.start, effectiveBoundaries.end);\n const slicedBlobSize = slicedBlob.size;\n const slicedResponse = new Response(slicedBlob, {\n // Status code 206 is for a Partial Content response.\n // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206\n status: 206,\n statusText: 'Partial Content',\n headers: originalResponse.headers,\n });\n slicedResponse.headers.set('Content-Length', String(slicedBlobSize));\n slicedResponse.headers.set('Content-Range', `bytes ${effectiveBoundaries.start}-${effectiveBoundaries.end - 1}/` +\n originalBlob.size);\n return slicedResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to construct a partial response; returning a ` +\n `416 Range Not Satisfiable response instead.`);\n logger.groupCollapsed(`View details here.`);\n logger.log(error);\n logger.log(request);\n logger.log(originalResponse);\n logger.groupEnd();\n }\n return new Response('', {\n status: 416,\n statusText: 'Range Not Satisfiable',\n });\n }\n}\nexport { createPartialResponse };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { createPartialResponse } from './createPartialResponse.js';\nimport './_version.js';\n/**\n * The range request plugin makes it easy for a request with a 'Range' header to\n * be fulfilled by a cached response.\n *\n * It does this by intercepting the `cachedResponseWillBeUsed` plugin callback\n * and returning the appropriate subset of the cached response body.\n *\n * @memberof module:workbox-range-requests\n */\nclass RangeRequestsPlugin {\n constructor() {\n /**\n * @param {Object} options\n * @param {Request} options.request The original request, which may or may not\n * contain a Range: header.\n * @param {Response} options.cachedResponse The complete cached response.\n * @return {Promise<Response>} If request contains a 'Range' header, then a\n * new response with status 206 whose body is a subset of `cachedResponse` is\n * returned. Otherwise, `cachedResponse` is returned as-is.\n *\n * @private\n */\n this.cachedResponseWillBeUsed = async ({ request, cachedResponse }) => {\n // Only return a sliced response if there's something valid in the cache,\n // and there's a Range: header in the request.\n if (cachedResponse && request.headers.has('range')) {\n return await createPartialResponse(request, cachedResponse);\n }\n // If there was no Range: header, or if cachedResponse wasn't valid, just\n // pass it through as-is.\n return cachedResponse;\n };\n }\n}\nexport { RangeRequestsPlugin };\n"],"names":["self","_","e","calculateEffectiveBoundaries","blob","start","end","assert","isInstance","Blob","moduleName","funcName","paramName","blobSize","size","WorkboxError","effectiveStart","effectiveEnd","undefined","parseRangeHeader","rangeHeader","isType","normalizedRangeHeader","trim","toLowerCase","startsWith","includes","rangeParts","exec","Number","createPartialResponse","request","originalResponse","process","Request","Response","status","headers","get","boundaries","originalBlob","effectiveBoundaries","slicedBlob","slice","slicedBlobSize","slicedResponse","statusText","set","String","error","logger","warn","groupCollapsed","log","groupEnd","RangeRequestsPlugin","constructor","cachedResponseWillBeUsed","cachedResponse","has"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ this.workbox=this.workbox||{},this.workbox.rangeRequests=function(t,e,n){"use strict";try{self["workbox:range-requests:5.0.0"]&&_()}catch(t){}async function r(t,n){try{if(206===n.status)return n;const r=t.headers.get("range");if(!r)throw new e.WorkboxError("no-range-header");const s=function(t){const n=t.trim().toLowerCase();if(!n.startsWith("bytes="))throw new e.WorkboxError("unit-must-be-bytes",{normalizedRangeHeader:n});if(n.includes(","))throw new e.WorkboxError("single-range-only",{normalizedRangeHeader:n});const r=/(\d*)-(\d*)/.exec(n);if(!r||!r[1]&&!r[2])throw new e.WorkboxError("invalid-range-values",{normalizedRangeHeader:n});return{start:""===r[1]?void 0:Number(r[1]),end:""===r[2]?void 0:Number(r[2])}}(r),a=await n.blob(),o=function(t,n,r){const s=t.size;if(r&&r>s||n&&n<0)throw new e.WorkboxError("range-not-satisfiable",{size:s,end:r,start:n});let a,o;return void 0!==n&&void 0!==r?(a=n,o=r+1):void 0!==n&&void 0===r?(a=n,o=s):void 0!==r&&void 0===n&&(a=s-r,o=s),{start:a,end:o}}(a,s.start,s.end),i=a.slice(o.start,o.end),d=i.size,u=new Response(i,{status:206,statusText:"Partial Content",headers:n.headers});return u.headers.set("Content-Length",String(d)),u.headers.set("Content-Range",`bytes ${o.start}-${o.end-1}/`+a.size),u}catch(t){return new Response("",{status:416,statusText:"Range Not Satisfiable"})}}return t.RangeRequestsPlugin=class{constructor(){this.cachedResponseWillBeUsed=(async({request:t,cachedResponse:e})=>e&&t.headers.has("range")?await r(t,e):e)}},t.createPartialResponse=r,t}({},workbox.core._private,workbox.core._private);
2
+ //# sourceMappingURL=workbox-range-requests.prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbox-range-requests.prod.js","sources":["../_version.js","../createPartialResponse.js","../utils/parseRangeHeader.js","../utils/calculateEffectiveBoundaries.js","../RangeRequestsPlugin.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:range-requests:5.0.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { calculateEffectiveBoundaries } from './utils/calculateEffectiveBoundaries.js';\nimport { parseRangeHeader } from './utils/parseRangeHeader.js';\nimport './_version.js';\n/**\n * Given a `Request` and `Response` objects as input, this will return a\n * promise for a new `Response`.\n *\n * If the original `Response` already contains partial content (i.e. it has\n * a status of 206), then this assumes it already fulfills the `Range:`\n * requirements, and will return it as-is.\n *\n * @param {Request} request A request, which should contain a Range:\n * header.\n * @param {Response} originalResponse A response.\n * @return {Promise<Response>} Either a `206 Partial Content` response, with\n * the response body set to the slice of content specified by the request's\n * `Range:` header, or a `416 Range Not Satisfiable` response if the\n * conditions of the `Range:` header can't be met.\n *\n * @memberof module:workbox-range-requests\n */\nasync function createPartialResponse(request, originalResponse) {\n try {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-range-requests',\n funcName: 'createPartialResponse',\n paramName: 'request',\n });\n assert.isInstance(originalResponse, Response, {\n moduleName: 'workbox-range-requests',\n funcName: 'createPartialResponse',\n paramName: 'originalResponse',\n });\n }\n if (originalResponse.status === 206) {\n // If we already have a 206, then just pass it through as-is;\n // see https://github.com/GoogleChrome/workbox/issues/1720\n return originalResponse;\n }\n const rangeHeader = request.headers.get('range');\n if (!rangeHeader) {\n throw new WorkboxError('no-range-header');\n }\n const boundaries = parseRangeHeader(rangeHeader);\n const originalBlob = await originalResponse.blob();\n const effectiveBoundaries = calculateEffectiveBoundaries(originalBlob, boundaries.start, boundaries.end);\n const slicedBlob = originalBlob.slice(effectiveBoundaries.start, effectiveBoundaries.end);\n const slicedBlobSize = slicedBlob.size;\n const slicedResponse = new Response(slicedBlob, {\n // Status code 206 is for a Partial Content response.\n // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206\n status: 206,\n statusText: 'Partial Content',\n headers: originalResponse.headers,\n });\n slicedResponse.headers.set('Content-Length', String(slicedBlobSize));\n slicedResponse.headers.set('Content-Range', `bytes ${effectiveBoundaries.start}-${effectiveBoundaries.end - 1}/` +\n originalBlob.size);\n return slicedResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to construct a partial response; returning a ` +\n `416 Range Not Satisfiable response instead.`);\n logger.groupCollapsed(`View details here.`);\n logger.log(error);\n logger.log(request);\n logger.log(originalResponse);\n logger.groupEnd();\n }\n return new Response('', {\n status: 416,\n statusText: 'Range Not Satisfiable',\n });\n }\n}\nexport { createPartialResponse };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {string} rangeHeader A Range: header value.\n * @return {Object} An object with `start` and `end` properties, reflecting\n * the parsed value of the Range: header. If either the `start` or `end` are\n * omitted, then `null` will be returned.\n *\n * @private\n */\nfunction parseRangeHeader(rangeHeader) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(rangeHeader, 'string', {\n moduleName: 'workbox-range-requests',\n funcName: 'parseRangeHeader',\n paramName: 'rangeHeader',\n });\n }\n const normalizedRangeHeader = rangeHeader.trim().toLowerCase();\n if (!normalizedRangeHeader.startsWith('bytes=')) {\n throw new WorkboxError('unit-must-be-bytes', { normalizedRangeHeader });\n }\n // Specifying multiple ranges separate by commas is valid syntax, but this\n // library only attempts to handle a single, contiguous sequence of bytes.\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range#Syntax\n if (normalizedRangeHeader.includes(',')) {\n throw new WorkboxError('single-range-only', { normalizedRangeHeader });\n }\n const rangeParts = /(\\d*)-(\\d*)/.exec(normalizedRangeHeader);\n // We need either at least one of the start or end values.\n if (!rangeParts || !(rangeParts[1] || rangeParts[2])) {\n throw new WorkboxError('invalid-range-values', { normalizedRangeHeader });\n }\n return {\n start: rangeParts[1] === '' ? undefined : Number(rangeParts[1]),\n end: rangeParts[2] === '' ? undefined : Number(rangeParts[2]),\n };\n}\nexport { parseRangeHeader };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {Blob} blob A source blob.\n * @param {number} [start] The offset to use as the start of the\n * slice.\n * @param {number} [end] The offset to use as the end of the slice.\n * @return {Object} An object with `start` and `end` properties, reflecting\n * the effective boundaries to use given the size of the blob.\n *\n * @private\n */\nfunction calculateEffectiveBoundaries(blob, start, end) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(blob, Blob, {\n moduleName: 'workbox-range-requests',\n funcName: 'calculateEffectiveBoundaries',\n paramName: 'blob',\n });\n }\n const blobSize = blob.size;\n if ((end && end > blobSize) || (start && start < 0)) {\n throw new WorkboxError('range-not-satisfiable', {\n size: blobSize,\n end,\n start,\n });\n }\n let effectiveStart;\n let effectiveEnd;\n if (start !== undefined && end !== undefined) {\n effectiveStart = start;\n // Range values are inclusive, so add 1 to the value.\n effectiveEnd = end + 1;\n }\n else if (start !== undefined && end === undefined) {\n effectiveStart = start;\n effectiveEnd = blobSize;\n }\n else if (end !== undefined && start === undefined) {\n effectiveStart = blobSize - end;\n effectiveEnd = blobSize;\n }\n return {\n start: effectiveStart,\n end: effectiveEnd,\n };\n}\nexport { calculateEffectiveBoundaries };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { createPartialResponse } from './createPartialResponse.js';\nimport './_version.js';\n/**\n * The range request plugin makes it easy for a request with a 'Range' header to\n * be fulfilled by a cached response.\n *\n * It does this by intercepting the `cachedResponseWillBeUsed` plugin callback\n * and returning the appropriate subset of the cached response body.\n *\n * @memberof module:workbox-range-requests\n */\nclass RangeRequestsPlugin {\n constructor() {\n /**\n * @param {Object} options\n * @param {Request} options.request The original request, which may or may not\n * contain a Range: header.\n * @param {Response} options.cachedResponse The complete cached response.\n * @return {Promise<Response>} If request contains a 'Range' header, then a\n * new response with status 206 whose body is a subset of `cachedResponse` is\n * returned. Otherwise, `cachedResponse` is returned as-is.\n *\n * @private\n */\n this.cachedResponseWillBeUsed = async ({ request, cachedResponse }) => {\n // Only return a sliced response if there's something valid in the cache,\n // and there's a Range: header in the request.\n if (cachedResponse && request.headers.has('range')) {\n return await createPartialResponse(request, cachedResponse);\n }\n // If there was no Range: header, or if cachedResponse wasn't valid, just\n // pass it through as-is.\n return cachedResponse;\n };\n }\n}\nexport { RangeRequestsPlugin };\n"],"names":["self","_","e","async","createPartialResponse","request","originalResponse","status","rangeHeader","headers","get","WorkboxError","boundaries","normalizedRangeHeader","trim","toLowerCase","startsWith","includes","rangeParts","exec","start","undefined","Number","end","parseRangeHeader","originalBlob","blob","effectiveBoundaries","blobSize","size","effectiveStart","effectiveEnd","calculateEffectiveBoundaries","slicedBlob","slice","slicedBlobSize","slicedResponse","Response","statusText","set","String","error","constructor","cachedResponseWillBeUsed","cachedResponse","has"],"mappings":"sFAEA,IACIA,KAAK,iCAAmCC,IAE5C,MAAOC,IC0BPC,eAAeC,EAAsBC,EAASC,UAcN,MAA5BA,EAAiBC,cAGVD,QAELE,EAAcH,EAAQI,QAAQC,IAAI,aACnCF,QACK,IAAIG,eAAa,yBAErBC,ECpCd,SAA0BJ,SAQhBK,EAAwBL,EAAYM,OAAOC,kBAC5CF,EAAsBG,WAAW,gBAC5B,IAAIL,eAAa,qBAAsB,CAAEE,sBAAAA,OAK/CA,EAAsBI,SAAS,WACzB,IAAIN,eAAa,oBAAqB,CAAEE,sBAAAA,UAE5CK,EAAa,cAAcC,KAAKN,OAEjCK,IAAgBA,EAAW,KAAMA,EAAW,SACvC,IAAIP,eAAa,uBAAwB,CAAEE,sBAAAA,UAE9C,CACHO,MAAyB,KAAlBF,EAAW,QAAYG,EAAYC,OAAOJ,EAAW,IAC5DK,IAAuB,KAAlBL,EAAW,QAAYG,EAAYC,OAAOJ,EAAW,KDWvCM,CAAiBhB,GAC9BiB,QAAqBnB,EAAiBoB,OACtCC,EEpCd,SAAsCD,EAAMN,EAAOG,SAQzCK,EAAWF,EAAKG,QACjBN,GAAOA,EAAMK,GAAcR,GAASA,EAAQ,QACvC,IAAIT,eAAa,wBAAyB,CAC5CkB,KAAMD,EACNL,IAAAA,EACAH,MAAAA,QAGJU,EACAC,cACUV,IAAVD,QAA+BC,IAARE,GACvBO,EAAiBV,EAEjBW,EAAeR,EAAM,QAENF,IAAVD,QAA+BC,IAARE,GAC5BO,EAAiBV,EACjBW,EAAeH,QAEFP,IAARE,QAA+BF,IAAVD,IAC1BU,EAAiBF,EAAWL,EAC5BQ,EAAeH,GAEZ,CACHR,MAAOU,EACPP,IAAKQ,GFGuBC,CAA6BP,EAAcb,EAAWQ,MAAOR,EAAWW,KAC9FU,EAAaR,EAAaS,MAAMP,EAAoBP,MAAOO,EAAoBJ,KAC/EY,EAAiBF,EAAWJ,KAC5BO,EAAiB,IAAIC,SAASJ,EAAY,CAG5C1B,OAAQ,IACR+B,WAAY,kBACZ7B,QAASH,EAAiBG,iBAE9B2B,EAAe3B,QAAQ8B,IAAI,iBAAkBC,OAAOL,IACpDC,EAAe3B,QAAQ8B,IAAI,yBAA0BZ,EAAoBP,SAASO,EAAoBJ,IAAM,KACxGE,EAAaI,MACVO,EAEX,MAAOK,UAUI,IAAIJ,SAAS,GAAI,CACpB9B,OAAQ,IACR+B,WAAY,wDGjExB,MACII,mBAYSC,yBAA2BxC,QAASE,QAAAA,EAASuC,eAAAA,KAG1CA,GAAkBvC,EAAQI,QAAQoC,IAAI,eACzBzC,EAAsBC,EAASuC,GAIzCA"}
@@ -1,10 +1,9 @@
1
1
  this.workbox = this.workbox || {};
2
- this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js, WorkboxError_js, getFriendlyURL_js) {
2
+ this.workbox.routing = (function (exports, assert_js, logger_js, WorkboxError_js, getFriendlyURL_js) {
3
3
  'use strict';
4
4
 
5
- // @ts-ignore
6
5
  try {
7
- self['workbox:routing:5.0.0-alpha.0'] && _();
6
+ self['workbox:routing:5.0.0'] && _();
8
7
  } catch (e) {}
9
8
 
10
9
  /*
@@ -91,17 +90,17 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
91
90
  * is called when there is a match and should return a Promise that resolves
92
91
  * to a `Response`.
93
92
  *
94
- * @memberof workbox.routing
93
+ * @memberof module:workbox-routing
95
94
  */
96
95
 
97
96
  class Route {
98
97
  /**
99
98
  * Constructor for Route class.
100
99
  *
101
- * @param {workbox.routing.Route~matchCallback} match
100
+ * @param {module:workbox-routing~matchCallback} match
102
101
  * A callback function that determines whether the route matches a given
103
102
  * `fetch` event by returning a non-falsy value.
104
- * @param {workbox.routing.Route~handlerCallback} handler A callback
103
+ * @param {module:workbox-routing~handlerCallback} handler A callback
105
104
  * function that returns a Promise resolving to a Response.
106
105
  * @param {string} [method='GET'] The HTTP method to match the Route
107
106
  * against.
@@ -121,7 +120,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
121
120
  });
122
121
  }
123
122
  } // These values are referenced directly by Router so cannot be
124
- // altered by minifification.
123
+ // altered by minificaton.
125
124
 
126
125
 
127
126
  this.handler = normalizeHandler(handler);
@@ -139,8 +138,8 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
139
138
  https://opensource.org/licenses/MIT.
140
139
  */
141
140
  /**
142
- * NavigationRoute makes it easy to create a [Route]{@link
143
- * workbox.routing.Route} that matches for browser
141
+ * NavigationRoute makes it easy to create a
142
+ * [Route]{@link module:workbox-routing.Route} that matches for browser
144
143
  * [navigation requests]{@link https://developers.google.com/web/fundamentals/primers/service-workers/high-performance-loading#first_what_are_navigation_requests}.
145
144
  *
146
145
  * It will only match incoming Requests whose
@@ -148,54 +147,54 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
148
147
  * is set to `navigate`.
149
148
  *
150
149
  * You can optionally only apply this route to a subset of navigation requests
151
- * by using one or both of the `blacklist` and `whitelist` parameters.
150
+ * by using one or both of the `denylist` and `allowlist` parameters.
152
151
  *
153
- * @memberof workbox.routing
154
- * @extends workbox.routing.Route
152
+ * @memberof module:workbox-routing
153
+ * @extends module:workbox-routing.Route
155
154
  */
156
155
 
157
156
  class NavigationRoute extends Route {
158
157
  /**
159
- * If both `blacklist` and `whiltelist` are provided, the `blacklist` will
158
+ * If both `denylist` and `allowlist` are provided, the `denylist` will
160
159
  * take precedence and the request will not match this route.
161
160
  *
162
- * The regular expressions in `whitelist` and `blacklist`
161
+ * The regular expressions in `allowlist` and `denylist`
163
162
  * are matched against the concatenated
164
163
  * [`pathname`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/pathname}
165
164
  * and [`search`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search}
166
165
  * portions of the requested URL.
167
166
  *
168
- * @param {workbox.routing.Route~handlerCallback} handler A callback
167
+ * @param {module:workbox-routing~handlerCallback} handler A callback
169
168
  * function that returns a Promise resulting in a Response.
170
169
  * @param {Object} options
171
- * @param {Array<RegExp>} [options.blacklist] If any of these patterns match,
172
- * the route will not handle the request (even if a whitelist RegExp matches).
173
- * @param {Array<RegExp>} [options.whitelist=[/./]] If any of these patterns
170
+ * @param {Array<RegExp>} [options.denylist] If any of these patterns match,
171
+ * the route will not handle the request (even if a allowlist RegExp matches).
172
+ * @param {Array<RegExp>} [options.allowlist=[/./]] If any of these patterns
174
173
  * match the URL's pathname and search parameter, the route will handle the
175
- * request (assuming the blacklist doesn't match).
174
+ * request (assuming the denylist doesn't match).
176
175
  */
177
176
  constructor(handler, {
178
- whitelist = [/./],
179
- blacklist = []
177
+ allowlist = [/./],
178
+ denylist = []
180
179
  } = {}) {
181
180
  {
182
- assert_js.assert.isArrayOfClass(whitelist, RegExp, {
181
+ assert_js.assert.isArrayOfClass(allowlist, RegExp, {
183
182
  moduleName: 'workbox-routing',
184
183
  className: 'NavigationRoute',
185
184
  funcName: 'constructor',
186
- paramName: 'options.whitelist'
185
+ paramName: 'options.allowlist'
187
186
  });
188
- assert_js.assert.isArrayOfClass(blacklist, RegExp, {
187
+ assert_js.assert.isArrayOfClass(denylist, RegExp, {
189
188
  moduleName: 'workbox-routing',
190
189
  className: 'NavigationRoute',
191
190
  funcName: 'constructor',
192
- paramName: 'options.blacklist'
191
+ paramName: 'options.denylist'
193
192
  });
194
193
  }
195
194
 
196
195
  super(options => this._match(options), handler);
197
- this._whitelist = whitelist;
198
- this._blacklist = blacklist;
196
+ this._allowlist = allowlist;
197
+ this._denylist = denylist;
199
198
  }
200
199
  /**
201
200
  * Routes match handler.
@@ -219,17 +218,17 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
219
218
 
220
219
  const pathnameAndSearch = url.pathname + url.search;
221
220
 
222
- for (const regExp of this._blacklist) {
221
+ for (const regExp of this._denylist) {
223
222
  if (regExp.test(pathnameAndSearch)) {
224
223
  {
225
- logger_js.logger.log(`The navigation route ${pathnameAndSearch} is not ` + `being used, since the URL matches this blacklist pattern: ` + `${regExp}`);
224
+ logger_js.logger.log(`The navigation route ${pathnameAndSearch} is not ` + `being used, since the URL matches this denylist pattern: ` + `${regExp}`);
226
225
  }
227
226
 
228
227
  return false;
229
228
  }
230
229
  }
231
230
 
232
- if (this._whitelist.some(regExp => regExp.test(pathnameAndSearch))) {
231
+ if (this._allowlist.some(regExp => regExp.test(pathnameAndSearch))) {
233
232
  {
234
233
  logger_js.logger.debug(`The navigation route ${pathnameAndSearch} ` + `is being used.`);
235
234
  }
@@ -238,7 +237,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
238
237
  }
239
238
 
240
239
  {
241
- logger_js.logger.log(`The navigation route ${pathnameAndSearch} is not ` + `being used, since the URL being navigated to doesn't ` + `match the whitelist.`);
240
+ logger_js.logger.log(`The navigation route ${pathnameAndSearch} is not ` + `being used, since the URL being navigated to doesn't ` + `match the allowlist.`);
242
241
  }
243
242
 
244
243
  return false;
@@ -255,7 +254,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
255
254
  */
256
255
  /**
257
256
  * RegExpRoute makes it easy to create a regular expression based
258
- * [Route]{@link workbox.routing.Route}.
257
+ * [Route]{@link module:workbox-routing.Route}.
259
258
  *
260
259
  * For same-origin requests the RegExp only needs to match part of the URL. For
261
260
  * requests against third-party servers, you must define a RegExp that matches
@@ -263,20 +262,20 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
263
262
  *
264
263
  * [See the module docs for info.]{@link https://developers.google.com/web/tools/workbox/modules/workbox-routing}
265
264
  *
266
- * @memberof workbox.routing
267
- * @extends workbox.routing.Route
265
+ * @memberof module:workbox-routing
266
+ * @extends module:workbox-routing.Route
268
267
  */
269
268
 
270
269
  class RegExpRoute extends Route {
271
270
  /**
272
- * If the regulard expression contains
271
+ * If the regular expression contains
273
272
  * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},
274
- * th ecaptured values will be passed to the
275
- * [handler's]{@link workbox.routing.Route~handlerCallback} `params`
273
+ * the captured values will be passed to the
274
+ * [handler's]{@link module:workbox-routing~handlerCallback} `params`
276
275
  * argument.
277
276
  *
278
277
  * @param {RegExp} regExp The regular expression to match against URLs.
279
- * @param {workbox.routing.Route~handlerCallback} handler A callback
278
+ * @param {module:workbox-routing~handlerCallback} handler A callback
280
279
  * function that returns a Promise resulting in a Response.
281
280
  * @param {string} [method='GET'] The HTTP method to match the Route
282
281
  * against.
@@ -333,7 +332,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
333
332
  */
334
333
  /**
335
334
  * The Router can be used to process a FetchEvent through one or more
336
- * [Routes]{@link workbox.routing.Route} responding with a Request if
335
+ * [Routes]{@link module:workbox-routing.Route} responding with a Request if
337
336
  * a matching route exists.
338
337
  *
339
338
  * If no route matches a given a request, the Router will use a "default"
@@ -346,7 +345,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
346
345
  * If a request matches multiple routes, the **earliest** registered route will
347
346
  * be used to respond to the request.
348
347
  *
349
- * @memberof workbox.routing
348
+ * @memberof module:workbox-routing
350
349
  */
351
350
 
352
351
  class Router {
@@ -357,7 +356,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
357
356
  this._routes = new Map();
358
357
  }
359
358
  /**
360
- * @return {Map<string, Array<workbox.routing.Route>>} routes A `Map` of HTTP
359
+ * @return {Map<string, Array<module:workbox-routing.Route>>} routes A `Map` of HTTP
361
360
  * method name ('GET', etc.) to an array of all the corresponding `Route`
362
361
  * instances that are registered.
363
362
  */
@@ -373,6 +372,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
373
372
 
374
373
 
375
374
  addFetchListener() {
375
+ // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705
376
376
  self.addEventListener('fetch', event => {
377
377
  const {
378
378
  request
@@ -412,7 +412,8 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
412
412
 
413
413
 
414
414
  addCacheListener() {
415
- self.addEventListener('message', async event => {
415
+ // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705
416
+ self.addEventListener('message', event => {
416
417
  if (event.data && event.data.type === 'CACHE_URLS') {
417
418
  const {
418
419
  payload
@@ -430,16 +431,15 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
430
431
  const request = new Request(...entry);
431
432
  return this.handleRequest({
432
433
  request
433
- }); // TODO(philipwalton): Typescript errors without this typecast for
434
+ }); // TODO(philipwalton): TypeScript errors without this typecast for
434
435
  // some reason (probably a bug). The real type here should work but
435
436
  // doesn't: `Array<Promise<Response> | undefined>`.
436
- })); // Typescript
437
+ })); // TypeScript
437
438
 
438
439
  event.waitUntil(requestPromises); // If a MessageChannel was used, reply to the message on success.
439
440
 
440
441
  if (event.ports && event.ports[0]) {
441
- await requestPromises;
442
- event.ports[0].postMessage(true);
442
+ requestPromises.then(() => event.ports[0].postMessage(true));
443
443
  }
444
444
  }
445
445
  });
@@ -533,12 +533,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
533
533
  } else {
534
534
  logger_js.logger.log(msg);
535
535
  }
536
- }); // The Request and Response objects contains a great deal of information,
537
- // hide it under a group in case developers want to see it.
538
-
539
- logger_js.logger.groupCollapsed(`View request details here.`);
540
- logger_js.logger.log(request);
541
- logger_js.logger.groupEnd();
536
+ });
542
537
  logger_js.logger.groupEnd();
543
538
  } // Wrap in try and catch in case the handle method throws a synchronous
544
539
  // error. It should still callback to the catch handler.
@@ -557,7 +552,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
557
552
  responsePromise = Promise.reject(err);
558
553
  }
559
554
 
560
- if (responsePromise && this._catchHandler) {
555
+ if (responsePromise instanceof Promise && this._catchHandler) {
561
556
  responsePromise = responsePromise.catch(err => {
562
557
  {
563
558
  // Still include URL here as it will be async from the console group
@@ -624,12 +619,20 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
624
619
  });
625
620
 
626
621
  if (matchResult) {
627
- if (Array.isArray(matchResult) && matchResult.length > 0) {
622
+ // See https://github.com/GoogleChrome/workbox/issues/2079
623
+ params = matchResult;
624
+
625
+ if (Array.isArray(matchResult) && matchResult.length === 0) {
628
626
  // Instead of passing an empty array in as params, use undefined.
629
- params = matchResult;
630
- } else if (matchResult.constructor === Object && Object.keys(matchResult).length > 0) {
627
+ params = undefined;
628
+ } else if (matchResult.constructor === Object && Object.keys(matchResult).length === 0) {
631
629
  // Instead of passing an empty object in as params, use undefined.
632
- params = matchResult;
630
+ params = undefined;
631
+ } else if (typeof matchResult === 'boolean') {
632
+ // For the boolean value true (rather than just something truth-y),
633
+ // don't set params.
634
+ // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353
635
+ params = undefined;
633
636
  } // Return early if have a match.
634
637
 
635
638
 
@@ -650,7 +653,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
650
653
  * Without a default handler, unmatched requests will go against the
651
654
  * network as if there were no service worker present.
652
655
  *
653
- * @param {workbox.routing.Route~handlerCallback} handler A callback
656
+ * @param {module:workbox-routing~handlerCallback} handler A callback
654
657
  * function that returns a Promise resulting in a Response.
655
658
  */
656
659
 
@@ -662,7 +665,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
662
665
  * If a Route throws an error while handling a request, this `handler`
663
666
  * will be called and given a chance to provide a response.
664
667
  *
665
- * @param {workbox.routing.Route~handlerCallback} handler A callback
668
+ * @param {module:workbox-routing~handlerCallback} handler A callback
666
669
  * function that returns a Promise resulting in a Response.
667
670
  */
668
671
 
@@ -673,7 +676,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
673
676
  /**
674
677
  * Registers a route with the router.
675
678
  *
676
- * @param {workbox.routing.Route} route The route to register.
679
+ * @param {module:workbox-routing.Route} route The route to register.
677
680
  */
678
681
 
679
682
 
@@ -722,7 +725,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
722
725
  /**
723
726
  * Unregisters a route with the router.
724
727
  *
725
- * @param {workbox.routing.Route} route The route to unregister.
728
+ * @param {module:workbox-routing.Route} route The route to unregister.
726
729
  */
727
730
 
728
731
 
@@ -771,93 +774,6 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
771
774
  return defaultRouter;
772
775
  };
773
776
 
774
- /*
775
- Copyright 2019 Google LLC
776
-
777
- Use of this source code is governed by an MIT-style
778
- license that can be found in the LICENSE file or at
779
- https://opensource.org/licenses/MIT.
780
- */
781
- /**
782
- * Registers a route that will return a precached file for a navigation
783
- * request. This is useful for the
784
- * [application shell pattern]{@link https://developers.google.com/web/fundamentals/architecture/app-shell}.
785
- *
786
- * When determining the URL of the precached HTML document, you will likely need
787
- * to call `workbox.precaching.getCacheKeyForURL(originalUrl)`, to account for
788
- * the fact that Workbox's precaching naming conventions often results in URL
789
- * cache keys that contain extra revisioning info.
790
- *
791
- * This method will generate a
792
- * [NavigationRoute]{@link workbox.routing.NavigationRoute}
793
- * and call
794
- * [Router.registerRoute()]{@link workbox.routing.Router#registerRoute} on a
795
- * singleton Router instance.
796
- *
797
- * @param {string} cachedAssetUrl The cache key to use for the HTML file.
798
- * @param {Object} [options]
799
- * @param {string} [options.cacheName] Cache name to store and retrieve
800
- * requests. Defaults to precache cache name provided by
801
- * [workbox-core.cacheNames]{@link workbox.core.cacheNames}.
802
- * @param {Array<RegExp>} [options.blacklist=[]] If any of these patterns
803
- * match, the route will not handle the request (even if a whitelist entry
804
- * matches).
805
- * @param {Array<RegExp>} [options.whitelist=[/./]] If any of these patterns
806
- * match the URL's pathname and search parameter, the route will handle the
807
- * request (assuming the blacklist doesn't match).
808
- * @return {workbox.routing.NavigationRoute} Returns the generated
809
- * Route.
810
- *
811
- * @alias workbox.routing.registerNavigationRoute
812
- */
813
-
814
- const registerNavigationRoute = (cachedAssetUrl, options = {}) => {
815
- {
816
- assert_js.assert.isType(cachedAssetUrl, 'string', {
817
- moduleName: 'workbox-routing',
818
- funcName: 'registerNavigationRoute',
819
- paramName: 'cachedAssetUrl'
820
- });
821
- }
822
-
823
- const cacheName = cacheNames_js.cacheNames.getPrecacheName(options.cacheName);
824
-
825
- const handler = async () => {
826
- try {
827
- const response = await caches.match(cachedAssetUrl, {
828
- cacheName
829
- });
830
-
831
- if (response) {
832
- return response;
833
- } // This shouldn't normally happen, but there are edge cases:
834
- // https://github.com/GoogleChrome/workbox/issues/1441
835
-
836
-
837
- throw new Error(`The cache ${cacheName} did not have an entry for ` + `${cachedAssetUrl}.`);
838
- } catch (error) {
839
- // If there's either a cache miss, or the caches.match() call threw
840
- // an exception, then attempt to fulfill the navigation request with
841
- // a response from the network rather than leaving the user with a
842
- // failed navigation.
843
- {
844
- logger_js.logger.debug(`Unable to respond to navigation request with ` + `cached response. Falling back to network.`, error);
845
- } // This might still fail if the browser is offline...
846
-
847
-
848
- return fetch(cachedAssetUrl);
849
- }
850
- };
851
-
852
- const route = new NavigationRoute(handler, {
853
- whitelist: options.whitelist,
854
- blacklist: options.blacklist
855
- });
856
- const defaultRouter = getOrCreateDefaultRouter();
857
- defaultRouter.registerRoute(route);
858
- return route;
859
- };
860
-
861
777
  /*
862
778
  Copyright 2019 Google LLC
863
779
 
@@ -870,28 +786,22 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
870
786
  * strategy to a singleton Router instance.
871
787
  *
872
788
  * This method will generate a Route for you if needed and
873
- * call [Router.registerRoute()]{@link
874
- * workbox.routing.Router#registerRoute}.
789
+ * call [registerRoute()]{@link module:workbox-routing.Router#registerRoute}.
875
790
  *
876
- * @param {
877
- * RegExp|
878
- * string|
879
- * workbox.routing.Route~matchCallback|
880
- * workbox.routing.Route
881
- * } capture
791
+ * @param {RegExp|string|module:workbox-routing.Route~matchCallback|module:workbox-routing.Route} capture
882
792
  * If the capture param is a `Route`, all other arguments will be ignored.
883
- * @param {workbox.routing.Route~handlerCallback} [handler] A callback
793
+ * @param {module:workbox-routing~handlerCallback} [handler] A callback
884
794
  * function that returns a Promise resulting in a Response. This parameter
885
795
  * is required if `capture` is not a `Route` object.
886
796
  * @param {string} [method='GET'] The HTTP method to match the Route
887
797
  * against.
888
- * @return {workbox.routing.Route} The generated `Route`(Useful for
798
+ * @return {module:workbox-routing.Route} The generated `Route`(Useful for
889
799
  * unregistering).
890
800
  *
891
- * @alias workbox.routing.registerRoute
801
+ * @memberof module:workbox-routing
892
802
  */
893
803
 
894
- const registerRoute = (capture, handler, method) => {
804
+ function registerRoute(capture, handler, method) {
895
805
  let route;
896
806
 
897
807
  if (typeof capture === 'string') {
@@ -950,7 +860,7 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
950
860
  const defaultRouter = getOrCreateDefaultRouter();
951
861
  defaultRouter.registerRoute(route);
952
862
  return route;
953
- };
863
+ }
954
864
 
955
865
  /*
956
866
  Copyright 2019 Google LLC
@@ -963,16 +873,16 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
963
873
  * If a Route throws an error while handling a request, this `handler`
964
874
  * will be called and given a chance to provide a response.
965
875
  *
966
- * @param {workbox.routing.Route~handlerCallback} handler A callback
876
+ * @param {module:workbox-routing~handlerCallback} handler A callback
967
877
  * function that returns a Promise resulting in a Response.
968
878
  *
969
- * @alias workbox.routing.setCatchHandler
879
+ * @memberof module:workbox-routing
970
880
  */
971
881
 
972
- const setCatchHandler = handler => {
882
+ function setCatchHandler(handler) {
973
883
  const defaultRouter = getOrCreateDefaultRouter();
974
884
  defaultRouter.setCatchHandler(handler);
975
- };
885
+ }
976
886
 
977
887
  /*
978
888
  Copyright 2019 Google LLC
@@ -988,39 +898,26 @@ this.workbox.routing = (function (exports, assert_js, logger_js, cacheNames_js,
988
898
  * Without a default handler, unmatched requests will go against the
989
899
  * network as if there were no service worker present.
990
900
  *
991
- * @param {workbox.routing.Route~handlerCallback} handler A callback
901
+ * @param {module:workbox-routing~handlerCallback} handler A callback
992
902
  * function that returns a Promise resulting in a Response.
993
903
  *
994
- * @alias workbox.routing.setDefaultHandler
904
+ * @memberof module:workbox-routing
995
905
  */
996
906
 
997
- const setDefaultHandler = handler => {
907
+ function setDefaultHandler(handler) {
998
908
  const defaultRouter = getOrCreateDefaultRouter();
999
909
  defaultRouter.setDefaultHandler(handler);
1000
- };
1001
-
1002
- /*
1003
- Copyright 2018 Google LLC
1004
-
1005
- Use of this source code is governed by an MIT-style
1006
- license that can be found in the LICENSE file or at
1007
- https://opensource.org/licenses/MIT.
1008
- */
1009
-
1010
- {
1011
- assert_js.assert.isSWEnv('workbox-routing');
1012
910
  }
1013
911
 
1014
912
  exports.NavigationRoute = NavigationRoute;
1015
913
  exports.RegExpRoute = RegExpRoute;
1016
914
  exports.Route = Route;
1017
915
  exports.Router = Router;
1018
- exports.registerNavigationRoute = registerNavigationRoute;
1019
916
  exports.registerRoute = registerRoute;
1020
917
  exports.setCatchHandler = setCatchHandler;
1021
918
  exports.setDefaultHandler = setDefaultHandler;
1022
919
 
1023
920
  return exports;
1024
921
 
1025
- }({}, workbox.core._private, workbox.core._private, workbox.core._private, workbox.core._private, workbox.core._private));
922
+ }({}, workbox.core._private, workbox.core._private, workbox.core._private, workbox.core._private));
1026
923
  //# sourceMappingURL=workbox-routing.dev.js.map