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.
- checksums.yaml +4 -4
- data/lib/jekyll-pwa-workbox.rb +4 -4
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-background-sync.dev.js +68 -69
- data/lib/vendor/workbox-v5.1.4/workbox-background-sync.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-background-sync.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-background-sync.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-broadcast-update.dev.js +288 -0
- data/lib/vendor/workbox-v5.1.4/workbox-broadcast-update.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-broadcast-update.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-broadcast-update.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-cacheable-response.dev.js +6 -7
- data/lib/vendor/workbox-v5.1.4/workbox-cacheable-response.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-cacheable-response.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-cacheable-response.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-core.dev.js +490 -275
- data/lib/vendor/workbox-v5.1.4/workbox-core.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-core.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-core.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-expiration.dev.js +14 -17
- data/lib/vendor/workbox-v5.1.4/workbox-expiration.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-expiration.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-expiration.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-navigation-preload.dev.js +4 -5
- data/lib/vendor/workbox-v5.1.4/workbox-navigation-preload.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-navigation-preload.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-navigation-preload.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-offline-ga.dev.js +13 -14
- data/lib/vendor/workbox-v5.1.4/workbox-offline-ga.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-offline-ga.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-offline-ga.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-precaching.dev.js +313 -97
- data/lib/vendor/workbox-v5.1.4/workbox-precaching.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-precaching.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-precaching.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-range-requests.dev.js +8 -9
- data/lib/vendor/workbox-v5.1.4/workbox-range-requests.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-range-requests.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-range-requests.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-routing.dev.js +83 -186
- data/lib/vendor/workbox-v5.1.4/workbox-routing.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-routing.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-routing.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-strategies.dev.js +30 -234
- data/lib/vendor/workbox-v5.1.4/workbox-strategies.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-strategies.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-strategies.prod.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-streams.dev.js +16 -31
- data/lib/vendor/workbox-v5.1.4/workbox-streams.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-streams.prod.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-streams.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-sw.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-sw.js.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-window.dev.es5.mjs +481 -227
- data/lib/vendor/workbox-v5.1.4/workbox-window.dev.es5.mjs.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-window.dev.mjs +246 -46
- data/lib/vendor/workbox-v5.1.4/workbox-window.dev.mjs.map +1 -0
- data/lib/vendor/{workbox-v5.0.0.alpha1 → workbox-v5.1.4}/workbox-window.dev.umd.js +483 -229
- data/lib/vendor/workbox-v5.1.4/workbox-window.dev.umd.js.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-window.prod.es5.mjs +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-window.prod.es5.mjs.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-window.prod.mjs +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-window.prod.mjs.map +1 -0
- data/lib/vendor/workbox-v5.1.4/workbox-window.prod.umd.js +2 -0
- data/lib/vendor/workbox-v5.1.4/workbox-window.prod.umd.js.map +1 -0
- metadata +69 -69
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.dev.js +0 -486
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.dev.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.prod.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.prod.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-sw.js +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-sw.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.es5.mjs.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.mjs.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.umd.js.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.es5.mjs +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.es5.mjs.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.mjs +0 -2
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.mjs.map +0 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.umd.js +0 -2
- 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.
|
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
|
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
|
45
|
+
* @param {Array<Promise<module:workbox-streams.StreamSource>>} sourcePromises
|
47
46
|
* @return {Object<{done: Promise, stream: ReadableStream}>}
|
48
47
|
*
|
49
|
-
* @memberof workbox
|
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
|
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
|
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
|
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
|
220
|
+
* @memberof module:workbox-streams
|
222
221
|
*/
|
223
222
|
|
224
223
|
function isSupported() {
|
225
|
-
|
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
|
257
|
-
* but that instead return a {@link workbox
|
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
|
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.
|
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
|
-
|
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.
|
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 =
|
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 <
|
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)
|
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,
|
221
|
-
var
|
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
|
-
|
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
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
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 (
|
303
|
-
|
362
|
+
if (!value || !value.then) {
|
363
|
+
value = Promise.resolve(value);
|
304
364
|
}
|
305
365
|
|
306
|
-
return
|
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
|
-
|
377
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
629
|
-
|
630
|
-
|
631
|
-
return
|
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
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
//
|
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
|
-
|
732
|
+
if (_this3._sw) {
|
733
|
+
_this3._swDeferred.resolve(_this3._sw);
|
667
734
|
|
668
|
-
|
669
|
-
|
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
|
-
|
675
|
-
|
676
|
-
sw: waitingSW,
|
677
|
-
wasWaitingBeforeRegister: true
|
678
|
-
}));
|
738
|
+
if ("dev" !== 'production') {
|
739
|
+
logger.log('Successfully registered service worker.', _this3._scriptURL);
|
679
740
|
|
680
|
-
{
|
681
|
-
|
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
|
-
|
688
|
-
|
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
|
-
|
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
|
-
|
709
|
-
|
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
|
-
|
777
|
+
_proto.update = function update() {
|
778
|
+
try {
|
779
|
+
var _this5 = this;
|
714
780
|
|
715
|
-
|
716
|
-
|
717
|
-
|
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
|
-
|
720
|
-
|
786
|
+
return;
|
787
|
+
} // Try to update registration
|
721
788
|
|
722
|
-
_this2._broadcastChannel.addEventListener('message', _this2._onMessage);
|
723
|
-
}
|
724
789
|
|
725
|
-
|
726
|
-
|
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 =
|
756
|
-
|
821
|
+
_proto.getSW = function getSW() {
|
822
|
+
try {
|
823
|
+
var _this7 = this;
|
757
824
|
|
758
|
-
|
759
|
-
|
760
|
-
|
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 =
|
777
|
-
|
847
|
+
_proto.messageSW = function messageSW$1(data) {
|
848
|
+
try {
|
849
|
+
var _this9 = this;
|
778
850
|
|
779
|
-
|
780
|
-
|
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
|
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
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
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
|
-
}
|
820
|
-
|
821
|
-
|
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);
|
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
|