jekyll-pwa-workbox 0.0.6 → 0.0.7.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jekyll-pwa-workbox.rb +1 -1
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.dev.js +819 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-background-sync.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.dev.js +486 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-broadcast-update.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.dev.js +192 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-cacheable-response.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.dev.js +1643 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-core.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.dev.js +652 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-expiration.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.dev.js +103 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-navigation-preload.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.dev.js +236 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-offline-ga.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.dev.js +994 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-precaching.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.dev.js +263 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-range-requests.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.dev.js +1026 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-routing.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.dev.js +1127 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-strategies.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.dev.js +333 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.dev.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.prod.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-streams.prod.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-sw.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-sw.js.map +1 -0
- data/lib/vendor/{workbox-v4.3.1 → workbox-v5.0.0.alpha1}/workbox-window.dev.es5.mjs +248 -262
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.es5.mjs.map +1 -0
- data/lib/vendor/{workbox-v4.3.1 → workbox-v5.0.0.alpha1}/workbox-window.dev.mjs +234 -242
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.mjs.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.umd.js +882 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.dev.umd.js.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.es5.mjs +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.es5.mjs.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.mjs +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.mjs.map +1 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.umd.js +2 -0
- data/lib/vendor/workbox-v5.0.0.alpha1/workbox-window.prod.umd.js.map +1 -0
- metadata +75 -80
- data/lib/vendor/workbox-v4.3.1/workbox-background-sync.dev.js +0 -822
- data/lib/vendor/workbox-v4.3.1/workbox-background-sync.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-background-sync.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-background-sync.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-broadcast-update.dev.js +0 -496
- data/lib/vendor/workbox-v4.3.1/workbox-broadcast-update.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-broadcast-update.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-broadcast-update.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-cacheable-response.dev.js +0 -200
- data/lib/vendor/workbox-v4.3.1/workbox-cacheable-response.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-cacheable-response.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-cacheable-response.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-core.dev.js +0 -1712
- data/lib/vendor/workbox-v4.3.1/workbox-core.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-core.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-core.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-expiration.dev.js +0 -652
- data/lib/vendor/workbox-v4.3.1/workbox-expiration.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-expiration.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-expiration.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-navigation-preload.dev.js +0 -110
- data/lib/vendor/workbox-v4.3.1/workbox-navigation-preload.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-navigation-preload.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-navigation-preload.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-offline-ga.dev.js +0 -243
- data/lib/vendor/workbox-v4.3.1/workbox-offline-ga.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-offline-ga.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-offline-ga.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-precaching.dev.js +0 -989
- data/lib/vendor/workbox-v4.3.1/workbox-precaching.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-precaching.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-precaching.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-range-requests.dev.js +0 -268
- data/lib/vendor/workbox-v4.3.1/workbox-range-requests.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-range-requests.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-range-requests.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-routing.dev.js +0 -1020
- data/lib/vendor/workbox-v4.3.1/workbox-routing.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-routing.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-routing.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-strategies.dev.js +0 -1138
- data/lib/vendor/workbox-v4.3.1/workbox-strategies.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-strategies.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-strategies.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-streams.dev.js +0 -337
- data/lib/vendor/workbox-v4.3.1/workbox-streams.dev.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-streams.prod.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-streams.prod.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-sw.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-sw.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-window.dev.es5.mjs.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-window.dev.mjs.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-window.dev.umd.js +0 -896
- data/lib/vendor/workbox-v4.3.1/workbox-window.dev.umd.js.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-window.prod.es5.mjs +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-window.prod.es5.mjs.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-window.prod.mjs +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-window.prod.mjs.map +0 -1
- data/lib/vendor/workbox-v4.3.1/workbox-window.prod.umd.js +0 -2
- data/lib/vendor/workbox-v4.3.1/workbox-window.prod.umd.js.map +0 -1
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"workbox-strategies.dev.js","sources":["../_version.mjs","../utils/messages.mjs","../CacheFirst.mjs","../CacheOnly.mjs","../plugins/cacheOkAndOpaquePlugin.mjs","../NetworkFirst.mjs","../NetworkOnly.mjs","../StaleWhileRevalidate.mjs","../index.mjs"],"sourcesContent":["try{self['workbox:strategies:4.3.1']&&_()}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 {logger} from 'workbox-core/_private/logger.mjs';\nimport '../_version.mjs';\n\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(url, location);\n if (urlObj.origin === location.origin) {\n return urlObj.pathname;\n }\n return urlObj.href;\n};\n\nexport const messages = {\n strategyStart: (strategyName, request) => `Using ${strategyName} to ` +\n `respond to '${getFriendlyURL(request.url)}'`,\n printFinalResponse: (response) => {\n if (response) {\n logger.groupCollapsed(`View the final response here.`);\n logger.log(response);\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*/\n\nimport {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {cacheWrapper} from 'workbox-core/_private/cacheWrapper.mjs';\nimport {fetchWrapper} from 'workbox-core/_private/fetchWrapper.mjs';\nimport {getFriendlyURL} from 'workbox-core/_private/getFriendlyURL.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport './_version.mjs';\n\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 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 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 || null;\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n const logs = [];\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\n let response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n\n let error;\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(\n `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 } catch (err) {\n error = err;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n } else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(\n `Found a cached response in the '${this._cacheName}' cache.`);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n messages.strategyStart('CacheFirst', request));\n for (let log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url, error});\n }\n return response;\n }\n\n /**\n * Handles the network and cache part of CacheFirst.\n *\n * @param {Request} request\n * @param {FetchEvent} [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\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\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\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 return response;\n }\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*/\n\nimport {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {cacheWrapper} from 'workbox-core/_private/cacheWrapper.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport './_version.mjs';\n\n\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 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 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 || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\n const response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n 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 } else {\n logger.log(`No response found in the '${this._cacheName}' cache.`);\n }\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url});\n }\n return response;\n }\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*/\n\nimport '../_version.mjs';\n\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: ({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*/\n\nimport {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {cacheWrapper} from 'workbox-core/_private/cacheWrapper.mjs';\nimport {fetchWrapper} from 'workbox-core/_private/fetchWrapper.mjs';\nimport {getFriendlyURL} from 'workbox-core/_private/getFriendlyURL.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport {cacheOkAndOpaquePlugin} from './plugins/cacheOkAndOpaquePlugin.mjs';\nimport './_version.mjs';\n\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 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 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\n if (options.plugins) {\n let isUsingCacheWillUpdate =\n options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ?\n options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n } else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n\n this._networkTimeoutSeconds = options.networkTimeoutSeconds;\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\n this._fetchOptions = options.fetchOptions || null;\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n const logs = [];\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\n const promises = [];\n let timeoutId;\n\n if (this._networkTimeoutSeconds) {\n const {id, promise} = this._getTimeoutPromise({request, event, logs});\n timeoutId = id;\n promises.push(promise);\n }\n\n const networkPromise =\n this._getNetworkPromise({timeoutId, request, event, logs});\n promises.push(networkPromise);\n\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\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n messages.strategyStart('NetworkFirst', request));\n for (let log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url});\n }\n return response;\n }\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\n resolve(await this._respondFromCache({request, event}));\n };\n\n timeoutId = setTimeout(\n onNetworkTimeout,\n this._networkTimeoutSeconds * 1000,\n );\n });\n\n return {\n promise: timeoutPromise,\n id: timeoutId,\n };\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 } catch (err) {\n error = err;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n } else {\n logs.push(`Unable to get a response from the network. Will respond ` +\n `with a cached response.`);\n }\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 } else {\n logs.push(`No response found in the '${this._cacheName}' cache.`);\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\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 } 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\n return response;\n }\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}\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*/\n\nimport {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {fetchWrapper} from 'workbox-core/_private/fetchWrapper.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport './_version.mjs';\n\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 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 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._cacheName = cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n this._fetchOptions = options.fetchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\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 } catch (err) {\n error = err;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n messages.strategyStart('NetworkOnly', request));\n if (response) {\n logger.log(`Got response from network.`);\n } else {\n logger.log(`Unable to get a response from the network.`);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url, error});\n }\n return response;\n }\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*/\n\nimport {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {cacheWrapper} from 'workbox-core/_private/cacheWrapper.mjs';\nimport {fetchWrapper} from 'workbox-core/_private/fetchWrapper.mjs';\nimport {getFriendlyURL} from 'workbox-core/_private/getFriendlyURL.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport {cacheOkAndOpaquePlugin} from './plugins/cacheOkAndOpaquePlugin.mjs';\nimport './_version.mjs';\n\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 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 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 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\n if (options.plugins) {\n let isUsingCacheWillUpdate =\n options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ?\n options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n } else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n\n this._fetchOptions = options.fetchOptions || null;\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n const logs = [];\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\n const fetchAndCachePromise = this._getFromNetwork({request, event});\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(`Found a cached response in the '${this._cacheName}'` +\n ` cache. Will update with the network response in the background.`);\n }\n\n if (event) {\n try {\n event.waitUntil(fetchAndCachePromise);\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 } 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 } catch (err) {\n error = err;\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n messages.strategyStart('StaleWhileRevalidate', request));\n for (let log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url, error});\n }\n return response;\n }\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\n const cachePutPromise = cacheWrapper.put({\n cacheName: this._cacheName,\n request,\n response: response.clone(),\n event,\n plugins: this._plugins,\n });\n\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\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 return response;\n }\n}\n\nexport {StaleWhileRevalidate};\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 {logger} from 'workbox-core/_private/logger.mjs';\nimport {CacheFirst} from './CacheFirst.mjs';\nimport {CacheOnly} from './CacheOnly.mjs';\nimport {NetworkFirst} from './NetworkFirst.mjs';\nimport {NetworkOnly} from './NetworkOnly.mjs';\nimport {StaleWhileRevalidate} from './StaleWhileRevalidate.mjs';\nimport './_version.mjs';\n\n\nconst mapping = {\n cacheFirst: CacheFirst,\n cacheOnly: CacheOnly,\n networkFirst: NetworkFirst,\n networkOnly: NetworkOnly,\n staleWhileRevalidate: StaleWhileRevalidate,\n};\n\nconst deprecate = (strategy) => {\n const StrategyCtr = mapping[strategy];\n\n return (options) => {\n if (process.env.NODE_ENV !== 'production') {\n const strategyCtrName = strategy[0].toUpperCase() + strategy.slice(1);\n logger.warn(`The 'workbox.strategies.${strategy}()' function has been ` +\n `deprecated and will be removed in a future version of Workbox.\\n` +\n `Please use 'new workbox.strategies.${strategyCtrName}()' instead.`);\n }\n return new StrategyCtr(options);\n };\n};\n\n/**\n * @function workbox.strategies.cacheFirst\n * @param {Object} options See the {@link workbox.strategies.CacheFirst}\n * constructor for more info.\n * @deprecated since v4.0.0\n */\nconst cacheFirst = deprecate('cacheFirst');\n\n/**\n * @function workbox.strategies.cacheOnly\n * @param {Object} options See the {@link workbox.strategies.CacheOnly}\n * constructor for more info.\n * @deprecated since v4.0.0\n */\nconst cacheOnly = deprecate('cacheOnly');\n\n/**\n * @function workbox.strategies.networkFirst\n * @param {Object} options See the {@link workbox.strategies.NetworkFirst}\n * constructor for more info.\n * @deprecated since v4.0.0\n */\nconst networkFirst = deprecate('networkFirst');\n\n/**\n * @function workbox.strategies.networkOnly\n * @param {Object} options See the {@link workbox.strategies.NetworkOnly}\n * constructor for more info.\n * @deprecated since v4.0.0\n */\nconst networkOnly = deprecate('networkOnly');\n\n/**\n * @function workbox.strategies.staleWhileRevalidate\n * @param {Object} options See the\n * {@link workbox.strategies.StaleWhileRevalidate} constructor for more info.\n * @deprecated since v4.0.0\n */\nconst staleWhileRevalidate = deprecate('staleWhileRevalidate');\n\n/**\n * There are common caching strategies that most service workers will need\n * and use. This module provides simple implementations of these strategies.\n *\n * @namespace workbox.strategies\n */\n\nexport {\n CacheFirst,\n CacheOnly,\n NetworkFirst,\n NetworkOnly,\n StaleWhileRevalidate,\n\n // Deprecated...\n cacheFirst,\n cacheOnly,\n networkFirst,\n networkOnly,\n staleWhileRevalidate,\n};\n\n"],"names":["self","_","e","getFriendlyURL","url","urlObj","URL","location","origin","pathname","href","messages","strategyStart","strategyName","request","printFinalResponse","response","logger","groupCollapsed","log","groupEnd","CacheFirst","constructor","options","_cacheName","cacheNames","getRuntimeName","cacheName","_plugins","plugins","_fetchOptions","fetchOptions","_matchOptions","matchOptions","handle","event","makeRequest","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","mapping","cacheFirst","cacheOnly","networkFirst","networkOnly","staleWhileRevalidate","deprecate","strategy","StrategyCtr","strategyCtrName","toUpperCase","slice"],"mappings":"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"}
|
@@ -1,2 +0,0 @@
|
|
1
|
-
this.workbox=this.workbox||{},this.workbox.strategies=function(e,t,s,n,r){"use strict";try{self["workbox:strategies:4.3.1"]&&_()}catch(e){}class i{constructor(e={}){this.t=t.cacheNames.getRuntimeName(e.cacheName),this.s=e.plugins||[],this.i=e.fetchOptions||null,this.h=e.matchOptions||null}async handle({event:e,request:t}){return this.makeRequest({event:e,request:t||e.request})}async makeRequest({event:e,request:t}){"string"==typeof t&&(t=new Request(t));let n,i=await s.cacheWrapper.match({cacheName:this.t,request:t,event:e,matchOptions:this.h,plugins:this.s});if(!i)try{i=await this.u(t,e)}catch(e){n=e}if(!i)throw new r.WorkboxError("no-response",{url:t.url,error:n});return i}async u(e,t){const r=await n.fetchWrapper.fetch({request:e,event:t,fetchOptions:this.i,plugins:this.s}),i=r.clone(),h=s.cacheWrapper.put({cacheName:this.t,request:e,response:i,event:t,plugins:this.s});if(t)try{t.waitUntil(h)}catch(e){}return r}}class h{constructor(e={}){this.t=t.cacheNames.getRuntimeName(e.cacheName),this.s=e.plugins||[],this.h=e.matchOptions||null}async handle({event:e,request:t}){return this.makeRequest({event:e,request:t||e.request})}async makeRequest({event:e,request:t}){"string"==typeof t&&(t=new Request(t));const n=await s.cacheWrapper.match({cacheName:this.t,request:t,event:e,matchOptions:this.h,plugins:this.s});if(!n)throw new r.WorkboxError("no-response",{url:t.url});return n}}const u={cacheWillUpdate:({response:e})=>200===e.status||0===e.status?e:null};class a{constructor(e={}){if(this.t=t.cacheNames.getRuntimeName(e.cacheName),e.plugins){let t=e.plugins.some(e=>!!e.cacheWillUpdate);this.s=t?e.plugins:[u,...e.plugins]}else this.s=[u];this.o=e.networkTimeoutSeconds,this.i=e.fetchOptions||null,this.h=e.matchOptions||null}async handle({event:e,request:t}){return this.makeRequest({event:e,request:t||e.request})}async makeRequest({event:e,request:t}){const s=[];"string"==typeof t&&(t=new Request(t));const n=[];let i;if(this.o){const{id:r,promise:h}=this.l({request:t,event:e,logs:s});i=r,n.push(h)}const h=this.q({timeoutId:i,request:t,event:e,logs:s});n.push(h);let u=await Promise.race(n);if(u||(u=await h),!u)throw new r.WorkboxError("no-response",{url:t.url});return u}l({request:e,logs:t,event:s}){let n;return{promise:new Promise(t=>{n=setTimeout(async()=>{t(await this.p({request:e,event:s}))},1e3*this.o)}),id:n}}async q({timeoutId:e,request:t,logs:r,event:i}){let h,u;try{u=await n.fetchWrapper.fetch({request:t,event:i,fetchOptions:this.i,plugins:this.s})}catch(e){h=e}if(e&&clearTimeout(e),h||!u)u=await this.p({request:t,event:i});else{const e=u.clone(),n=s.cacheWrapper.put({cacheName:this.t,request:t,response:e,event:i,plugins:this.s});if(i)try{i.waitUntil(n)}catch(e){}}return u}p({event:e,request:t}){return s.cacheWrapper.match({cacheName:this.t,request:t,event:e,matchOptions:this.h,plugins:this.s})}}class c{constructor(e={}){this.t=t.cacheNames.getRuntimeName(e.cacheName),this.s=e.plugins||[],this.i=e.fetchOptions||null}async handle({event:e,request:t}){return this.makeRequest({event:e,request:t||e.request})}async makeRequest({event:e,request:t}){let s,i;"string"==typeof t&&(t=new Request(t));try{i=await n.fetchWrapper.fetch({request:t,event:e,fetchOptions:this.i,plugins:this.s})}catch(e){s=e}if(!i)throw new r.WorkboxError("no-response",{url:t.url,error:s});return i}}class o{constructor(e={}){if(this.t=t.cacheNames.getRuntimeName(e.cacheName),this.s=e.plugins||[],e.plugins){let t=e.plugins.some(e=>!!e.cacheWillUpdate);this.s=t?e.plugins:[u,...e.plugins]}else this.s=[u];this.i=e.fetchOptions||null,this.h=e.matchOptions||null}async handle({event:e,request:t}){return this.makeRequest({event:e,request:t||e.request})}async makeRequest({event:e,request:t}){"string"==typeof t&&(t=new Request(t));const n=this.u({request:t,event:e});let i,h=await s.cacheWrapper.match({cacheName:this.t,request:t,event:e,matchOptions:this.h,plugins:this.s});if(h){if(e)try{e.waitUntil(n)}catch(i){}}else try{h=await n}catch(e){i=e}if(!h)throw new r.WorkboxError("no-response",{url:t.url,error:i});return h}async u({request:e,event:t}){const r=await n.fetchWrapper.fetch({request:e,event:t,fetchOptions:this.i,plugins:this.s}),i=s.cacheWrapper.put({cacheName:this.t,request:e,response:r.clone(),event:t,plugins:this.s});if(t)try{t.waitUntil(i)}catch(e){}return r}}const l={cacheFirst:i,cacheOnly:h,networkFirst:a,networkOnly:c,staleWhileRevalidate:o},q=e=>{const t=l[e];return e=>new t(e)},w=q("cacheFirst"),p=q("cacheOnly"),v=q("networkFirst"),y=q("networkOnly"),m=q("staleWhileRevalidate");return e.CacheFirst=i,e.CacheOnly=h,e.NetworkFirst=a,e.NetworkOnly=c,e.StaleWhileRevalidate=o,e.cacheFirst=w,e.cacheOnly=p,e.networkFirst=v,e.networkOnly=y,e.staleWhileRevalidate=m,e}({},workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private);
|
2
|
-
//# sourceMappingURL=workbox-strategies.prod.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"workbox-strategies.prod.js","sources":["../_version.mjs","../CacheFirst.mjs","../CacheOnly.mjs","../plugins/cacheOkAndOpaquePlugin.mjs","../NetworkFirst.mjs","../NetworkOnly.mjs","../StaleWhileRevalidate.mjs","../index.mjs"],"sourcesContent":["try{self['workbox:strategies:4.3.1']&&_()}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 {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {cacheWrapper} from 'workbox-core/_private/cacheWrapper.mjs';\nimport {fetchWrapper} from 'workbox-core/_private/fetchWrapper.mjs';\nimport {getFriendlyURL} from 'workbox-core/_private/getFriendlyURL.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport './_version.mjs';\n\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 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 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 || null;\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n const logs = [];\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\n let response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n\n let error;\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(\n `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 } catch (err) {\n error = err;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n } else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(\n `Found a cached response in the '${this._cacheName}' cache.`);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n messages.strategyStart('CacheFirst', request));\n for (let log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url, error});\n }\n return response;\n }\n\n /**\n * Handles the network and cache part of CacheFirst.\n *\n * @param {Request} request\n * @param {FetchEvent} [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\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\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\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 return response;\n }\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*/\n\nimport {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {cacheWrapper} from 'workbox-core/_private/cacheWrapper.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport './_version.mjs';\n\n\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 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 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 || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\n const response = await cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins,\n });\n\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n 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 } else {\n logger.log(`No response found in the '${this._cacheName}' cache.`);\n }\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url});\n }\n return response;\n }\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*/\n\nimport '../_version.mjs';\n\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: ({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*/\n\nimport {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {cacheWrapper} from 'workbox-core/_private/cacheWrapper.mjs';\nimport {fetchWrapper} from 'workbox-core/_private/fetchWrapper.mjs';\nimport {getFriendlyURL} from 'workbox-core/_private/getFriendlyURL.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport {cacheOkAndOpaquePlugin} from './plugins/cacheOkAndOpaquePlugin.mjs';\nimport './_version.mjs';\n\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 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 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\n if (options.plugins) {\n let isUsingCacheWillUpdate =\n options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ?\n options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n } else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n\n this._networkTimeoutSeconds = options.networkTimeoutSeconds;\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\n this._fetchOptions = options.fetchOptions || null;\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n const logs = [];\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\n const promises = [];\n let timeoutId;\n\n if (this._networkTimeoutSeconds) {\n const {id, promise} = this._getTimeoutPromise({request, event, logs});\n timeoutId = id;\n promises.push(promise);\n }\n\n const networkPromise =\n this._getNetworkPromise({timeoutId, request, event, logs});\n promises.push(networkPromise);\n\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\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n messages.strategyStart('NetworkFirst', request));\n for (let log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url});\n }\n return response;\n }\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\n resolve(await this._respondFromCache({request, event}));\n };\n\n timeoutId = setTimeout(\n onNetworkTimeout,\n this._networkTimeoutSeconds * 1000,\n );\n });\n\n return {\n promise: timeoutPromise,\n id: timeoutId,\n };\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 } catch (err) {\n error = err;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n } else {\n logs.push(`Unable to get a response from the network. Will respond ` +\n `with a cached response.`);\n }\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 } else {\n logs.push(`No response found in the '${this._cacheName}' cache.`);\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\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 } 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\n return response;\n }\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}\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*/\n\nimport {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {fetchWrapper} from 'workbox-core/_private/fetchWrapper.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport './_version.mjs';\n\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 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 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._cacheName = cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n this._fetchOptions = options.fetchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\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 } catch (err) {\n error = err;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n messages.strategyStart('NetworkOnly', request));\n if (response) {\n logger.log(`Got response from network.`);\n } else {\n logger.log(`Unable to get a response from the network.`);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url, error});\n }\n return response;\n }\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*/\n\nimport {assert} from 'workbox-core/_private/assert.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {cacheWrapper} from 'workbox-core/_private/cacheWrapper.mjs';\nimport {fetchWrapper} from 'workbox-core/_private/fetchWrapper.mjs';\nimport {getFriendlyURL} from 'workbox-core/_private/getFriendlyURL.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {WorkboxError} from 'workbox-core/_private/WorkboxError.mjs';\n\nimport {messages} from './utils/messages.mjs';\nimport {cacheOkAndOpaquePlugin} from './plugins/cacheOkAndOpaquePlugin.mjs';\nimport './_version.mjs';\n\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 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 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 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\n if (options.plugins) {\n let isUsingCacheWillUpdate =\n options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ?\n options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n } else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n\n this._fetchOptions = options.fetchOptions || null;\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {Request} 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 return this.makeRequest({\n event,\n request: request || event.request,\n });\n }\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise<Response>}\n */\n async makeRequest({event, request}) {\n const logs = [];\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\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\n const fetchAndCachePromise = this._getFromNetwork({request, event});\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(`Found a cached response in the '${this._cacheName}'` +\n ` cache. Will update with the network response in the background.`);\n }\n\n if (event) {\n try {\n event.waitUntil(fetchAndCachePromise);\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 } 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 } catch (err) {\n error = err;\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(\n messages.strategyStart('StaleWhileRevalidate', request));\n for (let log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n\n if (!response) {\n throw new WorkboxError('no-response', {url: request.url, error});\n }\n return response;\n }\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\n const cachePutPromise = cacheWrapper.put({\n cacheName: this._cacheName,\n request,\n response: response.clone(),\n event,\n plugins: this._plugins,\n });\n\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\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 return response;\n }\n}\n\nexport {StaleWhileRevalidate};\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 {logger} from 'workbox-core/_private/logger.mjs';\nimport {CacheFirst} from './CacheFirst.mjs';\nimport {CacheOnly} from './CacheOnly.mjs';\nimport {NetworkFirst} from './NetworkFirst.mjs';\nimport {NetworkOnly} from './NetworkOnly.mjs';\nimport {StaleWhileRevalidate} from './StaleWhileRevalidate.mjs';\nimport './_version.mjs';\n\n\nconst mapping = {\n cacheFirst: CacheFirst,\n cacheOnly: CacheOnly,\n networkFirst: NetworkFirst,\n networkOnly: NetworkOnly,\n staleWhileRevalidate: StaleWhileRevalidate,\n};\n\nconst deprecate = (strategy) => {\n const StrategyCtr = mapping[strategy];\n\n return (options) => {\n if (process.env.NODE_ENV !== 'production') {\n const strategyCtrName = strategy[0].toUpperCase() + strategy.slice(1);\n logger.warn(`The 'workbox.strategies.${strategy}()' function has been ` +\n `deprecated and will be removed in a future version of Workbox.\\n` +\n `Please use 'new workbox.strategies.${strategyCtrName}()' instead.`);\n }\n return new StrategyCtr(options);\n };\n};\n\n/**\n * @function workbox.strategies.cacheFirst\n * @param {Object} options See the {@link workbox.strategies.CacheFirst}\n * constructor for more info.\n * @deprecated since v4.0.0\n */\nconst cacheFirst = deprecate('cacheFirst');\n\n/**\n * @function workbox.strategies.cacheOnly\n * @param {Object} options See the {@link workbox.strategies.CacheOnly}\n * constructor for more info.\n * @deprecated since v4.0.0\n */\nconst cacheOnly = deprecate('cacheOnly');\n\n/**\n * @function workbox.strategies.networkFirst\n * @param {Object} options See the {@link workbox.strategies.NetworkFirst}\n * constructor for more info.\n * @deprecated since v4.0.0\n */\nconst networkFirst = deprecate('networkFirst');\n\n/**\n * @function workbox.strategies.networkOnly\n * @param {Object} options See the {@link workbox.strategies.NetworkOnly}\n * constructor for more info.\n * @deprecated since v4.0.0\n */\nconst networkOnly = deprecate('networkOnly');\n\n/**\n * @function workbox.strategies.staleWhileRevalidate\n * @param {Object} options See the\n * {@link workbox.strategies.StaleWhileRevalidate} constructor for more info.\n * @deprecated since v4.0.0\n */\nconst staleWhileRevalidate = deprecate('staleWhileRevalidate');\n\n/**\n * There are common caching strategies that most service workers will need\n * and use. This module provides simple implementations of these strategies.\n *\n * @namespace workbox.strategies\n */\n\nexport {\n CacheFirst,\n CacheOnly,\n NetworkFirst,\n NetworkOnly,\n StaleWhileRevalidate,\n\n // Deprecated...\n cacheFirst,\n cacheOnly,\n networkFirst,\n networkOnly,\n staleWhileRevalidate,\n};\n\n"],"names":["self","_","e","CacheFirst","constructor","options","_cacheName","cacheNames","getRuntimeName","cacheName","_plugins","plugins","_fetchOptions","fetchOptions","_matchOptions","matchOptions","event","request","this","makeRequest","Request","error","response","cacheWrapper","match","_getFromNetwork","err","WorkboxError","url","fetchWrapper","fetch","responseClone","clone","cachePutPromise","put","waitUntil","CacheOnly","cacheOkAndOpaquePlugin","cacheWillUpdate","status","NetworkFirst","isUsingCacheWillUpdate","some","plugin","_networkTimeoutSeconds","networkTimeoutSeconds","logs","promises","timeoutId","id","promise","_getTimeoutPromise","push","networkPromise","_getNetworkPromise","Promise","race","resolve","setTimeout","async","_respondFromCache","clearTimeout","cachePut","NetworkOnly","StaleWhileRevalidate","fetchAndCachePromise","mapping","cacheFirst","cacheOnly","networkFirst","networkOnly","staleWhileRevalidate","deprecate","strategy","StrategyCtr"],"mappings":"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"}
|
@@ -1,337 +0,0 @@
|
|
1
|
-
this.workbox = this.workbox || {};
|
2
|
-
this.workbox.streams = (function (exports, logger_mjs, assert_mjs) {
|
3
|
-
'use strict';
|
4
|
-
|
5
|
-
try {
|
6
|
-
self['workbox:streams:4.3.1'] && _();
|
7
|
-
} catch (e) {} // eslint-disable-line
|
8
|
-
|
9
|
-
/*
|
10
|
-
Copyright 2018 Google LLC
|
11
|
-
|
12
|
-
Use of this source code is governed by an MIT-style
|
13
|
-
license that can be found in the LICENSE file or at
|
14
|
-
https://opensource.org/licenses/MIT.
|
15
|
-
*/
|
16
|
-
/**
|
17
|
-
* Takes either a Response, a ReadableStream, or a
|
18
|
-
* [BodyInit](https://fetch.spec.whatwg.org/#bodyinit) and returns the
|
19
|
-
* ReadableStreamReader object associated with it.
|
20
|
-
*
|
21
|
-
* @param {workbox.streams.StreamSource} source
|
22
|
-
* @return {ReadableStreamReader}
|
23
|
-
* @private
|
24
|
-
*/
|
25
|
-
|
26
|
-
function _getReaderFromSource(source) {
|
27
|
-
if (source.body && source.body.getReader) {
|
28
|
-
return source.body.getReader();
|
29
|
-
}
|
30
|
-
|
31
|
-
if (source.getReader) {
|
32
|
-
return source.getReader();
|
33
|
-
} // TODO: This should be possible to do by constructing a ReadableStream, but
|
34
|
-
// I can't get it to work. As a hack, construct a new Response, and use the
|
35
|
-
// reader associated with its body.
|
36
|
-
|
37
|
-
|
38
|
-
return new Response(source).body.getReader();
|
39
|
-
}
|
40
|
-
/**
|
41
|
-
* Takes multiple source Promises, each of which could resolve to a Response, a
|
42
|
-
* ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit).
|
43
|
-
*
|
44
|
-
* Returns an object exposing a ReadableStream with each individual stream's
|
45
|
-
* data returned in sequence, along with a Promise which signals when the
|
46
|
-
* stream is finished (useful for passing to a FetchEvent's waitUntil()).
|
47
|
-
*
|
48
|
-
* @param {Array<Promise<workbox.streams.StreamSource>>} sourcePromises
|
49
|
-
* @return {Object<{done: Promise, stream: ReadableStream}>}
|
50
|
-
*
|
51
|
-
* @memberof workbox.streams
|
52
|
-
*/
|
53
|
-
|
54
|
-
|
55
|
-
function concatenate(sourcePromises) {
|
56
|
-
{
|
57
|
-
assert_mjs.assert.isArray(sourcePromises, {
|
58
|
-
moduleName: 'workbox-streams',
|
59
|
-
funcName: 'concatenate',
|
60
|
-
paramName: 'sourcePromises'
|
61
|
-
});
|
62
|
-
}
|
63
|
-
|
64
|
-
const readerPromises = sourcePromises.map(sourcePromise => {
|
65
|
-
return Promise.resolve(sourcePromise).then(source => {
|
66
|
-
return _getReaderFromSource(source);
|
67
|
-
});
|
68
|
-
});
|
69
|
-
let fullyStreamedResolve;
|
70
|
-
let fullyStreamedReject;
|
71
|
-
const done = new Promise((resolve, reject) => {
|
72
|
-
fullyStreamedResolve = resolve;
|
73
|
-
fullyStreamedReject = reject;
|
74
|
-
});
|
75
|
-
let i = 0;
|
76
|
-
const logMessages = [];
|
77
|
-
const stream = new ReadableStream({
|
78
|
-
pull(controller) {
|
79
|
-
return readerPromises[i].then(reader => reader.read()).then(result => {
|
80
|
-
if (result.done) {
|
81
|
-
{
|
82
|
-
logMessages.push(['Reached the end of source:', sourcePromises[i]]);
|
83
|
-
}
|
84
|
-
|
85
|
-
i++;
|
86
|
-
|
87
|
-
if (i >= readerPromises.length) {
|
88
|
-
// Log all the messages in the group at once in a single group.
|
89
|
-
{
|
90
|
-
logger_mjs.logger.groupCollapsed(`Concatenating ${readerPromises.length} sources.`);
|
91
|
-
|
92
|
-
for (const message of logMessages) {
|
93
|
-
if (Array.isArray(message)) {
|
94
|
-
logger_mjs.logger.log(...message);
|
95
|
-
} else {
|
96
|
-
logger_mjs.logger.log(message);
|
97
|
-
}
|
98
|
-
}
|
99
|
-
|
100
|
-
logger_mjs.logger.log('Finished reading all sources.');
|
101
|
-
logger_mjs.logger.groupEnd();
|
102
|
-
}
|
103
|
-
|
104
|
-
controller.close();
|
105
|
-
fullyStreamedResolve();
|
106
|
-
return;
|
107
|
-
}
|
108
|
-
|
109
|
-
return this.pull(controller);
|
110
|
-
} else {
|
111
|
-
controller.enqueue(result.value);
|
112
|
-
}
|
113
|
-
}).catch(error => {
|
114
|
-
{
|
115
|
-
logger_mjs.logger.error('An error occurred:', error);
|
116
|
-
}
|
117
|
-
|
118
|
-
fullyStreamedReject(error);
|
119
|
-
throw error;
|
120
|
-
});
|
121
|
-
},
|
122
|
-
|
123
|
-
cancel() {
|
124
|
-
{
|
125
|
-
logger_mjs.logger.warn('The ReadableStream was cancelled.');
|
126
|
-
}
|
127
|
-
|
128
|
-
fullyStreamedResolve();
|
129
|
-
}
|
130
|
-
|
131
|
-
});
|
132
|
-
return {
|
133
|
-
done,
|
134
|
-
stream
|
135
|
-
};
|
136
|
-
}
|
137
|
-
|
138
|
-
/*
|
139
|
-
Copyright 2018 Google LLC
|
140
|
-
|
141
|
-
Use of this source code is governed by an MIT-style
|
142
|
-
license that can be found in the LICENSE file or at
|
143
|
-
https://opensource.org/licenses/MIT.
|
144
|
-
*/
|
145
|
-
/**
|
146
|
-
* This is a utility method that determines whether the current browser supports
|
147
|
-
* the features required to create streamed responses. Currently, it checks if
|
148
|
-
* [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)
|
149
|
-
* is available.
|
150
|
-
*
|
151
|
-
* @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,
|
152
|
-
* `'text/html'` will be used by default.
|
153
|
-
* @return {boolean} `true`, if the current browser meets the requirements for
|
154
|
-
* streaming responses, and `false` otherwise.
|
155
|
-
*
|
156
|
-
* @memberof workbox.streams
|
157
|
-
*/
|
158
|
-
|
159
|
-
function createHeaders(headersInit = {}) {
|
160
|
-
// See https://github.com/GoogleChrome/workbox/issues/1461
|
161
|
-
const headers = new Headers(headersInit);
|
162
|
-
|
163
|
-
if (!headers.has('content-type')) {
|
164
|
-
headers.set('content-type', 'text/html');
|
165
|
-
}
|
166
|
-
|
167
|
-
return headers;
|
168
|
-
}
|
169
|
-
|
170
|
-
/*
|
171
|
-
Copyright 2018 Google LLC
|
172
|
-
|
173
|
-
Use of this source code is governed by an MIT-style
|
174
|
-
license that can be found in the LICENSE file or at
|
175
|
-
https://opensource.org/licenses/MIT.
|
176
|
-
*/
|
177
|
-
/**
|
178
|
-
* Takes multiple source Promises, each of which could resolve to a Response, a
|
179
|
-
* ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit),
|
180
|
-
* along with a
|
181
|
-
* [HeadersInit](https://fetch.spec.whatwg.org/#typedefdef-headersinit).
|
182
|
-
*
|
183
|
-
* Returns an object exposing a Response whose body consists of each individual
|
184
|
-
* stream's data returned in sequence, along with a Promise which signals when
|
185
|
-
* the stream is finished (useful for passing to a FetchEvent's waitUntil()).
|
186
|
-
*
|
187
|
-
* @param {Array<Promise<workbox.streams.StreamSource>>} sourcePromises
|
188
|
-
* @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,
|
189
|
-
* `'text/html'` will be used by default.
|
190
|
-
* @return {Object<{done: Promise, response: Response}>}
|
191
|
-
*
|
192
|
-
* @memberof workbox.streams
|
193
|
-
*/
|
194
|
-
|
195
|
-
function concatenateToResponse(sourcePromises, headersInit) {
|
196
|
-
const {
|
197
|
-
done,
|
198
|
-
stream
|
199
|
-
} = concatenate(sourcePromises);
|
200
|
-
const headers = createHeaders(headersInit);
|
201
|
-
const response = new Response(stream, {
|
202
|
-
headers
|
203
|
-
});
|
204
|
-
return {
|
205
|
-
done,
|
206
|
-
response
|
207
|
-
};
|
208
|
-
}
|
209
|
-
|
210
|
-
/*
|
211
|
-
Copyright 2018 Google LLC
|
212
|
-
|
213
|
-
Use of this source code is governed by an MIT-style
|
214
|
-
license that can be found in the LICENSE file or at
|
215
|
-
https://opensource.org/licenses/MIT.
|
216
|
-
*/
|
217
|
-
let cachedIsSupported = undefined;
|
218
|
-
/**
|
219
|
-
* This is a utility method that determines whether the current browser supports
|
220
|
-
* the features required to create streamed responses. Currently, it checks if
|
221
|
-
* [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)
|
222
|
-
* can be created.
|
223
|
-
*
|
224
|
-
* @return {boolean} `true`, if the current browser meets the requirements for
|
225
|
-
* streaming responses, and `false` otherwise.
|
226
|
-
*
|
227
|
-
* @memberof workbox.streams
|
228
|
-
*/
|
229
|
-
|
230
|
-
function isSupported() {
|
231
|
-
if (cachedIsSupported === undefined) {
|
232
|
-
// See https://github.com/GoogleChrome/workbox/issues/1473
|
233
|
-
try {
|
234
|
-
new ReadableStream({
|
235
|
-
start() {}
|
236
|
-
|
237
|
-
});
|
238
|
-
cachedIsSupported = true;
|
239
|
-
} catch (error) {
|
240
|
-
cachedIsSupported = false;
|
241
|
-
}
|
242
|
-
}
|
243
|
-
|
244
|
-
return cachedIsSupported;
|
245
|
-
}
|
246
|
-
|
247
|
-
/*
|
248
|
-
Copyright 2018 Google LLC
|
249
|
-
|
250
|
-
Use of this source code is governed by an MIT-style
|
251
|
-
license that can be found in the LICENSE file or at
|
252
|
-
https://opensource.org/licenses/MIT.
|
253
|
-
*/
|
254
|
-
/**
|
255
|
-
* A shortcut to create a strategy that could be dropped-in to Workbox's router.
|
256
|
-
*
|
257
|
-
* On browsers that do not support constructing new `ReadableStream`s, this
|
258
|
-
* strategy will automatically wait for all the `sourceFunctions` to complete,
|
259
|
-
* and create a final response that concatenates their values together.
|
260
|
-
*
|
261
|
-
* @param {
|
262
|
-
* Array<function(workbox.routing.Route~handlerCallback)>} sourceFunctions
|
263
|
-
* Each function should return a {@link workbox.streams.StreamSource} (or a
|
264
|
-
* Promise which resolves to one).
|
265
|
-
* @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,
|
266
|
-
* `'text/html'` will be used by default.
|
267
|
-
* @return {workbox.routing.Route~handlerCallback}
|
268
|
-
*
|
269
|
-
* @memberof workbox.streams
|
270
|
-
*/
|
271
|
-
|
272
|
-
function strategy(sourceFunctions, headersInit) {
|
273
|
-
return async ({
|
274
|
-
event,
|
275
|
-
url,
|
276
|
-
params
|
277
|
-
}) => {
|
278
|
-
if (isSupported()) {
|
279
|
-
const {
|
280
|
-
done,
|
281
|
-
response
|
282
|
-
} = concatenateToResponse(sourceFunctions.map(fn => fn({
|
283
|
-
event,
|
284
|
-
url,
|
285
|
-
params
|
286
|
-
})), headersInit);
|
287
|
-
event.waitUntil(done);
|
288
|
-
return response;
|
289
|
-
}
|
290
|
-
|
291
|
-
{
|
292
|
-
logger_mjs.logger.log(`The current browser doesn't support creating response ` + `streams. Falling back to non-streaming response instead.`);
|
293
|
-
} // Fallback to waiting for everything to finish, and concatenating the
|
294
|
-
// responses.
|
295
|
-
|
296
|
-
|
297
|
-
const parts = await Promise.all(sourceFunctions.map(sourceFunction => sourceFunction({
|
298
|
-
event,
|
299
|
-
url,
|
300
|
-
params
|
301
|
-
})).map(async responsePromise => {
|
302
|
-
const response = await responsePromise;
|
303
|
-
|
304
|
-
if (response instanceof Response) {
|
305
|
-
return response.blob();
|
306
|
-
} // Otherwise, assume it's something like a string which can be used
|
307
|
-
// as-is when constructing the final composite blob.
|
308
|
-
|
309
|
-
|
310
|
-
return response;
|
311
|
-
}));
|
312
|
-
const headers = createHeaders(headersInit); // Constructing a new Response from a Blob source is well-supported.
|
313
|
-
// So is constructing a new Blob from multiple source Blobs or strings.
|
314
|
-
|
315
|
-
return new Response(new Blob(parts), {
|
316
|
-
headers
|
317
|
-
});
|
318
|
-
};
|
319
|
-
}
|
320
|
-
|
321
|
-
/*
|
322
|
-
Copyright 2018 Google LLC
|
323
|
-
|
324
|
-
Use of this source code is governed by an MIT-style
|
325
|
-
license that can be found in the LICENSE file or at
|
326
|
-
https://opensource.org/licenses/MIT.
|
327
|
-
*/
|
328
|
-
|
329
|
-
exports.concatenate = concatenate;
|
330
|
-
exports.concatenateToResponse = concatenateToResponse;
|
331
|
-
exports.isSupported = isSupported;
|
332
|
-
exports.strategy = strategy;
|
333
|
-
|
334
|
-
return exports;
|
335
|
-
|
336
|
-
}({}, workbox.core._private, workbox.core._private));
|
337
|
-
//# sourceMappingURL=workbox-streams.dev.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"workbox-streams.dev.js","sources":["../_version.mjs","../concatenate.mjs","../utils/createHeaders.mjs","../concatenateToResponse.mjs","../isSupported.mjs","../strategy.mjs","../index.mjs"],"sourcesContent":["try{self['workbox:streams:4.3.1']&&_()}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 {logger} from 'workbox-core/_private/logger.mjs';\nimport {assert} from 'workbox-core/_private/assert.mjs';\n\nimport './_version.mjs';\n\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 {workbox.streams.StreamSource} source\n * @return {ReadableStreamReader}\n * @private\n */\nfunction _getReaderFromSource(source) {\n if (source.body && source.body.getReader) {\n return source.body.getReader();\n }\n\n if (source.getReader) {\n return source.getReader();\n }\n\n // TODO: This should be possible to do by constructing a ReadableStream, but\n // I can't get it to work. As a hack, construct a new Response, and use the\n // reader associated with its body.\n return new Response(source).body.getReader();\n}\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<workbox.streams.StreamSource>>} sourcePromises\n * @return {Object<{done: Promise, stream: ReadableStream}>}\n *\n * @memberof 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\n const readerPromises = sourcePromises.map((sourcePromise) => {\n return Promise.resolve(sourcePromise).then((source) => {\n return _getReaderFromSource(source);\n });\n });\n\n let fullyStreamedResolve;\n let fullyStreamedReject;\n const done = new Promise((resolve, reject) => {\n fullyStreamedResolve = resolve;\n fullyStreamedReject = reject;\n });\n\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\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(\n `Concatenating ${readerPromises.length} sources.`);\n for (const message of logMessages) {\n if (Array.isArray(message)) {\n logger.log(...message);\n } else {\n logger.log(message);\n }\n }\n logger.log('Finished reading all sources.');\n logger.groupEnd();\n }\n\n controller.close();\n fullyStreamedResolve();\n return;\n }\n\n return this.pull(controller);\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 fullyStreamedReject(error);\n throw error;\n });\n },\n\n cancel() {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn('The ReadableStream was cancelled.');\n }\n\n fullyStreamedResolve();\n },\n });\n\n return {done, stream};\n}\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*/\n\nimport '../_version.mjs';\n\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 * @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 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}\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*/\n\nimport {createHeaders} from './utils/createHeaders.mjs';\nimport {concatenate} from './concatenate.mjs';\n\nimport './_version.mjs';\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 * 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<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 workbox.streams\n */\nfunction concatenateToResponse(sourcePromises, headersInit) {\n const {done, stream} = concatenate(sourcePromises);\n\n const headers = createHeaders(headersInit);\n const response = new Response(stream, {headers});\n\n return {done, response};\n}\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*/\n\nimport './_version.mjs';\n\nlet cachedIsSupported = undefined;\n\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 workbox.streams\n */\nfunction isSupported() {\n if (cachedIsSupported === undefined) {\n // See https://github.com/GoogleChrome/workbox/issues/1473\n try {\n new ReadableStream({start() {}});\n cachedIsSupported = true;\n } catch (error) {\n cachedIsSupported = false;\n }\n }\n\n return cachedIsSupported;\n}\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*/\n\nimport {logger} from 'workbox-core/_private/logger.mjs';\n\nimport {createHeaders} from './utils/createHeaders.mjs';\nimport {concatenateToResponse} from './concatenateToResponse.mjs';\nimport {isSupported} from './isSupported.mjs';\n\nimport './_version.mjs';\n\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 {\n * Array<function(workbox.routing.Route~handlerCallback)>} sourceFunctions\n * Each function should return a {@link 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 {workbox.routing.Route~handlerCallback}\n *\n * @memberof workbox.streams\n */\nexport function strategy(sourceFunctions, headersInit) {\n return async ({event, url, params}) => {\n if (isSupported()) {\n const {done, response} = concatenateToResponse(sourceFunctions.map(\n (fn) => fn({event, url, params})), headersInit);\n event.waitUntil(done);\n return response;\n }\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\n // Fallback to waiting for everything to finish, and concatenating the\n // responses.\n const parts = await Promise.all(\n sourceFunctions.map(\n (sourceFunction) => sourceFunction({event, url, params})\n ).map(async (responsePromise) => {\n const response = await responsePromise;\n if (response instanceof Response) {\n return response.blob();\n }\n\n // Otherwise, assume it's something like a string which can be used\n // as-is when constructing the final composite blob.\n return response;\n })\n );\n\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(parts), {headers});\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 {concatenate} from './concatenate.mjs';\nimport {concatenateToResponse} from './concatenateToResponse.mjs';\nimport {isSupported} from './isSupported.mjs';\nimport {strategy} from './strategy.mjs';\nimport './_version.mjs';\n\n\n/**\n * @namespace workbox.streams\n */\n\nexport {\n concatenate,\n concatenateToResponse,\n isSupported,\n strategy,\n};\n"],"names":["self","_","e","_getReaderFromSource","source","body","getReader","Response","concatenate","sourcePromises","assert","isArray","moduleName","funcName","paramName","readerPromises","map","sourcePromise","Promise","resolve","then","fullyStreamedResolve","fullyStreamedReject","done","reject","i","logMessages","stream","ReadableStream","pull","controller","reader","read","result","push","length","logger","groupCollapsed","message","Array","log","groupEnd","close","enqueue","value","catch","error","cancel","warn","createHeaders","headersInit","headers","Headers","has","set","concatenateToResponse","response","cachedIsSupported","undefined","isSupported","start","strategy","sourceFunctions","event","url","params","fn","waitUntil","parts","all","sourceFunction","responsePromise","blob","Blob"],"mappings":"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"}
|
@@ -1,2 +0,0 @@
|
|
1
|
-
this.workbox=this.workbox||{},this.workbox.streams=function(e){"use strict";try{self["workbox:streams:4.3.1"]&&_()}catch(e){}function n(e){const n=e.map(e=>Promise.resolve(e).then(e=>(function(e){return e.body&&e.body.getReader?e.body.getReader():e.getReader?e.getReader():new Response(e).body.getReader()})(e)));let t,r;const s=new Promise((e,n)=>{t=e,r=n});let o=0;return{done:s,stream:new ReadableStream({pull(e){return n[o].then(e=>e.read()).then(r=>{if(r.done)return++o>=n.length?(e.close(),void t()):this.pull(e);e.enqueue(r.value)}).catch(e=>{throw r(e),e})},cancel(){t()}})}}function t(e={}){const n=new Headers(e);return n.has("content-type")||n.set("content-type","text/html"),n}function r(e,r){const{done:s,stream:o}=n(e),a=t(r);return{done:s,response:new Response(o,{headers:a})}}let s=void 0;function o(){if(void 0===s)try{new ReadableStream({start(){}}),s=!0}catch(e){s=!1}return s}return e.concatenate=n,e.concatenateToResponse=r,e.isSupported=o,e.strategy=function(e,n){return async({event:s,url:a,params:c})=>{if(o()){const{done:t,response:o}=r(e.map(e=>e({event:s,url:a,params:c})),n);return s.waitUntil(t),o}const i=await Promise.all(e.map(e=>e({event:s,url:a,params:c})).map(async e=>{const n=await e;return n instanceof Response?n.blob():n})),u=t(n);return new Response(new Blob(i),{headers:u})}},e}({});
|
2
|
-
//# sourceMappingURL=workbox-streams.prod.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"workbox-streams.prod.js","sources":["../_version.mjs","../concatenate.mjs","../utils/createHeaders.mjs","../concatenateToResponse.mjs","../isSupported.mjs","../strategy.mjs"],"sourcesContent":["try{self['workbox:streams:4.3.1']&&_()}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 {logger} from 'workbox-core/_private/logger.mjs';\nimport {assert} from 'workbox-core/_private/assert.mjs';\n\nimport './_version.mjs';\n\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 {workbox.streams.StreamSource} source\n * @return {ReadableStreamReader}\n * @private\n */\nfunction _getReaderFromSource(source) {\n if (source.body && source.body.getReader) {\n return source.body.getReader();\n }\n\n if (source.getReader) {\n return source.getReader();\n }\n\n // TODO: This should be possible to do by constructing a ReadableStream, but\n // I can't get it to work. As a hack, construct a new Response, and use the\n // reader associated with its body.\n return new Response(source).body.getReader();\n}\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<workbox.streams.StreamSource>>} sourcePromises\n * @return {Object<{done: Promise, stream: ReadableStream}>}\n *\n * @memberof 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\n const readerPromises = sourcePromises.map((sourcePromise) => {\n return Promise.resolve(sourcePromise).then((source) => {\n return _getReaderFromSource(source);\n });\n });\n\n let fullyStreamedResolve;\n let fullyStreamedReject;\n const done = new Promise((resolve, reject) => {\n fullyStreamedResolve = resolve;\n fullyStreamedReject = reject;\n });\n\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\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(\n `Concatenating ${readerPromises.length} sources.`);\n for (const message of logMessages) {\n if (Array.isArray(message)) {\n logger.log(...message);\n } else {\n logger.log(message);\n }\n }\n logger.log('Finished reading all sources.');\n logger.groupEnd();\n }\n\n controller.close();\n fullyStreamedResolve();\n return;\n }\n\n return this.pull(controller);\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 fullyStreamedReject(error);\n throw error;\n });\n },\n\n cancel() {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn('The ReadableStream was cancelled.');\n }\n\n fullyStreamedResolve();\n },\n });\n\n return {done, stream};\n}\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*/\n\nimport '../_version.mjs';\n\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 * @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 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}\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*/\n\nimport {createHeaders} from './utils/createHeaders.mjs';\nimport {concatenate} from './concatenate.mjs';\n\nimport './_version.mjs';\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 * 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<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 workbox.streams\n */\nfunction concatenateToResponse(sourcePromises, headersInit) {\n const {done, stream} = concatenate(sourcePromises);\n\n const headers = createHeaders(headersInit);\n const response = new Response(stream, {headers});\n\n return {done, response};\n}\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*/\n\nimport './_version.mjs';\n\nlet cachedIsSupported = undefined;\n\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 workbox.streams\n */\nfunction isSupported() {\n if (cachedIsSupported === undefined) {\n // See https://github.com/GoogleChrome/workbox/issues/1473\n try {\n new ReadableStream({start() {}});\n cachedIsSupported = true;\n } catch (error) {\n cachedIsSupported = false;\n }\n }\n\n return cachedIsSupported;\n}\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*/\n\nimport {logger} from 'workbox-core/_private/logger.mjs';\n\nimport {createHeaders} from './utils/createHeaders.mjs';\nimport {concatenateToResponse} from './concatenateToResponse.mjs';\nimport {isSupported} from './isSupported.mjs';\n\nimport './_version.mjs';\n\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 {\n * Array<function(workbox.routing.Route~handlerCallback)>} sourceFunctions\n * Each function should return a {@link 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 {workbox.routing.Route~handlerCallback}\n *\n * @memberof workbox.streams\n */\nexport function strategy(sourceFunctions, headersInit) {\n return async ({event, url, params}) => {\n if (isSupported()) {\n const {done, response} = concatenateToResponse(sourceFunctions.map(\n (fn) => fn({event, url, params})), headersInit);\n event.waitUntil(done);\n return response;\n }\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\n // Fallback to waiting for everything to finish, and concatenating the\n // responses.\n const parts = await Promise.all(\n sourceFunctions.map(\n (sourceFunction) => sourceFunction({event, url, params})\n ).map(async (responsePromise) => {\n const response = await responsePromise;\n if (response instanceof Response) {\n return response.blob();\n }\n\n // Otherwise, assume it's something like a string which can be used\n // as-is when constructing the final composite blob.\n return response;\n })\n );\n\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(parts), {headers});\n };\n}\n"],"names":["self","_","e","concatenate","sourcePromises","readerPromises","map","sourcePromise","Promise","resolve","then","source","body","getReader","Response","_getReaderFromSource","fullyStreamedResolve","fullyStreamedReject","done","reject","i","stream","ReadableStream","pull","controller","reader","read","result","length","close","this","enqueue","value","catch","error","cancel","createHeaders","headersInit","headers","Headers","has","set","concatenateToResponse","response","cachedIsSupported","undefined","isSupported","start","sourceFunctions","async","event","url","params","fn","waitUntil","parts","all","sourceFunction","responsePromise","blob","Blob"],"mappings":"4EAAA,IAAIA,KAAK,0BAA0BC,IAAI,MAAMC,ICkD7C,SAASC,EAAYC,SASbC,EAAiBD,EAAeE,IAAKC,GAClCC,QAAQC,QAAQF,GAAeG,KAAMC,IAtChD,SAA8BA,UACxBA,EAAOC,MAAQD,EAAOC,KAAKC,UACtBF,EAAOC,KAAKC,YAGjBF,EAAOE,UACFF,EAAOE,YAMT,IAAIC,SAASH,GAAQC,KAAKC,aA2BtBE,CAAqBJ,SAI5BK,EACAC,QACEC,EAAO,IAAIV,QAAQ,CAACC,EAASU,KACjCH,EAAuBP,EACvBQ,EAAsBE,QAGpBC,EAAI,QAyDD,CAACF,KAAAA,EAAMG,OAvDC,IAAIC,eAAe,CAChCC,KAAKC,UACInB,EAAee,GACjBV,KAAMe,GAAWA,EAAOC,QACxBhB,KAAMiB,OACDA,EAAOT,aAMTE,GACSf,EAAeuB,QAgBtBJ,EAAWK,aACXb,KAIKc,KAAKP,KAAKC,GAEjBA,EAAWO,QAAQJ,EAAOK,SAE3BC,MAAOC,UAIRjB,EAAoBiB,GACdA,KAIdC,SAKEnB,QCtGN,SAASoB,EAAcC,EAAc,UAE7BC,EAAU,IAAIC,QAAQF,UACvBC,EAAQE,IAAI,iBACfF,EAAQG,IAAI,eAAgB,aAEvBH,ECCT,SAASI,EAAsBtC,EAAgBiC,SACvCnB,KAACA,EAADG,OAAOA,GAAUlB,EAAYC,GAE7BkC,EAAUF,EAAcC,SAGvB,CAACnB,KAAAA,EAAMyB,SAFG,IAAI7B,SAASO,EAAQ,CAACiB,QAAAA,KCxBzC,IAAIM,OAAoBC,EAaxB,SAASC,YACmBD,IAAtBD,UAGItB,eAAe,CAACyB,YACpBH,GAAoB,EACpB,MAAOV,GACPU,GAAoB,SAIjBA,8ECDF,SAAkBI,EAAiBX,UACjCY,OAAQC,MAAAA,EAAOC,IAAAA,EAAKC,OAAAA,SACrBN,IAAe,OACX5B,KAACA,EAADyB,SAAOA,GAAYD,EAAsBM,EAAgB1C,IAC1D+C,GAAOA,EAAG,CAACH,MAAAA,EAAOC,IAAAA,EAAKC,OAAAA,KAAWf,UACvCa,EAAMI,UAAUpC,GACTyB,QAUHY,QAAc/C,QAAQgD,IACxBR,EAAgB1C,IACXmD,GAAmBA,EAAe,CAACP,MAAAA,EAAOC,IAAAA,EAAKC,OAAAA,KAClD9C,IAAI2C,MAAAA,UACEN,QAAiBe,SACnBf,aAAoB7B,SACf6B,EAASgB,OAKXhB,KAIPL,EAAUF,EAAcC,UAGvB,IAAIvB,SAAS,IAAI8C,KAAKL,GAAQ,CAACjB,QAAAA"}
|
@@ -1,2 +0,0 @@
|
|
1
|
-
!function(){"use strict";try{self["workbox:sw:4.3.1"]&&_()}catch(t){}const t="https://storage.googleapis.com/workbox-cdn/releases/4.3.1",e={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(t,s){if(t[s])return t[s];const o=e[s];return o&&t.loadModule(`workbox-${o}`),t[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(e){if(this.t.modulePathCb)return this.t.modulePathCb(e,this.t.debug);let s=[t];const o=`${e}.${this.s}.js`,r=this.t.modulePathPrefix;return r&&""===(s=r.split("/"))[s.length-1]&&s.splice(s.length-1,1),s.push(o),s.join("/")}}}();
|
2
|
-
//# sourceMappingURL=workbox-sw.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"workbox-sw.js","sources":["../_version.mjs","../controllers/WorkboxSW.mjs","../index.mjs"],"sourcesContent":["try{self['workbox:sw:4.3.1']&&_()}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 // TODO(philipwalton): add jsdoc tags to associate these with their module.\n // @name backgroundSync\n // @memberof workbox\n // @see module:workbox-background-sync\n backgroundSync: 'background-sync',\n broadcastUpdate: 'broadcast-update',\n cacheableResponse: 'cacheable-response',\n core: 'core',\n expiration: 'expiration',\n googleAnalytics: 'offline-ga',\n navigationPreload: 'navigation-preload',\n precaching: 'precaching',\n rangeRequests: 'range-requests',\n routing: 'routing',\n strategies: 'strategies',\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","CDN_PATH","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,MAAMC,EAAY,4DAEZC,EAA6B,CAKjCC,eAAgB,kBAChBC,gBAAiB,mBACjBC,kBAAmB,qBACnBC,KAAM,OACNC,WAAY,aACZC,gBAAiB,aACjBC,kBAAmB,qBACnBC,WAAY,aACZC,cAAe,iBACfC,QAAS,UACTC,WAAY,aACZC,QAAS,WCZXhB,KAAKiB,QAAU,IDqBR,MAMLC,0BACOC,EAAI,QACJC,EAAW,CACdC,MAAkC,cAA3BrB,KAAKsB,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,sBAAsBD,KAGxBF,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,kCACwBZ,YAAqBO,OAC/CG,GAYVF,EAAeR,MACTN,KAAKP,EAASK,oBACTE,KAAKP,EAASK,aAAaQ,EAAYN,KAAKP,EAASC,WAI1DyB,EAAY,CAAC3C,SAEX4C,KAAcd,KAAcN,KAAKD,OAEjCsB,EAAarB,KAAKP,EAASI,wBAC7BwB,GAMsC,MAJxCF,EAAYE,EAAWC,MAAM,MAIfH,EAAUI,OAAS,IAC/BJ,EAAUK,OAAOL,EAAUI,OAAS,EAAG,GAI3CJ,EAAUM,KAAKL,GAERD,EAAUO,KAAK"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"workbox-window.dev.es5.mjs","sources":["../_version.mjs","../messageSW.mjs","../../workbox-core/_version.mjs","../../workbox-core/_private/Deferred.mjs","../../workbox-core/_private/logger.mjs","../utils/EventTargetShim.mjs","../utils/urlsMatch.mjs","../utils/WorkboxEvent.mjs","../Workbox.mjs","../index.mjs"],"sourcesContent":["try{self['workbox:window:4.3.1']&&_()}catch(e){}// eslint-disable-line","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport './_version.mjs';\n\n\n/**\n * Sends a data object to a service worker via `postMessage` and resolves with\n * a response (if any).\n *\n * A response can be set in a message handler in the service worker by\n * calling `event.ports[0].postMessage(...)`, which will resolve the promise\n * returned by `messageSW()`. If no response is set, the promise will not\n * resolve.\n *\n * @param {ServiceWorker} sw The service worker to send the message to.\n * @param {Object} data An object to send to the service worker.\n * @return {Promise<Object|undefined>}\n *\n * @memberof module:workbox-window\n */\nconst messageSW = (sw, data) => {\n return new Promise((resolve) => {\n let messageChannel = new MessageChannel();\n messageChannel.port1.onmessage = (evt) => resolve(evt.data);\n sw.postMessage(data, [messageChannel.port2]);\n });\n};\n\nexport {messageSW};\n","try{self['workbox:core:4.3.1']&&_()}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\n\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nexport class Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport '../_version.mjs';\n\n\nconst logger = process.env.NODE_ENV === 'production' ? null : (() => {\n let inGroup = false;\n\n const methodToColorMap = {\n debug: `#7f8c8d`, // Gray\n log: `#2ecc71`, // Green\n warn: `#f39c12`, // Yellow\n error: `#c0392b`, // Red\n groupCollapsed: `#3498db`, // Blue\n groupEnd: null, // No colored prefix on groupEnd\n };\n\n const print = function(method, args) {\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n\n console[method](...logPrefix, ...args);\n\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n\n const api = {};\n for (const method of Object.keys(methodToColorMap)) {\n api[method] = (...args) => {\n print(method, args);\n };\n }\n\n return api;\n})();\n\nexport {logger};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport '../_version.mjs';\n\n\n/**\n * A minimal `EventTarget` shim.\n * This is necessary because not all browsers support constructable\n * `EventTarget`, so using a real `EventTarget` will error.\n * @private\n */\nclass EventTargetShim {\n /**\n * Creates an event listener registry\n *\n * @private\n */\n constructor() {\n // A registry of event types to listeners.\n this._eventListenerRegistry = {};\n }\n /**\n * @param {string} type\n * @param {Function} listener\n * @private\n */\n addEventListener(type, listener) {\n this._getEventListenersByType(type).add(listener);\n }\n\n /**\n * @param {string} type\n * @param {Function} listener\n * @private\n */\n removeEventListener(type, listener) {\n this._getEventListenersByType(type).delete(listener);\n }\n\n /**\n * @param {Event} event\n * @private\n */\n dispatchEvent(event) {\n event.target = this;\n this._getEventListenersByType(event.type).forEach(\n (listener) => listener(event));\n }\n\n /**\n * Returns a Set of listeners associated with the passed event type.\n * If no handlers have been registered, an empty Set is returned.\n *\n * @param {string} type The event type.\n * @return {Set} An array of handler functions.\n * @private\n */\n _getEventListenersByType(type) {\n return this._eventListenerRegistry[type] =\n (this._eventListenerRegistry[type] || new Set());\n }\n}\n\nexport {EventTargetShim};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport '../_version.mjs';\n\n\n/**\n * Returns true if two URLs have the same `.href` property. The URLS can be\n * relative, and if they are the current location href is used to resolve URLs.\n *\n * @private\n * @param {string} url1\n * @param {string} url2\n * @return {boolean}\n */\nconst urlsMatch = (url1, url2) => {\n return new URL(url1, location).href === new URL(url2, location).href;\n};\n\nexport {urlsMatch};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport '../_version.mjs';\n\n/**\n * A minimal `Event` subclass shim.\n * This doesn't *actually* subclass `Event` because not all browsers support\n * constructable `EventTarget`, and using a real `Event` will error.\n * @private\n */\nclass WorkboxEvent {\n /**\n * @param {string} type\n * @param {Object} props\n */\n constructor(type, props) {\n Object.assign(this, props, {type});\n }\n}\n\nexport {WorkboxEvent};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport {Deferred} from 'workbox-core/_private/Deferred.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {messageSW} from './messageSW.mjs';\nimport {EventTargetShim} from './utils/EventTargetShim.mjs';\nimport {urlsMatch} from './utils/urlsMatch.mjs';\nimport {WorkboxEvent} from './utils/WorkboxEvent.mjs';\nimport './_version.mjs';\n\n\n// The time a SW must be in the waiting phase before we can conclude\n// `skipWaiting()` wasn't called. This 200 amount wasn't scientifically\n// chosen, but it seems to avoid false positives in my testing.\nconst WAITING_TIMEOUT_DURATION = 200;\n\n// The amount of time after a registration that we can reasonably conclude\n// that the registration didn't trigger an update.\nconst REGISTRATION_TIMEOUT_DURATION = 60000;\n\n/**\n * A class to aid in handling service worker registration, updates, and\n * reacting to service worker lifecycle events.\n *\n * @fires [message]{@link module:workbox-window.Workbox#message}\n * @fires [installed]{@link module:workbox-window.Workbox#installed}\n * @fires [waiting]{@link module:workbox-window.Workbox#waiting}\n * @fires [controlling]{@link module:workbox-window.Workbox#controlling}\n * @fires [activated]{@link module:workbox-window.Workbox#activated}\n * @fires [redundant]{@link module:workbox-window.Workbox#redundant}\n * @fires [externalinstalled]{@link module:workbox-window.Workbox#externalinstalled}\n * @fires [externalwaiting]{@link module:workbox-window.Workbox#externalwaiting}\n * @fires [externalactivated]{@link module:workbox-window.Workbox#externalactivated}\n *\n * @memberof module:workbox-window\n */\nclass Workbox extends EventTargetShim {\n /**\n * Creates a new Workbox instance with a script URL and service worker\n * options. The script URL and options are the same as those used when\n * calling `navigator.serviceWorker.register(scriptURL, options)`. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register\n *\n * @param {string} scriptURL The service worker script associated with this\n * instance.\n * @param {Object} [registerOptions] The service worker options associated\n * with this instance.\n */\n constructor(scriptURL, registerOptions = {}) {\n super();\n\n this._scriptURL = scriptURL;\n this._registerOptions = registerOptions;\n this._updateFoundCount = 0;\n\n // Deferreds we can resolve later.\n this._swDeferred = new Deferred();\n this._activeDeferred = new Deferred();\n this._controllingDeferred = new Deferred();\n\n // Bind event handler callbacks.\n this._onMessage = this._onMessage.bind(this);\n this._onStateChange = this._onStateChange.bind(this);\n this._onUpdateFound = this._onUpdateFound.bind(this);\n this._onControllerChange = this._onControllerChange.bind(this);\n }\n\n /**\n * Registers a service worker for this instances script URL and service\n * worker options. By default this method delays registration until after\n * the window has loaded.\n *\n * @param {Object} [options]\n * @param {Function} [options.immediate=false] Setting this to true will\n * register the service worker immediately, even if the window has\n * not loaded (not recommended).\n */\n async register({immediate = false} = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (this._registrationTime) {\n logger.error('Cannot re-register a Workbox instance after it has ' +\n 'been registered. Create a new instance instead.');\n return;\n }\n }\n\n if (!immediate && document.readyState !== 'complete') {\n await new Promise((res) => addEventListener('load', res));\n }\n\n // Set this flag to true if any service worker was controlling the page\n // at registration time.\n this._isUpdate = Boolean(navigator.serviceWorker.controller);\n\n // Before registering, attempt to determine if a SW is already controlling\n // the page, and if that SW script (and version, if specified) matches this\n // instance's script.\n this._compatibleControllingSW = this._getControllingSWIfCompatible();\n\n this._registration = await this._registerScript();\n\n // If we have a compatible controller, store the controller as the \"own\"\n // SW, resolve active/controlling deferreds and add necessary listeners.\n if (this._compatibleControllingSW) {\n this._sw = this._compatibleControllingSW;\n this._activeDeferred.resolve(this._compatibleControllingSW);\n this._controllingDeferred.resolve(this._compatibleControllingSW);\n\n this._reportWindowReady(this._compatibleControllingSW);\n this._compatibleControllingSW.addEventListener(\n 'statechange', this._onStateChange, {once: true});\n }\n\n // If there's a waiting service worker with a matching URL before the\n // `updatefound` event fires, it likely means that this site is open\n // in another tab, or the user refreshed the page (and thus the prevoius\n // page wasn't fully unloaded before this page started loading).\n // https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#waiting\n const waitingSW = this._registration.waiting;\n if (waitingSW && urlsMatch(waitingSW.scriptURL, this._scriptURL)) {\n // Store the waiting SW as the \"own\" Sw, even if it means overwriting\n // a compatible controller.\n this._sw = waitingSW;\n\n // Run this in the next microtask, so any code that adds an event\n // listener after awaiting `register()` will get this event.\n Promise.resolve().then(() => {\n this.dispatchEvent(new WorkboxEvent('waiting', {\n sw: waitingSW,\n wasWaitingBeforeRegister: true,\n }));\n if (process.env.NODE_ENV !== 'production') {\n logger.warn('A service worker was already waiting to activate ' +\n 'before this script was registered...');\n }\n });\n }\n\n // If an \"own\" SW is already set, resolve the deferred.\n if (this._sw) {\n this._swDeferred.resolve(this._sw);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Successfully registered service worker.', this._scriptURL);\n\n if (navigator.serviceWorker.controller) {\n if (this._compatibleControllingSW) {\n logger.debug('A service worker with the same script URL ' +\n 'is already controlling this page.');\n } else {\n logger.debug('A service worker with a different script URL is ' +\n 'currently controlling the page. The browser is now fetching ' +\n 'the new script now...');\n }\n }\n\n const currentPageIsOutOfScope = () => {\n const scopeURL = new URL(\n this._registerOptions.scope || this._scriptURL, document.baseURI);\n const scopeURLBasePath = new URL('./', scopeURL.href).pathname;\n return !location.pathname.startsWith(scopeURLBasePath);\n };\n if (currentPageIsOutOfScope()) {\n logger.warn('The current page is not in scope for the registered ' +\n 'service worker. Was this a mistake?');\n }\n }\n\n this._registration.addEventListener('updatefound', this._onUpdateFound);\n navigator.serviceWorker.addEventListener(\n 'controllerchange', this._onControllerChange, {once: true});\n\n // Add message listeners.\n if ('BroadcastChannel' in self) {\n this._broadcastChannel = new BroadcastChannel('workbox');\n this._broadcastChannel.addEventListener('message', this._onMessage);\n }\n navigator.serviceWorker.addEventListener('message', this._onMessage);\n\n return this._registration;\n }\n\n /**\n * Resolves to the service worker registered by this instance as soon as it\n * is active. If a service worker was already controlling at registration\n * time then it will resolve to that if the script URLs (and optionally\n * script versions) match, otherwise it will wait until an update is found\n * and activates.\n *\n * @return {Promise<ServiceWorker>}\n */\n get active() {\n return this._activeDeferred.promise;\n }\n\n /**\n * Resolves to the service worker registered by this instance as soon as it\n * is controlling the page. If a service worker was already controlling at\n * registration time then it will resolve to that if the script URLs (and\n * optionally script versions) match, otherwise it will wait until an update\n * is found and starts controlling the page.\n * Note: the first time a service worker is installed it will active but\n * not start controlling the page unless `clients.claim()` is called in the\n * service worker.\n *\n * @return {Promise<ServiceWorker>}\n */\n get controlling() {\n return this._controllingDeferred.promise;\n }\n\n /**\n * Resolves with a reference to a service worker that matches the script URL\n * of this instance, as soon as it's available.\n *\n * If, at registration time, there's already an active or waiting service\n * worker with a matching script URL, it will be used (with the waiting\n * service worker taking precedence over the active service worker if both\n * match, since the waiting service worker would have been registered more\n * recently).\n * If there's no matching active or waiting service worker at registration\n * time then the promise will not resolve until an update is found and starts\n * installing, at which point the installing service worker is used.\n *\n * @return {Promise<ServiceWorker>}\n */\n async getSW() {\n // If `this._sw` is set, resolve with that as we want `getSW()` to\n // return the correct (new) service worker if an update is found.\n return this._sw || this._swDeferred.promise;\n }\n\n /**\n * Sends the passed data object to the service worker registered by this\n * instance (via [`getSW()`]{@link module:workbox-window.Workbox#getSW}) and resolves\n * with a response (if any).\n *\n * A response can be set in a message handler in the service worker by\n * calling `event.ports[0].postMessage(...)`, which will resolve the promise\n * returned by `messageSW()`. If no response is set, the promise will never\n * resolve.\n *\n * @param {Object} data An object to send to the service worker\n * @return {Promise<Object>}\n */\n async messageSW(data) {\n const sw = await this.getSW();\n return messageSW(sw, data);\n }\n\n /**\n * Checks for a service worker already controlling the page and returns\n * it if its script URL matchs.\n *\n * @private\n * @return {ServiceWorker|undefined}\n */\n _getControllingSWIfCompatible() {\n const controller = navigator.serviceWorker.controller;\n if (controller && urlsMatch(controller.scriptURL, this._scriptURL)) {\n return controller;\n }\n }\n\n /**\n * Registers a service worker for this instances script URL and register\n * options and tracks the time registration was complete.\n *\n * @private\n */\n async _registerScript() {\n try {\n const reg = await navigator.serviceWorker.register(\n this._scriptURL, this._registerOptions);\n\n // Keep track of when registration happened, so it can be used in the\n // `this._onUpdateFound` heuristic. Also use the presence of this\n // property as a way to see if `.register()` has been called.\n this._registrationTime = performance.now();\n\n return reg;\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(error);\n }\n // Re-throw the error.\n throw error;\n }\n }\n\n\n /**\n * Sends a message to the passed service worker that the window is ready.\n *\n * @param {ServiceWorker} sw\n * @private\n */\n _reportWindowReady(sw) {\n messageSW(sw, {\n type: 'WINDOW_READY',\n meta: 'workbox-window',\n });\n }\n\n /**\n * @private\n */\n _onUpdateFound() {\n const installingSW = this._registration.installing;\n\n // If the script URL passed to `navigator.serviceWorker.register()` is\n // different from the current controlling SW's script URL, we know any\n // successful registration calls will trigger an `updatefound` event.\n // But if the registered script URL is the same as the current controlling\n // SW's script URL, we'll only get an `updatefound` event if the file\n // changed since it was last registered. This can be a problem if the user\n // opens up the same page in a different tab, and that page registers\n // a SW that triggers an update. It's a problem because this page has no\n // good way of knowing whether the `updatefound` event came from the SW\n // script it registered or from a registration attempt made by a newer\n // version of the page running in another tab.\n // To minimize the possibility of a false positive, we use the logic here:\n let updateLikelyTriggeredExternally =\n // Since we enforce only calling `register()` once, and since we don't\n // add the `updatefound` event listener until the `register()` call, if\n // `_updateFoundCount` is > 0 then it means this method has already\n // been called, thus this SW must be external\n this._updateFoundCount > 0 ||\n // If the script URL of the installing SW is different from this\n // instance's script URL, we know it's definitely not from our\n // registration.\n !urlsMatch(installingSW.scriptURL, this._scriptURL) ||\n // If all of the above are false, then we use a time-based heuristic:\n // Any `updatefound` event that occurs long after our registration is\n // assumed to be external.\n (performance.now() >\n this._registrationTime + REGISTRATION_TIMEOUT_DURATION) ?\n // If any of the above are not true, we assume the update was\n // triggered by this instance.\n true : false;\n\n if (updateLikelyTriggeredExternally) {\n this._externalSW = installingSW;\n this._registration.removeEventListener(\n 'updatefound', this._onUpdateFound);\n } else {\n // If the update was not triggered externally we know the installing\n // SW is the one we registered, so we set it.\n this._sw = installingSW;\n this._swDeferred.resolve(installingSW);\n\n // The `installing` state isn't something we have a dedicated\n // callback for, but we do log messages for it in development.\n if (process.env.NODE_ENV !== 'production') {\n if (navigator.serviceWorker.controller) {\n logger.log('Updated service worker found. Installing now...');\n } else {\n logger.log('Service worker is installing...');\n }\n }\n }\n\n // Increment the `updatefound` count, so future invocations of this\n // method can be sure they were triggered externally.\n ++this._updateFoundCount;\n\n // Add a `statechange` listener regardless of whether this update was\n // triggered externally, since we have callbacks for both.\n installingSW.addEventListener('statechange', this._onStateChange);\n }\n\n /**\n * @private\n * @param {Event} originalEvent\n */\n _onStateChange(originalEvent) {\n const sw = originalEvent.target;\n const {state} = sw;\n const isExternal = sw === this._externalSW;\n const eventPrefix = isExternal ? 'external' : '';\n\n const eventProps = {sw, originalEvent};\n if (!isExternal && this._isUpdate) {\n eventProps.isUpdate = true;\n }\n\n this.dispatchEvent(new WorkboxEvent(\n eventPrefix + state, eventProps));\n\n if (state === 'installed') {\n // This timeout is used to ignore cases where the service worker calls\n // `skipWaiting()` in the install event, thus moving it directly in the\n // activating state. (Since all service workers *must* go through the\n // waiting phase, the only way to detect `skipWaiting()` called in the\n // install event is to observe that the time spent in the waiting phase\n // is very short.)\n // NOTE: we don't need separate timeouts for the own and external SWs\n // since they can't go through these phases at the same time.\n this._waitingTimeout = setTimeout(() => {\n // Ensure the SW is still waiting (it may now be redundant).\n if (state === 'installed' && this._registration.waiting === sw) {\n this.dispatchEvent(new WorkboxEvent(\n eventPrefix + 'waiting', eventProps));\n\n if (process.env.NODE_ENV !== 'production') {\n if (isExternal) {\n logger.warn('An external service worker has installed but is ' +\n 'waiting for this client to close before activating...');\n } else {\n logger.warn('The service worker has installed but is waiting ' +\n 'for existing clients to close before activating...');\n }\n }\n }\n }, WAITING_TIMEOUT_DURATION);\n } else if (state === 'activating') {\n clearTimeout(this._waitingTimeout);\n if (!isExternal) {\n this._activeDeferred.resolve(sw);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n switch (state) {\n case 'installed':\n if (isExternal) {\n logger.warn('An external service worker has installed. ' +\n 'You may want to suggest users reload this page.');\n } else {\n logger.log('Registered service worker installed.');\n }\n break;\n case 'activated':\n if (isExternal) {\n logger.warn('An external service worker has activated.');\n } else {\n logger.log('Registered service worker activated.');\n if (sw !== navigator.serviceWorker.controller) {\n logger.warn('The registered service worker is active but ' +\n 'not yet controlling the page. Reload or run ' +\n '`clients.claim()` in the service worker.');\n }\n }\n break;\n case 'redundant':\n if (sw === this._compatibleControllingSW) {\n logger.log('Previously controlling service worker now redundant!');\n } else if (!isExternal) {\n logger.log('Registered service worker now redundant!');\n }\n break;\n }\n }\n }\n\n /**\n * @private\n * @param {Event} originalEvent\n */\n _onControllerChange(originalEvent) {\n const sw = this._sw;\n if (sw === navigator.serviceWorker.controller) {\n this.dispatchEvent(new WorkboxEvent('controlling', {sw, originalEvent}));\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Registered service worker now controlling this page.');\n }\n this._controllingDeferred.resolve(sw);\n }\n }\n\n /**\n * @private\n * @param {Event} originalEvent\n */\n _onMessage(originalEvent) {\n const {data} = originalEvent;\n this.dispatchEvent(new WorkboxEvent('message', {data, originalEvent}));\n }\n}\n\n// The jsdoc comments below outline the events this instance may dispatch:\n// -----------------------------------------------------------------------\n\n/**\n * The `message` event is dispatched any time a `postMessage` (or a\n * `BroadcastChannel` message with the `workbox` channel name) is received.\n *\n * @event module:workbox-window.Workbox#message\n * @type {WorkboxEvent}\n * @property {*} data The `data` property from the original `message` event.\n * @property {Event} originalEvent The original [`message`]{@link https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent}\n * event.\n * @property {string} type `message`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `installed` event is dispatched if the state of a\n * [`Workbox`]{@link module:workbox-window.Workbox} instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}\n * changes to `installed`.\n *\n * Then can happen either the very first time a service worker is installed,\n * or after an update to the current service worker is found. In the case\n * of an update being found, the event's `isUpdate` property will be `true`.\n *\n * @event module:workbox-window.Workbox#installed\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this `Workbox` instance called `register()`.\n * @property {string} type `installed`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `waiting` event is dispatched if the state of a\n * [`Workbox`]{@link module:workbox-window.Workbox} instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}\n * changes to `installed` and then doesn't immediately change to `activating`.\n * It may also be dispatched if a service worker with the same\n * [`scriptURL`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/scriptURL}\n * was already waiting when the [`register()`]{@link module:workbox-window.Workbox#register}\n * method was called.\n *\n * @event module:workbox-window.Workbox#waiting\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The native `controllerchange` event\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this `Workbox` instance called `register()`.\n * @property {boolean|undefined} wasWaitingBeforeRegister True if a service worker with\n * a matching `scriptURL` was already waiting when this `Workbox`\n * instance called `register()`.\n * @property {string} type `waiting`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `controlling` event is dispatched if a\n * [`controllerchange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/oncontrollerchange}\n * fires on the service worker [container]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer}\n * and the [`scriptURL`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/scriptURL}\n * of the new [controller]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/controller}\n * matches the `scriptURL` of the `Workbox` instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}.\n *\n * @event module:workbox-window.Workbox#controlling\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`controllerchange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/oncontrollerchange}\n * event.\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this service worker was registered.\n * @property {string} type `controlling`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `activated` event is dispatched if the state of a\n * [`Workbox`]{@link module:workbox-window.Workbox} instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}\n * changes to `activated`.\n *\n * @event module:workbox-window.Workbox#activated\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this `Workbox` instance called `register()`.\n * @property {string} type `activated`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `redundant` event is dispatched if the state of a\n * [`Workbox`]{@link module:workbox-window.Workbox} instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}\n * changes to `redundant`.\n *\n * @event module:workbox-window.Workbox#redundant\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this `Workbox` instance called `register()`.\n * @property {string} type `redundant`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `externalinstalled` event is dispatched if the state of an\n * [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-external-sw}\n * changes to `installed`.\n *\n * @event module:workbox-window.Workbox#externalinstalled\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {string} type `externalinstalled`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `externalwaiting` event is dispatched if the state of an\n * [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-external-sw}\n * changes to `waiting`.\n *\n * @event module:workbox-window.Workbox#externalwaiting\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event|undefined} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {string} type `externalwaiting`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `externalactivated` event is dispatched if the state of an\n * [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-external-sw}\n * changes to `activated`.\n *\n * @event module:workbox-window.Workbox#externalactivated\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {string} type `externalactivated`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\nexport {Workbox};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport {messageSW} from './messageSW.mjs';\nimport {Workbox} from './Workbox.mjs';\nimport './_version.mjs';\n\n\n/**\n * @module workbox-window\n */\nexport {\n Workbox,\n messageSW,\n};\n"],"names":["self","_","e","messageSW","sw","data","Promise","resolve","messageChannel","MessageChannel","port1","onmessage","evt","postMessage","port2","Deferred","promise","reject","logger","process","inGroup","methodToColorMap","debug","log","warn","error","groupCollapsed","groupEnd","print","method","args","test","navigator","userAgent","console","styles","logPrefix","join","api","Object","keys","EventTargetShim","_eventListenerRegistry","addEventListener","type","listener","_getEventListenersByType","add","removeEventListener","delete","dispatchEvent","event","target","forEach","Set","urlsMatch","url1","url2","URL","location","href","WorkboxEvent","props","assign","body","recover","result","then","f","i","arguments","length","apply","value","direct","WAITING_TIMEOUT_DURATION","REGISTRATION_TIMEOUT_DURATION","Workbox","scriptURL","registerOptions","_scriptURL","_registerOptions","_updateFoundCount","_swDeferred","_activeDeferred","_controllingDeferred","_onMessage","bind","_onStateChange","_onUpdateFound","_onControllerChange","register","immediate","_registrationTime","document","readyState","res","_isUpdate","Boolean","serviceWorker","controller","_compatibleControllingSW","_getControllingSWIfCompatible","_registerScript","_registration","_sw","_reportWindowReady","once","waitingSW","waiting","wasWaitingBeforeRegister","currentPageIsOutOfScope","scopeURL","scope","baseURI","scopeURLBasePath","pathname","startsWith","_broadcastChannel","BroadcastChannel","getSW","reg","performance","now","meta","installingSW","installing","updateLikelyTriggeredExternally","_externalSW","originalEvent","state","isExternal","eventPrefix","eventProps","isUpdate","_waitingTimeout","setTimeout","clearTimeout"],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"workbox-window.dev.mjs","sources":["../_version.mjs","../messageSW.mjs","../../workbox-core/_version.mjs","../../workbox-core/_private/Deferred.mjs","../../workbox-core/_private/logger.mjs","../utils/EventTargetShim.mjs","../utils/urlsMatch.mjs","../utils/WorkboxEvent.mjs","../Workbox.mjs","../index.mjs"],"sourcesContent":["try{self['workbox:window:4.3.1']&&_()}catch(e){}// eslint-disable-line","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport './_version.mjs';\n\n\n/**\n * Sends a data object to a service worker via `postMessage` and resolves with\n * a response (if any).\n *\n * A response can be set in a message handler in the service worker by\n * calling `event.ports[0].postMessage(...)`, which will resolve the promise\n * returned by `messageSW()`. If no response is set, the promise will not\n * resolve.\n *\n * @param {ServiceWorker} sw The service worker to send the message to.\n * @param {Object} data An object to send to the service worker.\n * @return {Promise<Object|undefined>}\n *\n * @memberof module:workbox-window\n */\nconst messageSW = (sw, data) => {\n return new Promise((resolve) => {\n let messageChannel = new MessageChannel();\n messageChannel.port1.onmessage = (evt) => resolve(evt.data);\n sw.postMessage(data, [messageChannel.port2]);\n });\n};\n\nexport {messageSW};\n","try{self['workbox:core:4.3.1']&&_()}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\n\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nexport class Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport '../_version.mjs';\n\n\nconst logger = process.env.NODE_ENV === 'production' ? null : (() => {\n let inGroup = false;\n\n const methodToColorMap = {\n debug: `#7f8c8d`, // Gray\n log: `#2ecc71`, // Green\n warn: `#f39c12`, // Yellow\n error: `#c0392b`, // Red\n groupCollapsed: `#3498db`, // Blue\n groupEnd: null, // No colored prefix on groupEnd\n };\n\n const print = function(method, args) {\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n\n console[method](...logPrefix, ...args);\n\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n\n const api = {};\n for (const method of Object.keys(methodToColorMap)) {\n api[method] = (...args) => {\n print(method, args);\n };\n }\n\n return api;\n})();\n\nexport {logger};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport '../_version.mjs';\n\n\n/**\n * A minimal `EventTarget` shim.\n * This is necessary because not all browsers support constructable\n * `EventTarget`, so using a real `EventTarget` will error.\n * @private\n */\nclass EventTargetShim {\n /**\n * Creates an event listener registry\n *\n * @private\n */\n constructor() {\n // A registry of event types to listeners.\n this._eventListenerRegistry = {};\n }\n /**\n * @param {string} type\n * @param {Function} listener\n * @private\n */\n addEventListener(type, listener) {\n this._getEventListenersByType(type).add(listener);\n }\n\n /**\n * @param {string} type\n * @param {Function} listener\n * @private\n */\n removeEventListener(type, listener) {\n this._getEventListenersByType(type).delete(listener);\n }\n\n /**\n * @param {Event} event\n * @private\n */\n dispatchEvent(event) {\n event.target = this;\n this._getEventListenersByType(event.type).forEach(\n (listener) => listener(event));\n }\n\n /**\n * Returns a Set of listeners associated with the passed event type.\n * If no handlers have been registered, an empty Set is returned.\n *\n * @param {string} type The event type.\n * @return {Set} An array of handler functions.\n * @private\n */\n _getEventListenersByType(type) {\n return this._eventListenerRegistry[type] =\n (this._eventListenerRegistry[type] || new Set());\n }\n}\n\nexport {EventTargetShim};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport '../_version.mjs';\n\n\n/**\n * Returns true if two URLs have the same `.href` property. The URLS can be\n * relative, and if they are the current location href is used to resolve URLs.\n *\n * @private\n * @param {string} url1\n * @param {string} url2\n * @return {boolean}\n */\nconst urlsMatch = (url1, url2) => {\n return new URL(url1, location).href === new URL(url2, location).href;\n};\n\nexport {urlsMatch};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport '../_version.mjs';\n\n/**\n * A minimal `Event` subclass shim.\n * This doesn't *actually* subclass `Event` because not all browsers support\n * constructable `EventTarget`, and using a real `Event` will error.\n * @private\n */\nclass WorkboxEvent {\n /**\n * @param {string} type\n * @param {Object} props\n */\n constructor(type, props) {\n Object.assign(this, props, {type});\n }\n}\n\nexport {WorkboxEvent};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport {Deferred} from 'workbox-core/_private/Deferred.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {messageSW} from './messageSW.mjs';\nimport {EventTargetShim} from './utils/EventTargetShim.mjs';\nimport {urlsMatch} from './utils/urlsMatch.mjs';\nimport {WorkboxEvent} from './utils/WorkboxEvent.mjs';\nimport './_version.mjs';\n\n\n// The time a SW must be in the waiting phase before we can conclude\n// `skipWaiting()` wasn't called. This 200 amount wasn't scientifically\n// chosen, but it seems to avoid false positives in my testing.\nconst WAITING_TIMEOUT_DURATION = 200;\n\n// The amount of time after a registration that we can reasonably conclude\n// that the registration didn't trigger an update.\nconst REGISTRATION_TIMEOUT_DURATION = 60000;\n\n/**\n * A class to aid in handling service worker registration, updates, and\n * reacting to service worker lifecycle events.\n *\n * @fires [message]{@link module:workbox-window.Workbox#message}\n * @fires [installed]{@link module:workbox-window.Workbox#installed}\n * @fires [waiting]{@link module:workbox-window.Workbox#waiting}\n * @fires [controlling]{@link module:workbox-window.Workbox#controlling}\n * @fires [activated]{@link module:workbox-window.Workbox#activated}\n * @fires [redundant]{@link module:workbox-window.Workbox#redundant}\n * @fires [externalinstalled]{@link module:workbox-window.Workbox#externalinstalled}\n * @fires [externalwaiting]{@link module:workbox-window.Workbox#externalwaiting}\n * @fires [externalactivated]{@link module:workbox-window.Workbox#externalactivated}\n *\n * @memberof module:workbox-window\n */\nclass Workbox extends EventTargetShim {\n /**\n * Creates a new Workbox instance with a script URL and service worker\n * options. The script URL and options are the same as those used when\n * calling `navigator.serviceWorker.register(scriptURL, options)`. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register\n *\n * @param {string} scriptURL The service worker script associated with this\n * instance.\n * @param {Object} [registerOptions] The service worker options associated\n * with this instance.\n */\n constructor(scriptURL, registerOptions = {}) {\n super();\n\n this._scriptURL = scriptURL;\n this._registerOptions = registerOptions;\n this._updateFoundCount = 0;\n\n // Deferreds we can resolve later.\n this._swDeferred = new Deferred();\n this._activeDeferred = new Deferred();\n this._controllingDeferred = new Deferred();\n\n // Bind event handler callbacks.\n this._onMessage = this._onMessage.bind(this);\n this._onStateChange = this._onStateChange.bind(this);\n this._onUpdateFound = this._onUpdateFound.bind(this);\n this._onControllerChange = this._onControllerChange.bind(this);\n }\n\n /**\n * Registers a service worker for this instances script URL and service\n * worker options. By default this method delays registration until after\n * the window has loaded.\n *\n * @param {Object} [options]\n * @param {Function} [options.immediate=false] Setting this to true will\n * register the service worker immediately, even if the window has\n * not loaded (not recommended).\n */\n async register({immediate = false} = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (this._registrationTime) {\n logger.error('Cannot re-register a Workbox instance after it has ' +\n 'been registered. Create a new instance instead.');\n return;\n }\n }\n\n if (!immediate && document.readyState !== 'complete') {\n await new Promise((res) => addEventListener('load', res));\n }\n\n // Set this flag to true if any service worker was controlling the page\n // at registration time.\n this._isUpdate = Boolean(navigator.serviceWorker.controller);\n\n // Before registering, attempt to determine if a SW is already controlling\n // the page, and if that SW script (and version, if specified) matches this\n // instance's script.\n this._compatibleControllingSW = this._getControllingSWIfCompatible();\n\n this._registration = await this._registerScript();\n\n // If we have a compatible controller, store the controller as the \"own\"\n // SW, resolve active/controlling deferreds and add necessary listeners.\n if (this._compatibleControllingSW) {\n this._sw = this._compatibleControllingSW;\n this._activeDeferred.resolve(this._compatibleControllingSW);\n this._controllingDeferred.resolve(this._compatibleControllingSW);\n\n this._reportWindowReady(this._compatibleControllingSW);\n this._compatibleControllingSW.addEventListener(\n 'statechange', this._onStateChange, {once: true});\n }\n\n // If there's a waiting service worker with a matching URL before the\n // `updatefound` event fires, it likely means that this site is open\n // in another tab, or the user refreshed the page (and thus the prevoius\n // page wasn't fully unloaded before this page started loading).\n // https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#waiting\n const waitingSW = this._registration.waiting;\n if (waitingSW && urlsMatch(waitingSW.scriptURL, this._scriptURL)) {\n // Store the waiting SW as the \"own\" Sw, even if it means overwriting\n // a compatible controller.\n this._sw = waitingSW;\n\n // Run this in the next microtask, so any code that adds an event\n // listener after awaiting `register()` will get this event.\n Promise.resolve().then(() => {\n this.dispatchEvent(new WorkboxEvent('waiting', {\n sw: waitingSW,\n wasWaitingBeforeRegister: true,\n }));\n if (process.env.NODE_ENV !== 'production') {\n logger.warn('A service worker was already waiting to activate ' +\n 'before this script was registered...');\n }\n });\n }\n\n // If an \"own\" SW is already set, resolve the deferred.\n if (this._sw) {\n this._swDeferred.resolve(this._sw);\n }\n\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Successfully registered service worker.', this._scriptURL);\n\n if (navigator.serviceWorker.controller) {\n if (this._compatibleControllingSW) {\n logger.debug('A service worker with the same script URL ' +\n 'is already controlling this page.');\n } else {\n logger.debug('A service worker with a different script URL is ' +\n 'currently controlling the page. The browser is now fetching ' +\n 'the new script now...');\n }\n }\n\n const currentPageIsOutOfScope = () => {\n const scopeURL = new URL(\n this._registerOptions.scope || this._scriptURL, document.baseURI);\n const scopeURLBasePath = new URL('./', scopeURL.href).pathname;\n return !location.pathname.startsWith(scopeURLBasePath);\n };\n if (currentPageIsOutOfScope()) {\n logger.warn('The current page is not in scope for the registered ' +\n 'service worker. Was this a mistake?');\n }\n }\n\n this._registration.addEventListener('updatefound', this._onUpdateFound);\n navigator.serviceWorker.addEventListener(\n 'controllerchange', this._onControllerChange, {once: true});\n\n // Add message listeners.\n if ('BroadcastChannel' in self) {\n this._broadcastChannel = new BroadcastChannel('workbox');\n this._broadcastChannel.addEventListener('message', this._onMessage);\n }\n navigator.serviceWorker.addEventListener('message', this._onMessage);\n\n return this._registration;\n }\n\n /**\n * Resolves to the service worker registered by this instance as soon as it\n * is active. If a service worker was already controlling at registration\n * time then it will resolve to that if the script URLs (and optionally\n * script versions) match, otherwise it will wait until an update is found\n * and activates.\n *\n * @return {Promise<ServiceWorker>}\n */\n get active() {\n return this._activeDeferred.promise;\n }\n\n /**\n * Resolves to the service worker registered by this instance as soon as it\n * is controlling the page. If a service worker was already controlling at\n * registration time then it will resolve to that if the script URLs (and\n * optionally script versions) match, otherwise it will wait until an update\n * is found and starts controlling the page.\n * Note: the first time a service worker is installed it will active but\n * not start controlling the page unless `clients.claim()` is called in the\n * service worker.\n *\n * @return {Promise<ServiceWorker>}\n */\n get controlling() {\n return this._controllingDeferred.promise;\n }\n\n /**\n * Resolves with a reference to a service worker that matches the script URL\n * of this instance, as soon as it's available.\n *\n * If, at registration time, there's already an active or waiting service\n * worker with a matching script URL, it will be used (with the waiting\n * service worker taking precedence over the active service worker if both\n * match, since the waiting service worker would have been registered more\n * recently).\n * If there's no matching active or waiting service worker at registration\n * time then the promise will not resolve until an update is found and starts\n * installing, at which point the installing service worker is used.\n *\n * @return {Promise<ServiceWorker>}\n */\n async getSW() {\n // If `this._sw` is set, resolve with that as we want `getSW()` to\n // return the correct (new) service worker if an update is found.\n return this._sw || this._swDeferred.promise;\n }\n\n /**\n * Sends the passed data object to the service worker registered by this\n * instance (via [`getSW()`]{@link module:workbox-window.Workbox#getSW}) and resolves\n * with a response (if any).\n *\n * A response can be set in a message handler in the service worker by\n * calling `event.ports[0].postMessage(...)`, which will resolve the promise\n * returned by `messageSW()`. If no response is set, the promise will never\n * resolve.\n *\n * @param {Object} data An object to send to the service worker\n * @return {Promise<Object>}\n */\n async messageSW(data) {\n const sw = await this.getSW();\n return messageSW(sw, data);\n }\n\n /**\n * Checks for a service worker already controlling the page and returns\n * it if its script URL matchs.\n *\n * @private\n * @return {ServiceWorker|undefined}\n */\n _getControllingSWIfCompatible() {\n const controller = navigator.serviceWorker.controller;\n if (controller && urlsMatch(controller.scriptURL, this._scriptURL)) {\n return controller;\n }\n }\n\n /**\n * Registers a service worker for this instances script URL and register\n * options and tracks the time registration was complete.\n *\n * @private\n */\n async _registerScript() {\n try {\n const reg = await navigator.serviceWorker.register(\n this._scriptURL, this._registerOptions);\n\n // Keep track of when registration happened, so it can be used in the\n // `this._onUpdateFound` heuristic. Also use the presence of this\n // property as a way to see if `.register()` has been called.\n this._registrationTime = performance.now();\n\n return reg;\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(error);\n }\n // Re-throw the error.\n throw error;\n }\n }\n\n\n /**\n * Sends a message to the passed service worker that the window is ready.\n *\n * @param {ServiceWorker} sw\n * @private\n */\n _reportWindowReady(sw) {\n messageSW(sw, {\n type: 'WINDOW_READY',\n meta: 'workbox-window',\n });\n }\n\n /**\n * @private\n */\n _onUpdateFound() {\n const installingSW = this._registration.installing;\n\n // If the script URL passed to `navigator.serviceWorker.register()` is\n // different from the current controlling SW's script URL, we know any\n // successful registration calls will trigger an `updatefound` event.\n // But if the registered script URL is the same as the current controlling\n // SW's script URL, we'll only get an `updatefound` event if the file\n // changed since it was last registered. This can be a problem if the user\n // opens up the same page in a different tab, and that page registers\n // a SW that triggers an update. It's a problem because this page has no\n // good way of knowing whether the `updatefound` event came from the SW\n // script it registered or from a registration attempt made by a newer\n // version of the page running in another tab.\n // To minimize the possibility of a false positive, we use the logic here:\n let updateLikelyTriggeredExternally =\n // Since we enforce only calling `register()` once, and since we don't\n // add the `updatefound` event listener until the `register()` call, if\n // `_updateFoundCount` is > 0 then it means this method has already\n // been called, thus this SW must be external\n this._updateFoundCount > 0 ||\n // If the script URL of the installing SW is different from this\n // instance's script URL, we know it's definitely not from our\n // registration.\n !urlsMatch(installingSW.scriptURL, this._scriptURL) ||\n // If all of the above are false, then we use a time-based heuristic:\n // Any `updatefound` event that occurs long after our registration is\n // assumed to be external.\n (performance.now() >\n this._registrationTime + REGISTRATION_TIMEOUT_DURATION) ?\n // If any of the above are not true, we assume the update was\n // triggered by this instance.\n true : false;\n\n if (updateLikelyTriggeredExternally) {\n this._externalSW = installingSW;\n this._registration.removeEventListener(\n 'updatefound', this._onUpdateFound);\n } else {\n // If the update was not triggered externally we know the installing\n // SW is the one we registered, so we set it.\n this._sw = installingSW;\n this._swDeferred.resolve(installingSW);\n\n // The `installing` state isn't something we have a dedicated\n // callback for, but we do log messages for it in development.\n if (process.env.NODE_ENV !== 'production') {\n if (navigator.serviceWorker.controller) {\n logger.log('Updated service worker found. Installing now...');\n } else {\n logger.log('Service worker is installing...');\n }\n }\n }\n\n // Increment the `updatefound` count, so future invocations of this\n // method can be sure they were triggered externally.\n ++this._updateFoundCount;\n\n // Add a `statechange` listener regardless of whether this update was\n // triggered externally, since we have callbacks for both.\n installingSW.addEventListener('statechange', this._onStateChange);\n }\n\n /**\n * @private\n * @param {Event} originalEvent\n */\n _onStateChange(originalEvent) {\n const sw = originalEvent.target;\n const {state} = sw;\n const isExternal = sw === this._externalSW;\n const eventPrefix = isExternal ? 'external' : '';\n\n const eventProps = {sw, originalEvent};\n if (!isExternal && this._isUpdate) {\n eventProps.isUpdate = true;\n }\n\n this.dispatchEvent(new WorkboxEvent(\n eventPrefix + state, eventProps));\n\n if (state === 'installed') {\n // This timeout is used to ignore cases where the service worker calls\n // `skipWaiting()` in the install event, thus moving it directly in the\n // activating state. (Since all service workers *must* go through the\n // waiting phase, the only way to detect `skipWaiting()` called in the\n // install event is to observe that the time spent in the waiting phase\n // is very short.)\n // NOTE: we don't need separate timeouts for the own and external SWs\n // since they can't go through these phases at the same time.\n this._waitingTimeout = setTimeout(() => {\n // Ensure the SW is still waiting (it may now be redundant).\n if (state === 'installed' && this._registration.waiting === sw) {\n this.dispatchEvent(new WorkboxEvent(\n eventPrefix + 'waiting', eventProps));\n\n if (process.env.NODE_ENV !== 'production') {\n if (isExternal) {\n logger.warn('An external service worker has installed but is ' +\n 'waiting for this client to close before activating...');\n } else {\n logger.warn('The service worker has installed but is waiting ' +\n 'for existing clients to close before activating...');\n }\n }\n }\n }, WAITING_TIMEOUT_DURATION);\n } else if (state === 'activating') {\n clearTimeout(this._waitingTimeout);\n if (!isExternal) {\n this._activeDeferred.resolve(sw);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n switch (state) {\n case 'installed':\n if (isExternal) {\n logger.warn('An external service worker has installed. ' +\n 'You may want to suggest users reload this page.');\n } else {\n logger.log('Registered service worker installed.');\n }\n break;\n case 'activated':\n if (isExternal) {\n logger.warn('An external service worker has activated.');\n } else {\n logger.log('Registered service worker activated.');\n if (sw !== navigator.serviceWorker.controller) {\n logger.warn('The registered service worker is active but ' +\n 'not yet controlling the page. Reload or run ' +\n '`clients.claim()` in the service worker.');\n }\n }\n break;\n case 'redundant':\n if (sw === this._compatibleControllingSW) {\n logger.log('Previously controlling service worker now redundant!');\n } else if (!isExternal) {\n logger.log('Registered service worker now redundant!');\n }\n break;\n }\n }\n }\n\n /**\n * @private\n * @param {Event} originalEvent\n */\n _onControllerChange(originalEvent) {\n const sw = this._sw;\n if (sw === navigator.serviceWorker.controller) {\n this.dispatchEvent(new WorkboxEvent('controlling', {sw, originalEvent}));\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Registered service worker now controlling this page.');\n }\n this._controllingDeferred.resolve(sw);\n }\n }\n\n /**\n * @private\n * @param {Event} originalEvent\n */\n _onMessage(originalEvent) {\n const {data} = originalEvent;\n this.dispatchEvent(new WorkboxEvent('message', {data, originalEvent}));\n }\n}\n\n// The jsdoc comments below outline the events this instance may dispatch:\n// -----------------------------------------------------------------------\n\n/**\n * The `message` event is dispatched any time a `postMessage` (or a\n * `BroadcastChannel` message with the `workbox` channel name) is received.\n *\n * @event module:workbox-window.Workbox#message\n * @type {WorkboxEvent}\n * @property {*} data The `data` property from the original `message` event.\n * @property {Event} originalEvent The original [`message`]{@link https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent}\n * event.\n * @property {string} type `message`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `installed` event is dispatched if the state of a\n * [`Workbox`]{@link module:workbox-window.Workbox} instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}\n * changes to `installed`.\n *\n * Then can happen either the very first time a service worker is installed,\n * or after an update to the current service worker is found. In the case\n * of an update being found, the event's `isUpdate` property will be `true`.\n *\n * @event module:workbox-window.Workbox#installed\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this `Workbox` instance called `register()`.\n * @property {string} type `installed`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `waiting` event is dispatched if the state of a\n * [`Workbox`]{@link module:workbox-window.Workbox} instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}\n * changes to `installed` and then doesn't immediately change to `activating`.\n * It may also be dispatched if a service worker with the same\n * [`scriptURL`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/scriptURL}\n * was already waiting when the [`register()`]{@link module:workbox-window.Workbox#register}\n * method was called.\n *\n * @event module:workbox-window.Workbox#waiting\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The native `controllerchange` event\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this `Workbox` instance called `register()`.\n * @property {boolean|undefined} wasWaitingBeforeRegister True if a service worker with\n * a matching `scriptURL` was already waiting when this `Workbox`\n * instance called `register()`.\n * @property {string} type `waiting`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `controlling` event is dispatched if a\n * [`controllerchange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/oncontrollerchange}\n * fires on the service worker [container]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer}\n * and the [`scriptURL`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/scriptURL}\n * of the new [controller]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/controller}\n * matches the `scriptURL` of the `Workbox` instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}.\n *\n * @event module:workbox-window.Workbox#controlling\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`controllerchange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/oncontrollerchange}\n * event.\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this service worker was registered.\n * @property {string} type `controlling`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `activated` event is dispatched if the state of a\n * [`Workbox`]{@link module:workbox-window.Workbox} instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}\n * changes to `activated`.\n *\n * @event module:workbox-window.Workbox#activated\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this `Workbox` instance called `register()`.\n * @property {string} type `activated`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `redundant` event is dispatched if the state of a\n * [`Workbox`]{@link module:workbox-window.Workbox} instance's\n * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}\n * changes to `redundant`.\n *\n * @event module:workbox-window.Workbox#redundant\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {boolean|undefined} isUpdate True if a service worker was already\n * controlling when this `Workbox` instance called `register()`.\n * @property {string} type `redundant`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `externalinstalled` event is dispatched if the state of an\n * [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-external-sw}\n * changes to `installed`.\n *\n * @event module:workbox-window.Workbox#externalinstalled\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {string} type `externalinstalled`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `externalwaiting` event is dispatched if the state of an\n * [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-external-sw}\n * changes to `waiting`.\n *\n * @event module:workbox-window.Workbox#externalwaiting\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event|undefined} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {string} type `externalwaiting`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\n/**\n * The `externalactivated` event is dispatched if the state of an\n * [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-external-sw}\n * changes to `activated`.\n *\n * @event module:workbox-window.Workbox#externalactivated\n * @type {WorkboxEvent}\n * @property {ServiceWorker} sw The service worker instance.\n * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}\n * event.\n * @property {string} type `externalactivated`.\n * @property {Workbox} target The `Workbox` instance.\n */\n\nexport {Workbox};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\n\nimport {messageSW} from './messageSW.mjs';\nimport {Workbox} from './Workbox.mjs';\nimport './_version.mjs';\n\n\n/**\n * @module workbox-window\n */\nexport {\n Workbox,\n messageSW,\n};\n"],"names":["self","_","e","messageSW","sw","data","Promise","resolve","messageChannel","MessageChannel","port1","onmessage","evt","postMessage","port2","Deferred","constructor","promise","reject","logger","process","inGroup","methodToColorMap","debug","log","warn","error","groupCollapsed","groupEnd","print","method","args","test","navigator","userAgent","console","styles","logPrefix","join","api","Object","keys","EventTargetShim","_eventListenerRegistry","addEventListener","type","listener","_getEventListenersByType","add","removeEventListener","delete","dispatchEvent","event","target","forEach","Set","urlsMatch","url1","url2","URL","location","href","WorkboxEvent","props","assign","WAITING_TIMEOUT_DURATION","REGISTRATION_TIMEOUT_DURATION","Workbox","scriptURL","registerOptions","_scriptURL","_registerOptions","_updateFoundCount","_swDeferred","_activeDeferred","_controllingDeferred","_onMessage","bind","_onStateChange","_onUpdateFound","_onControllerChange","register","immediate","_registrationTime","document","readyState","res","_isUpdate","Boolean","serviceWorker","controller","_compatibleControllingSW","_getControllingSWIfCompatible","_registration","_registerScript","_sw","_reportWindowReady","once","waitingSW","waiting","then","wasWaitingBeforeRegister","currentPageIsOutOfScope","scopeURL","scope","baseURI","scopeURLBasePath","pathname","startsWith","_broadcastChannel","BroadcastChannel","active","controlling","getSW","reg","performance","now","meta","installingSW","installing","updateLikelyTriggeredExternally","_externalSW","originalEvent","state","isExternal","eventPrefix","eventProps","isUpdate","_waitingTimeout","setTimeout","clearTimeout"],"mappings":"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"}
|
@@ -1,896 +0,0 @@
|
|
1
|
-
(function (global, factory) {
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
4
|
-
(global = global || self, factory(global.workbox = {}));
|
5
|
-
}(this, function (exports) { 'use strict';
|
6
|
-
|
7
|
-
try {
|
8
|
-
self['workbox:window:4.3.1'] && _();
|
9
|
-
} catch (e) {} // eslint-disable-line
|
10
|
-
|
11
|
-
/*
|
12
|
-
Copyright 2019 Google LLC
|
13
|
-
|
14
|
-
Use of this source code is governed by an MIT-style
|
15
|
-
license that can be found in the LICENSE file or at
|
16
|
-
https://opensource.org/licenses/MIT.
|
17
|
-
*/
|
18
|
-
/**
|
19
|
-
* Sends a data object to a service worker via `postMessage` and resolves with
|
20
|
-
* a response (if any).
|
21
|
-
*
|
22
|
-
* A response can be set in a message handler in the service worker by
|
23
|
-
* calling `event.ports[0].postMessage(...)`, which will resolve the promise
|
24
|
-
* returned by `messageSW()`. If no response is set, the promise will not
|
25
|
-
* resolve.
|
26
|
-
*
|
27
|
-
* @param {ServiceWorker} sw The service worker to send the message to.
|
28
|
-
* @param {Object} data An object to send to the service worker.
|
29
|
-
* @return {Promise<Object|undefined>}
|
30
|
-
*
|
31
|
-
* @memberof module:workbox-window
|
32
|
-
*/
|
33
|
-
|
34
|
-
var messageSW = function messageSW(sw, data) {
|
35
|
-
return new Promise(function (resolve) {
|
36
|
-
var messageChannel = new MessageChannel();
|
37
|
-
|
38
|
-
messageChannel.port1.onmessage = function (evt) {
|
39
|
-
return resolve(evt.data);
|
40
|
-
};
|
41
|
-
|
42
|
-
sw.postMessage(data, [messageChannel.port2]);
|
43
|
-
});
|
44
|
-
};
|
45
|
-
|
46
|
-
function _defineProperties(target, props) {
|
47
|
-
for (var i = 0; i < props.length; i++) {
|
48
|
-
var descriptor = props[i];
|
49
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
50
|
-
descriptor.configurable = true;
|
51
|
-
if ("value" in descriptor) descriptor.writable = true;
|
52
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
53
|
-
}
|
54
|
-
}
|
55
|
-
|
56
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
57
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
58
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
59
|
-
return Constructor;
|
60
|
-
}
|
61
|
-
|
62
|
-
function _inheritsLoose(subClass, superClass) {
|
63
|
-
subClass.prototype = Object.create(superClass.prototype);
|
64
|
-
subClass.prototype.constructor = subClass;
|
65
|
-
subClass.__proto__ = superClass;
|
66
|
-
}
|
67
|
-
|
68
|
-
function _assertThisInitialized(self) {
|
69
|
-
if (self === void 0) {
|
70
|
-
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
71
|
-
}
|
72
|
-
|
73
|
-
return self;
|
74
|
-
}
|
75
|
-
|
76
|
-
try {
|
77
|
-
self['workbox:core:4.3.1'] && _();
|
78
|
-
} catch (e) {} // eslint-disable-line
|
79
|
-
|
80
|
-
/*
|
81
|
-
Copyright 2018 Google LLC
|
82
|
-
|
83
|
-
Use of this source code is governed by an MIT-style
|
84
|
-
license that can be found in the LICENSE file or at
|
85
|
-
https://opensource.org/licenses/MIT.
|
86
|
-
*/
|
87
|
-
/**
|
88
|
-
* The Deferred class composes Promises in a way that allows for them to be
|
89
|
-
* resolved or rejected from outside the constructor. In most cases promises
|
90
|
-
* should be used directly, but Deferreds can be necessary when the logic to
|
91
|
-
* resolve a promise must be separate.
|
92
|
-
*
|
93
|
-
* @private
|
94
|
-
*/
|
95
|
-
|
96
|
-
var Deferred =
|
97
|
-
/**
|
98
|
-
* Creates a promise and exposes its resolve and reject functions as methods.
|
99
|
-
*/
|
100
|
-
function Deferred() {
|
101
|
-
var _this = this;
|
102
|
-
|
103
|
-
this.promise = new Promise(function (resolve, reject) {
|
104
|
-
_this.resolve = resolve;
|
105
|
-
_this.reject = reject;
|
106
|
-
});
|
107
|
-
};
|
108
|
-
|
109
|
-
/*
|
110
|
-
Copyright 2019 Google LLC
|
111
|
-
Use of this source code is governed by an MIT-style
|
112
|
-
license that can be found in the LICENSE file or at
|
113
|
-
https://opensource.org/licenses/MIT.
|
114
|
-
*/
|
115
|
-
var logger = function () {
|
116
|
-
var inGroup = false;
|
117
|
-
var methodToColorMap = {
|
118
|
-
debug: "#7f8c8d",
|
119
|
-
// Gray
|
120
|
-
log: "#2ecc71",
|
121
|
-
// Green
|
122
|
-
warn: "#f39c12",
|
123
|
-
// Yellow
|
124
|
-
error: "#c0392b",
|
125
|
-
// Red
|
126
|
-
groupCollapsed: "#3498db",
|
127
|
-
// Blue
|
128
|
-
groupEnd: null // No colored prefix on groupEnd
|
129
|
-
|
130
|
-
};
|
131
|
-
|
132
|
-
var print = function print(method, args) {
|
133
|
-
var _console2;
|
134
|
-
|
135
|
-
if (method === 'groupCollapsed') {
|
136
|
-
// Safari doesn't print all console.groupCollapsed() arguments:
|
137
|
-
// https://bugs.webkit.org/show_bug.cgi?id=182754
|
138
|
-
if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
|
139
|
-
var _console;
|
140
|
-
|
141
|
-
(_console = console)[method].apply(_console, args);
|
142
|
-
|
143
|
-
return;
|
144
|
-
}
|
145
|
-
}
|
146
|
-
|
147
|
-
var styles = ["background: " + methodToColorMap[method], "border-radius: 0.5em", "color: white", "font-weight: bold", "padding: 2px 0.5em"]; // When in a group, the workbox prefix is not displayed.
|
148
|
-
|
149
|
-
var logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];
|
150
|
-
|
151
|
-
(_console2 = console)[method].apply(_console2, logPrefix.concat(args));
|
152
|
-
|
153
|
-
if (method === 'groupCollapsed') {
|
154
|
-
inGroup = true;
|
155
|
-
}
|
156
|
-
|
157
|
-
if (method === 'groupEnd') {
|
158
|
-
inGroup = false;
|
159
|
-
}
|
160
|
-
};
|
161
|
-
|
162
|
-
var api = {};
|
163
|
-
|
164
|
-
var _arr = Object.keys(methodToColorMap);
|
165
|
-
|
166
|
-
var _loop = function _loop() {
|
167
|
-
var method = _arr[_i];
|
168
|
-
|
169
|
-
api[method] = function () {
|
170
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
171
|
-
args[_key] = arguments[_key];
|
172
|
-
}
|
173
|
-
|
174
|
-
print(method, args);
|
175
|
-
};
|
176
|
-
};
|
177
|
-
|
178
|
-
for (var _i = 0; _i < _arr.length; _i++) {
|
179
|
-
_loop();
|
180
|
-
}
|
181
|
-
|
182
|
-
return api;
|
183
|
-
}();
|
184
|
-
|
185
|
-
/*
|
186
|
-
Copyright 2019 Google LLC
|
187
|
-
|
188
|
-
Use of this source code is governed by an MIT-style
|
189
|
-
license that can be found in the LICENSE file or at
|
190
|
-
https://opensource.org/licenses/MIT.
|
191
|
-
*/
|
192
|
-
/**
|
193
|
-
* A minimal `EventTarget` shim.
|
194
|
-
* This is necessary because not all browsers support constructable
|
195
|
-
* `EventTarget`, so using a real `EventTarget` will error.
|
196
|
-
* @private
|
197
|
-
*/
|
198
|
-
|
199
|
-
var EventTargetShim =
|
200
|
-
/*#__PURE__*/
|
201
|
-
function () {
|
202
|
-
/**
|
203
|
-
* Creates an event listener registry
|
204
|
-
*
|
205
|
-
* @private
|
206
|
-
*/
|
207
|
-
function EventTargetShim() {
|
208
|
-
// A registry of event types to listeners.
|
209
|
-
this._eventListenerRegistry = {};
|
210
|
-
}
|
211
|
-
/**
|
212
|
-
* @param {string} type
|
213
|
-
* @param {Function} listener
|
214
|
-
* @private
|
215
|
-
*/
|
216
|
-
|
217
|
-
|
218
|
-
var _proto = EventTargetShim.prototype;
|
219
|
-
|
220
|
-
_proto.addEventListener = function addEventListener(type, listener) {
|
221
|
-
this._getEventListenersByType(type).add(listener);
|
222
|
-
};
|
223
|
-
/**
|
224
|
-
* @param {string} type
|
225
|
-
* @param {Function} listener
|
226
|
-
* @private
|
227
|
-
*/
|
228
|
-
|
229
|
-
|
230
|
-
_proto.removeEventListener = function removeEventListener(type, listener) {
|
231
|
-
this._getEventListenersByType(type).delete(listener);
|
232
|
-
};
|
233
|
-
/**
|
234
|
-
* @param {Event} event
|
235
|
-
* @private
|
236
|
-
*/
|
237
|
-
|
238
|
-
|
239
|
-
_proto.dispatchEvent = function dispatchEvent(event) {
|
240
|
-
event.target = this;
|
241
|
-
|
242
|
-
this._getEventListenersByType(event.type).forEach(function (listener) {
|
243
|
-
return listener(event);
|
244
|
-
});
|
245
|
-
};
|
246
|
-
/**
|
247
|
-
* Returns a Set of listeners associated with the passed event type.
|
248
|
-
* If no handlers have been registered, an empty Set is returned.
|
249
|
-
*
|
250
|
-
* @param {string} type The event type.
|
251
|
-
* @return {Set} An array of handler functions.
|
252
|
-
* @private
|
253
|
-
*/
|
254
|
-
|
255
|
-
|
256
|
-
_proto._getEventListenersByType = function _getEventListenersByType(type) {
|
257
|
-
return this._eventListenerRegistry[type] = this._eventListenerRegistry[type] || new Set();
|
258
|
-
};
|
259
|
-
|
260
|
-
return EventTargetShim;
|
261
|
-
}();
|
262
|
-
|
263
|
-
/*
|
264
|
-
Copyright 2019 Google LLC
|
265
|
-
|
266
|
-
Use of this source code is governed by an MIT-style
|
267
|
-
license that can be found in the LICENSE file or at
|
268
|
-
https://opensource.org/licenses/MIT.
|
269
|
-
*/
|
270
|
-
/**
|
271
|
-
* Returns true if two URLs have the same `.href` property. The URLS can be
|
272
|
-
* relative, and if they are the current location href is used to resolve URLs.
|
273
|
-
*
|
274
|
-
* @private
|
275
|
-
* @param {string} url1
|
276
|
-
* @param {string} url2
|
277
|
-
* @return {boolean}
|
278
|
-
*/
|
279
|
-
|
280
|
-
var urlsMatch = function urlsMatch(url1, url2) {
|
281
|
-
return new URL(url1, location).href === new URL(url2, location).href;
|
282
|
-
};
|
283
|
-
|
284
|
-
/*
|
285
|
-
Copyright 2019 Google LLC
|
286
|
-
|
287
|
-
Use of this source code is governed by an MIT-style
|
288
|
-
license that can be found in the LICENSE file or at
|
289
|
-
https://opensource.org/licenses/MIT.
|
290
|
-
*/
|
291
|
-
/**
|
292
|
-
* A minimal `Event` subclass shim.
|
293
|
-
* This doesn't *actually* subclass `Event` because not all browsers support
|
294
|
-
* constructable `EventTarget`, and using a real `Event` will error.
|
295
|
-
* @private
|
296
|
-
*/
|
297
|
-
|
298
|
-
var WorkboxEvent =
|
299
|
-
/**
|
300
|
-
* @param {string} type
|
301
|
-
* @param {Object} props
|
302
|
-
*/
|
303
|
-
function WorkboxEvent(type, props) {
|
304
|
-
Object.assign(this, props, {
|
305
|
-
type: type
|
306
|
-
});
|
307
|
-
};
|
308
|
-
|
309
|
-
function _catch(body, recover) {
|
310
|
-
try {
|
311
|
-
var result = body();
|
312
|
-
} catch (e) {
|
313
|
-
return recover(e);
|
314
|
-
}
|
315
|
-
|
316
|
-
if (result && result.then) {
|
317
|
-
return result.then(void 0, recover);
|
318
|
-
}
|
319
|
-
|
320
|
-
return result;
|
321
|
-
}
|
322
|
-
|
323
|
-
function _async(f) {
|
324
|
-
return function () {
|
325
|
-
for (var args = [], i = 0; i < arguments.length; i++) {
|
326
|
-
args[i] = arguments[i];
|
327
|
-
}
|
328
|
-
|
329
|
-
try {
|
330
|
-
return Promise.resolve(f.apply(this, args));
|
331
|
-
} catch (e) {
|
332
|
-
return Promise.reject(e);
|
333
|
-
}
|
334
|
-
};
|
335
|
-
}
|
336
|
-
|
337
|
-
function _invoke(body, then) {
|
338
|
-
var result = body();
|
339
|
-
|
340
|
-
if (result && result.then) {
|
341
|
-
return result.then(then);
|
342
|
-
}
|
343
|
-
|
344
|
-
return then(result);
|
345
|
-
}
|
346
|
-
|
347
|
-
function _await(value, then, direct) {
|
348
|
-
if (direct) {
|
349
|
-
return then ? then(value) : value;
|
350
|
-
}
|
351
|
-
|
352
|
-
if (!value || !value.then) {
|
353
|
-
value = Promise.resolve(value);
|
354
|
-
}
|
355
|
-
|
356
|
-
return then ? value.then(then) : value;
|
357
|
-
}
|
358
|
-
|
359
|
-
function _awaitIgnored(value, direct) {
|
360
|
-
if (!direct) {
|
361
|
-
return value && value.then ? value.then(_empty) : Promise.resolve();
|
362
|
-
}
|
363
|
-
}
|
364
|
-
|
365
|
-
function _empty() {}
|
366
|
-
// `skipWaiting()` wasn't called. This 200 amount wasn't scientifically
|
367
|
-
// chosen, but it seems to avoid false positives in my testing.
|
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
|
-
|
372
|
-
var REGISTRATION_TIMEOUT_DURATION = 60000;
|
373
|
-
/**
|
374
|
-
* A class to aid in handling service worker registration, updates, and
|
375
|
-
* reacting to service worker lifecycle events.
|
376
|
-
*
|
377
|
-
* @fires [message]{@link module:workbox-window.Workbox#message}
|
378
|
-
* @fires [installed]{@link module:workbox-window.Workbox#installed}
|
379
|
-
* @fires [waiting]{@link module:workbox-window.Workbox#waiting}
|
380
|
-
* @fires [controlling]{@link module:workbox-window.Workbox#controlling}
|
381
|
-
* @fires [activated]{@link module:workbox-window.Workbox#activated}
|
382
|
-
* @fires [redundant]{@link module:workbox-window.Workbox#redundant}
|
383
|
-
* @fires [externalinstalled]{@link module:workbox-window.Workbox#externalinstalled}
|
384
|
-
* @fires [externalwaiting]{@link module:workbox-window.Workbox#externalwaiting}
|
385
|
-
* @fires [externalactivated]{@link module:workbox-window.Workbox#externalactivated}
|
386
|
-
*
|
387
|
-
* @memberof module:workbox-window
|
388
|
-
*/
|
389
|
-
|
390
|
-
var Workbox =
|
391
|
-
/*#__PURE__*/
|
392
|
-
function (_EventTargetShim) {
|
393
|
-
_inheritsLoose(Workbox, _EventTargetShim);
|
394
|
-
|
395
|
-
/**
|
396
|
-
* Creates a new Workbox instance with a script URL and service worker
|
397
|
-
* options. The script URL and options are the same as those used when
|
398
|
-
* calling `navigator.serviceWorker.register(scriptURL, options)`. See:
|
399
|
-
* https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register
|
400
|
-
*
|
401
|
-
* @param {string} scriptURL The service worker script associated with this
|
402
|
-
* instance.
|
403
|
-
* @param {Object} [registerOptions] The service worker options associated
|
404
|
-
* with this instance.
|
405
|
-
*/
|
406
|
-
function Workbox(scriptURL, registerOptions) {
|
407
|
-
var _this;
|
408
|
-
|
409
|
-
if (registerOptions === void 0) {
|
410
|
-
registerOptions = {};
|
411
|
-
}
|
412
|
-
|
413
|
-
_this = _EventTargetShim.call(this) || this;
|
414
|
-
_this._scriptURL = scriptURL;
|
415
|
-
_this._registerOptions = registerOptions;
|
416
|
-
_this._updateFoundCount = 0; // Deferreds we can resolve later.
|
417
|
-
|
418
|
-
_this._swDeferred = new Deferred();
|
419
|
-
_this._activeDeferred = new Deferred();
|
420
|
-
_this._controllingDeferred = new Deferred(); // Bind event handler callbacks.
|
421
|
-
|
422
|
-
_this._onMessage = _this._onMessage.bind(_assertThisInitialized(_assertThisInitialized(_this)));
|
423
|
-
_this._onStateChange = _this._onStateChange.bind(_assertThisInitialized(_assertThisInitialized(_this)));
|
424
|
-
_this._onUpdateFound = _this._onUpdateFound.bind(_assertThisInitialized(_assertThisInitialized(_this)));
|
425
|
-
_this._onControllerChange = _this._onControllerChange.bind(_assertThisInitialized(_assertThisInitialized(_this)));
|
426
|
-
return _this;
|
427
|
-
}
|
428
|
-
/**
|
429
|
-
* Registers a service worker for this instances script URL and service
|
430
|
-
* worker options. By default this method delays registration until after
|
431
|
-
* the window has loaded.
|
432
|
-
*
|
433
|
-
* @param {Object} [options]
|
434
|
-
* @param {Function} [options.immediate=false] Setting this to true will
|
435
|
-
* register the service worker immediately, even if the window has
|
436
|
-
* not loaded (not recommended).
|
437
|
-
*/
|
438
|
-
|
439
|
-
|
440
|
-
var _proto = Workbox.prototype;
|
441
|
-
_proto.register = _async(function (_temp) {
|
442
|
-
var _this2 = this;
|
443
|
-
|
444
|
-
var _ref = _temp === void 0 ? {} : _temp,
|
445
|
-
_ref$immediate = _ref.immediate,
|
446
|
-
immediate = _ref$immediate === void 0 ? false : _ref$immediate;
|
447
|
-
|
448
|
-
{
|
449
|
-
if (_this2._registrationTime) {
|
450
|
-
logger.error('Cannot re-register a Workbox instance after it has ' + 'been registered. Create a new instance instead.');
|
451
|
-
return;
|
452
|
-
}
|
453
|
-
}
|
454
|
-
|
455
|
-
return _invoke(function () {
|
456
|
-
if (!immediate && document.readyState !== 'complete') {
|
457
|
-
return _awaitIgnored(new Promise(function (res) {
|
458
|
-
return addEventListener('load', res);
|
459
|
-
}));
|
460
|
-
}
|
461
|
-
}, function () {
|
462
|
-
// Set this flag to true if any service worker was controlling the page
|
463
|
-
// at registration time.
|
464
|
-
_this2._isUpdate = Boolean(navigator.serviceWorker.controller); // Before registering, attempt to determine if a SW is already controlling
|
465
|
-
// the page, and if that SW script (and version, if specified) matches this
|
466
|
-
// instance's script.
|
467
|
-
|
468
|
-
_this2._compatibleControllingSW = _this2._getControllingSWIfCompatible();
|
469
|
-
return _await(_this2._registerScript(), function (_this2$_registerScrip) {
|
470
|
-
_this2._registration = _this2$_registerScrip;
|
471
|
-
|
472
|
-
// If we have a compatible controller, store the controller as the "own"
|
473
|
-
// SW, resolve active/controlling deferreds and add necessary listeners.
|
474
|
-
if (_this2._compatibleControllingSW) {
|
475
|
-
_this2._sw = _this2._compatibleControllingSW;
|
476
|
-
|
477
|
-
_this2._activeDeferred.resolve(_this2._compatibleControllingSW);
|
478
|
-
|
479
|
-
_this2._controllingDeferred.resolve(_this2._compatibleControllingSW);
|
480
|
-
|
481
|
-
_this2._reportWindowReady(_this2._compatibleControllingSW);
|
482
|
-
|
483
|
-
_this2._compatibleControllingSW.addEventListener('statechange', _this2._onStateChange, {
|
484
|
-
once: true
|
485
|
-
});
|
486
|
-
} // If there's a waiting service worker with a matching URL before the
|
487
|
-
// `updatefound` event fires, it likely means that this site is open
|
488
|
-
// in another tab, or the user refreshed the page (and thus the prevoius
|
489
|
-
// page wasn't fully unloaded before this page started loading).
|
490
|
-
// https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#waiting
|
491
|
-
|
492
|
-
|
493
|
-
var waitingSW = _this2._registration.waiting;
|
494
|
-
|
495
|
-
if (waitingSW && urlsMatch(waitingSW.scriptURL, _this2._scriptURL)) {
|
496
|
-
// Store the waiting SW as the "own" Sw, even if it means overwriting
|
497
|
-
// a compatible controller.
|
498
|
-
_this2._sw = waitingSW; // Run this in the next microtask, so any code that adds an event
|
499
|
-
// listener after awaiting `register()` will get this event.
|
500
|
-
|
501
|
-
Promise.resolve().then(function () {
|
502
|
-
_this2.dispatchEvent(new WorkboxEvent('waiting', {
|
503
|
-
sw: waitingSW,
|
504
|
-
wasWaitingBeforeRegister: true
|
505
|
-
}));
|
506
|
-
|
507
|
-
{
|
508
|
-
logger.warn('A service worker was already waiting to activate ' + 'before this script was registered...');
|
509
|
-
}
|
510
|
-
});
|
511
|
-
} // If an "own" SW is already set, resolve the deferred.
|
512
|
-
|
513
|
-
|
514
|
-
if (_this2._sw) {
|
515
|
-
_this2._swDeferred.resolve(_this2._sw);
|
516
|
-
}
|
517
|
-
|
518
|
-
{
|
519
|
-
logger.log('Successfully registered service worker.', _this2._scriptURL);
|
520
|
-
|
521
|
-
if (navigator.serviceWorker.controller) {
|
522
|
-
if (_this2._compatibleControllingSW) {
|
523
|
-
logger.debug('A service worker with the same script URL ' + 'is already controlling this page.');
|
524
|
-
} else {
|
525
|
-
logger.debug('A service worker with a different script URL is ' + 'currently controlling the page. The browser is now fetching ' + 'the new script now...');
|
526
|
-
}
|
527
|
-
}
|
528
|
-
|
529
|
-
var currentPageIsOutOfScope = function currentPageIsOutOfScope() {
|
530
|
-
var scopeURL = new URL(_this2._registerOptions.scope || _this2._scriptURL, document.baseURI);
|
531
|
-
var scopeURLBasePath = new URL('./', scopeURL.href).pathname;
|
532
|
-
return !location.pathname.startsWith(scopeURLBasePath);
|
533
|
-
};
|
534
|
-
|
535
|
-
if (currentPageIsOutOfScope()) {
|
536
|
-
logger.warn('The current page is not in scope for the registered ' + 'service worker. Was this a mistake?');
|
537
|
-
}
|
538
|
-
}
|
539
|
-
|
540
|
-
_this2._registration.addEventListener('updatefound', _this2._onUpdateFound);
|
541
|
-
|
542
|
-
navigator.serviceWorker.addEventListener('controllerchange', _this2._onControllerChange, {
|
543
|
-
once: true
|
544
|
-
}); // Add message listeners.
|
545
|
-
|
546
|
-
if ('BroadcastChannel' in self) {
|
547
|
-
_this2._broadcastChannel = new BroadcastChannel('workbox');
|
548
|
-
|
549
|
-
_this2._broadcastChannel.addEventListener('message', _this2._onMessage);
|
550
|
-
}
|
551
|
-
|
552
|
-
navigator.serviceWorker.addEventListener('message', _this2._onMessage);
|
553
|
-
return _this2._registration;
|
554
|
-
});
|
555
|
-
});
|
556
|
-
});
|
557
|
-
/**
|
558
|
-
* Resolves to the service worker registered by this instance as soon as it
|
559
|
-
* is active. If a service worker was already controlling at registration
|
560
|
-
* time then it will resolve to that if the script URLs (and optionally
|
561
|
-
* script versions) match, otherwise it will wait until an update is found
|
562
|
-
* and activates.
|
563
|
-
*
|
564
|
-
* @return {Promise<ServiceWorker>}
|
565
|
-
*/
|
566
|
-
|
567
|
-
/**
|
568
|
-
* Resolves with a reference to a service worker that matches the script URL
|
569
|
-
* of this instance, as soon as it's available.
|
570
|
-
*
|
571
|
-
* If, at registration time, there's already an active or waiting service
|
572
|
-
* worker with a matching script URL, it will be used (with the waiting
|
573
|
-
* service worker taking precedence over the active service worker if both
|
574
|
-
* match, since the waiting service worker would have been registered more
|
575
|
-
* recently).
|
576
|
-
* If there's no matching active or waiting service worker at registration
|
577
|
-
* time then the promise will not resolve until an update is found and starts
|
578
|
-
* installing, at which point the installing service worker is used.
|
579
|
-
*
|
580
|
-
* @return {Promise<ServiceWorker>}
|
581
|
-
*/
|
582
|
-
_proto.getSW = _async(function () {
|
583
|
-
var _this3 = this;
|
584
|
-
|
585
|
-
// If `this._sw` is set, resolve with that as we want `getSW()` to
|
586
|
-
// return the correct (new) service worker if an update is found.
|
587
|
-
return _this3._sw || _this3._swDeferred.promise;
|
588
|
-
});
|
589
|
-
/**
|
590
|
-
* Sends the passed data object to the service worker registered by this
|
591
|
-
* instance (via [`getSW()`]{@link module:workbox-window.Workbox#getSW}) and resolves
|
592
|
-
* with a response (if any).
|
593
|
-
*
|
594
|
-
* A response can be set in a message handler in the service worker by
|
595
|
-
* calling `event.ports[0].postMessage(...)`, which will resolve the promise
|
596
|
-
* returned by `messageSW()`. If no response is set, the promise will never
|
597
|
-
* resolve.
|
598
|
-
*
|
599
|
-
* @param {Object} data An object to send to the service worker
|
600
|
-
* @return {Promise<Object>}
|
601
|
-
*/
|
602
|
-
|
603
|
-
_proto.messageSW = _async(function (data) {
|
604
|
-
var _this4 = this;
|
605
|
-
|
606
|
-
return _await(_this4.getSW(), function (sw) {
|
607
|
-
return messageSW(sw, data);
|
608
|
-
});
|
609
|
-
});
|
610
|
-
/**
|
611
|
-
* Checks for a service worker already controlling the page and returns
|
612
|
-
* it if its script URL matchs.
|
613
|
-
*
|
614
|
-
* @private
|
615
|
-
* @return {ServiceWorker|undefined}
|
616
|
-
*/
|
617
|
-
|
618
|
-
_proto._getControllingSWIfCompatible = function _getControllingSWIfCompatible() {
|
619
|
-
var controller = navigator.serviceWorker.controller;
|
620
|
-
|
621
|
-
if (controller && urlsMatch(controller.scriptURL, this._scriptURL)) {
|
622
|
-
return controller;
|
623
|
-
}
|
624
|
-
};
|
625
|
-
/**
|
626
|
-
* Registers a service worker for this instances script URL and register
|
627
|
-
* options and tracks the time registration was complete.
|
628
|
-
*
|
629
|
-
* @private
|
630
|
-
*/
|
631
|
-
|
632
|
-
|
633
|
-
_proto._registerScript = _async(function () {
|
634
|
-
var _this5 = this;
|
635
|
-
|
636
|
-
return _catch(function () {
|
637
|
-
return _await(navigator.serviceWorker.register(_this5._scriptURL, _this5._registerOptions), function (reg) {
|
638
|
-
// Keep track of when registration happened, so it can be used in the
|
639
|
-
// `this._onUpdateFound` heuristic. Also use the presence of this
|
640
|
-
// property as a way to see if `.register()` has been called.
|
641
|
-
_this5._registrationTime = performance.now();
|
642
|
-
return reg;
|
643
|
-
});
|
644
|
-
}, function (error) {
|
645
|
-
{
|
646
|
-
logger.error(error);
|
647
|
-
} // Re-throw the error.
|
648
|
-
|
649
|
-
|
650
|
-
throw error;
|
651
|
-
});
|
652
|
-
});
|
653
|
-
/**
|
654
|
-
* Sends a message to the passed service worker that the window is ready.
|
655
|
-
*
|
656
|
-
* @param {ServiceWorker} sw
|
657
|
-
* @private
|
658
|
-
*/
|
659
|
-
|
660
|
-
_proto._reportWindowReady = function _reportWindowReady(sw) {
|
661
|
-
messageSW(sw, {
|
662
|
-
type: 'WINDOW_READY',
|
663
|
-
meta: 'workbox-window'
|
664
|
-
});
|
665
|
-
};
|
666
|
-
/**
|
667
|
-
* @private
|
668
|
-
*/
|
669
|
-
|
670
|
-
|
671
|
-
_proto._onUpdateFound = function _onUpdateFound() {
|
672
|
-
var installingSW = this._registration.installing; // If the script URL passed to `navigator.serviceWorker.register()` is
|
673
|
-
// different from the current controlling SW's script URL, we know any
|
674
|
-
// successful registration calls will trigger an `updatefound` event.
|
675
|
-
// But if the registered script URL is the same as the current controlling
|
676
|
-
// SW's script URL, we'll only get an `updatefound` event if the file
|
677
|
-
// changed since it was last registered. This can be a problem if the user
|
678
|
-
// opens up the same page in a different tab, and that page registers
|
679
|
-
// a SW that triggers an update. It's a problem because this page has no
|
680
|
-
// good way of knowing whether the `updatefound` event came from the SW
|
681
|
-
// script it registered or from a registration attempt made by a newer
|
682
|
-
// version of the page running in another tab.
|
683
|
-
// To minimize the possibility of a false positive, we use the logic here:
|
684
|
-
|
685
|
-
var updateLikelyTriggeredExternally = // Since we enforce only calling `register()` once, and since we don't
|
686
|
-
// add the `updatefound` event listener until the `register()` call, if
|
687
|
-
// `_updateFoundCount` is > 0 then it means this method has already
|
688
|
-
// been called, thus this SW must be external
|
689
|
-
this._updateFoundCount > 0 || // If the script URL of the installing SW is different from this
|
690
|
-
// instance's script URL, we know it's definitely not from our
|
691
|
-
// registration.
|
692
|
-
!urlsMatch(installingSW.scriptURL, this._scriptURL) || // If all of the above are false, then we use a time-based heuristic:
|
693
|
-
// Any `updatefound` event that occurs long after our registration is
|
694
|
-
// assumed to be external.
|
695
|
-
performance.now() > this._registrationTime + REGISTRATION_TIMEOUT_DURATION ? // If any of the above are not true, we assume the update was
|
696
|
-
// triggered by this instance.
|
697
|
-
true : false;
|
698
|
-
|
699
|
-
if (updateLikelyTriggeredExternally) {
|
700
|
-
this._externalSW = installingSW;
|
701
|
-
|
702
|
-
this._registration.removeEventListener('updatefound', this._onUpdateFound);
|
703
|
-
} else {
|
704
|
-
// If the update was not triggered externally we know the installing
|
705
|
-
// SW is the one we registered, so we set it.
|
706
|
-
this._sw = installingSW;
|
707
|
-
|
708
|
-
this._swDeferred.resolve(installingSW); // The `installing` state isn't something we have a dedicated
|
709
|
-
// callback for, but we do log messages for it in development.
|
710
|
-
|
711
|
-
|
712
|
-
{
|
713
|
-
if (navigator.serviceWorker.controller) {
|
714
|
-
logger.log('Updated service worker found. Installing now...');
|
715
|
-
} else {
|
716
|
-
logger.log('Service worker is installing...');
|
717
|
-
}
|
718
|
-
}
|
719
|
-
} // Increment the `updatefound` count, so future invocations of this
|
720
|
-
// method can be sure they were triggered externally.
|
721
|
-
|
722
|
-
|
723
|
-
++this._updateFoundCount; // Add a `statechange` listener regardless of whether this update was
|
724
|
-
// triggered externally, since we have callbacks for both.
|
725
|
-
|
726
|
-
installingSW.addEventListener('statechange', this._onStateChange);
|
727
|
-
};
|
728
|
-
/**
|
729
|
-
* @private
|
730
|
-
* @param {Event} originalEvent
|
731
|
-
*/
|
732
|
-
|
733
|
-
|
734
|
-
_proto._onStateChange = function _onStateChange(originalEvent) {
|
735
|
-
var _this6 = this;
|
736
|
-
|
737
|
-
var sw = originalEvent.target;
|
738
|
-
var state = sw.state;
|
739
|
-
var isExternal = sw === this._externalSW;
|
740
|
-
var eventPrefix = isExternal ? 'external' : '';
|
741
|
-
var eventProps = {
|
742
|
-
sw: sw,
|
743
|
-
originalEvent: originalEvent
|
744
|
-
};
|
745
|
-
|
746
|
-
if (!isExternal && this._isUpdate) {
|
747
|
-
eventProps.isUpdate = true;
|
748
|
-
}
|
749
|
-
|
750
|
-
this.dispatchEvent(new WorkboxEvent(eventPrefix + state, eventProps));
|
751
|
-
|
752
|
-
if (state === 'installed') {
|
753
|
-
// This timeout is used to ignore cases where the service worker calls
|
754
|
-
// `skipWaiting()` in the install event, thus moving it directly in the
|
755
|
-
// activating state. (Since all service workers *must* go through the
|
756
|
-
// waiting phase, the only way to detect `skipWaiting()` called in the
|
757
|
-
// install event is to observe that the time spent in the waiting phase
|
758
|
-
// is very short.)
|
759
|
-
// NOTE: we don't need separate timeouts for the own and external SWs
|
760
|
-
// since they can't go through these phases at the same time.
|
761
|
-
this._waitingTimeout = setTimeout(function () {
|
762
|
-
// Ensure the SW is still waiting (it may now be redundant).
|
763
|
-
if (state === 'installed' && _this6._registration.waiting === sw) {
|
764
|
-
_this6.dispatchEvent(new WorkboxEvent(eventPrefix + 'waiting', eventProps));
|
765
|
-
|
766
|
-
{
|
767
|
-
if (isExternal) {
|
768
|
-
logger.warn('An external service worker has installed but is ' + 'waiting for this client to close before activating...');
|
769
|
-
} else {
|
770
|
-
logger.warn('The service worker has installed but is waiting ' + 'for existing clients to close before activating...');
|
771
|
-
}
|
772
|
-
}
|
773
|
-
}
|
774
|
-
}, WAITING_TIMEOUT_DURATION);
|
775
|
-
} else if (state === 'activating') {
|
776
|
-
clearTimeout(this._waitingTimeout);
|
777
|
-
|
778
|
-
if (!isExternal) {
|
779
|
-
this._activeDeferred.resolve(sw);
|
780
|
-
}
|
781
|
-
}
|
782
|
-
|
783
|
-
{
|
784
|
-
switch (state) {
|
785
|
-
case 'installed':
|
786
|
-
if (isExternal) {
|
787
|
-
logger.warn('An external service worker has installed. ' + 'You may want to suggest users reload this page.');
|
788
|
-
} else {
|
789
|
-
logger.log('Registered service worker installed.');
|
790
|
-
}
|
791
|
-
|
792
|
-
break;
|
793
|
-
|
794
|
-
case 'activated':
|
795
|
-
if (isExternal) {
|
796
|
-
logger.warn('An external service worker has activated.');
|
797
|
-
} else {
|
798
|
-
logger.log('Registered service worker activated.');
|
799
|
-
|
800
|
-
if (sw !== navigator.serviceWorker.controller) {
|
801
|
-
logger.warn('The registered service worker is active but ' + 'not yet controlling the page. Reload or run ' + '`clients.claim()` in the service worker.');
|
802
|
-
}
|
803
|
-
}
|
804
|
-
|
805
|
-
break;
|
806
|
-
|
807
|
-
case 'redundant':
|
808
|
-
if (sw === this._compatibleControllingSW) {
|
809
|
-
logger.log('Previously controlling service worker now redundant!');
|
810
|
-
} else if (!isExternal) {
|
811
|
-
logger.log('Registered service worker now redundant!');
|
812
|
-
}
|
813
|
-
|
814
|
-
break;
|
815
|
-
}
|
816
|
-
}
|
817
|
-
};
|
818
|
-
/**
|
819
|
-
* @private
|
820
|
-
* @param {Event} originalEvent
|
821
|
-
*/
|
822
|
-
|
823
|
-
|
824
|
-
_proto._onControllerChange = function _onControllerChange(originalEvent) {
|
825
|
-
var sw = this._sw;
|
826
|
-
|
827
|
-
if (sw === navigator.serviceWorker.controller) {
|
828
|
-
this.dispatchEvent(new WorkboxEvent('controlling', {
|
829
|
-
sw: sw,
|
830
|
-
originalEvent: originalEvent
|
831
|
-
}));
|
832
|
-
|
833
|
-
{
|
834
|
-
logger.log('Registered service worker now controlling this page.');
|
835
|
-
}
|
836
|
-
|
837
|
-
this._controllingDeferred.resolve(sw);
|
838
|
-
}
|
839
|
-
};
|
840
|
-
/**
|
841
|
-
* @private
|
842
|
-
* @param {Event} originalEvent
|
843
|
-
*/
|
844
|
-
|
845
|
-
|
846
|
-
_proto._onMessage = function _onMessage(originalEvent) {
|
847
|
-
var data = originalEvent.data;
|
848
|
-
this.dispatchEvent(new WorkboxEvent('message', {
|
849
|
-
data: data,
|
850
|
-
originalEvent: originalEvent
|
851
|
-
}));
|
852
|
-
};
|
853
|
-
|
854
|
-
_createClass(Workbox, [{
|
855
|
-
key: "active",
|
856
|
-
get: function get() {
|
857
|
-
return this._activeDeferred.promise;
|
858
|
-
}
|
859
|
-
/**
|
860
|
-
* Resolves to the service worker registered by this instance as soon as it
|
861
|
-
* is controlling the page. If a service worker was already controlling at
|
862
|
-
* registration time then it will resolve to that if the script URLs (and
|
863
|
-
* optionally script versions) match, otherwise it will wait until an update
|
864
|
-
* is found and starts controlling the page.
|
865
|
-
* Note: the first time a service worker is installed it will active but
|
866
|
-
* not start controlling the page unless `clients.claim()` is called in the
|
867
|
-
* service worker.
|
868
|
-
*
|
869
|
-
* @return {Promise<ServiceWorker>}
|
870
|
-
*/
|
871
|
-
|
872
|
-
}, {
|
873
|
-
key: "controlling",
|
874
|
-
get: function get() {
|
875
|
-
return this._controllingDeferred.promise;
|
876
|
-
}
|
877
|
-
}]);
|
878
|
-
|
879
|
-
return Workbox;
|
880
|
-
}(EventTargetShim); // The jsdoc comments below outline the events this instance may dispatch:
|
881
|
-
|
882
|
-
/*
|
883
|
-
Copyright 2019 Google LLC
|
884
|
-
|
885
|
-
Use of this source code is governed by an MIT-style
|
886
|
-
license that can be found in the LICENSE file or at
|
887
|
-
https://opensource.org/licenses/MIT.
|
888
|
-
*/
|
889
|
-
|
890
|
-
exports.Workbox = Workbox;
|
891
|
-
exports.messageSW = messageSW;
|
892
|
-
|
893
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
894
|
-
|
895
|
-
}));
|
896
|
-
//# sourceMappingURL=workbox-window.dev.umd.js.map
|