workbox-strategies.dev.js.map 46.8 KB
{"version":3,"file":"workbox-strategies.dev.js","sources":["../_version.js","../utils/messages.js","../CacheFirst.js","../CacheOnly.js","../plugins/cacheOkAndOpaquePlugin.js","../NetworkFirst.js","../NetworkOnly.js","../StaleWhileRevalidate.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n    self['workbox:strategies:5.1.4'] && _();\n}\ncatch (e) { }\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport '../_version.js';\nexport const messages = {\n    strategyStart: (strategyName, request) => `Using ${strategyName} to respond to '${getFriendlyURL(request.url)}'`,\n    printFinalResponse: (response) => {\n        if (response) {\n            logger.groupCollapsed(`View the final response here.`);\n            logger.log(response || '[No response returned]');\n            logger.groupEnd();\n        }\n    },\n};\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-falling-back-to-network}\n * request strategy.\n *\n * A cache first strategy is useful for assets that have been revisioned,\n * such as URLs like `/styles/example.a8f5f1.css`, since they\n * can be cached for long periods of time.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass CacheFirst {\n    /**\n     * @param {Object} options\n     * @param {string} options.cacheName Cache name to store and retrieve\n     * requests. Defaults to cache names provided by\n     * [workbox-core]{@link module:workbox-core.cacheNames}.\n     * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n     * to use in conjunction with this caching strategy.\n     * @param {Object} options.fetchOptions Values passed along to the\n     * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n     * of all fetch() requests made by this strategy.\n     * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n     */\n    constructor(options = {}) {\n        this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n        this._plugins = options.plugins || [];\n        this._fetchOptions = options.fetchOptions;\n        this._matchOptions = options.matchOptions;\n    }\n    /**\n     * This method will perform a request strategy and follows an API that\n     * will work with the\n     * [Workbox Router]{@link module:workbox-routing.Router}.\n     *\n     * @param {Object} options\n     * @param {Request|string} options.request A request to run this strategy for.\n     * @param {Event} [options.event] The event that triggered the request.\n     * @return {Promise<Response>}\n     */\n    async handle({ event, request }) {\n        const logs = [];\n        if (typeof request === 'string') {\n            request = new Request(request);\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isInstance(request, Request, {\n                moduleName: 'workbox-strategies',\n                className: 'CacheFirst',\n                funcName: 'makeRequest',\n                paramName: 'request',\n            });\n        }\n        let response = await cacheWrapper.match({\n            cacheName: this._cacheName,\n            request,\n            event,\n            matchOptions: this._matchOptions,\n            plugins: this._plugins,\n        });\n        let error;\n        if (!response) {\n            if (process.env.NODE_ENV !== 'production') {\n                logs.push(`No response found in the '${this._cacheName}' cache. ` +\n                    `Will respond with a network request.`);\n            }\n            try {\n                response = await this._getFromNetwork(request, event);\n            }\n            catch (err) {\n                error = err;\n            }\n            if (process.env.NODE_ENV !== 'production') {\n                if (response) {\n                    logs.push(`Got response from network.`);\n                }\n                else {\n                    logs.push(`Unable to get a response from the network.`);\n                }\n            }\n        }\n        else {\n            if (process.env.NODE_ENV !== 'production') {\n                logs.push(`Found a cached response in the '${this._cacheName}' cache.`);\n            }\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            logger.groupCollapsed(messages.strategyStart('CacheFirst', request));\n            for (const log of logs) {\n                logger.log(log);\n            }\n            messages.printFinalResponse(response);\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new WorkboxError('no-response', { url: request.url, error });\n        }\n        return response;\n    }\n    /**\n     * Handles the network and cache part of CacheFirst.\n     *\n     * @param {Request} request\n     * @param {Event} [event]\n     * @return {Promise<Response>}\n     *\n     * @private\n     */\n    async _getFromNetwork(request, event) {\n        const response = await fetchWrapper.fetch({\n            request,\n            event,\n            fetchOptions: this._fetchOptions,\n            plugins: this._plugins,\n        });\n        // Keep the service worker while we put the request to the cache\n        const responseClone = response.clone();\n        const cachePutPromise = cacheWrapper.put({\n            cacheName: this._cacheName,\n            request,\n            response: responseClone,\n            event,\n            plugins: this._plugins,\n        });\n        if (event) {\n            try {\n                event.waitUntil(cachePutPromise);\n            }\n            catch (error) {\n                if (process.env.NODE_ENV !== 'production') {\n                    logger.warn(`Unable to ensure service worker stays alive when ` +\n                        `updating cache for '${getFriendlyURL(request.url)}'.`);\n                }\n            }\n        }\n        return response;\n    }\n}\nexport { CacheFirst };\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [cache-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-only}\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.\n *\n * If there is no cache match, this will throw a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass CacheOnly {\n    /**\n     * @param {Object} options\n     * @param {string} options.cacheName Cache name to store and retrieve\n     * requests. Defaults to cache names provided by\n     * [workbox-core]{@link module:workbox-core.cacheNames}.\n     * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n     * to use in conjunction with this caching strategy.\n     * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n     */\n    constructor(options = {}) {\n        this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n        this._plugins = options.plugins || [];\n        this._matchOptions = options.matchOptions;\n    }\n    /**\n     * This method will perform a request strategy and follows an API that\n     * will work with the\n     * [Workbox Router]{@link module:workbox-routing.Router}.\n     *\n     * @param {Object} options\n     * @param {Request|string} options.request A request to run this strategy for.\n     * @param {Event} [options.event] The event that triggered the request.\n     * @return {Promise<Response>}\n     */\n    async handle({ event, request }) {\n        if (typeof request === 'string') {\n            request = new Request(request);\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isInstance(request, Request, {\n                moduleName: 'workbox-strategies',\n                className: 'CacheOnly',\n                funcName: 'makeRequest',\n                paramName: 'request',\n            });\n        }\n        const response = await cacheWrapper.match({\n            cacheName: this._cacheName,\n            request,\n            event,\n            matchOptions: this._matchOptions,\n            plugins: this._plugins,\n        });\n        if (process.env.NODE_ENV !== 'production') {\n            logger.groupCollapsed(messages.strategyStart('CacheOnly', request));\n            if (response) {\n                logger.log(`Found a cached response in the '${this._cacheName}'` +\n                    ` cache.`);\n                messages.printFinalResponse(response);\n            }\n            else {\n                logger.log(`No response found in the '${this._cacheName}' cache.`);\n            }\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new WorkboxError('no-response', { url: request.url });\n        }\n        return response;\n    }\n}\nexport { CacheOnly };\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nexport const cacheOkAndOpaquePlugin = {\n    /**\n     * Returns a valid response (to allow caching) if the status is 200 (OK) or\n     * 0 (opaque).\n     *\n     * @param {Object} options\n     * @param {Response} options.response\n     * @return {Response|null}\n     *\n     * @private\n     */\n    cacheWillUpdate: async ({ response }) => {\n        if (response.status === 200 || response.status === 0) {\n            return response;\n        }\n        return null;\n    },\n};\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-falling-back-to-cache}\n * request strategy.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass NetworkFirst {\n    /**\n     * @param {Object} options\n     * @param {string} options.cacheName Cache name to store and retrieve\n     * requests. Defaults to cache names provided by\n     * [workbox-core]{@link module:workbox-core.cacheNames}.\n     * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n     * to use in conjunction with this caching strategy.\n     * @param {Object} options.fetchOptions Values passed along to the\n     * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n     * of all fetch() requests made by this strategy.\n     * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n     * @param {number} options.networkTimeoutSeconds If set, any network requests\n     * that fail to respond within the timeout will fallback to the cache.\n     *\n     * This option can be used to combat\n     * \"[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}\"\n     * scenarios.\n     */\n    constructor(options = {}) {\n        this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n        if (options.plugins) {\n            const isUsingCacheWillUpdate = options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n            this._plugins = isUsingCacheWillUpdate ?\n                options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n        }\n        else {\n            // No plugins passed in, use the default plugin.\n            this._plugins = [cacheOkAndOpaquePlugin];\n        }\n        this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n        if (process.env.NODE_ENV !== 'production') {\n            if (this._networkTimeoutSeconds) {\n                assert.isType(this._networkTimeoutSeconds, 'number', {\n                    moduleName: 'workbox-strategies',\n                    className: 'NetworkFirst',\n                    funcName: 'constructor',\n                    paramName: 'networkTimeoutSeconds',\n                });\n            }\n        }\n        this._fetchOptions = options.fetchOptions;\n        this._matchOptions = options.matchOptions;\n    }\n    /**\n     * This method will perform a request strategy and follows an API that\n     * will work with the\n     * [Workbox Router]{@link module:workbox-routing.Router}.\n     *\n     * @param {Object} options\n     * @param {Request|string} options.request A request to run this strategy for.\n     * @param {Event} [options.event] The event that triggered the request.\n     * @return {Promise<Response>}\n     */\n    async handle({ event, request }) {\n        const logs = [];\n        if (typeof request === 'string') {\n            request = new Request(request);\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isInstance(request, Request, {\n                moduleName: 'workbox-strategies',\n                className: 'NetworkFirst',\n                funcName: 'handle',\n                paramName: 'makeRequest',\n            });\n        }\n        const promises = [];\n        let timeoutId;\n        if (this._networkTimeoutSeconds) {\n            const { id, promise } = this._getTimeoutPromise({ request, event, logs });\n            timeoutId = id;\n            promises.push(promise);\n        }\n        const networkPromise = this._getNetworkPromise({ timeoutId, request, event, logs });\n        promises.push(networkPromise);\n        // Promise.race() will resolve as soon as the first promise resolves.\n        let response = await Promise.race(promises);\n        // If Promise.race() resolved with null, it might be due to a network\n        // timeout + a cache miss. If that were to happen, we'd rather wait until\n        // the networkPromise resolves instead of returning null.\n        // Note that it's fine to await an already-resolved promise, so we don't\n        // have to check to see if it's still \"in flight\".\n        if (!response) {\n            response = await networkPromise;\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            logger.groupCollapsed(messages.strategyStart('NetworkFirst', request));\n            for (const log of logs) {\n                logger.log(log);\n            }\n            messages.printFinalResponse(response);\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new WorkboxError('no-response', { url: request.url });\n        }\n        return response;\n    }\n    /**\n     * @param {Object} options\n     * @param {Request} options.request\n     * @param {Array} options.logs A reference to the logs array\n     * @param {Event} [options.event]\n     * @return {Promise<Response>}\n     *\n     * @private\n     */\n    _getTimeoutPromise({ request, logs, event }) {\n        let timeoutId;\n        const timeoutPromise = new Promise((resolve) => {\n            const onNetworkTimeout = async () => {\n                if (process.env.NODE_ENV !== 'production') {\n                    logs.push(`Timing out the network response at ` +\n                        `${this._networkTimeoutSeconds} seconds.`);\n                }\n                resolve(await this._respondFromCache({ request, event }));\n            };\n            timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n        });\n        return {\n            promise: timeoutPromise,\n            id: timeoutId,\n        };\n    }\n    /**\n     * @param {Object} options\n     * @param {number|undefined} options.timeoutId\n     * @param {Request} options.request\n     * @param {Array} options.logs A reference to the logs Array.\n     * @param {Event} [options.event]\n     * @return {Promise<Response>}\n     *\n     * @private\n     */\n    async _getNetworkPromise({ timeoutId, request, logs, event }) {\n        let error;\n        let response;\n        try {\n            response = await fetchWrapper.fetch({\n                request,\n                event,\n                fetchOptions: this._fetchOptions,\n                plugins: this._plugins,\n            });\n        }\n        catch (err) {\n            error = err;\n        }\n        if (timeoutId) {\n            clearTimeout(timeoutId);\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            if (response) {\n                logs.push(`Got response from network.`);\n            }\n            else {\n                logs.push(`Unable to get a response from the network. Will respond ` +\n                    `with a cached response.`);\n            }\n        }\n        if (error || !response) {\n            response = await this._respondFromCache({ request, event });\n            if (process.env.NODE_ENV !== 'production') {\n                if (response) {\n                    logs.push(`Found a cached response in the '${this._cacheName}'` +\n                        ` cache.`);\n                }\n                else {\n                    logs.push(`No response found in the '${this._cacheName}' cache.`);\n                }\n            }\n        }\n        else {\n            // Keep the service worker alive while we put the request in the cache\n            const responseClone = response.clone();\n            const cachePut = cacheWrapper.put({\n                cacheName: this._cacheName,\n                request,\n                response: responseClone,\n                event,\n                plugins: this._plugins,\n            });\n            if (event) {\n                try {\n                    // The event has been responded to so we can keep the SW alive to\n                    // respond to the request\n                    event.waitUntil(cachePut);\n                }\n                catch (err) {\n                    if (process.env.NODE_ENV !== 'production') {\n                        logger.warn(`Unable to ensure service worker stays alive when ` +\n                            `updating cache for '${getFriendlyURL(request.url)}'.`);\n                    }\n                }\n            }\n        }\n        return response;\n    }\n    /**\n     * Used if the network timeouts or fails to make the request.\n     *\n     * @param {Object} options\n     * @param {Request} request The request to match in the cache\n     * @param {Event} [options.event]\n     * @return {Promise<Object>}\n     *\n     * @private\n     */\n    _respondFromCache({ event, request }) {\n        return cacheWrapper.match({\n            cacheName: this._cacheName,\n            request,\n            event,\n            matchOptions: this._matchOptions,\n            plugins: this._plugins,\n        });\n    }\n}\nexport { NetworkFirst };\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-only}\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.\n *\n * If the network request fails, this will throw a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass NetworkOnly {\n    /**\n     * @param {Object} options\n     * @param {string} options.cacheName Cache name to store and retrieve\n     * requests. Defaults to cache names provided by\n     * [workbox-core]{@link module:workbox-core.cacheNames}.\n     * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n     * to use in conjunction with this caching strategy.\n     * @param {Object} options.fetchOptions Values passed along to the\n     * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n     * of all fetch() requests made by this strategy.\n     */\n    constructor(options = {}) {\n        this._plugins = options.plugins || [];\n        this._fetchOptions = options.fetchOptions;\n    }\n    /**\n     * This method will perform a request strategy and follows an API that\n     * will work with the\n     * [Workbox Router]{@link module:workbox-routing.Router}.\n     *\n     * @param {Object} options\n     * @param {Request|string} options.request The request to run this strategy for.\n     * @param {Event} [options.event] The event that triggered the request.\n     * @return {Promise<Response>}\n     */\n    async handle({ event, request }) {\n        if (typeof request === 'string') {\n            request = new Request(request);\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isInstance(request, Request, {\n                moduleName: 'workbox-strategies',\n                className: 'NetworkOnly',\n                funcName: 'handle',\n                paramName: 'request',\n            });\n        }\n        let error;\n        let response;\n        try {\n            response = await fetchWrapper.fetch({\n                request,\n                event,\n                fetchOptions: this._fetchOptions,\n                plugins: this._plugins,\n            });\n        }\n        catch (err) {\n            error = err;\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            logger.groupCollapsed(messages.strategyStart('NetworkOnly', request));\n            if (response) {\n                logger.log(`Got response from network.`);\n            }\n            else {\n                logger.log(`Unable to get a response from the network.`);\n            }\n            messages.printFinalResponse(response);\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new WorkboxError('no-response', { url: request.url, error });\n        }\n        return response;\n    }\n}\nexport { NetworkOnly };\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { cacheWrapper } from 'workbox-core/_private/cacheWrapper.js';\nimport { fetchWrapper } from 'workbox-core/_private/fetchWrapper.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { messages } from './utils/messages.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [stale-while-revalidate]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#stale-while-revalidate}\n * request strategy.\n *\n * Resources are requested from both the cache and the network in parallel.\n * The strategy will respond with the cached version if available, otherwise\n * wait for the network response. The cache is updated with the network response\n * with each successful request.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @memberof module:workbox-strategies\n */\nclass StaleWhileRevalidate {\n    /**\n     * @param {Object} options\n     * @param {string} options.cacheName Cache name to store and retrieve\n     * requests. Defaults to cache names provided by\n     * [workbox-core]{@link module:workbox-core.cacheNames}.\n     * @param {Array<Object>} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n     * to use in conjunction with this caching strategy.\n     * @param {Object} options.fetchOptions Values passed along to the\n     * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n     * of all fetch() requests made by this strategy.\n     * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n     */\n    constructor(options = {}) {\n        this._cacheName = cacheNames.getRuntimeName(options.cacheName);\n        this._plugins = options.plugins || [];\n        if (options.plugins) {\n            const isUsingCacheWillUpdate = options.plugins.some((plugin) => !!plugin.cacheWillUpdate);\n            this._plugins = isUsingCacheWillUpdate ?\n                options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n        }\n        else {\n            // No plugins passed in, use the default plugin.\n            this._plugins = [cacheOkAndOpaquePlugin];\n        }\n        this._fetchOptions = options.fetchOptions;\n        this._matchOptions = options.matchOptions;\n    }\n    /**\n     * This method will perform a request strategy and follows an API that\n     * will work with the\n     * [Workbox Router]{@link module:workbox-routing.Router}.\n     *\n     * @param {Object} options\n     * @param {Request|string} options.request A request to run this strategy for.\n     * @param {Event} [options.event] The event that triggered the request.\n     * @return {Promise<Response>}\n     */\n    async handle({ event, request }) {\n        const logs = [];\n        if (typeof request === 'string') {\n            request = new Request(request);\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isInstance(request, Request, {\n                moduleName: 'workbox-strategies',\n                className: 'StaleWhileRevalidate',\n                funcName: 'handle',\n                paramName: 'request',\n            });\n        }\n        const fetchAndCachePromise = this._getFromNetwork({ request, event });\n        let response = await cacheWrapper.match({\n            cacheName: this._cacheName,\n            request,\n            event,\n            matchOptions: this._matchOptions,\n            plugins: this._plugins,\n        });\n        let error;\n        if (response) {\n            if (process.env.NODE_ENV !== 'production') {\n                logs.push(`Found a cached response in the '${this._cacheName}'` +\n                    ` cache. Will update with the network response in the background.`);\n            }\n            if (event) {\n                try {\n                    event.waitUntil(fetchAndCachePromise);\n                }\n                catch (error) {\n                    if (process.env.NODE_ENV !== 'production') {\n                        logger.warn(`Unable to ensure service worker stays alive when ` +\n                            `updating cache for '${getFriendlyURL(request.url)}'.`);\n                    }\n                }\n            }\n        }\n        else {\n            if (process.env.NODE_ENV !== 'production') {\n                logs.push(`No response found in the '${this._cacheName}' cache. ` +\n                    `Will wait for the network response.`);\n            }\n            try {\n                response = await fetchAndCachePromise;\n            }\n            catch (err) {\n                error = err;\n            }\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            logger.groupCollapsed(messages.strategyStart('StaleWhileRevalidate', request));\n            for (const log of logs) {\n                logger.log(log);\n            }\n            messages.printFinalResponse(response);\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new WorkboxError('no-response', { url: request.url, error });\n        }\n        return response;\n    }\n    /**\n     * @param {Object} options\n     * @param {Request} options.request\n     * @param {Event} [options.event]\n     * @return {Promise<Response>}\n     *\n     * @private\n     */\n    async _getFromNetwork({ request, event }) {\n        const response = await fetchWrapper.fetch({\n            request,\n            event,\n            fetchOptions: this._fetchOptions,\n            plugins: this._plugins,\n        });\n        const cachePutPromise = cacheWrapper.put({\n            cacheName: this._cacheName,\n            request,\n            response: response.clone(),\n            event,\n            plugins: this._plugins,\n        });\n        if (event) {\n            try {\n                event.waitUntil(cachePutPromise);\n            }\n            catch (error) {\n                if (process.env.NODE_ENV !== 'production') {\n                    logger.warn(`Unable to ensure service worker stays alive when ` +\n                        `updating cache for '${getFriendlyURL(request.url)}'.`);\n                }\n            }\n        }\n        return response;\n    }\n}\nexport { StaleWhileRevalidate };\n"],"names":["self","_","e","messages","strategyStart","strategyName","request","getFriendlyURL","url","printFinalResponse","response","logger","groupCollapsed","log","groupEnd","CacheFirst","constructor","options","_cacheName","cacheNames","getRuntimeName","cacheName","_plugins","plugins","_fetchOptions","fetchOptions","_matchOptions","matchOptions","handle","event","logs","Request","assert","isInstance","moduleName","className","funcName","paramName","cacheWrapper","match","error","push","_getFromNetwork","err","WorkboxError","fetchWrapper","fetch","responseClone","clone","cachePutPromise","put","waitUntil","warn","CacheOnly","cacheOkAndOpaquePlugin","cacheWillUpdate","status","NetworkFirst","isUsingCacheWillUpdate","some","plugin","_networkTimeoutSeconds","networkTimeoutSeconds","isType","promises","timeoutId","id","promise","_getTimeoutPromise","networkPromise","_getNetworkPromise","Promise","race","timeoutPromise","resolve","onNetworkTimeout","_respondFromCache","setTimeout","clearTimeout","cachePut","NetworkOnly","StaleWhileRevalidate","fetchAndCachePromise"],"mappings":"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"}