jekyll-pwa-workbox 0.0.7.alpha → 5.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jekyll-pwa-workbox.rb +4 -4
  3. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-background-sync.dev.js +68 -69
  4. data/lib/vendor/workbox-v5.1.4/workbox-background-sync.dev.js.map +1 -0
  5. data/lib/vendor/workbox-v5.1.4/workbox-background-sync.prod.js +2 -0
  6. data/lib/vendor/workbox-v5.1.4/workbox-background-sync.prod.js.map +1 -0
  7. data/lib/vendor/workbox-v5.1.4/workbox-broadcast-update.dev.js +288 -0
  8. data/lib/vendor/workbox-v5.1.4/workbox-broadcast-update.dev.js.map +1 -0
  9. data/lib/vendor/workbox-v5.1.4/workbox-broadcast-update.prod.js +2 -0
  10. data/lib/vendor/workbox-v5.1.4/workbox-broadcast-update.prod.js.map +1 -0
  11. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-cacheable-response.dev.js +6 -7
  12. data/lib/vendor/workbox-v5.1.4/workbox-cacheable-response.dev.js.map +1 -0
  13. data/lib/vendor/workbox-v5.1.4/workbox-cacheable-response.prod.js +2 -0
  14. data/lib/vendor/workbox-v5.1.4/workbox-cacheable-response.prod.js.map +1 -0
  15. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-core.dev.js +490 -275
  16. data/lib/vendor/workbox-v5.1.4/workbox-core.dev.js.map +1 -0
  17. data/lib/vendor/workbox-v5.1.4/workbox-core.prod.js +2 -0
  18. data/lib/vendor/workbox-v5.1.4/workbox-core.prod.js.map +1 -0
  19. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-expiration.dev.js +14 -17
  20. data/lib/vendor/workbox-v5.1.4/workbox-expiration.dev.js.map +1 -0
  21. data/lib/vendor/workbox-v5.1.4/workbox-expiration.prod.js +2 -0
  22. data/lib/vendor/workbox-v5.1.4/workbox-expiration.prod.js.map +1 -0
  23. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-navigation-preload.dev.js +4 -5
  24. data/lib/vendor/workbox-v5.1.4/workbox-navigation-preload.dev.js.map +1 -0
  25. data/lib/vendor/workbox-v5.1.4/workbox-navigation-preload.prod.js +2 -0
  26. data/lib/vendor/workbox-v5.1.4/workbox-navigation-preload.prod.js.map +1 -0
  27. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-offline-ga.dev.js +13 -14
  28. data/lib/vendor/workbox-v5.1.4/workbox-offline-ga.dev.js.map +1 -0
  29. data/lib/vendor/workbox-v5.1.4/workbox-offline-ga.prod.js +2 -0
  30. data/lib/vendor/workbox-v5.1.4/workbox-offline-ga.prod.js.map +1 -0
  31. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-precaching.dev.js +313 -97
  32. data/lib/vendor/workbox-v5.1.4/workbox-precaching.dev.js.map +1 -0
  33. data/lib/vendor/workbox-v5.1.4/workbox-precaching.prod.js +2 -0
  34. data/lib/vendor/workbox-v5.1.4/workbox-precaching.prod.js.map +1 -0
  35. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-range-requests.dev.js +8 -9
  36. data/lib/vendor/workbox-v5.1.4/workbox-range-requests.dev.js.map +1 -0
  37. data/lib/vendor/workbox-v5.1.4/workbox-range-requests.prod.js +2 -0
  38. data/lib/vendor/workbox-v5.1.4/workbox-range-requests.prod.js.map +1 -0
  39. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-routing.dev.js +83 -186
  40. data/lib/vendor/workbox-v5.1.4/workbox-routing.dev.js.map +1 -0
  41. data/lib/vendor/workbox-v5.1.4/workbox-routing.prod.js +2 -0
  42. data/lib/vendor/workbox-v5.1.4/workbox-routing.prod.js.map +1 -0
  43. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-strategies.dev.js +30 -234
  44. data/lib/vendor/workbox-v5.1.4/workbox-strategies.dev.js.map +1 -0
  45. data/lib/vendor/workbox-v5.1.4/workbox-strategies.prod.js +2 -0
  46. data/lib/vendor/workbox-v5.1.4/workbox-strategies.prod.js.map +1 -0
  47. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-streams.dev.js +16 -31
  48. data/lib/vendor/workbox-v5.1.4/workbox-streams.dev.js.map +1 -0
  49. data/lib/vendor/workbox-v5.1.4/workbox-streams.prod.js +2 -0
  50. data/lib/vendor/workbox-v5.1.4/workbox-streams.prod.js.map +1 -0
  51. data/lib/vendor/workbox-v5.1.4/workbox-sw.js +2 -0
  52. data/lib/vendor/workbox-v5.1.4/workbox-sw.js.map +1 -0
  53. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-window.dev.es5.mjs +481 -227
  54. data/lib/vendor/workbox-v5.1.4/workbox-window.dev.es5.mjs.map +1 -0
  55. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-window.dev.mjs +246 -46
  56. data/lib/vendor/workbox-v5.1.4/workbox-window.dev.mjs.map +1 -0
  57. data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-window.dev.umd.js +483 -229
  58. data/lib/vendor/workbox-v5.1.4/workbox-window.dev.umd.js.map +1 -0
  59. data/lib/vendor/workbox-v5.1.4/workbox-window.prod.es5.mjs +2 -0
  60. data/lib/vendor/workbox-v5.1.4/workbox-window.prod.es5.mjs.map +1 -0
  61. data/lib/vendor/workbox-v5.1.4/workbox-window.prod.mjs +2 -0
  62. data/lib/vendor/workbox-v5.1.4/workbox-window.prod.mjs.map +1 -0
  63. data/lib/vendor/workbox-v5.1.4/workbox-window.prod.umd.js +2 -0
  64. data/lib/vendor/workbox-v5.1.4/workbox-window.prod.umd.js.map +1 -0
  65. metadata +69 -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-strategies.dev.js","sources":["../_version.js","../utils/messages.js","../CacheFirst.js","../CacheOnly.js","../plugins/cacheOkAndOpaquePlugin.js","../NetworkFirst.js","../NetworkOnly.js","../StaleWhileRevalidate.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:5.1.4'] && _();\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 { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport '../_version.js';\nexport const messages = {\n strategyStart: (strategyName, request) => `Using ${strategyName} to respond to '${getFriendlyURL(request.url)}'`,\n printFinalResponse: (response) => {\n if (response) {\n logger.groupCollapsed(`View the final response here.`);\n logger.log(response || '[No response returned]');\n logger.groupEnd();\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 { 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 { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-falling-back-to-network}\n * request strategy.\n *\n * A cache first strategy is useful for assets that have been revisioned,\n * such as URLs like `/styles/example.a8f5f1.css`, since they\n * can be cached for long periods of time.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass CacheFirst {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n this._fetchOptions = options.fetchOptions;\n this._matchOptions = options.matchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n const logs = [];\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'CacheFirst',\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n let response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n let error;\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this._cacheName}' cache. ` +\n `Will respond with a network request.`);\n }\n try {\n response = await this._getFromNetwork(request, event);\n }\n catch (err) {\n error = err;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this._cacheName}' cache.`);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('CacheFirst', request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n /**\n * Handles the network and cache part of CacheFirst.\n *\n * @param {Request} request\n * @param {Event} [event]\n * @return {Promise<Response>}\n *\n * @private\n */\n async _getFromNetwork(request, event) {\n const response = await fetchWrapper.fetch({\n request,\n event,\n fetchOptions: this._fetchOptions,\n plugins: this._plugins,\n });\n // Keep the service worker while we put the request to the cache\n const responseClone = response.clone();\n const cachePutPromise = cacheWrapper.put({\n cacheName: this._cacheName,\n request,\n response: responseClone,\n event,\n plugins: this._plugins,\n });\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache for '${getFriendlyURL(request.url)}'.`);\n }\n }\n }\n return response;\n }\n}\nexport { CacheFirst };\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 { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [cache-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-only}\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.\n *\n * If there is no cache match, this will throw a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass CacheOnly {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n this._matchOptions = options.matchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'CacheOnly',\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n const response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('CacheOnly', request));\n if (response) {\n logger.log(`Found a cached response in the '${this._cacheName}'` +\n ` cache.`);\n messages.printFinalResponse(response);\n }\n else {\n logger.log(`No response found in the '${this._cacheName}' cache.`);\n }\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n}\nexport { CacheOnly };\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';\nexport const cacheOkAndOpaquePlugin = {\n /**\n * Returns a valid response (to allow caching) if the status is 200 (OK) or\n * 0 (opaque).\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: async ({ response }) => {\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\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 { 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 { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-falling-back-to-cache}\n * request strategy.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass NetworkFirst {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n * @param {number} options.networkTimeoutSeconds If set, any network requests\n * that fail to respond within the timeout will fallback to the cache.\n *\n * This option can be used to combat\n * \"[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}\"\n * scenarios.\n */\n constructor(options = {}) {\n this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n if (options.plugins) {\n const isUsingCacheWillUpdate = options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ?\n options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n }\n else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n if (process.env.NODE_ENV !== 'production') {\n if (this._networkTimeoutSeconds) {\n assert.isType(this._networkTimeoutSeconds, 'number', {\n moduleName: 'workbox-strategies',\n className: 'NetworkFirst',\n funcName: 'constructor',\n paramName: 'networkTimeoutSeconds',\n });\n }\n }\n this._fetchOptions = options.fetchOptions;\n this._matchOptions = options.matchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n const logs = [];\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'NetworkFirst',\n funcName: 'handle',\n paramName: 'makeRequest',\n });\n }\n const promises = [];\n let timeoutId;\n if (this._networkTimeoutSeconds) {\n const { id, promise } = this._getTimeoutPromise({ request, event, logs });\n timeoutId = id;\n promises.push(promise);\n }\n const networkPromise = this._getNetworkPromise({ timeoutId, request, event, logs });\n promises.push(networkPromise);\n // Promise.race() will resolve as soon as the first promise resolves.\n let response = await Promise.race(promises);\n // If Promise.race() resolved with null, it might be due to a network\n // timeout + a cache miss. If that were to happen, we'd rather wait until\n // the networkPromise resolves instead of returning null.\n // Note that it's fine to await an already-resolved promise, so we don't\n // have to check to see if it's still \"in flight\".\n if (!response) {\n response = await networkPromise;\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('NetworkFirst', request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs array\n * @param {Event} [options.event]\n * @return {Promise<Response>}\n *\n * @private\n */\n _getTimeoutPromise({ request, logs, event }) {\n let timeoutId;\n const timeoutPromise = new Promise((resolve) => {\n const onNetworkTimeout = async () => {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Timing out the network response at ` +\n `${this._networkTimeoutSeconds} seconds.`);\n }\n resolve(await this._respondFromCache({ request, event }));\n };\n timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n });\n return {\n promise: timeoutPromise,\n id: timeoutId,\n };\n }\n /**\n * @param {Object} options\n * @param {number|undefined} options.timeoutId\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs Array.\n * @param {Event} [options.event]\n * @return {Promise<Response>}\n *\n * @private\n */\n async _getNetworkPromise({ timeoutId, request, logs, event }) {\n let error;\n let response;\n try {\n response = await fetchWrapper.fetch({\n request,\n event,\n fetchOptions: this._fetchOptions,\n plugins: this._plugins,\n });\n }\n catch (err) {\n error = err;\n }\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network. Will respond ` +\n `with a cached response.`);\n }\n }\n if (error || !response) {\n response = await this._respondFromCache({ request, event });\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Found a cached response in the '${this._cacheName}'` +\n ` cache.`);\n }\n else {\n logs.push(`No response found in the '${this._cacheName}' cache.`);\n }\n }\n }\n else {\n // Keep the service worker alive while we put the request in the cache\n const responseClone = response.clone();\n const cachePut = cacheWrapper.put({\n cacheName: this._cacheName,\n request,\n response: responseClone,\n event,\n plugins: this._plugins,\n });\n if (event) {\n try {\n // The event has been responded to so we can keep the SW alive to\n // respond to the request\n event.waitUntil(cachePut);\n }\n catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache for '${getFriendlyURL(request.url)}'.`);\n }\n }\n }\n }\n return response;\n }\n /**\n * Used if the network timeouts or fails to make the request.\n *\n * @param {Object} options\n * @param {Request} request The request to match in the cache\n * @param {Event} [options.event]\n * @return {Promise<Object>}\n *\n * @private\n */\n _respondFromCache({ event, request }) {\n return cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n }\n}\nexport { NetworkFirst };\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 { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-only}\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.\n *\n * If the network request fails, this will throw a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass NetworkOnly {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n */\n constructor(options = {}) {\n this._plugins = options.plugins || [];\n this._fetchOptions = options.fetchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request The request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'NetworkOnly',\n funcName: 'handle',\n paramName: 'request',\n });\n }\n let error;\n let response;\n try {\n response = await fetchWrapper.fetch({\n request,\n event,\n fetchOptions: this._fetchOptions,\n plugins: this._plugins,\n });\n }\n catch (err) {\n error = err;\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('NetworkOnly', request));\n if (response) {\n logger.log(`Got response from network.`);\n }\n else {\n logger.log(`Unable to get a response from the network.`);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { NetworkOnly };\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 { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [stale-while-revalidate]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#stale-while-revalidate}\n * request strategy.\n *\n * Resources are requested from both the cache and the network in parallel.\n * The strategy will respond with the cached version if available, otherwise\n * wait for the network response. The cache is updated with the network response\n * with each successful request.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass StaleWhileRevalidate {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n if (options.plugins) {\n const isUsingCacheWillUpdate = options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ?\n options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n }\n else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n this._fetchOptions = options.fetchOptions;\n this._matchOptions = options.matchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n const logs = [];\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'StaleWhileRevalidate',\n funcName: 'handle',\n paramName: 'request',\n });\n }\n const fetchAndCachePromise = this._getFromNetwork({ request, event });\n let response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n let error;\n if (response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this._cacheName}'` +\n ` cache. Will update with the network response in the background.`);\n }\n if (event) {\n try {\n event.waitUntil(fetchAndCachePromise);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache for '${getFriendlyURL(request.url)}'.`);\n }\n }\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this._cacheName}' cache. ` +\n `Will wait for the network response.`);\n }\n try {\n response = await fetchAndCachePromise;\n }\n catch (err) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('StaleWhileRevalidate', request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Event} [options.event]\n * @return {Promise<Response>}\n *\n * @private\n */\n async _getFromNetwork({ request, event }) {\n const response = await fetchWrapper.fetch({\n request,\n event,\n fetchOptions: this._fetchOptions,\n plugins: this._plugins,\n });\n const cachePutPromise = cacheWrapper.put({\n cacheName: this._cacheName,\n request,\n response: response.clone(),\n event,\n plugins: this._plugins,\n });\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache for '${getFriendlyURL(request.url)}'.`);\n }\n }\n }\n return response;\n }\n}\nexport { StaleWhileRevalidate };\n"],"names":["self","_","e","messages","strategyStart","strategyName","request","getFriendlyURL","url","printFinalResponse","response","logger","groupCollapsed","log","groupEnd","CacheFirst","constructor","options","_cacheName","cacheNames","getRuntimeName","cacheName","_plugins","plugins","_fetchOptions","fetchOptions","_matchOptions","matchOptions","handle","event","logs","Request","assert","isInstance","moduleName","className","funcName","paramName","cacheWrapper","match","error","push","_getFromNetwork","err","WorkboxError","fetchWrapper","fetch","responseClone","clone","cachePutPromise","put","waitUntil","warn","CacheOnly","cacheOkAndOpaquePlugin","cacheWillUpdate","status","NetworkFirst","isUsingCacheWillUpdate","some","plugin","_networkTimeoutSeconds","networkTimeoutSeconds","isType","promises","timeoutId","id","promise","_getTimeoutPromise","networkPromise","_getNetworkPromise","Promise","race","timeoutPromise","resolve","onNetworkTimeout","_respondFromCache","setTimeout","clearTimeout","cachePut","NetworkOnly","StaleWhileRevalidate","fetchAndCachePromise"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ this.workbox=this.workbox||{},this.workbox.strategies=function(t,e,s,i,n){"use strict";try{self["workbox:strategies:5.1.4"]&&_()}catch(t){}const r={cacheWillUpdate:async({response:t})=>200===t.status||0===t.status?t:null};return t.CacheFirst=class{constructor(t={}){this.t=e.cacheNames.getRuntimeName(t.cacheName),this.s=t.plugins||[],this.i=t.fetchOptions,this.h=t.matchOptions}async handle({event:t,request:e}){"string"==typeof e&&(e=new Request(e));let i,r=await s.cacheWrapper.match({cacheName:this.t,request:e,event:t,matchOptions:this.h,plugins:this.s});if(!r)try{r=await this.o(e,t)}catch(t){i=t}if(!r)throw new n.WorkboxError("no-response",{url:e.url,error:i});return r}async o(t,e){const n=await i.fetchWrapper.fetch({request:t,event:e,fetchOptions:this.i,plugins:this.s}),r=n.clone(),h=s.cacheWrapper.put({cacheName:this.t,request:t,response:r,event:e,plugins:this.s});if(e)try{e.waitUntil(h)}catch(t){}return n}},t.CacheOnly=class{constructor(t={}){this.t=e.cacheNames.getRuntimeName(t.cacheName),this.s=t.plugins||[],this.h=t.matchOptions}async handle({event:t,request:e}){"string"==typeof e&&(e=new Request(e));const i=await s.cacheWrapper.match({cacheName:this.t,request:e,event:t,matchOptions:this.h,plugins:this.s});if(!i)throw new n.WorkboxError("no-response",{url:e.url});return i}},t.NetworkFirst=class{constructor(t={}){if(this.t=e.cacheNames.getRuntimeName(t.cacheName),t.plugins){const e=t.plugins.some(t=>!!t.cacheWillUpdate);this.s=e?t.plugins:[r,...t.plugins]}else this.s=[r];this.u=t.networkTimeoutSeconds||0,this.i=t.fetchOptions,this.h=t.matchOptions}async handle({event:t,request:e}){const s=[];"string"==typeof e&&(e=new Request(e));const i=[];let r;if(this.u){const{id:n,promise:h}=this.l({request:e,event:t,logs:s});r=n,i.push(h)}const h=this.p({timeoutId:r,request:e,event:t,logs:s});i.push(h);let o=await Promise.race(i);if(o||(o=await h),!o)throw new n.WorkboxError("no-response",{url:e.url});return o}l({request:t,logs:e,event:s}){let i;return{promise:new Promise(e=>{i=setTimeout(async()=>{e(await this.q({request:t,event:s}))},1e3*this.u)}),id:i}}async p({timeoutId:t,request:e,logs:n,event:r}){let h,o;try{o=await i.fetchWrapper.fetch({request:e,event:r,fetchOptions:this.i,plugins:this.s})}catch(t){h=t}if(t&&clearTimeout(t),h||!o)o=await this.q({request:e,event:r});else{const t=o.clone(),i=s.cacheWrapper.put({cacheName:this.t,request:e,response:t,event:r,plugins:this.s});if(r)try{r.waitUntil(i)}catch(t){}}return o}q({event:t,request:e}){return s.cacheWrapper.match({cacheName:this.t,request:e,event:t,matchOptions:this.h,plugins:this.s})}},t.NetworkOnly=class{constructor(t={}){this.s=t.plugins||[],this.i=t.fetchOptions}async handle({event:t,request:e}){let s,r;"string"==typeof e&&(e=new Request(e));try{r=await i.fetchWrapper.fetch({request:e,event:t,fetchOptions:this.i,plugins:this.s})}catch(t){s=t}if(!r)throw new n.WorkboxError("no-response",{url:e.url,error:s});return r}},t.StaleWhileRevalidate=class{constructor(t={}){if(this.t=e.cacheNames.getRuntimeName(t.cacheName),this.s=t.plugins||[],t.plugins){const e=t.plugins.some(t=>!!t.cacheWillUpdate);this.s=e?t.plugins:[r,...t.plugins]}else this.s=[r];this.i=t.fetchOptions,this.h=t.matchOptions}async handle({event:t,request:e}){"string"==typeof e&&(e=new Request(e));const i=this.o({request:e,event:t});let r,h=await s.cacheWrapper.match({cacheName:this.t,request:e,event:t,matchOptions:this.h,plugins:this.s});if(h){if(t)try{t.waitUntil(i)}catch(r){}}else try{h=await i}catch(t){r=t}if(!h)throw new n.WorkboxError("no-response",{url:e.url,error:r});return h}async o({request:t,event:e}){const n=await i.fetchWrapper.fetch({request:t,event:e,fetchOptions:this.i,plugins:this.s}),r=s.cacheWrapper.put({cacheName:this.t,request:t,response:n.clone(),event:e,plugins:this.s});if(e)try{e.waitUntil(r)}catch(t){}return n}},t}({},workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private);
2
+ //# sourceMappingURL=workbox-strategies.prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbox-strategies.prod.js","sources":["../_version.js","../plugins/cacheOkAndOpaquePlugin.js","../CacheFirst.js","../CacheOnly.js","../NetworkFirst.js","../NetworkOnly.js","../StaleWhileRevalidate.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:5.1.4'] && _();\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 '../_version.js';\nexport const cacheOkAndOpaquePlugin = {\n /**\n * Returns a valid response (to allow caching) if the status is 200 (OK) or\n * 0 (opaque).\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: async ({ response }) => {\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\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 { 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 { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-falling-back-to-network}\n * request strategy.\n *\n * A cache first strategy is useful for assets that have been revisioned,\n * such as URLs like `/styles/example.a8f5f1.css`, since they\n * can be cached for long periods of time.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass CacheFirst {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n this._fetchOptions = options.fetchOptions;\n this._matchOptions = options.matchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n const logs = [];\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'CacheFirst',\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n let response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n let error;\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this._cacheName}' cache. ` +\n `Will respond with a network request.`);\n }\n try {\n response = await this._getFromNetwork(request, event);\n }\n catch (err) {\n error = err;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this._cacheName}' cache.`);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('CacheFirst', request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n /**\n * Handles the network and cache part of CacheFirst.\n *\n * @param {Request} request\n * @param {Event} [event]\n * @return {Promise<Response>}\n *\n * @private\n */\n async _getFromNetwork(request, event) {\n const response = await fetchWrapper.fetch({\n request,\n event,\n fetchOptions: this._fetchOptions,\n plugins: this._plugins,\n });\n // Keep the service worker while we put the request to the cache\n const responseClone = response.clone();\n const cachePutPromise = cacheWrapper.put({\n cacheName: this._cacheName,\n request,\n response: responseClone,\n event,\n plugins: this._plugins,\n });\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache for '${getFriendlyURL(request.url)}'.`);\n }\n }\n }\n return response;\n }\n}\nexport { CacheFirst };\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 { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [cache-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-only}\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.\n *\n * If there is no cache match, this will throw a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass CacheOnly {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n this._matchOptions = options.matchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'CacheOnly',\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n const response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('CacheOnly', request));\n if (response) {\n logger.log(`Found a cached response in the '${this._cacheName}'` +\n ` cache.`);\n messages.printFinalResponse(response);\n }\n else {\n logger.log(`No response found in the '${this._cacheName}' cache.`);\n }\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n}\nexport { CacheOnly };\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 { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-falling-back-to-cache}\n * request strategy.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass NetworkFirst {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n * @param {number} options.networkTimeoutSeconds If set, any network requests\n * that fail to respond within the timeout will fallback to the cache.\n *\n * This option can be used to combat\n * \"[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}\"\n * scenarios.\n */\n constructor(options = {}) {\n this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n if (options.plugins) {\n const isUsingCacheWillUpdate = options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ?\n options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n }\n else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n if (process.env.NODE_ENV !== 'production') {\n if (this._networkTimeoutSeconds) {\n assert.isType(this._networkTimeoutSeconds, 'number', {\n moduleName: 'workbox-strategies',\n className: 'NetworkFirst',\n funcName: 'constructor',\n paramName: 'networkTimeoutSeconds',\n });\n }\n }\n this._fetchOptions = options.fetchOptions;\n this._matchOptions = options.matchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n const logs = [];\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'NetworkFirst',\n funcName: 'handle',\n paramName: 'makeRequest',\n });\n }\n const promises = [];\n let timeoutId;\n if (this._networkTimeoutSeconds) {\n const { id, promise } = this._getTimeoutPromise({ request, event, logs });\n timeoutId = id;\n promises.push(promise);\n }\n const networkPromise = this._getNetworkPromise({ timeoutId, request, event, logs });\n promises.push(networkPromise);\n // Promise.race() will resolve as soon as the first promise resolves.\n let response = await Promise.race(promises);\n // If Promise.race() resolved with null, it might be due to a network\n // timeout + a cache miss. If that were to happen, we'd rather wait until\n // the networkPromise resolves instead of returning null.\n // Note that it's fine to await an already-resolved promise, so we don't\n // have to check to see if it's still \"in flight\".\n if (!response) {\n response = await networkPromise;\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('NetworkFirst', request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs array\n * @param {Event} [options.event]\n * @return {Promise<Response>}\n *\n * @private\n */\n _getTimeoutPromise({ request, logs, event }) {\n let timeoutId;\n const timeoutPromise = new Promise((resolve) => {\n const onNetworkTimeout = async () => {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Timing out the network response at ` +\n `${this._networkTimeoutSeconds} seconds.`);\n }\n resolve(await this._respondFromCache({ request, event }));\n };\n timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n });\n return {\n promise: timeoutPromise,\n id: timeoutId,\n };\n }\n /**\n * @param {Object} options\n * @param {number|undefined} options.timeoutId\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs Array.\n * @param {Event} [options.event]\n * @return {Promise<Response>}\n *\n * @private\n */\n async _getNetworkPromise({ timeoutId, request, logs, event }) {\n let error;\n let response;\n try {\n response = await fetchWrapper.fetch({\n request,\n event,\n fetchOptions: this._fetchOptions,\n plugins: this._plugins,\n });\n }\n catch (err) {\n error = err;\n }\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network. Will respond ` +\n `with a cached response.`);\n }\n }\n if (error || !response) {\n response = await this._respondFromCache({ request, event });\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Found a cached response in the '${this._cacheName}'` +\n ` cache.`);\n }\n else {\n logs.push(`No response found in the '${this._cacheName}' cache.`);\n }\n }\n }\n else {\n // Keep the service worker alive while we put the request in the cache\n const responseClone = response.clone();\n const cachePut = cacheWrapper.put({\n cacheName: this._cacheName,\n request,\n response: responseClone,\n event,\n plugins: this._plugins,\n });\n if (event) {\n try {\n // The event has been responded to so we can keep the SW alive to\n // respond to the request\n event.waitUntil(cachePut);\n }\n catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache for '${getFriendlyURL(request.url)}'.`);\n }\n }\n }\n }\n return response;\n }\n /**\n * Used if the network timeouts or fails to make the request.\n *\n * @param {Object} options\n * @param {Request} request The request to match in the cache\n * @param {Event} [options.event]\n * @return {Promise<Object>}\n *\n * @private\n */\n _respondFromCache({ event, request }) {\n return cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n }\n}\nexport { NetworkFirst };\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 { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-only}\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.\n *\n * If the network request fails, this will throw a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass NetworkOnly {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n */\n constructor(options = {}) {\n this._plugins = options.plugins || [];\n this._fetchOptions = options.fetchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request The request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'NetworkOnly',\n funcName: 'handle',\n paramName: 'request',\n });\n }\n let error;\n let response;\n try {\n response = await fetchWrapper.fetch({\n request,\n event,\n fetchOptions: this._fetchOptions,\n plugins: this._plugins,\n });\n }\n catch (err) {\n error = err;\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('NetworkOnly', request));\n if (response) {\n logger.log(`Got response from network.`);\n }\n else {\n logger.log(`Unable to get a response from the network.`);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { NetworkOnly };\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 { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [stale-while-revalidate]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#stale-while-revalidate}\n * request strategy.\n *\n * Resources are requested from both the cache and the network in parallel.\n * The strategy will respond with the cached version if available, otherwise\n * wait for the network response. The cache is updated with the network response\n * with each successful request.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass StaleWhileRevalidate {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n if (options.plugins) {\n const isUsingCacheWillUpdate = options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ?\n options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n }\n else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n this._fetchOptions = options.fetchOptions;\n this._matchOptions = options.matchOptions;\n }\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link module:workbox-routing.Router}.\n *\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {Event} [options.event] The event that triggered the request.\n * @return {Promise<Response>}\n */\n async handle({ event, request }) {\n const logs = [];\n if (typeof request === 'string') {\n request = new Request(request);\n }\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'StaleWhileRevalidate',\n funcName: 'handle',\n paramName: 'request',\n });\n }\n const fetchAndCachePromise = this._getFromNetwork({ request, event });\n let response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n let error;\n if (response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this._cacheName}'` +\n ` cache. Will update with the network response in the background.`);\n }\n if (event) {\n try {\n event.waitUntil(fetchAndCachePromise);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache for '${getFriendlyURL(request.url)}'.`);\n }\n }\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this._cacheName}' cache. ` +\n `Will wait for the network response.`);\n }\n try {\n response = await fetchAndCachePromise;\n }\n catch (err) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart('StaleWhileRevalidate', request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Event} [options.event]\n * @return {Promise<Response>}\n *\n * @private\n */\n async _getFromNetwork({ request, event }) {\n const response = await fetchWrapper.fetch({\n request,\n event,\n fetchOptions: this._fetchOptions,\n plugins: this._plugins,\n });\n const cachePutPromise = cacheWrapper.put({\n cacheName: this._cacheName,\n request,\n response: response.clone(),\n event,\n plugins: this._plugins,\n });\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache for '${getFriendlyURL(request.url)}'.`);\n }\n }\n }\n return response;\n }\n}\nexport { StaleWhileRevalidate };\n"],"names":["self","_","e","cacheOkAndOpaquePlugin","cacheWillUpdate","async","response","status","constructor","options","_cacheName","cacheNames","getRuntimeName","cacheName","_plugins","plugins","_fetchOptions","fetchOptions","_matchOptions","matchOptions","event","request","Request","error","cacheWrapper","match","this","_getFromNetwork","err","WorkboxError","url","fetchWrapper","fetch","responseClone","clone","cachePutPromise","put","waitUntil","isUsingCacheWillUpdate","some","plugin","_networkTimeoutSeconds","networkTimeoutSeconds","logs","promises","timeoutId","id","promise","_getTimeoutPromise","push","networkPromise","_getNetworkPromise","Promise","race","resolve","setTimeout","_respondFromCache","clearTimeout","cachePut","fetchAndCachePromise"],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  this.workbox = this.workbox || {};
2
- this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js) {
2
+ this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js, canConstructReadableStream_js) {
3
3
  'use strict';
4
4
 
5
- // @ts-ignore
6
5
  try {
7
- self['workbox:streams:5.0.0-alpha.0'] && _();
6
+ self['workbox:streams:5.1.4'] && _();
8
7
  } catch (e) {}
9
8
 
10
9
  /*
@@ -19,7 +18,7 @@ this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js) {
19
18
  * [BodyInit](https://fetch.spec.whatwg.org/#bodyinit) and returns the
20
19
  * ReadableStreamReader object associated with it.
21
20
  *
22
- * @param {workbox.streams.StreamSource} source
21
+ * @param {module:workbox-streams.StreamSource} source
23
22
  * @return {ReadableStreamReader}
24
23
  * @private
25
24
  */
@@ -43,10 +42,10 @@ this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js) {
43
42
  * data returned in sequence, along with a Promise which signals when the
44
43
  * stream is finished (useful for passing to a FetchEvent's waitUntil()).
45
44
  *
46
- * @param {Array<Promise<workbox.streams.StreamSource>>} sourcePromises
45
+ * @param {Array<Promise<module:workbox-streams.StreamSource>>} sourcePromises
47
46
  * @return {Object<{done: Promise, stream: ReadableStream}>}
48
47
  *
49
- * @memberof workbox.streams
48
+ * @memberof module:workbox-streams
50
49
  */
51
50
 
52
51
 
@@ -142,12 +141,13 @@ this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js) {
142
141
  * [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)
143
142
  * is available.
144
143
  *
144
+ * @private
145
145
  * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,
146
146
  * `'text/html'` will be used by default.
147
147
  * @return {boolean} `true`, if the current browser meets the requirements for
148
148
  * streaming responses, and `false` otherwise.
149
149
  *
150
- * @memberof workbox.streams
150
+ * @memberof module:workbox-streams
151
151
  */
152
152
 
153
153
  function createHeaders(headersInit = {}) {
@@ -178,12 +178,12 @@ this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js) {
178
178
  * stream's data returned in sequence, along with a Promise which signals when
179
179
  * the stream is finished (useful for passing to a FetchEvent's waitUntil()).
180
180
  *
181
- * @param {Array<Promise<workbox.streams.StreamSource>>} sourcePromises
181
+ * @param {Array<Promise<module:workbox-streams.StreamSource>>} sourcePromises
182
182
  * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,
183
183
  * `'text/html'` will be used by default.
184
184
  * @return {Object<{done: Promise, response: Response}>}
185
185
  *
186
- * @memberof workbox.streams
186
+ * @memberof module:workbox-streams
187
187
  */
188
188
 
189
189
  function concatenateToResponse(sourcePromises, headersInit) {
@@ -208,7 +208,6 @@ this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js) {
208
208
  license that can be found in the LICENSE file or at
209
209
  https://opensource.org/licenses/MIT.
210
210
  */
211
- let cachedIsSupported;
212
211
  /**
213
212
  * This is a utility method that determines whether the current browser supports
214
213
  * the features required to create streamed responses. Currently, it checks if
@@ -218,24 +217,11 @@ this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js) {
218
217
  * @return {boolean} `true`, if the current browser meets the requirements for
219
218
  * streaming responses, and `false` otherwise.
220
219
  *
221
- * @memberof workbox.streams
220
+ * @memberof module:workbox-streams
222
221
  */
223
222
 
224
223
  function isSupported() {
225
- if (cachedIsSupported === undefined) {
226
- // See https://github.com/GoogleChrome/workbox/issues/1473
227
- try {
228
- new ReadableStream({
229
- start() {}
230
-
231
- });
232
- cachedIsSupported = true;
233
- } catch (error) {
234
- cachedIsSupported = false;
235
- }
236
- }
237
-
238
- return cachedIsSupported;
224
+ return canConstructReadableStream_js.canConstructReadableStream();
239
225
  }
240
226
 
241
227
  /*
@@ -253,14 +239,13 @@ this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js) {
253
239
  * and create a final response that concatenates their values together.
254
240
  *
255
241
  * @param {Array<function({event, request, url, params})>} sourceFunctions
256
- * An array of functions similar to {@link workbox.routing.Route~handlerCallback}
257
- * but that instead return a {@link workbox.streams.StreamSource} (or a
242
+ * An array of functions similar to {@link module:workbox-routing~handlerCallback}
243
+ * but that instead return a {@link module:workbox-streams.StreamSource} (or a
258
244
  * Promise which resolves to one).
259
245
  * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,
260
246
  * `'text/html'` will be used by default.
261
- * @return {workbox.routing.Route~handlerCallback}
262
- *
263
- * @memberof workbox.streams
247
+ * @return {module:workbox-routing~handlerCallback}
248
+ * @memberof module:workbox-streams
264
249
  */
265
250
 
266
251
  function strategy(sourceFunctions, headersInit) {
@@ -329,5 +314,5 @@ this.workbox.streams = (function (exports, logger_js, assert_js, Deferred_js) {
329
314
 
330
315
  return exports;
331
316
 
332
- }({}, workbox.core._private, workbox.core._private, workbox.core._private));
317
+ }({}, workbox.core._private, workbox.core._private, workbox.core._private, workbox.core._private));
333
318
  //# sourceMappingURL=workbox-streams.dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbox-streams.dev.js","sources":["../_version.js","../concatenate.js","../utils/createHeaders.js","../concatenateToResponse.js","../isSupported.js","../strategy.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:streams:5.1.4'] && _();\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 { logger } from 'workbox-core/_private/logger.js';\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport './_version.js';\n/**\n * Takes either a Response, a ReadableStream, or a\n * [BodyInit](https://fetch.spec.whatwg.org/#bodyinit) and returns the\n * ReadableStreamReader object associated with it.\n *\n * @param {module:workbox-streams.StreamSource} source\n * @return {ReadableStreamReader}\n * @private\n */\nfunction _getReaderFromSource(source) {\n if (source instanceof Response) {\n return source.body.getReader();\n }\n if (source instanceof ReadableStream) {\n return source.getReader();\n }\n return new Response(source).body.getReader();\n}\n/**\n * Takes multiple source Promises, each of which could resolve to a Response, a\n * ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit).\n *\n * Returns an object exposing a ReadableStream with each individual stream's\n * data returned in sequence, along with a Promise which signals when the\n * stream is finished (useful for passing to a FetchEvent's waitUntil()).\n *\n * @param {Array<Promise<module:workbox-streams.StreamSource>>} sourcePromises\n * @return {Object<{done: Promise, stream: ReadableStream}>}\n *\n * @memberof module:workbox-streams\n */\nfunction concatenate(sourcePromises) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(sourcePromises, {\n moduleName: 'workbox-streams',\n funcName: 'concatenate',\n paramName: 'sourcePromises',\n });\n }\n const readerPromises = sourcePromises.map((sourcePromise) => {\n return Promise.resolve(sourcePromise).then((source) => {\n return _getReaderFromSource(source);\n });\n });\n const streamDeferred = new Deferred();\n let i = 0;\n const logMessages = [];\n const stream = new ReadableStream({\n pull(controller) {\n return readerPromises[i]\n .then((reader) => reader.read())\n .then((result) => {\n if (result.done) {\n if (process.env.NODE_ENV !== 'production') {\n logMessages.push(['Reached the end of source:',\n sourcePromises[i]]);\n }\n i++;\n if (i >= readerPromises.length) {\n // Log all the messages in the group at once in a single group.\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(`Concatenating ${readerPromises.length} sources.`);\n for (const message of logMessages) {\n if (Array.isArray(message)) {\n logger.log(...message);\n }\n else {\n logger.log(message);\n }\n }\n logger.log('Finished reading all sources.');\n logger.groupEnd();\n }\n controller.close();\n streamDeferred.resolve();\n return;\n }\n // The `pull` method is defined because we're inside it.\n return this.pull(controller);\n }\n else {\n controller.enqueue(result.value);\n }\n }).catch((error) => {\n if (process.env.NODE_ENV !== 'production') {\n logger.error('An error occurred:', error);\n }\n streamDeferred.reject(error);\n throw error;\n });\n },\n cancel() {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn('The ReadableStream was cancelled.');\n }\n streamDeferred.resolve();\n },\n });\n return { done: streamDeferred.promise, stream };\n}\nexport { concatenate };\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 * This is a utility method that determines whether the current browser supports\n * the features required to create streamed responses. Currently, it checks if\n * [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)\n * is available.\n *\n * @private\n * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,\n * `'text/html'` will be used by default.\n * @return {boolean} `true`, if the current browser meets the requirements for\n * streaming responses, and `false` otherwise.\n *\n * @memberof module:workbox-streams\n */\nfunction createHeaders(headersInit = {}) {\n // See https://github.com/GoogleChrome/workbox/issues/1461\n const headers = new Headers(headersInit);\n if (!headers.has('content-type')) {\n headers.set('content-type', 'text/html');\n }\n return headers;\n}\nexport { createHeaders };\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 { createHeaders } from './utils/createHeaders.js';\nimport { concatenate } from './concatenate.js';\nimport './_version.js';\n/**\n * Takes multiple source Promises, each of which could resolve to a Response, a\n * ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit),\n * along with a\n * [HeadersInit](https://fetch.spec.whatwg.org/#typedefdef-headersinit).\n *\n * Returns an object exposing a Response whose body consists of each individual\n * stream's data returned in sequence, along with a Promise which signals when\n * the stream is finished (useful for passing to a FetchEvent's waitUntil()).\n *\n * @param {Array<Promise<module:workbox-streams.StreamSource>>} sourcePromises\n * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,\n * `'text/html'` will be used by default.\n * @return {Object<{done: Promise, response: Response}>}\n *\n * @memberof module:workbox-streams\n */\nfunction concatenateToResponse(sourcePromises, headersInit) {\n const { done, stream } = concatenate(sourcePromises);\n const headers = createHeaders(headersInit);\n const response = new Response(stream, { headers });\n return { done, response };\n}\nexport { concatenateToResponse };\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 { canConstructReadableStream } from 'workbox-core/_private/canConstructReadableStream.js';\nimport './_version.js';\n/**\n * This is a utility method that determines whether the current browser supports\n * the features required to create streamed responses. Currently, it checks if\n * [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)\n * can be created.\n *\n * @return {boolean} `true`, if the current browser meets the requirements for\n * streaming responses, and `false` otherwise.\n *\n * @memberof module:workbox-streams\n */\nfunction isSupported() {\n return canConstructReadableStream();\n}\nexport { isSupported };\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 { createHeaders } from './utils/createHeaders.js';\nimport { concatenateToResponse } from './concatenateToResponse.js';\nimport { isSupported } from './isSupported.js';\nimport './_version.js';\n/**\n * A shortcut to create a strategy that could be dropped-in to Workbox's router.\n *\n * On browsers that do not support constructing new `ReadableStream`s, this\n * strategy will automatically wait for all the `sourceFunctions` to complete,\n * and create a final response that concatenates their values together.\n *\n * @param {Array<function({event, request, url, params})>} sourceFunctions\n * An array of functions similar to {@link module:workbox-routing~handlerCallback}\n * but that instead return a {@link module:workbox-streams.StreamSource} (or a\n * Promise which resolves to one).\n * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,\n * `'text/html'` will be used by default.\n * @return {module:workbox-routing~handlerCallback}\n * @memberof module:workbox-streams\n */\nfunction strategy(sourceFunctions, headersInit) {\n return async ({ event, request, url, params }) => {\n const sourcePromises = sourceFunctions.map((fn) => {\n // Ensure the return value of the function is always a promise.\n return Promise.resolve(fn({ event, request, url, params }));\n });\n if (isSupported()) {\n const { done, response } = concatenateToResponse(sourcePromises, headersInit);\n if (event) {\n event.waitUntil(done);\n }\n return response;\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`The current browser doesn't support creating response ` +\n `streams. Falling back to non-streaming response instead.`);\n }\n // Fallback to waiting for everything to finish, and concatenating the\n // responses.\n const blobPartsPromises = sourcePromises.map(async (sourcePromise) => {\n const source = await sourcePromise;\n if (source instanceof Response) {\n return source.blob();\n }\n else {\n // Technically, a `StreamSource` object can include any valid\n // `BodyInit` type, including `FormData` and `URLSearchParams`, which\n // cannot be passed to the Blob constructor directly, so we have to\n // convert them to actual Blobs first.\n return new Response(source).blob();\n }\n });\n const blobParts = await Promise.all(blobPartsPromises);\n const headers = createHeaders(headersInit);\n // Constructing a new Response from a Blob source is well-supported.\n // So is constructing a new Blob from multiple source Blobs or strings.\n return new Response(new Blob(blobParts), { headers });\n };\n}\nexport { strategy };\n"],"names":["self","_","e","_getReaderFromSource","source","Response","body","getReader","ReadableStream","concatenate","sourcePromises","assert","isArray","moduleName","funcName","paramName","readerPromises","map","sourcePromise","Promise","resolve","then","streamDeferred","Deferred","i","logMessages","stream","pull","controller","reader","read","result","done","push","length","logger","groupCollapsed","message","Array","log","groupEnd","close","enqueue","value","catch","error","reject","cancel","warn","promise","createHeaders","headersInit","headers","Headers","has","set","concatenateToResponse","response","isSupported","canConstructReadableStream","strategy","sourceFunctions","event","request","url","params","fn","waitUntil","blobPartsPromises","blob","blobParts","all","Blob"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ this.workbox=this.workbox||{},this.workbox.streams=function(e,n,t){"use strict";try{self["workbox:streams:5.1.4"]&&_()}catch(e){}function s(e){const t=e.map(e=>Promise.resolve(e).then(e=>function(e){return e instanceof Response?e.body.getReader():e instanceof ReadableStream?e.getReader():new Response(e).body.getReader()}(e))),s=new n.Deferred;let r=0;const o=new ReadableStream({pull(e){return t[r].then(e=>e.read()).then(n=>{if(n.done)return r++,r>=t.length?(e.close(),void s.resolve()):this.pull(e);e.enqueue(n.value)}).catch(e=>{throw s.reject(e),e})},cancel(){s.resolve()}});return{done:s.promise,stream:o}}function r(e={}){const n=new Headers(e);return n.has("content-type")||n.set("content-type","text/html"),n}function o(e,n){const{done:t,stream:o}=s(e),c=r(n);return{done:t,response:new Response(o,{headers:c})}}function c(){return t.canConstructReadableStream()}return e.concatenate=s,e.concatenateToResponse=o,e.isSupported=c,e.strategy=function(e,n){return async({event:t,request:s,url:a,params:u})=>{const i=e.map(e=>Promise.resolve(e({event:t,request:s,url:a,params:u})));if(c()){const{done:e,response:s}=o(i,n);return t&&t.waitUntil(e),s}const f=i.map(async e=>{const n=await e;return n instanceof Response?n.blob():new Response(n).blob()}),p=await Promise.all(f),w=r(n);return new Response(new Blob(p),{headers:w})}},e}({},workbox.core._private,workbox.core._private);
2
+ //# sourceMappingURL=workbox-streams.prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbox-streams.prod.js","sources":["../_version.js","../concatenate.js","../utils/createHeaders.js","../concatenateToResponse.js","../isSupported.js","../strategy.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:streams:5.1.4'] && _();\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 { logger } from 'workbox-core/_private/logger.js';\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport './_version.js';\n/**\n * Takes either a Response, a ReadableStream, or a\n * [BodyInit](https://fetch.spec.whatwg.org/#bodyinit) and returns the\n * ReadableStreamReader object associated with it.\n *\n * @param {module:workbox-streams.StreamSource} source\n * @return {ReadableStreamReader}\n * @private\n */\nfunction _getReaderFromSource(source) {\n if (source instanceof Response) {\n return source.body.getReader();\n }\n if (source instanceof ReadableStream) {\n return source.getReader();\n }\n return new Response(source).body.getReader();\n}\n/**\n * Takes multiple source Promises, each of which could resolve to a Response, a\n * ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit).\n *\n * Returns an object exposing a ReadableStream with each individual stream's\n * data returned in sequence, along with a Promise which signals when the\n * stream is finished (useful for passing to a FetchEvent's waitUntil()).\n *\n * @param {Array<Promise<module:workbox-streams.StreamSource>>} sourcePromises\n * @return {Object<{done: Promise, stream: ReadableStream}>}\n *\n * @memberof module:workbox-streams\n */\nfunction concatenate(sourcePromises) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(sourcePromises, {\n moduleName: 'workbox-streams',\n funcName: 'concatenate',\n paramName: 'sourcePromises',\n });\n }\n const readerPromises = sourcePromises.map((sourcePromise) => {\n return Promise.resolve(sourcePromise).then((source) => {\n return _getReaderFromSource(source);\n });\n });\n const streamDeferred = new Deferred();\n let i = 0;\n const logMessages = [];\n const stream = new ReadableStream({\n pull(controller) {\n return readerPromises[i]\n .then((reader) => reader.read())\n .then((result) => {\n if (result.done) {\n if (process.env.NODE_ENV !== 'production') {\n logMessages.push(['Reached the end of source:',\n sourcePromises[i]]);\n }\n i++;\n if (i >= readerPromises.length) {\n // Log all the messages in the group at once in a single group.\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(`Concatenating ${readerPromises.length} sources.`);\n for (const message of logMessages) {\n if (Array.isArray(message)) {\n logger.log(...message);\n }\n else {\n logger.log(message);\n }\n }\n logger.log('Finished reading all sources.');\n logger.groupEnd();\n }\n controller.close();\n streamDeferred.resolve();\n return;\n }\n // The `pull` method is defined because we're inside it.\n return this.pull(controller);\n }\n else {\n controller.enqueue(result.value);\n }\n }).catch((error) => {\n if (process.env.NODE_ENV !== 'production') {\n logger.error('An error occurred:', error);\n }\n streamDeferred.reject(error);\n throw error;\n });\n },\n cancel() {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn('The ReadableStream was cancelled.');\n }\n streamDeferred.resolve();\n },\n });\n return { done: streamDeferred.promise, stream };\n}\nexport { concatenate };\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 * This is a utility method that determines whether the current browser supports\n * the features required to create streamed responses. Currently, it checks if\n * [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)\n * is available.\n *\n * @private\n * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,\n * `'text/html'` will be used by default.\n * @return {boolean} `true`, if the current browser meets the requirements for\n * streaming responses, and `false` otherwise.\n *\n * @memberof module:workbox-streams\n */\nfunction createHeaders(headersInit = {}) {\n // See https://github.com/GoogleChrome/workbox/issues/1461\n const headers = new Headers(headersInit);\n if (!headers.has('content-type')) {\n headers.set('content-type', 'text/html');\n }\n return headers;\n}\nexport { createHeaders };\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 { createHeaders } from './utils/createHeaders.js';\nimport { concatenate } from './concatenate.js';\nimport './_version.js';\n/**\n * Takes multiple source Promises, each of which could resolve to a Response, a\n * ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit),\n * along with a\n * [HeadersInit](https://fetch.spec.whatwg.org/#typedefdef-headersinit).\n *\n * Returns an object exposing a Response whose body consists of each individual\n * stream's data returned in sequence, along with a Promise which signals when\n * the stream is finished (useful for passing to a FetchEvent's waitUntil()).\n *\n * @param {Array<Promise<module:workbox-streams.StreamSource>>} sourcePromises\n * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,\n * `'text/html'` will be used by default.\n * @return {Object<{done: Promise, response: Response}>}\n *\n * @memberof module:workbox-streams\n */\nfunction concatenateToResponse(sourcePromises, headersInit) {\n const { done, stream } = concatenate(sourcePromises);\n const headers = createHeaders(headersInit);\n const response = new Response(stream, { headers });\n return { done, response };\n}\nexport { concatenateToResponse };\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 { canConstructReadableStream } from 'workbox-core/_private/canConstructReadableStream.js';\nimport './_version.js';\n/**\n * This is a utility method that determines whether the current browser supports\n * the features required to create streamed responses. Currently, it checks if\n * [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)\n * can be created.\n *\n * @return {boolean} `true`, if the current browser meets the requirements for\n * streaming responses, and `false` otherwise.\n *\n * @memberof module:workbox-streams\n */\nfunction isSupported() {\n return canConstructReadableStream();\n}\nexport { isSupported };\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 { createHeaders } from './utils/createHeaders.js';\nimport { concatenateToResponse } from './concatenateToResponse.js';\nimport { isSupported } from './isSupported.js';\nimport './_version.js';\n/**\n * A shortcut to create a strategy that could be dropped-in to Workbox's router.\n *\n * On browsers that do not support constructing new `ReadableStream`s, this\n * strategy will automatically wait for all the `sourceFunctions` to complete,\n * and create a final response that concatenates their values together.\n *\n * @param {Array<function({event, request, url, params})>} sourceFunctions\n * An array of functions similar to {@link module:workbox-routing~handlerCallback}\n * but that instead return a {@link module:workbox-streams.StreamSource} (or a\n * Promise which resolves to one).\n * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,\n * `'text/html'` will be used by default.\n * @return {module:workbox-routing~handlerCallback}\n * @memberof module:workbox-streams\n */\nfunction strategy(sourceFunctions, headersInit) {\n return async ({ event, request, url, params }) => {\n const sourcePromises = sourceFunctions.map((fn) => {\n // Ensure the return value of the function is always a promise.\n return Promise.resolve(fn({ event, request, url, params }));\n });\n if (isSupported()) {\n const { done, response } = concatenateToResponse(sourcePromises, headersInit);\n if (event) {\n event.waitUntil(done);\n }\n return response;\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`The current browser doesn't support creating response ` +\n `streams. Falling back to non-streaming response instead.`);\n }\n // Fallback to waiting for everything to finish, and concatenating the\n // responses.\n const blobPartsPromises = sourcePromises.map(async (sourcePromise) => {\n const source = await sourcePromise;\n if (source instanceof Response) {\n return source.blob();\n }\n else {\n // Technically, a `StreamSource` object can include any valid\n // `BodyInit` type, including `FormData` and `URLSearchParams`, which\n // cannot be passed to the Blob constructor directly, so we have to\n // convert them to actual Blobs first.\n return new Response(source).blob();\n }\n });\n const blobParts = await Promise.all(blobPartsPromises);\n const headers = createHeaders(headersInit);\n // Constructing a new Response from a Blob source is well-supported.\n // So is constructing a new Blob from multiple source Blobs or strings.\n return new Response(new Blob(blobParts), { headers });\n };\n}\nexport { strategy };\n"],"names":["self","_","e","concatenate","sourcePromises","readerPromises","map","sourcePromise","Promise","resolve","then","source","Response","body","getReader","ReadableStream","_getReaderFromSource","streamDeferred","Deferred","i","stream","pull","controller","reader","read","result","done","length","close","this","enqueue","value","catch","error","reject","cancel","promise","createHeaders","headersInit","headers","Headers","has","set","concatenateToResponse","response","isSupported","canConstructReadableStream","sourceFunctions","async","event","request","url","params","fn","waitUntil","blobPartsPromises","blob","blobParts","all","Blob"],"mappings":"gFAEA,IACIA,KAAK,0BAA4BC,IAErC,MAAOC,ICqCP,SAASC,EAAYC,SAQXC,EAAiBD,EAAeE,IAAKC,GAChCC,QAAQC,QAAQF,GAAeG,KAAMC,GA/BpD,SAA8BA,UACtBA,aAAkBC,SACXD,EAAOE,KAAKC,YAEnBH,aAAkBI,eACXJ,EAAOG,YAEX,IAAIF,SAASD,GAAQE,KAAKC,YAyBlBE,CAAqBL,KAG9BM,EAAiB,IAAIC,eACvBC,EAAI,QAEFC,EAAS,IAAIL,eAAe,CAC9BM,KAAKC,UACMjB,EAAec,GACjBT,KAAMa,GAAWA,EAAOC,QACxBd,KAAMe,OACHA,EAAOC,YAKPP,IACIA,GAAKd,EAAesB,QAepBL,EAAWM,aACXX,EAAeR,WAIZoB,KAAKR,KAAKC,GAGjBA,EAAWQ,QAAQL,EAAOM,SAE/BC,MAAOC,UAINhB,EAAeiB,OAAOD,GAChBA,KAGdE,SAIIlB,EAAeR,mBAGhB,CAAEiB,KAAMT,EAAemB,QAAShB,OAAAA,GCvF3C,SAASiB,EAAcC,EAAc,UAE3BC,EAAU,IAAIC,QAAQF,UACvBC,EAAQE,IAAI,iBACbF,EAAQG,IAAI,eAAgB,aAEzBH,ECDX,SAASI,EAAsBvC,EAAgBkC,SACrCZ,KAAEA,EAAFN,OAAQA,GAAWjB,EAAYC,GAC/BmC,EAAUF,EAAcC,SAEvB,CAAEZ,KAAAA,EAAMkB,SADE,IAAIhC,SAASQ,EAAQ,CAAEmB,QAAAA,KCV5C,SAASM,WACEC,2GCOX,SAAkBC,EAAiBT,UACxBU,OAASC,MAAAA,EAAOC,QAAAA,EAASC,IAAAA,EAAKC,OAAAA,YAC3BhD,EAAiB2C,EAAgBzC,IAAK+C,GAEjC7C,QAAQC,QAAQ4C,EAAG,CAAEJ,MAAAA,EAAOC,QAAAA,EAASC,IAAAA,EAAKC,OAAAA,SAEjDP,IAAe,OACTnB,KAAEA,EAAFkB,SAAQA,GAAaD,EAAsBvC,EAAgBkC,UAC7DW,GACAA,EAAMK,UAAU5B,GAEbkB,QAQLW,EAAoBnD,EAAeE,IAAI0C,MAAAA,UACnCrC,QAAeJ,SACjBI,aAAkBC,SACXD,EAAO6C,OAOP,IAAI5C,SAASD,GAAQ6C,SAG9BC,QAAkBjD,QAAQkD,IAAIH,GAC9BhB,EAAUF,EAAcC,UAGvB,IAAI1B,SAAS,IAAI+C,KAAKF,GAAY,CAAElB,QAAAA"}
@@ -0,0 +1,2 @@
1
+ !function(){"use strict";try{self["workbox:sw:5.1.4"]&&_()}catch(t){}const t={backgroundSync:"background-sync",broadcastUpdate:"broadcast-update",cacheableResponse:"cacheable-response",core:"core",expiration:"expiration",googleAnalytics:"offline-ga",navigationPreload:"navigation-preload",precaching:"precaching",rangeRequests:"range-requests",routing:"routing",strategies:"strategies",streams:"streams"};self.workbox=new class{constructor(){return this.v={},this.t={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.s=this.t.debug?"dev":"prod",this.o=!1,new Proxy(this,{get(e,s){if(e[s])return e[s];const o=t[s];return o&&e.loadModule("workbox-"+o),e[s]}})}setConfig(t={}){if(this.o)throw new Error("Config must be set before accessing workbox.* modules");Object.assign(this.t,t),this.s=this.t.debug?"dev":"prod"}loadModule(t){const e=this.i(t);try{importScripts(e),this.o=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}i(t){if(this.t.modulePathCb)return this.t.modulePathCb(t,this.t.debug);let e=["https://storage.googleapis.com/workbox-cdn/releases/5.1.4"];const s=`${t}.${this.s}.js`,o=this.t.modulePathPrefix;return o&&(e=o.split("/"),""===e[e.length-1]&&e.splice(e.length-1,1)),e.push(s),e.join("/")}}}();
2
+ //# sourceMappingURL=workbox-sw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbox-sw.js","sources":["../_version.mjs","../controllers/WorkboxSW.mjs","../index.mjs"],"sourcesContent":["try{self['workbox:sw:5.1.4']&&_()}catch(e){}// eslint-disable-line","/*\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*/\n\nimport '../_version.mjs';\n\nconst CDN_PATH = `WORKBOX_CDN_ROOT_URL`;\n\nconst MODULE_KEY_TO_NAME_MAPPING = {\n /**\n * @name backgroundSync\n * @memberof workbox\n * @see module:workbox-background-sync\n */\n backgroundSync: 'background-sync',\n /**\n * @name broadcastUpdate\n * @memberof workbox\n * @see module:workbox-broadcast-update\n */\n broadcastUpdate: 'broadcast-update',\n /**\n * @name cacheableResponse\n * @memberof workbox\n * @see module:workbox-cacheable-response\n */\n cacheableResponse: 'cacheable-response',\n /**\n * @name core\n * @memberof workbox\n * @see module:workbox-core\n */\n core: 'core',\n /**\n * @name expiration\n * @memberof workbox\n * @see module:workbox-expiration\n */\n expiration: 'expiration',\n /**\n * @name googleAnalytics\n * @memberof workbox\n * @see module:workbox-google-analytics\n */\n googleAnalytics: 'offline-ga',\n /**\n * @name navigationPreload\n * @memberof workbox\n * @see module:workbox-navigation-preload\n */\n navigationPreload: 'navigation-preload',\n /**\n * @name precaching\n * @memberof workbox\n * @see module:workbox-precaching\n */\n precaching: 'precaching',\n /**\n * @name rangeRequests\n * @memberof workbox\n * @see module:workbox-range-requests\n */\n rangeRequests: 'range-requests',\n /**\n * @name routing\n * @memberof workbox\n * @see module:workbox-routing\n */\n routing: 'routing',\n /**\n * @name strategies\n * @memberof workbox\n * @see module:workbox-strategies\n */\n strategies: 'strategies',\n /**\n * @name streams\n * @memberof workbox\n * @see module:workbox-streams\n */\n streams: 'streams',\n};\n\n/**\n * This class can be used to make it easy to use the various parts of\n * Workbox.\n *\n * @private\n */\nexport class WorkboxSW {\n /**\n * Creates a proxy that automatically loads workbox namespaces on demand.\n *\n * @private\n */\n constructor() {\n this.v = {};\n this._options = {\n debug: self.location.hostname === 'localhost',\n modulePathPrefix: null,\n modulePathCb: null,\n };\n\n this._env = this._options.debug ? 'dev' : 'prod';\n this._modulesLoaded = false;\n\n return new Proxy(this, {\n get(target, key) {\n if (target[key]) {\n return target[key];\n }\n\n const moduleName = MODULE_KEY_TO_NAME_MAPPING[key];\n if (moduleName) {\n target.loadModule(`workbox-${moduleName}`);\n }\n\n return target[key];\n },\n });\n }\n\n /**\n * Updates the configuration options. You can specify whether to treat as a\n * debug build and whether to use a CDN or a specific path when importing\n * other workbox-modules\n *\n * @param {Object} [options]\n * @param {boolean} [options.debug] If true, `dev` builds are using, otherwise\n * `prod` builds are used. By default, `prod` is used unless on localhost.\n * @param {Function} [options.modulePathPrefix] To avoid using the CDN with\n * `workbox-sw` set the path prefix of where modules should be loaded from.\n * For example `modulePathPrefix: '/third_party/workbox/v3.0.0/'`.\n * @param {workbox~ModulePathCallback} [options.modulePathCb] If defined,\n * this callback will be responsible for determining the path of each\n * workbox module.\n *\n * @alias workbox.setConfig\n */\n setConfig(options = {}) {\n if (!this._modulesLoaded) {\n Object.assign(this._options, options);\n this._env = this._options.debug ? 'dev' : 'prod';\n } else {\n throw new Error('Config must be set before accessing workbox.* modules');\n }\n }\n\n /**\n * Load a Workbox module by passing in the appropriate module name.\n *\n * This is not generally needed unless you know there are modules that are\n * dynamically used and you want to safe guard use of the module while the\n * user may be offline.\n *\n * @param {string} moduleName\n *\n * @alias workbox.loadModule\n */\n loadModule(moduleName) {\n const modulePath = this._getImportPath(moduleName);\n try {\n importScripts(modulePath);\n this._modulesLoaded = true;\n } catch (err) {\n // TODO Add context of this error if using the CDN vs the local file.\n\n // We can't rely on workbox-core being loaded so using console\n // eslint-disable-next-line\n console.error(\n `Unable to import module '${moduleName}' from '${modulePath}'.`);\n throw err;\n }\n }\n\n /**\n * This method will get the path / CDN URL to be used for importScript calls.\n *\n * @param {string} moduleName\n * @return {string} URL to the desired module.\n *\n * @private\n */\n _getImportPath(moduleName) {\n if (this._options.modulePathCb) {\n return this._options.modulePathCb(moduleName, this._options.debug);\n }\n\n // TODO: This needs to be dynamic some how.\n let pathParts = [CDN_PATH];\n\n const fileName = `${moduleName}.${this._env}.js`;\n\n const pathPrefix = this._options.modulePathPrefix;\n if (pathPrefix) {\n // Split to avoid issues with developers ending / not ending with slash\n pathParts = pathPrefix.split('/');\n\n // We don't need a slash at the end as we will be adding\n // a filename regardless\n if (pathParts[pathParts.length - 1] === '') {\n pathParts.splice(pathParts.length - 1, 1);\n }\n }\n\n pathParts.push(fileName);\n\n return pathParts.join('/');\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*/\n\nimport {WorkboxSW} from './controllers/WorkboxSW.mjs';\nimport './_version.mjs';\n\n/**\n * @namespace workbox\n */\n\n// Don't export anything, just expose a global.\nself.workbox = new WorkboxSW();\n"],"names":["self","_","e","MODULE_KEY_TO_NAME_MAPPING","backgroundSync","broadcastUpdate","cacheableResponse","core","expiration","googleAnalytics","navigationPreload","precaching","rangeRequests","routing","strategies","streams","workbox","constructor","v","_options","debug","location","hostname","modulePathPrefix","modulePathCb","_env","this","_modulesLoaded","Proxy","get","target","key","moduleName","loadModule","setConfig","options","Error","Object","assign","modulePath","_getImportPath","importScripts","err","console","error","pathParts","fileName","pathPrefix","split","length","splice","push","join"],"mappings":"yBAAA,IAAIA,KAAK,qBAAqBC,IAAI,MAAMC,ICUxC,MAEMC,EAA6B,CAMjCC,eAAgB,kBAMhBC,gBAAiB,mBAMjBC,kBAAmB,qBAMnBC,KAAM,OAMNC,WAAY,aAMZC,gBAAiB,aAMjBC,kBAAmB,qBAMnBC,WAAY,aAMZC,cAAe,iBAMfC,QAAS,UAMTC,WAAY,aAMZC,QAAS,WCpEXf,KAAKgB,QAAU,ID6ER,MAMLC,0BACOC,EAAI,QACJC,EAAW,CACdC,MAAkC,cAA3BpB,KAAKqB,SAASC,SACrBC,iBAAkB,KAClBC,aAAc,WAGXC,EAAOC,KAAKP,EAASC,MAAQ,MAAQ,YACrCO,GAAiB,EAEf,IAAIC,MAAMF,KAAM,CACrBG,IAAIC,EAAQC,MACND,EAAOC,UACFD,EAAOC,SAGVC,EAAa7B,EAA2B4B,UAC1CC,GACFF,EAAOG,WAAY,WAAUD,GAGxBF,EAAOC,MAsBpBG,UAAUC,EAAU,OACbT,KAAKC,QAIF,IAAIS,MAAM,yDAHhBC,OAAOC,OAAOZ,KAAKP,EAAUgB,QACxBV,EAAOC,KAAKP,EAASC,MAAQ,MAAQ,OAiB9Ca,WAAWD,SACHO,EAAab,KAAKc,EAAeR,OAErCS,cAAcF,QACTZ,GAAiB,EACtB,MAAOe,SAKPC,QAAQC,MACH,4BAA2BZ,YAAqBO,OAC/CG,GAYVF,EAAeR,MACTN,KAAKP,EAASK,oBACTE,KAAKP,EAASK,aAAaQ,EAAYN,KAAKP,EAASC,WAI1DyB,EAAY,CAvLF,mEAyLRC,EAAY,GAAEd,KAAcN,KAAKD,OAEjCsB,EAAarB,KAAKP,EAASI,wBAC7BwB,IAEFF,EAAYE,EAAWC,MAAM,KAIW,KAApCH,EAAUA,EAAUI,OAAS,IAC/BJ,EAAUK,OAAOL,EAAUI,OAAS,EAAG,IAI3CJ,EAAUM,KAAKL,GAERD,EAAUO,KAAK"}
@@ -1,6 +1,5 @@
1
- // @ts-ignore
2
1
  try {
3
- self['workbox:window:5.0.0-alpha.0'] && _();
2
+ self['workbox:window:5.1.4'] && _();
4
3
  } catch (e) {}
5
4
 
6
5
  /*
@@ -22,7 +21,6 @@ try {
22
21
  * @param {ServiceWorker} sw The service worker to send the message to.
23
22
  * @param {Object} data An object to send to the service worker.
24
23
  * @return {Promise<Object|undefined>}
25
- *
26
24
  * @memberof module:workbox-window
27
25
  */
28
26
 
@@ -60,9 +58,50 @@ function _inheritsLoose(subClass, superClass) {
60
58
  subClass.__proto__ = superClass;
61
59
  }
62
60
 
63
- // @ts-ignore
61
+ function _unsupportedIterableToArray(o, minLen) {
62
+ if (!o) return;
63
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
64
+ var n = Object.prototype.toString.call(o).slice(8, -1);
65
+ if (n === "Object" && o.constructor) n = o.constructor.name;
66
+ if (n === "Map" || n === "Set") return Array.from(o);
67
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
68
+ }
69
+
70
+ function _arrayLikeToArray(arr, len) {
71
+ if (len == null || len > arr.length) len = arr.length;
72
+
73
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
74
+
75
+ return arr2;
76
+ }
77
+
78
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
79
+ var it;
80
+
81
+ if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
82
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
83
+ if (it) o = it;
84
+ var i = 0;
85
+ return function () {
86
+ if (i >= o.length) return {
87
+ done: true
88
+ };
89
+ return {
90
+ done: false,
91
+ value: o[i++]
92
+ };
93
+ };
94
+ }
95
+
96
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
97
+ }
98
+
99
+ it = o[Symbol.iterator]();
100
+ return it.next.bind(it);
101
+ }
102
+
64
103
  try {
65
- self['workbox:core:5.0.0-alpha.1'] && _();
104
+ self['workbox:core:5.1.4'] && _();
66
105
  } catch (e) {}
67
106
 
68
107
  /*
@@ -94,6 +133,23 @@ function Deferred() {
94
133
  });
95
134
  };
96
135
 
136
+ /*
137
+ Copyright 2019 Google LLC
138
+ Use of this source code is governed by an MIT-style
139
+ license that can be found in the LICENSE file or at
140
+ https://opensource.org/licenses/MIT.
141
+ */
142
+ /**
143
+ * A helper function that prevents a promise from being flagged as unused.
144
+ *
145
+ * @private
146
+ **/
147
+
148
+ function dontWaitFor(promise) {
149
+ // Effective no-op.
150
+ promise.then(function () {});
151
+ }
152
+
97
153
  /*
98
154
  Copyright 2019 Google LLC
99
155
  Use of this source code is governed by an MIT-style
@@ -101,6 +157,12 @@ function Deferred() {
101
157
  https://opensource.org/licenses/MIT.
102
158
  */
103
159
  var logger = function () {
160
+ // Don't overwrite this value if it's already set.
161
+ // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923
162
+ if (!('__WB_DISABLE_DEV_LOGS' in self)) {
163
+ self.__WB_DISABLE_DEV_LOGS = false;
164
+ }
165
+
104
166
  var inGroup = false;
105
167
  var methodToColorMap = {
106
168
  debug: "#7f8c8d",
@@ -114,6 +176,10 @@ var logger = function () {
114
176
  var print = function print(method, args) {
115
177
  var _console2;
116
178
 
179
+ if (self.__WB_DISABLE_DEV_LOGS) {
180
+ return;
181
+ }
182
+
117
183
  if (method === 'groupCollapsed') {
118
184
  // Safari doesn't print all console.groupCollapsed() arguments:
119
185
  // https://bugs.webkit.org/show_bug.cgi?id=182754
@@ -145,7 +211,7 @@ var logger = function () {
145
211
  var loggerMethods = Object.keys(methodToColorMap);
146
212
 
147
213
  var _loop = function _loop() {
148
- var key = loggerMethods[_i];
214
+ var key = _loggerMethods[_i];
149
215
  var method = key;
150
216
 
151
217
  api[method] = function () {
@@ -157,7 +223,7 @@ var logger = function () {
157
223
  };
158
224
  };
159
225
 
160
- for (var _i = 0; _i < loggerMethods.length; _i++) {
226
+ for (var _i = 0, _loggerMethods = loggerMethods; _i < _loggerMethods.length; _i++) {
161
227
  _loop();
162
228
  }
163
229
 
@@ -171,18 +237,16 @@ var logger = function () {
171
237
  license that can be found in the LICENSE file or at
172
238
  https://opensource.org/licenses/MIT.
173
239
  */
240
+
174
241
  /**
175
242
  * A minimal `EventTarget` shim.
176
243
  * This is necessary because not all browsers support constructable
177
244
  * `EventTarget`, so using a real `EventTarget` will error.
178
245
  * @private
179
246
  */
180
-
181
- var WorkboxEventTarget =
182
- /*#__PURE__*/
183
- function () {
247
+ var WorkboxEventTarget = /*#__PURE__*/function () {
184
248
  function WorkboxEventTarget() {
185
- this._eventListenerRegistry = {};
249
+ this._eventListenerRegistry = new Map();
186
250
  }
187
251
  /**
188
252
  * @param {string} type
@@ -194,45 +258,36 @@ function () {
194
258
  var _proto = WorkboxEventTarget.prototype;
195
259
 
196
260
  _proto.addEventListener = function addEventListener(type, listener) {
197
- this._getEventListenersByType(type).add(listener);
198
- };
261
+ var foo = this._getEventListenersByType(type);
262
+
263
+ foo.add(listener);
264
+ }
199
265
  /**
200
266
  * @param {string} type
201
267
  * @param {Function} listener
202
268
  * @private
203
269
  */
204
-
270
+ ;
205
271
 
206
272
  _proto.removeEventListener = function removeEventListener(type, listener) {
207
273
  this._getEventListenersByType(type).delete(listener);
208
- };
274
+ }
209
275
  /**
210
276
  * @param {Object} event
211
277
  * @private
212
278
  */
213
-
279
+ ;
214
280
 
215
281
  _proto.dispatchEvent = function dispatchEvent(event) {
216
282
  event.target = this;
217
283
 
218
284
  var listeners = this._getEventListenersByType(event.type);
219
285
 
220
- for (var _iterator = listeners, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
221
- var _ref;
222
-
223
- if (_isArray) {
224
- if (_i >= _iterator.length) break;
225
- _ref = _iterator[_i++];
226
- } else {
227
- _i = _iterator.next();
228
- if (_i.done) break;
229
- _ref = _i.value;
230
- }
231
-
232
- var listener = _ref;
286
+ for (var _iterator = _createForOfIteratorHelperLoose(listeners), _step; !(_step = _iterator()).done;) {
287
+ var listener = _step.value;
233
288
  listener(event);
234
289
  }
235
- };
290
+ }
236
291
  /**
237
292
  * Returns a Set of listeners associated with the passed event type.
238
293
  * If no handlers have been registered, an empty Set is returned.
@@ -241,10 +296,14 @@ function () {
241
296
  * @return {Set<ListenerCallback>} An array of handler functions.
242
297
  * @private
243
298
  */
244
-
299
+ ;
245
300
 
246
301
  _proto._getEventListenersByType = function _getEventListenersByType(type) {
247
- return this._eventListenerRegistry[type] = this._eventListenerRegistry[type] || new Set();
302
+ if (!this._eventListenerRegistry.has(type)) {
303
+ this._eventListenerRegistry.set(type, new Set());
304
+ }
305
+
306
+ return this._eventListenerRegistry.get(type);
248
307
  };
249
308
 
250
309
  return WorkboxEventTarget;
@@ -292,20 +351,24 @@ var WorkboxEvent = function WorkboxEvent(type, props) {
292
351
  Object.assign(this, props);
293
352
  };
294
353
 
295
- function _catch(body, recover) {
296
- try {
297
- var result = body();
298
- } catch (e) {
299
- return recover(e);
354
+ // `skipWaiting()` wasn't called. This 200 amount wasn't scientifically
355
+ // chosen, but it seems to avoid false positives in my testing.
356
+
357
+ function _await(value, then, direct) {
358
+ if (direct) {
359
+ return then ? then(value) : value;
300
360
  }
301
361
 
302
- if (result && result.then) {
303
- return result.then(void 0, recover);
362
+ if (!value || !value.then) {
363
+ value = Promise.resolve(value);
304
364
  }
305
365
 
306
- return result;
366
+ return then ? value.then(then) : value;
307
367
  }
308
368
 
369
+ var WAITING_TIMEOUT_DURATION = 200; // The amount of time after a registration that we can reasonably conclude
370
+ // that the registration didn't trigger an update.
371
+
309
372
  function _async(f) {
310
373
  return function () {
311
374
  for (var args = [], i = 0; i < arguments.length; i++) {
@@ -320,41 +383,6 @@ function _async(f) {
320
383
  };
321
384
  }
322
385
 
323
- function _invoke(body, then) {
324
- var result = body();
325
-
326
- if (result && result.then) {
327
- return result.then(then);
328
- }
329
-
330
- return then(result);
331
- }
332
-
333
- function _await(value, then, direct) {
334
- if (direct) {
335
- return then ? then(value) : value;
336
- }
337
-
338
- if (!value || !value.then) {
339
- value = Promise.resolve(value);
340
- }
341
-
342
- return then ? value.then(then) : value;
343
- }
344
-
345
- function _awaitIgnored(value, direct) {
346
- if (!direct) {
347
- return value && value.then ? value.then(_empty) : Promise.resolve();
348
- }
349
- }
350
-
351
- function _empty() {}
352
- // `skipWaiting()` wasn't called. This 200 amount wasn't scientifically
353
- // chosen, but it seems to avoid false positives in my testing.
354
-
355
- var WAITING_TIMEOUT_DURATION = 200; // The amount of time after a registration that we can reasonably conclude
356
- // that the registration didn't trigger an update.
357
-
358
386
  var REGISTRATION_TIMEOUT_DURATION = 60000;
359
387
  /**
360
388
  * A class to aid in handling service worker registration, updates, and
@@ -369,13 +397,12 @@ var REGISTRATION_TIMEOUT_DURATION = 60000;
369
397
  * @fires [externalinstalled]{@link module:workbox-window.Workbox#externalinstalled}
370
398
  * @fires [externalwaiting]{@link module:workbox-window.Workbox#externalwaiting}
371
399
  * @fires [externalactivated]{@link module:workbox-window.Workbox#externalactivated}
372
- *
373
400
  * @memberof module:workbox-window
374
401
  */
375
402
 
376
- var Workbox =
377
- /*#__PURE__*/
378
- function (_WorkboxEventTarget) {
403
+ function _empty() {}
404
+
405
+ var Workbox = /*#__PURE__*/function (_WorkboxEventTarget) {
379
406
  _inheritsLoose(Workbox, _WorkboxEventTarget);
380
407
 
381
408
  /**
@@ -404,6 +431,7 @@ function (_WorkboxEventTarget) {
404
431
  _this._activeDeferred = new Deferred();
405
432
  _this._controllingDeferred = new Deferred();
406
433
  _this._registrationTime = 0;
434
+ _this._ownSWs = new Set();
407
435
  /**
408
436
  * @private
409
437
  */
@@ -446,6 +474,8 @@ function (_WorkboxEventTarget) {
446
474
  // SW is the one we registered, so we set it.
447
475
  _this._sw = installingSW;
448
476
 
477
+ _this._ownSWs.add(installingSW);
478
+
449
479
  _this._swDeferred.resolve(installingSW); // The `installing` state isn't something we have a dedicated
450
480
  // callback for, but we do log messages for it in development.
451
481
 
@@ -585,17 +615,32 @@ function (_WorkboxEventTarget) {
585
615
  */
586
616
 
587
617
 
588
- _this._onMessage = function (originalEvent) {
589
- var data = originalEvent.data;
590
-
591
- _this.dispatchEvent(new WorkboxEvent('message', {
592
- data: data,
593
- originalEvent: originalEvent
594
- }));
595
- };
618
+ _this._onMessage = _async(function (originalEvent) {
619
+ var data = originalEvent.data,
620
+ source = originalEvent.source; // Wait until there's an "own" service worker. This is used to buffer
621
+ // `message` events that may be received prior to calling `register()`.
596
622
 
623
+ return _await(_this.getSW(), function () {
624
+ if (_this._ownSWs.has(source)) {
625
+ _this.dispatchEvent(new WorkboxEvent('message', {
626
+ data: data,
627
+ sw: source,
628
+ originalEvent: originalEvent
629
+ }));
630
+ }
631
+ }); // If the service worker that sent the message is in the list of own
632
+ // service workers for this instance, dispatch a `message` event.
633
+ // NOTE: we check for all previously owned service workers rather than
634
+ // just the current one because some messages (e.g. cache updates) use
635
+ // a timeout when sent and may be delayed long enough for a service worker
636
+ // update to be found.
637
+ });
597
638
  _this._scriptURL = scriptURL;
598
- _this._registerOptions = registerOptions;
639
+ _this._registerOptions = registerOptions; // Add a message listener immediately since messages received during
640
+ // page load are buffered only until the DOMContentLoaded event:
641
+ // https://github.com/GoogleChrome/workbox/issues/2202
642
+
643
+ navigator.serviceWorker.addEventListener('message', _this._onMessage);
599
644
  return _this;
600
645
  }
601
646
  /**
@@ -611,122 +656,142 @@ function (_WorkboxEventTarget) {
611
656
 
612
657
 
613
658
  var _proto = Workbox.prototype;
614
- _proto.register = _async(function (_temp) {
615
- var _this2 = this;
616
659
 
660
+ _proto.register = function register(_temp) {
617
661
  var _ref = _temp === void 0 ? {} : _temp,
618
662
  _ref$immediate = _ref.immediate,
619
663
  immediate = _ref$immediate === void 0 ? false : _ref$immediate;
620
664
 
621
- {
622
- if (_this2._registrationTime) {
623
- logger.error('Cannot re-register a Workbox instance after it has ' + 'been registered. Create a new instance instead.');
624
- return;
625
- }
626
- }
665
+ try {
666
+ var _this3 = this;
627
667
 
628
- return _invoke(function () {
629
- if (!immediate && document.readyState !== 'complete') {
630
- return _awaitIgnored(new Promise(function (res) {
631
- return addEventListener('load', res);
632
- }));
668
+ if ("dev" !== 'production') {
669
+ if (_this3._registrationTime) {
670
+ logger.error('Cannot re-register a Workbox instance after it has ' + 'been registered. Create a new instance instead.');
671
+ return;
672
+ }
633
673
  }
634
- }, function () {
635
- // Set this flag to true if any service worker was controlling the page
636
- // at registration time.
637
- _this2._isUpdate = Boolean(navigator.serviceWorker.controller); // Before registering, attempt to determine if a SW is already controlling
638
- // the page, and if that SW script (and version, if specified) matches this
639
- // instance's script.
640
-
641
- _this2._compatibleControllingSW = _this2._getControllingSWIfCompatible();
642
- return _await(_this2._registerScript(), function (_this2$_registerScrip) {
643
- _this2._registration = _this2$_registerScrip;
644
-
645
- // If we have a compatible controller, store the controller as the "own"
646
- // SW, resolve active/controlling deferreds and add necessary listeners.
647
- if (_this2._compatibleControllingSW) {
648
- _this2._sw = _this2._compatibleControllingSW;
649
-
650
- _this2._activeDeferred.resolve(_this2._compatibleControllingSW);
651
-
652
- _this2._controllingDeferred.resolve(_this2._compatibleControllingSW);
653
-
654
- _this2._reportWindowReady(_this2._compatibleControllingSW);
655
674
 
656
- _this2._compatibleControllingSW.addEventListener('statechange', _this2._onStateChange, {
657
- once: true
658
- });
659
- } // If there's a waiting service worker with a matching URL before the
660
- // `updatefound` event fires, it likely means that this site is open
661
- // in another tab, or the user refreshed the page (and thus the prevoius
662
- // page wasn't fully unloaded before this page started loading).
663
- // https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#waiting
675
+ return _invoke(function () {
676
+ if (!immediate && document.readyState !== 'complete') {
677
+ return _awaitIgnored(new Promise(function (res) {
678
+ return window.addEventListener('load', res);
679
+ }));
680
+ }
681
+ }, function () {
682
+ // Set this flag to true if any service worker was controlling the page
683
+ // at registration time.
684
+ _this3._isUpdate = Boolean(navigator.serviceWorker.controller); // Before registering, attempt to determine if a SW is already controlling
685
+ // the page, and if that SW script (and version, if specified) matches this
686
+ // instance's script.
687
+
688
+ _this3._compatibleControllingSW = _this3._getControllingSWIfCompatible();
689
+ return _await(_this3._registerScript(), function (_this2$_registerScrip) {
690
+ _this3._registration = _this2$_registerScrip;
691
+
692
+ // If we have a compatible controller, store the controller as the "own"
693
+ // SW, resolve active/controlling deferreds and add necessary listeners.
694
+ if (_this3._compatibleControllingSW) {
695
+ _this3._sw = _this3._compatibleControllingSW;
696
+
697
+ _this3._activeDeferred.resolve(_this3._compatibleControllingSW);
698
+
699
+ _this3._controllingDeferred.resolve(_this3._compatibleControllingSW);
700
+
701
+ _this3._compatibleControllingSW.addEventListener('statechange', _this3._onStateChange, {
702
+ once: true
703
+ });
704
+ } // If there's a waiting service worker with a matching URL before the
705
+ // `updatefound` event fires, it likely means that this site is open
706
+ // in another tab, or the user refreshed the page (and thus the previous
707
+ // page wasn't fully unloaded before this page started loading).
708
+ // https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#waiting
709
+
710
+
711
+ var waitingSW = _this3._registration.waiting;
712
+
713
+ if (waitingSW && urlsMatch(waitingSW.scriptURL, _this3._scriptURL)) {
714
+ // Store the waiting SW as the "own" Sw, even if it means overwriting
715
+ // a compatible controller.
716
+ _this3._sw = waitingSW; // Run this in the next microtask, so any code that adds an event
717
+ // listener after awaiting `register()` will get this event.
718
+
719
+ dontWaitFor(Promise.resolve().then(function () {
720
+ _this3.dispatchEvent(new WorkboxEvent('waiting', {
721
+ sw: waitingSW,
722
+ wasWaitingBeforeRegister: true
723
+ }));
724
+
725
+ if ("dev" !== 'production') {
726
+ logger.warn('A service worker was already waiting to activate ' + 'before this script was registered...');
727
+ }
728
+ }));
729
+ } // If an "own" SW is already set, resolve the deferred.
664
730
 
665
731
 
666
- var waitingSW = _this2._registration.waiting;
732
+ if (_this3._sw) {
733
+ _this3._swDeferred.resolve(_this3._sw);
667
734
 
668
- if (waitingSW && urlsMatch(waitingSW.scriptURL, _this2._scriptURL)) {
669
- // Store the waiting SW as the "own" Sw, even if it means overwriting
670
- // a compatible controller.
671
- _this2._sw = waitingSW; // Run this in the next microtask, so any code that adds an event
672
- // listener after awaiting `register()` will get this event.
735
+ _this3._ownSWs.add(_this3._sw);
736
+ }
673
737
 
674
- Promise.resolve().then(function () {
675
- _this2.dispatchEvent(new WorkboxEvent('waiting', {
676
- sw: waitingSW,
677
- wasWaitingBeforeRegister: true
678
- }));
738
+ if ("dev" !== 'production') {
739
+ logger.log('Successfully registered service worker.', _this3._scriptURL);
679
740
 
680
- {
681
- logger.warn('A service worker was already waiting to activate ' + 'before this script was registered...');
741
+ if (navigator.serviceWorker.controller) {
742
+ if (_this3._compatibleControllingSW) {
743
+ logger.debug('A service worker with the same script URL ' + 'is already controlling this page.');
744
+ } else {
745
+ logger.debug('A service worker with a different script URL is ' + 'currently controlling the page. The browser is now fetching ' + 'the new script now...');
746
+ }
682
747
  }
683
- });
684
- } // If an "own" SW is already set, resolve the deferred.
685
748
 
749
+ var currentPageIsOutOfScope = function currentPageIsOutOfScope() {
750
+ var scopeURL = new URL(_this3._registerOptions.scope || _this3._scriptURL, document.baseURI);
751
+ var scopeURLBasePath = new URL('./', scopeURL.href).pathname;
752
+ return !location.pathname.startsWith(scopeURLBasePath);
753
+ };
686
754
 
687
- if (_this2._sw) {
688
- _this2._swDeferred.resolve(_this2._sw);
689
- }
690
-
691
- {
692
- logger.log('Successfully registered service worker.', _this2._scriptURL);
693
-
694
- if (navigator.serviceWorker.controller) {
695
- if (_this2._compatibleControllingSW) {
696
- logger.debug('A service worker with the same script URL ' + 'is already controlling this page.');
697
- } else {
698
- logger.debug('A service worker with a different script URL is ' + 'currently controlling the page. The browser is now fetching ' + 'the new script now...');
755
+ if (currentPageIsOutOfScope()) {
756
+ logger.warn('The current page is not in scope for the registered ' + 'service worker. Was this a mistake?');
699
757
  }
700
758
  }
701
759
 
702
- var currentPageIsOutOfScope = function currentPageIsOutOfScope() {
703
- var scopeURL = new URL(_this2._registerOptions.scope || _this2._scriptURL, document.baseURI);
704
- var scopeURLBasePath = new URL('./', scopeURL.href).pathname;
705
- return !location.pathname.startsWith(scopeURLBasePath);
706
- };
760
+ _this3._registration.addEventListener('updatefound', _this3._onUpdateFound);
707
761
 
708
- if (currentPageIsOutOfScope()) {
709
- logger.warn('The current page is not in scope for the registered ' + 'service worker. Was this a mistake?');
710
- }
711
- }
762
+ navigator.serviceWorker.addEventListener('controllerchange', _this3._onControllerChange, {
763
+ once: true
764
+ });
765
+ return _this3._registration;
766
+ });
767
+ });
768
+ } catch (e) {
769
+ return Promise.reject(e);
770
+ }
771
+ }
772
+ /**
773
+ * Checks for updates of the registered service worker.
774
+ */
775
+ ;
712
776
 
713
- _this2._registration.addEventListener('updatefound', _this2._onUpdateFound);
777
+ _proto.update = function update() {
778
+ try {
779
+ var _this5 = this;
714
780
 
715
- navigator.serviceWorker.addEventListener('controllerchange', _this2._onControllerChange, {
716
- once: true
717
- }); // Add message listeners.
781
+ if (!_this5._registration) {
782
+ if ("dev" !== 'production') {
783
+ logger.error('Cannot update a Workbox instance without ' + 'being registered. Register the Workbox instance first.');
784
+ }
718
785
 
719
- if ('BroadcastChannel' in self) {
720
- _this2._broadcastChannel = new BroadcastChannel('workbox');
786
+ return;
787
+ } // Try to update registration
721
788
 
722
- _this2._broadcastChannel.addEventListener('message', _this2._onMessage);
723
- }
724
789
 
725
- navigator.serviceWorker.addEventListener('message', _this2._onMessage);
726
- return _this2._registration;
727
- });
728
- });
729
- });
790
+ return _awaitIgnored(_this5._registration.update());
791
+ } catch (e) {
792
+ return Promise.reject(e);
793
+ }
794
+ }
730
795
  /**
731
796
  * Resolves to the service worker registered by this instance as soon as it
732
797
  * is active. If a service worker was already controlling at registration
@@ -736,6 +801,7 @@ function (_WorkboxEventTarget) {
736
801
  *
737
802
  * @return {Promise<ServiceWorker>}
738
803
  */
804
+ ;
739
805
 
740
806
  /**
741
807
  * Resolves with a reference to a service worker that matches the script URL
@@ -752,13 +818,17 @@ function (_WorkboxEventTarget) {
752
818
  *
753
819
  * @return {Promise<ServiceWorker>}
754
820
  */
755
- _proto.getSW = _async(function () {
756
- var _this3 = this;
821
+ _proto.getSW = function getSW() {
822
+ try {
823
+ var _this7 = this;
757
824
 
758
- // If `this._sw` is set, resolve with that as we want `getSW()` to
759
- // return the correct (new) service worker if an update is found.
760
- return _this3._sw !== undefined ? _this3._sw : _this3._swDeferred.promise;
761
- });
825
+ // If `this._sw` is set, resolve with that as we want `getSW()` to
826
+ // return the correct (new) service worker if an update is found.
827
+ return _this7._sw !== undefined ? _this7._sw : _this7._swDeferred.promise;
828
+ } catch (e) {
829
+ return Promise.reject(e);
830
+ }
831
+ }
762
832
  /**
763
833
  * Sends the passed data object to the service worker registered by this
764
834
  * instance (via [`getSW()`]{@link module:workbox-window.Workbox#getSW}) and resolves
@@ -772,21 +842,27 @@ function (_WorkboxEventTarget) {
772
842
  * @param {Object} data An object to send to the service worker
773
843
  * @return {Promise<Object>}
774
844
  */
845
+ ;
775
846
 
776
- _proto.messageSW = _async(function (data) {
777
- var _this4 = this;
847
+ _proto.messageSW = function messageSW$1(data) {
848
+ try {
849
+ var _this9 = this;
778
850
 
779
- return _await(_this4.getSW(), function (sw) {
780
- return messageSW(sw, data);
781
- });
782
- });
851
+ return _await(_this9.getSW(), function (sw) {
852
+ return messageSW(sw, data);
853
+ });
854
+ } catch (e) {
855
+ return Promise.reject(e);
856
+ }
857
+ }
783
858
  /**
784
859
  * Checks for a service worker already controlling the page and returns
785
- * it if its script URL matchs.
860
+ * it if its script URL matches.
786
861
  *
787
862
  * @private
788
863
  * @return {ServiceWorker|undefined}
789
864
  */
865
+ ;
790
866
 
791
867
  _proto._getControllingSWIfCompatible = function _getControllingSWIfCompatible() {
792
868
  var controller = navigator.serviceWorker.controller;
@@ -796,47 +872,38 @@ function (_WorkboxEventTarget) {
796
872
  } else {
797
873
  return undefined;
798
874
  }
799
- };
875
+ }
800
876
  /**
801
877
  * Registers a service worker for this instances script URL and register
802
878
  * options and tracks the time registration was complete.
803
879
  *
804
880
  * @private
805
881
  */
882
+ ;
806
883
 
807
-
808
- _proto._registerScript = _async(function () {
809
- var _this5 = this;
810
-
811
- return _catch(function () {
812
- return _await(navigator.serviceWorker.register(_this5._scriptURL, _this5._registerOptions), function (reg) {
813
- // Keep track of when registration happened, so it can be used in the
814
- // `this._onUpdateFound` heuristic. Also use the presence of this
815
- // property as a way to see if `.register()` has been called.
816
- _this5._registrationTime = performance.now();
817
- return reg;
884
+ _proto._registerScript = function _registerScript() {
885
+ try {
886
+ var _this11 = this;
887
+
888
+ return _catch(function () {
889
+ return _await(navigator.serviceWorker.register(_this11._scriptURL, _this11._registerOptions), function (reg) {
890
+ // Keep track of when registration happened, so it can be used in the
891
+ // `this._onUpdateFound` heuristic. Also use the presence of this
892
+ // property as a way to see if `.register()` has been called.
893
+ _this11._registrationTime = performance.now();
894
+ return reg;
895
+ });
896
+ }, function (error) {
897
+ if ("dev" !== 'production') {
898
+ logger.error(error);
899
+ } // Re-throw the error.
900
+
901
+
902
+ throw error;
818
903
  });
819
- }, function (error) {
820
- {
821
- logger.error(error);
822
- } // Re-throw the error.
823
-
824
-
825
- throw error;
826
- });
827
- });
828
- /**
829
- * Sends a message to the passed service worker that the window is ready.
830
- *
831
- * @param {ServiceWorker} sw
832
- * @private
833
- */
834
-
835
- _proto._reportWindowReady = function _reportWindowReady(sw) {
836
- messageSW(sw, {
837
- type: 'WINDOW_READY',
838
- meta: 'workbox-window'
839
- });
904
+ } catch (e) {
905
+ return Promise.reject(e);
906
+ }
840
907
  };
841
908
 
842
909
  _createClass(Workbox, [{
@@ -865,7 +932,194 @@ function (_WorkboxEventTarget) {
865
932
  }]);
866
933
 
867
934
  return Workbox;
868
- }(WorkboxEventTarget); // The jsdoc comments below outline the events this instance may dispatch:
935
+ }(WorkboxEventTarget);
936
+
937
+ function _awaitIgnored(value, direct) {
938
+ if (!direct) {
939
+ return value && value.then ? value.then(_empty) : Promise.resolve();
940
+ }
941
+ } // The jsdoc comments below outline the events this instance may dispatch:
942
+ // -----------------------------------------------------------------------
943
+
944
+ /**
945
+ * The `message` event is dispatched any time a `postMessage` is received.
946
+ *
947
+ * @event module:workbox-window.Workbox#message
948
+ * @type {WorkboxEvent}
949
+ * @property {*} data The `data` property from the original `message` event.
950
+ * @property {Event} originalEvent The original [`message`]{@link https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent}
951
+ * event.
952
+ * @property {string} type `message`.
953
+ * @property {Workbox} target The `Workbox` instance.
954
+ */
955
+
956
+ /**
957
+ * The `installed` event is dispatched if the state of a
958
+ * [`Workbox`]{@link module:workbox-window.Workbox} instance's
959
+ * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}
960
+ * changes to `installed`.
961
+ *
962
+ * Then can happen either the very first time a service worker is installed,
963
+ * or after an update to the current service worker is found. In the case
964
+ * of an update being found, the event's `isUpdate` property will be `true`.
965
+ *
966
+ * @event module:workbox-window.Workbox#installed
967
+ * @type {WorkboxEvent}
968
+ * @property {ServiceWorker} sw The service worker instance.
969
+ * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
970
+ * event.
971
+ * @property {boolean|undefined} isUpdate True if a service worker was already
972
+ * controlling when this `Workbox` instance called `register()`.
973
+ * @property {string} type `installed`.
974
+ * @property {Workbox} target The `Workbox` instance.
975
+ */
976
+
977
+ /**
978
+ * The `waiting` event is dispatched if the state of a
979
+ * [`Workbox`]{@link module:workbox-window.Workbox} instance's
980
+ * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}
981
+ * changes to `installed` and then doesn't immediately change to `activating`.
982
+ * It may also be dispatched if a service worker with the same
983
+ * [`scriptURL`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/scriptURL}
984
+ * was already waiting when the [`register()`]{@link module:workbox-window.Workbox#register}
985
+ * method was called.
986
+ *
987
+ * @event module:workbox-window.Workbox#waiting
988
+ * @type {WorkboxEvent}
989
+ * @property {ServiceWorker} sw The service worker instance.
990
+ * @property {Event|undefined} originalEvent The original
991
+ * [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
992
+ * event, or `undefined` in the case where the service worker was waiting
993
+ * to before `.register()` was called.
994
+ * @property {boolean|undefined} isUpdate True if a service worker was already
995
+ * controlling when this `Workbox` instance called `register()`.
996
+ * @property {boolean|undefined} wasWaitingBeforeRegister True if a service worker with
997
+ * a matching `scriptURL` was already waiting when this `Workbox`
998
+ * instance called `register()`.
999
+ * @property {string} type `waiting`.
1000
+ * @property {Workbox} target The `Workbox` instance.
1001
+ */
1002
+
1003
+ /**
1004
+ * The `controlling` event is dispatched if a
1005
+ * [`controllerchange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/oncontrollerchange}
1006
+ * fires on the service worker [container]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer}
1007
+ * and the [`scriptURL`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/scriptURL}
1008
+ * of the new [controller]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/controller}
1009
+ * matches the `scriptURL` of the `Workbox` instance's
1010
+ * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}.
1011
+ *
1012
+ * @event module:workbox-window.Workbox#controlling
1013
+ * @type {WorkboxEvent}
1014
+ * @property {ServiceWorker} sw The service worker instance.
1015
+ * @property {Event} originalEvent The original [`controllerchange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/oncontrollerchange}
1016
+ * event.
1017
+ * @property {boolean|undefined} isUpdate True if a service worker was already
1018
+ * controlling when this service worker was registered.
1019
+ * @property {string} type `controlling`.
1020
+ * @property {Workbox} target The `Workbox` instance.
1021
+ */
1022
+
1023
+ /**
1024
+ * The `activated` event is dispatched if the state of a
1025
+ * [`Workbox`]{@link module:workbox-window.Workbox} instance's
1026
+ * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}
1027
+ * changes to `activated`.
1028
+ *
1029
+ * @event module:workbox-window.Workbox#activated
1030
+ * @type {WorkboxEvent}
1031
+ * @property {ServiceWorker} sw The service worker instance.
1032
+ * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
1033
+ * event.
1034
+ * @property {boolean|undefined} isUpdate True if a service worker was already
1035
+ * controlling when this `Workbox` instance called `register()`.
1036
+ * @property {string} type `activated`.
1037
+ * @property {Workbox} target The `Workbox` instance.
1038
+ */
1039
+
1040
+ /**
1041
+ * The `redundant` event is dispatched if the state of a
1042
+ * [`Workbox`]{@link module:workbox-window.Workbox} instance's
1043
+ * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}
1044
+ * changes to `redundant`.
1045
+ *
1046
+ * @event module:workbox-window.Workbox#redundant
1047
+ * @type {WorkboxEvent}
1048
+ * @property {ServiceWorker} sw The service worker instance.
1049
+ * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
1050
+ * event.
1051
+ * @property {boolean|undefined} isUpdate True if a service worker was already
1052
+ * controlling when this `Workbox` instance called `register()`.
1053
+ * @property {string} type `redundant`.
1054
+ * @property {Workbox} target The `Workbox` instance.
1055
+ */
1056
+
1057
+ /**
1058
+ * The `externalinstalled` event is dispatched if the state of an
1059
+ * [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-window#when_an_unexpected_version_of_the_service_worker_is_found}
1060
+ * changes to `installed`.
1061
+ *
1062
+ * @event module:workbox-window.Workbox#externalinstalled
1063
+ * @type {WorkboxEvent}
1064
+ * @property {ServiceWorker} sw The service worker instance.
1065
+ * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
1066
+ * event.
1067
+ * @property {string} type `externalinstalled`.
1068
+ * @property {Workbox} target The `Workbox` instance.
1069
+ */
1070
+
1071
+ /**
1072
+ * The `externalwaiting` event is dispatched if the state of an
1073
+ * [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-window#when_an_unexpected_version_of_the_service_worker_is_found}
1074
+ * changes to `waiting`.
1075
+ *
1076
+ * @event module:workbox-window.Workbox#externalwaiting
1077
+ * @type {WorkboxEvent}
1078
+ * @property {ServiceWorker} sw The service worker instance.
1079
+ * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
1080
+ * event.
1081
+ * @property {string} type `externalwaiting`.
1082
+ * @property {Workbox} target The `Workbox` instance.
1083
+ */
1084
+
1085
+ /**
1086
+ * The `externalactivated` event is dispatched if the state of an
1087
+ * [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-window#when_an_unexpected_version_of_the_service_worker_is_found}
1088
+ * changes to `activated`.
1089
+ *
1090
+ * @event module:workbox-window.Workbox#externalactivated
1091
+ * @type {WorkboxEvent}
1092
+ * @property {ServiceWorker} sw The service worker instance.
1093
+ * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
1094
+ * event.
1095
+ * @property {string} type `externalactivated`.
1096
+ * @property {Workbox} target The `Workbox` instance.
1097
+ */
1098
+
1099
+
1100
+ function _invoke(body, then) {
1101
+ var result = body();
1102
+
1103
+ if (result && result.then) {
1104
+ return result.then(then);
1105
+ }
1106
+
1107
+ return then(result);
1108
+ }
1109
+
1110
+ function _catch(body, recover) {
1111
+ try {
1112
+ var result = body();
1113
+ } catch (e) {
1114
+ return recover(e);
1115
+ }
1116
+
1117
+ if (result && result.then) {
1118
+ return result.then(void 0, recover);
1119
+ }
1120
+
1121
+ return result;
1122
+ }
869
1123
 
870
1124
  export { Workbox, messageSW };
871
1125
  //# sourceMappingURL=workbox-window.dev.es5.mjs.map