workbox-routing.dev.js.map 47.1 KB
{"version":3,"file":"workbox-routing.dev.js","sources":["../_version.js","../utils/constants.js","../utils/normalizeHandler.js","../Route.js","../NavigationRoute.js","../RegExpRoute.js","../Router.js","../utils/getOrCreateDefaultRouter.js","../registerRoute.js","../setCatchHandler.js","../setDefaultHandler.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n    self['workbox:routing:5.1.4'] && _();\n}\ncatch (e) { }\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array<string>}\n *\n * @private\n */\nexport const validMethods = [\n    'DELETE',\n    'GET',\n    'HEAD',\n    'PATCH',\n    'POST',\n    'PUT',\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 '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n    if (handler && typeof handler === 'object') {\n        if (process.env.NODE_ENV !== 'production') {\n            assert.hasMethod(handler, 'handle', {\n                moduleName: 'workbox-routing',\n                className: 'Route',\n                funcName: 'constructor',\n                paramName: 'handler',\n            });\n        }\n        return handler;\n    }\n    else {\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isType(handler, 'function', {\n                moduleName: 'workbox-routing',\n                className: 'Route',\n                funcName: 'constructor',\n                paramName: 'handler',\n            });\n        }\n        return { handle: handler };\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 { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof module:workbox-routing\n */\nclass Route {\n    /**\n     * Constructor for Route class.\n     *\n     * @param {module:workbox-routing~matchCallback} match\n     * A callback function that determines whether the route matches a given\n     * `fetch` event by returning a non-falsy value.\n     * @param {module:workbox-routing~handlerCallback} handler A callback\n     * function that returns a Promise resolving to a Response.\n     * @param {string} [method='GET'] The HTTP method to match the Route\n     * against.\n     */\n    constructor(match, handler, method = defaultMethod) {\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isType(match, 'function', {\n                moduleName: 'workbox-routing',\n                className: 'Route',\n                funcName: 'constructor',\n                paramName: 'match',\n            });\n            if (method) {\n                assert.isOneOf(method, validMethods, { paramName: 'method' });\n            }\n        }\n        // These values are referenced directly by Router so cannot be\n        // altered by minificaton.\n        this.handler = normalizeHandler(handler);\n        this.match = match;\n        this.method = method;\n    }\n}\nexport { Route };\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 { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * NavigationRoute makes it easy to create a\n * [Route]{@link module:workbox-routing.Route} that matches for browser\n * [navigation requests]{@link https://developers.google.com/web/fundamentals/primers/service-workers/high-performance-loading#first_what_are_navigation_requests}.\n *\n * It will only match incoming Requests whose\n * [`mode`]{@link https://fetch.spec.whatwg.org/#concept-request-mode}\n * is set to `navigate`.\n *\n * You can optionally only apply this route to a subset of navigation requests\n * by using one or both of the `denylist` and `allowlist` parameters.\n *\n * @memberof module:workbox-routing\n * @extends module:workbox-routing.Route\n */\nclass NavigationRoute extends Route {\n    /**\n     * If both `denylist` and `allowlist` are provided, the `denylist` will\n     * take precedence and the request will not match this route.\n     *\n     * The regular expressions in `allowlist` and `denylist`\n     * are matched against the concatenated\n     * [`pathname`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/pathname}\n     * and [`search`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search}\n     * portions of the requested URL.\n     *\n     * @param {module:workbox-routing~handlerCallback} handler A callback\n     * function that returns a Promise resulting in a Response.\n     * @param {Object} options\n     * @param {Array<RegExp>} [options.denylist] If any of these patterns match,\n     * the route will not handle the request (even if a allowlist RegExp matches).\n     * @param {Array<RegExp>} [options.allowlist=[/./]] If any of these patterns\n     * match the URL's pathname and search parameter, the route will handle the\n     * request (assuming the denylist doesn't match).\n     */\n    constructor(handler, { allowlist = [/./], denylist = [] } = {}) {\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isArrayOfClass(allowlist, RegExp, {\n                moduleName: 'workbox-routing',\n                className: 'NavigationRoute',\n                funcName: 'constructor',\n                paramName: 'options.allowlist',\n            });\n            assert.isArrayOfClass(denylist, RegExp, {\n                moduleName: 'workbox-routing',\n                className: 'NavigationRoute',\n                funcName: 'constructor',\n                paramName: 'options.denylist',\n            });\n        }\n        super((options) => this._match(options), handler);\n        this._allowlist = allowlist;\n        this._denylist = denylist;\n    }\n    /**\n     * Routes match handler.\n     *\n     * @param {Object} options\n     * @param {URL} options.url\n     * @param {Request} options.request\n     * @return {boolean}\n     *\n     * @private\n     */\n    _match({ url, request }) {\n        if (request && request.mode !== 'navigate') {\n            return false;\n        }\n        const pathnameAndSearch = url.pathname + url.search;\n        for (const regExp of this._denylist) {\n            if (regExp.test(pathnameAndSearch)) {\n                if (process.env.NODE_ENV !== 'production') {\n                    logger.log(`The navigation route ${pathnameAndSearch} is not ` +\n                        `being used, since the URL matches this denylist pattern: ` +\n                        `${regExp}`);\n                }\n                return false;\n            }\n        }\n        if (this._allowlist.some((regExp) => regExp.test(pathnameAndSearch))) {\n            if (process.env.NODE_ENV !== 'production') {\n                logger.debug(`The navigation route ${pathnameAndSearch} ` +\n                    `is being used.`);\n            }\n            return true;\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            logger.log(`The navigation route ${pathnameAndSearch} is not ` +\n                `being used, since the URL being navigated to doesn't ` +\n                `match the allowlist.`);\n        }\n        return false;\n    }\n}\nexport { NavigationRoute };\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 { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * [Route]{@link module:workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * [See the module docs for info.]{@link https://developers.google.com/web/tools/workbox/modules/workbox-routing}\n *\n * @memberof module:workbox-routing\n * @extends module:workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n    /**\n     * If the regular expression contains\n     * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n     * the captured values will be passed to the\n     * [handler's]{@link module:workbox-routing~handlerCallback} `params`\n     * argument.\n     *\n     * @param {RegExp} regExp The regular expression to match against URLs.\n     * @param {module:workbox-routing~handlerCallback} handler A callback\n     * function that returns a Promise resulting in a Response.\n     * @param {string} [method='GET'] The HTTP method to match the Route\n     * against.\n     */\n    constructor(regExp, handler, method) {\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isInstance(regExp, RegExp, {\n                moduleName: 'workbox-routing',\n                className: 'RegExpRoute',\n                funcName: 'constructor',\n                paramName: 'pattern',\n            });\n        }\n        const match = ({ url }) => {\n            const result = regExp.exec(url.href);\n            // Return immediately if there's no match.\n            if (!result) {\n                return;\n            }\n            // Require that the match start at the first character in the URL string\n            // if it's a cross-origin request.\n            // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n            // behind this behavior.\n            if ((url.origin !== location.origin) && (result.index !== 0)) {\n                if (process.env.NODE_ENV !== 'production') {\n                    logger.debug(`The regular expression '${regExp}' only partially matched ` +\n                        `against the cross-origin URL '${url}'. RegExpRoute's will only ` +\n                        `handle cross-origin requests if they match the entire URL.`);\n                }\n                return;\n            }\n            // If the route matches, but there aren't any capture groups defined, then\n            // this will return [], which is truthy and therefore sufficient to\n            // indicate a match.\n            // If there are capture groups, then it will return their values.\n            return result.slice(1);\n        };\n        super(match, handler, method);\n    }\n}\nexport { RegExpRoute };\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 { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * The Router can be used to process a FetchEvent through one or more\n * [Routes]{@link module:workbox-routing.Route} responding  with a Request if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof module:workbox-routing\n */\nclass Router {\n    /**\n     * Initializes a new Router.\n     */\n    constructor() {\n        this._routes = new Map();\n    }\n    /**\n     * @return {Map<string, Array<module:workbox-routing.Route>>} routes A `Map` of HTTP\n     * method name ('GET', etc.) to an array of all the corresponding `Route`\n     * instances that are registered.\n     */\n    get routes() {\n        return this._routes;\n    }\n    /**\n     * Adds a fetch event listener to respond to events when a route matches\n     * the event's request.\n     */\n    addFetchListener() {\n        // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n        self.addEventListener('fetch', ((event) => {\n            const { request } = event;\n            const responsePromise = this.handleRequest({ request, event });\n            if (responsePromise) {\n                event.respondWith(responsePromise);\n            }\n        }));\n    }\n    /**\n     * Adds a message event listener for URLs to cache from the window.\n     * This is useful to cache resources loaded on the page prior to when the\n     * service worker started controlling it.\n     *\n     * The format of the message data sent from the window should be as follows.\n     * Where the `urlsToCache` array may consist of URL strings or an array of\n     * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n     *\n     * ```\n     * {\n     *   type: 'CACHE_URLS',\n     *   payload: {\n     *     urlsToCache: [\n     *       './script1.js',\n     *       './script2.js',\n     *       ['./script3.js', {mode: 'no-cors'}],\n     *     ],\n     *   },\n     * }\n     * ```\n     */\n    addCacheListener() {\n        // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n        self.addEventListener('message', ((event) => {\n            if (event.data && event.data.type === 'CACHE_URLS') {\n                const { payload } = event.data;\n                if (process.env.NODE_ENV !== 'production') {\n                    logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n                }\n                const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n                    if (typeof entry === 'string') {\n                        entry = [entry];\n                    }\n                    const request = new Request(...entry);\n                    return this.handleRequest({ request });\n                    // TODO(philipwalton): TypeScript errors without this typecast for\n                    // some reason (probably a bug). The real type here should work but\n                    // doesn't: `Array<Promise<Response> | undefined>`.\n                })); // TypeScript\n                event.waitUntil(requestPromises);\n                // If a MessageChannel was used, reply to the message on success.\n                if (event.ports && event.ports[0]) {\n                    requestPromises.then(() => event.ports[0].postMessage(true));\n                }\n            }\n        }));\n    }\n    /**\n     * Apply the routing rules to a FetchEvent object to get a Response from an\n     * appropriate Route's handler.\n     *\n     * @param {Object} options\n     * @param {Request} options.request The request to handle (this is usually\n     *     from a fetch event, but it does not have to be).\n     * @param {FetchEvent} [options.event] The event that triggered the request,\n     *     if applicable.\n     * @return {Promise<Response>|undefined} A promise is returned if a\n     *     registered route can handle the request. If there is no matching\n     *     route and there's no `defaultHandler`, `undefined` is returned.\n     */\n    handleRequest({ request, event }) {\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isInstance(request, Request, {\n                moduleName: 'workbox-routing',\n                className: 'Router',\n                funcName: 'handleRequest',\n                paramName: 'options.request',\n            });\n        }\n        const url = new URL(request.url, location.href);\n        if (!url.protocol.startsWith('http')) {\n            if (process.env.NODE_ENV !== 'production') {\n                logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n            }\n            return;\n        }\n        const { params, route } = this.findMatchingRoute({ url, request, event });\n        let handler = route && route.handler;\n        const debugMessages = [];\n        if (process.env.NODE_ENV !== 'production') {\n            if (handler) {\n                debugMessages.push([\n                    `Found a route to handle this request:`, route,\n                ]);\n                if (params) {\n                    debugMessages.push([\n                        `Passing the following params to the route's handler:`, params,\n                    ]);\n                }\n            }\n        }\n        // If we don't have a handler because there was no matching route, then\n        // fall back to defaultHandler if that's defined.\n        if (!handler && this._defaultHandler) {\n            if (process.env.NODE_ENV !== 'production') {\n                debugMessages.push(`Failed to find a matching route. Falling ` +\n                    `back to the default handler.`);\n            }\n            handler = this._defaultHandler;\n        }\n        if (!handler) {\n            if (process.env.NODE_ENV !== 'production') {\n                // No handler so Workbox will do nothing. If logs is set of debug\n                // i.e. verbose, we should print out this information.\n                logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n            }\n            return;\n        }\n        if (process.env.NODE_ENV !== 'production') {\n            // We have a handler, meaning Workbox is going to handle the route.\n            // print the routing details to the console.\n            logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n            debugMessages.forEach((msg) => {\n                if (Array.isArray(msg)) {\n                    logger.log(...msg);\n                }\n                else {\n                    logger.log(msg);\n                }\n            });\n            logger.groupEnd();\n        }\n        // Wrap in try and catch in case the handle method throws a synchronous\n        // error. It should still callback to the catch handler.\n        let responsePromise;\n        try {\n            responsePromise = handler.handle({ url, request, event, params });\n        }\n        catch (err) {\n            responsePromise = Promise.reject(err);\n        }\n        if (responsePromise instanceof Promise && this._catchHandler) {\n            responsePromise = responsePromise.catch((err) => {\n                if (process.env.NODE_ENV !== 'production') {\n                    // Still include URL here as it will be async from the console group\n                    // and may not make sense without the URL\n                    logger.groupCollapsed(`Error thrown when responding to: ` +\n                        ` ${getFriendlyURL(url)}. Falling back to Catch Handler.`);\n                    logger.error(`Error thrown by:`, route);\n                    logger.error(err);\n                    logger.groupEnd();\n                }\n                return this._catchHandler.handle({ url, request, event });\n            });\n        }\n        return responsePromise;\n    }\n    /**\n     * Checks a request and URL (and optionally an event) against the list of\n     * registered routes, and if there's a match, returns the corresponding\n     * route along with any params generated by the match.\n     *\n     * @param {Object} options\n     * @param {URL} options.url\n     * @param {Request} options.request The request to match.\n     * @param {Event} [options.event] The corresponding event (unless N/A).\n     * @return {Object} An object with `route` and `params` properties.\n     *     They are populated if a matching route was found or `undefined`\n     *     otherwise.\n     */\n    findMatchingRoute({ url, request, event }) {\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isInstance(url, URL, {\n                moduleName: 'workbox-routing',\n                className: 'Router',\n                funcName: 'findMatchingRoute',\n                paramName: 'options.url',\n            });\n            assert.isInstance(request, Request, {\n                moduleName: 'workbox-routing',\n                className: 'Router',\n                funcName: 'findMatchingRoute',\n                paramName: 'options.request',\n            });\n        }\n        const routes = this._routes.get(request.method) || [];\n        for (const route of routes) {\n            let params;\n            const matchResult = route.match({ url, request, event });\n            if (matchResult) {\n                // See https://github.com/GoogleChrome/workbox/issues/2079\n                params = matchResult;\n                if (Array.isArray(matchResult) && matchResult.length === 0) {\n                    // Instead of passing an empty array in as params, use undefined.\n                    params = undefined;\n                }\n                else if ((matchResult.constructor === Object &&\n                    Object.keys(matchResult).length === 0)) {\n                    // Instead of passing an empty object in as params, use undefined.\n                    params = undefined;\n                }\n                else if (typeof matchResult === 'boolean') {\n                    // For the boolean value true (rather than just something truth-y),\n                    // don't set params.\n                    // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n                    params = undefined;\n                }\n                // Return early if have a match.\n                return { route, params };\n            }\n        }\n        // If no match was found above, return and empty object.\n        return {};\n    }\n    /**\n     * Define a default `handler` that's called when no routes explicitly\n     * match the incoming request.\n     *\n     * Without a default handler, unmatched requests will go against the\n     * network as if there were no service worker present.\n     *\n     * @param {module:workbox-routing~handlerCallback} handler A callback\n     * function that returns a Promise resulting in a Response.\n     */\n    setDefaultHandler(handler) {\n        this._defaultHandler = normalizeHandler(handler);\n    }\n    /**\n     * If a Route throws an error while handling a request, this `handler`\n     * will be called and given a chance to provide a response.\n     *\n     * @param {module:workbox-routing~handlerCallback} handler A callback\n     * function that returns a Promise resulting in a Response.\n     */\n    setCatchHandler(handler) {\n        this._catchHandler = normalizeHandler(handler);\n    }\n    /**\n     * Registers a route with the router.\n     *\n     * @param {module:workbox-routing.Route} route The route to register.\n     */\n    registerRoute(route) {\n        if (process.env.NODE_ENV !== 'production') {\n            assert.isType(route, 'object', {\n                moduleName: 'workbox-routing',\n                className: 'Router',\n                funcName: 'registerRoute',\n                paramName: 'route',\n            });\n            assert.hasMethod(route, 'match', {\n                moduleName: 'workbox-routing',\n                className: 'Router',\n                funcName: 'registerRoute',\n                paramName: 'route',\n            });\n            assert.isType(route.handler, 'object', {\n                moduleName: 'workbox-routing',\n                className: 'Router',\n                funcName: 'registerRoute',\n                paramName: 'route',\n            });\n            assert.hasMethod(route.handler, 'handle', {\n                moduleName: 'workbox-routing',\n                className: 'Router',\n                funcName: 'registerRoute',\n                paramName: 'route.handler',\n            });\n            assert.isType(route.method, 'string', {\n                moduleName: 'workbox-routing',\n                className: 'Router',\n                funcName: 'registerRoute',\n                paramName: 'route.method',\n            });\n        }\n        if (!this._routes.has(route.method)) {\n            this._routes.set(route.method, []);\n        }\n        // Give precedence to all of the earlier routes by adding this additional\n        // route to the end of the array.\n        this._routes.get(route.method).push(route);\n    }\n    /**\n     * Unregisters a route with the router.\n     *\n     * @param {module:workbox-routing.Route} route The route to unregister.\n     */\n    unregisterRoute(route) {\n        if (!this._routes.has(route.method)) {\n            throw new WorkboxError('unregister-route-but-not-found-with-method', {\n                method: route.method,\n            });\n        }\n        const routeIndex = this._routes.get(route.method).indexOf(route);\n        if (routeIndex > -1) {\n            this._routes.get(route.method).splice(routeIndex, 1);\n        }\n        else {\n            throw new WorkboxError('unregister-route-route-not-registered');\n        }\n    }\n}\nexport { Router };\n","/*\n  Copyright 2019 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n    if (!defaultRouter) {\n        defaultRouter = new Router();\n        // The helpers that use the default Router assume these listeners exist.\n        defaultRouter.addFetchListener();\n        defaultRouter.addCacheListener();\n    }\n    return defaultRouter;\n};\n","/*\n  Copyright 2019 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call [registerRoute()]{@link module:workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|module:workbox-routing.Route~matchCallback|module:workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {module:workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {module:workbox-routing.Route} The generated `Route`(Useful for\n * unregistering).\n *\n * @memberof module:workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n    let route;\n    if (typeof capture === 'string') {\n        const captureUrl = new URL(capture, location.href);\n        if (process.env.NODE_ENV !== 'production') {\n            if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n                throw new WorkboxError('invalid-string', {\n                    moduleName: 'workbox-routing',\n                    funcName: 'registerRoute',\n                    paramName: 'capture',\n                });\n            }\n            // We want to check if Express-style wildcards are in the pathname only.\n            // TODO: Remove this log message in v4.\n            const valueToCheck = capture.startsWith('http') ?\n                captureUrl.pathname : capture;\n            // See https://github.com/pillarjs/path-to-regexp#parameters\n            const wildcards = '[*:?+]';\n            if ((new RegExp(`${wildcards}`)).exec(valueToCheck)) {\n                logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n                    `character (${wildcards}). Strings are now always interpreted as ` +\n                    `exact matches; use a RegExp for partial or wildcard matches.`);\n            }\n        }\n        const matchCallback = ({ url }) => {\n            if (process.env.NODE_ENV !== 'production') {\n                if ((url.pathname === captureUrl.pathname) &&\n                    (url.origin !== captureUrl.origin)) {\n                    logger.debug(`${capture} only partially matches the cross-origin URL ` +\n                        `${url}. This route will only handle cross-origin requests ` +\n                        `if they match the entire URL.`);\n                }\n            }\n            return url.href === captureUrl.href;\n        };\n        // If `capture` is a string then `handler` and `method` must be present.\n        route = new Route(matchCallback, handler, method);\n    }\n    else if (capture instanceof RegExp) {\n        // If `capture` is a `RegExp` then `handler` and `method` must be present.\n        route = new RegExpRoute(capture, handler, method);\n    }\n    else if (typeof capture === 'function') {\n        // If `capture` is a function then `handler` and `method` must be present.\n        route = new Route(capture, handler, method);\n    }\n    else if (capture instanceof Route) {\n        route = capture;\n    }\n    else {\n        throw new WorkboxError('unsupported-route-type', {\n            moduleName: 'workbox-routing',\n            funcName: 'registerRoute',\n            paramName: 'capture',\n        });\n    }\n    const defaultRouter = getOrCreateDefaultRouter();\n    defaultRouter.registerRoute(route);\n    return route;\n}\nexport { registerRoute };\n","/*\n  Copyright 2019 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n *\n * @memberof module:workbox-routing\n */\nfunction setCatchHandler(handler) {\n    const defaultRouter = getOrCreateDefaultRouter();\n    defaultRouter.setCatchHandler(handler);\n}\nexport { setCatchHandler };\n","/*\n  Copyright 2019 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n *\n * @memberof module:workbox-routing\n */\nfunction setDefaultHandler(handler) {\n    const defaultRouter = getOrCreateDefaultRouter();\n    defaultRouter.setDefaultHandler(handler);\n}\nexport { setDefaultHandler };\n"],"names":["self","_","e","defaultMethod","validMethods","normalizeHandler","handler","assert","hasMethod","moduleName","className","funcName","paramName","isType","handle","Route","constructor","match","method","isOneOf","NavigationRoute","allowlist","denylist","isArrayOfClass","RegExp","options","_match","_allowlist","_denylist","url","request","mode","pathnameAndSearch","pathname","search","regExp","test","logger","log","some","debug","RegExpRoute","isInstance","result","exec","href","origin","location","index","slice","Router","_routes","Map","routes","addFetchListener","addEventListener","event","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","urlsToCache","requestPromises","Promise","all","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","params","route","findMatchingRoute","debugMessages","push","_defaultHandler","getFriendlyURL","groupCollapsed","forEach","msg","Array","isArray","groupEnd","err","reject","_catchHandler","catch","error","get","matchResult","length","undefined","Object","keys","setDefaultHandler","setCatchHandler","registerRoute","has","set","unregisterRoute","WorkboxError","routeIndex","indexOf","splice","defaultRouter","getOrCreateDefaultRouter","capture","captureUrl","valueToCheck","wildcards","matchCallback"],"mappings":"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"}