diff --git a/src_sw_js.sw.js b/src_sw_js.sw.js index ab52093..6fd8128 100644 --- a/src_sw_js.sw.js +++ b/src_sw_js.sw.js @@ -26,7 +26,7 @@ function swCustom(params) { // Cache responses from external resources (0,workbox_routing__WEBPACK_IMPORTED_MODULE_0__.registerRoute)(context => { - return [/githubusercontent/].some(regex => context.url.href.match(regex)); + return [/githubusercontent/, /\/awesome-interview\//].some(regex => context.url.href.match(regex)); }, new workbox_strategies__WEBPACK_IMPORTED_MODULE_1__.StaleWhileRevalidate()); } diff --git a/src_sw_js.sw.js.map b/src_sw_js.sw.js.map index 983b0cc..5059d32 100644 --- a/src_sw_js.sw.js.map +++ b/src_sw_js.sw.js.map @@ -1 +1 @@ -{"version":3,"file":"src_sw_js.sw.js","mappings":";;;;;;;;;;;;;;;AAAgD;AACU;;AAE1D;AACe,SAASE,QAAQ,CAACC,MAAM,EAAE;EACvC,MAAM;IACJC,KAAK;IAAE;IACPC,WAAW,CAAE;EACf,CAAC,GAAGF,MAAM;;EAEV;EACAH,8DAAa,CAAEM,OAAO,IAAK;IACzB,OAAO,CAAC,mBAAmB,CAAC,CAACC,IAAI,CAAEC,KAAK,IAAKF,OAAO,CAACG,GAAG,CAACC,IAAI,CAACC,KAAK,CAACH,KAAK,CAAC,CAAC;EAC7E,CAAC,EAAE,IAAIP,oEAAoB,EAAE,CAAC;AAChC;;;;;;;;;;;;;;;;;;;ACdA;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACtB;AACZ;AACvB;AACA;AACA,IAAI,6BAA6B;AACjC,yBAAyB,yIAAyI;AAClK;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4CAAK;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iCAAiC;AAChD;AACA,eAAe,QAAQ;AACvB,eAAe,eAAe;AAC9B;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA,2BAA2B,mCAAmC,IAAI;AAClE,YAAY,IAAqC;AACjD,YAAY,iFAAqB;AACjC;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY,iFAAqB;AACjC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,KAAK;AACpB,eAAe,SAAS;AACxB,gBAAgB;AAChB;AACA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,IAAqC;AACzD,oBAAoB,sEAAU,yBAAyB,mBAAmB;AAC1E;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,gBAAgB,wEAAY,yBAAyB,mBAAmB;AACxE;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,sEAAU,yBAAyB,mBAAmB;AAClE;AACA;AACA;AACA;AACA;AACA;AAC2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7G3B;AACA;;AAEA;AACA;AACA;AACA;AACwD;AACT;AACI;AAChB;AACE;AACkB;AACI;AACpC;AACvB;AACA;AACA;AAC2G;;;;;;;;;;;;;;;;;;AClB3G;AACA;;AAEA;AACA;AACA;AACA;AAC+E;AACxD;AACvB;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,4FAAwB;AAClD;AACA;AAC2B;;;;;;;;;;;;;;;;;;ACtB3B;AACA;;AAEA;AACA;AACA;AACA;AAC+E;AACxD;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,4FAAwB;AAClD;AACA;AAC6B;;;;;;;;;;;;;;;;;;;;;;ACzB7B;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACY;AAC5B;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAQ;AACjC;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,uDAAuD,eAAe;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,6DAA6D,eAAe;AAC5E;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU;AAC1B;AACA,YAAY,2EAA2B;AACvC,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,yBAAyB;AAC7E;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;ACxFtB;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACY;AAC5B;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kDAAQ;AAChC;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU,oCAAoC,eAAe;AAC7E,gBAAgB,2EAA2B;AAC3C;AACA;AACA,gBAAgB,sEAAU,8BAA8B,eAAe;AACvE;AACA,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,kBAAkB;AACtE;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;;;;;AC5DrB;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACY;AACQ;AACpC;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAQ;AACnC;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,QAAQ,8BAA8B;AACtC,eAAe,eAAe,4BAA4B;AAC1D;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,iBAAiB,2FAA2F;AAC5G;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,iCAAiC,sFAAsB;AACvD;AACA;AACA,YAAY,IAAqC;AACjD;AACA,gBAAgB,yEAAa;AAC7B;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,oBAAoB,cAAc,4BAA4B,wBAAwB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU;AAC1B;AACA,YAAY,2EAA2B;AACvC,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,kBAAkB;AACtE;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB;AAChB;AACA;AACA;AACA,yBAAyB,yBAAyB;AAClD;AACA;AACA;AACA,oBAAoB,IAAqC;AACzD;AACA,2BAA2B,6BAA6B;AACxD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,kBAAkB;AACjC,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB;AAChB;AACA;AACA;AACA,+BAA+B,oCAAoC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAqC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD;AACA,iEAAiE,eAAe;AAChF;AACA;AACA,2DAA2D,eAAe;AAC1E;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;;;;;ACpMxB;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACE;AACU;AAC5B;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,kDAAQ;AAClC;AACA,eAAe,QAAQ;AACvB,eAAe,eAAe,4BAA4B;AAC1D;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wEAAO;AAC9C;AACA;AACA;AACA;AACA;AACA,uBAAuB,6BAA6B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU;AAC1B;AACA;AACA,gBAAgB,sEAAU;AAC1B;AACA,YAAY,2EAA2B;AACvC,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,yBAAyB;AAC7E;AACA;AACA;AACA;AACuB;;;;;;;;;;;;;;;;;;;;;;;ACjGvB;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACY;AACQ;AACpC;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kDAAQ;AAC3C;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,QAAQ,8BAA8B;AACtC,eAAe,eAAe,4BAA4B;AAC1D;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,iCAAiC,sFAAsB;AACvD;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,6DAA6D,eAAe;AAC5E;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,uDAAuD,eAAe;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU;AAC1B;AACA,YAAY,2EAA2B;AACvC,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,yBAAyB;AAC7E;AACA;AACA;AACA;AACgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrHhC;AACA;;AAEA;AACA;AACA;AACA;AAC6C;AACF;AACM;AACF;AACkB;AACxB;AACc;AAChC;AACvB;AACA;AACA;AACA;AACA;AACA;AAC8G;;;;;;;;;;;;;;;;;ACrB9G;AACA;;AAEA;AACA;AACA;AACA;AACwB;AACjB;AACP;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,gBAAgB;AAChB;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;;ACzBA;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACgB;AACjD;AACjB;AACP,uDAAuD,cAAc,iBAAiB,sFAAc,cAAc;AAClH;AACA;AACA,YAAY,iFAAqB;AACjC,YAAY,sEAAU;AACtB,YAAY,2EAAe;AAC3B;AACA,KAAK;AACL","sources":["webpack://jjbook/./src/sw.js","webpack://jjbook/./node_modules/workbox-routing/NavigationRoute.js","webpack://jjbook/./node_modules/workbox-routing/index.js","webpack://jjbook/./node_modules/workbox-routing/setCatchHandler.js","webpack://jjbook/./node_modules/workbox-routing/setDefaultHandler.js","webpack://jjbook/./node_modules/workbox-strategies/CacheFirst.js","webpack://jjbook/./node_modules/workbox-strategies/CacheOnly.js","webpack://jjbook/./node_modules/workbox-strategies/NetworkFirst.js","webpack://jjbook/./node_modules/workbox-strategies/NetworkOnly.js","webpack://jjbook/./node_modules/workbox-strategies/StaleWhileRevalidate.js","webpack://jjbook/./node_modules/workbox-strategies/index.js","webpack://jjbook/./node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js","webpack://jjbook/./node_modules/workbox-strategies/utils/messages.js","webpack://jjbook/./node_modules/workbox-routing/index.mjs","webpack://jjbook/./node_modules/workbox-strategies/index.mjs"],"sourcesContent":["import { registerRoute } from \"workbox-routing\";\nimport { StaleWhileRevalidate } from \"workbox-strategies\";\n\n// default fn export receiving some useful params\nexport default function swCustom(params) {\n const {\n debug, // :boolean\n offlineMode, // :boolean\n } = params;\n\n // Cache responses from external resources\n registerRoute((context) => {\n return [/githubusercontent/].some((regex) => context.url.href.match(regex));\n }, new StaleWhileRevalidate());\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 { 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 * {@link 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 * {@link https://fetch.spec.whatwg.org/#concept-request-mode|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 workbox-routing\n * @extends 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 * *Note*: These RegExps may be evaluated against every destination URL during\n * a navigation. Avoid using\n * [complex RegExps](https://github.com/GoogleChrome/workbox/issues/3077),\n * or else your users may see delays when navigating your site.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {Object} options\n * @param {Array} [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} [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.toString()}`);\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} ` + `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 { NavigationRoute, } from './NavigationRoute.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { registerRoute } from './registerRoute.js';\nimport { Route } from './Route.js';\nimport { Router } from './Router.js';\nimport { setCatchHandler } from './setCatchHandler.js';\nimport { setDefaultHandler } from './setDefaultHandler.js';\nimport './_version.js';\n/**\n * @module workbox-routing\n */\nexport { NavigationRoute, RegExpRoute, registerRoute, Route, Router, setCatchHandler, setDefaultHandler, };\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 {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n *\n * @memberof 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 {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n *\n * @memberof workbox-routing\n */\nfunction setDefaultHandler(handler) {\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.setDefaultHandler(handler);\n}\nexport { setDefaultHandler };\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 { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#cache-first-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 * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass CacheFirst extends Strategy {\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n let response = await handler.cacheMatch(request);\n let error = undefined;\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 handler.fetchAndCachePut(request);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\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(this.constructor.name, 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}\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 { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-only](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#cache-only)\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins](https://developer.chrome.com/docs/workbox/using-plugins/).\n *\n * If there is no cache match, this will throw a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass CacheOnly extends Strategy {\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n const response = await handler.cacheMatch(request);\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n if (response) {\n logger.log(`Found a cached response in the '${this.cacheName}' ` + `cache.`);\n messages.printFinalResponse(response);\n }\n else {\n logger.log(`No response found in the '${this.cacheName}' cache.`);\n }\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n}\nexport { CacheOnly };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#network-first-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](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses).\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS](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 * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass NetworkFirst extends Strategy {\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 * {@link workbox-core.cacheNames}.\n * @param {Array} [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 [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `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 super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(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: this.constructor.name,\n funcName: 'constructor',\n paramName: 'networkTimeoutSeconds',\n });\n }\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\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, logs, handler });\n timeoutId = id;\n promises.push(promise);\n }\n const networkPromise = this._getNetworkPromise({\n timeoutId,\n request,\n logs,\n handler,\n });\n promises.push(networkPromise);\n const response = await handler.waitUntil((async () => {\n // Promise.race() will resolve as soon as the first promise resolves.\n return ((await handler.waitUntil(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 (await networkPromise));\n })());\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, 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}\n *\n * @private\n */\n _getTimeoutPromise({ request, logs, handler, }) {\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 handler.cacheMatch(request));\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}\n *\n * @private\n */\n async _getNetworkPromise({ timeoutId, request, logs, handler, }) {\n let error;\n let response;\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (fetchError) {\n if (fetchError instanceof Error) {\n error = fetchError;\n }\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 handler.cacheMatch(request);\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Found a cached response in the '${this.cacheName}'` + ` cache.`);\n }\n else {\n logs.push(`No response found in the '${this.cacheName}' cache.`);\n }\n }\n }\n return response;\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 { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network-only](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#network-only)\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins](https://developer.chrome.com/docs/workbox/using-plugins/).\n *\n * If the network request fails, this will throw a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass NetworkOnly extends Strategy {\n /**\n * @param {Object} [options]\n * @param {Array} [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 [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {number} [options.networkTimeoutSeconds] If set, any network requests\n * that fail to respond within the timeout will result in a network error.\n */\n constructor(options = {}) {\n super(options);\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: '_handle',\n paramName: 'request',\n });\n }\n let error = undefined;\n let response;\n try {\n const promises = [\n handler.fetch(request),\n ];\n if (this._networkTimeoutSeconds) {\n const timeoutPromise = timeout(this._networkTimeoutSeconds * 1000);\n promises.push(timeoutPromise);\n }\n response = await Promise.race(promises);\n if (!response) {\n throw new Error(`Timed out the network response after ` +\n `${this._networkTimeoutSeconds} seconds.`);\n }\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, 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 { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [stale-while-revalidate](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#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](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses).\n * Opaque responses are cross-origin requests where the response doesn't\n * support [CORS](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 * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass StaleWhileRevalidate extends Strategy {\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 * {@link workbox-core.cacheNames}.\n * @param {Array} [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 [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'request',\n });\n }\n const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(() => {\n // Swallow this error because a 'no-response' error will be thrown in\n // main handler return flow. This will be in the `waitUntil()` flow.\n });\n void handler.waitUntil(fetchAndCachePromise);\n let response = await handler.cacheMatch(request);\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 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 // NOTE(philipwalton): Really annoying that we have to type cast here.\n // https://github.com/microsoft/TypeScript/issues/20006\n response = (await fetchAndCachePromise);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, 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}\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*/\nimport { CacheFirst } from './CacheFirst.js';\nimport { CacheOnly } from './CacheOnly.js';\nimport { NetworkFirst } from './NetworkFirst.js';\nimport { NetworkOnly } from './NetworkOnly.js';\nimport { StaleWhileRevalidate } from './StaleWhileRevalidate.js';\nimport { Strategy } from './Strategy.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\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 * @module workbox-strategies\n */\nexport { CacheFirst, CacheOnly, NetworkFirst, NetworkOnly, StaleWhileRevalidate, Strategy, StrategyHandler, };\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 { 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","export * from './index.js';","export * from './index.js';"],"names":["registerRoute","StaleWhileRevalidate","swCustom","params","debug","offlineMode","context","some","regex","url","href","match"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"src_sw_js.sw.js","mappings":";;;;;;;;;;;;;;;AAAgD;AACU;;AAE1D;AACe,SAASE,QAAQ,CAACC,MAAM,EAAE;EACvC,MAAM;IACJC,KAAK;IAAE;IACPC,WAAW,CAAE;EACf,CAAC,GAAGF,MAAM;;EAEV;EACAH,8DAAa,CAAEM,OAAO,IAAK;IACzB,OAAO,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAACC,IAAI,CAAEC,KAAK,IAC/DF,OAAO,CAACG,GAAG,CAACC,IAAI,CAACC,KAAK,CAACH,KAAK,CAAC,CAC9B;EACH,CAAC,EAAE,IAAIP,oEAAoB,EAAE,CAAC;AAChC;;;;;;;;;;;;;;;;;;;AChBA;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACtB;AACZ;AACvB;AACA;AACA,IAAI,6BAA6B;AACjC,yBAAyB,yIAAyI;AAClK;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4CAAK;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iCAAiC;AAChD;AACA,eAAe,QAAQ;AACvB,eAAe,eAAe;AAC9B;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA,2BAA2B,mCAAmC,IAAI;AAClE,YAAY,IAAqC;AACjD,YAAY,iFAAqB;AACjC;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY,iFAAqB;AACjC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,KAAK;AACpB,eAAe,SAAS;AACxB,gBAAgB;AAChB;AACA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,IAAqC;AACzD,oBAAoB,sEAAU,yBAAyB,mBAAmB;AAC1E;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,gBAAgB,wEAAY,yBAAyB,mBAAmB;AACxE;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,sEAAU,yBAAyB,mBAAmB;AAClE;AACA;AACA;AACA;AACA;AACA;AAC2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7G3B;AACA;;AAEA;AACA;AACA;AACA;AACwD;AACT;AACI;AAChB;AACE;AACkB;AACI;AACpC;AACvB;AACA;AACA;AAC2G;;;;;;;;;;;;;;;;;;AClB3G;AACA;;AAEA;AACA;AACA;AACA;AAC+E;AACxD;AACvB;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,4FAAwB;AAClD;AACA;AAC2B;;;;;;;;;;;;;;;;;;ACtB3B;AACA;;AAEA;AACA;AACA;AACA;AAC+E;AACxD;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,4FAAwB;AAClD;AACA;AAC6B;;;;;;;;;;;;;;;;;;;;;;ACzB7B;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACY;AAC5B;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAQ;AACjC;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,uDAAuD,eAAe;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,6DAA6D,eAAe;AAC5E;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU;AAC1B;AACA,YAAY,2EAA2B;AACvC,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,yBAAyB;AAC7E;AACA;AACA;AACA;AACsB;;;;;;;;;;;;;;;;;;;;;;ACxFtB;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACY;AAC5B;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kDAAQ;AAChC;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU,oCAAoC,eAAe;AAC7E,gBAAgB,2EAA2B;AAC3C;AACA;AACA,gBAAgB,sEAAU,8BAA8B,eAAe;AACvE;AACA,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,kBAAkB;AACtE;AACA;AACA;AACA;AACqB;;;;;;;;;;;;;;;;;;;;;;;AC5DrB;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACY;AACQ;AACpC;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAQ;AACnC;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,QAAQ,8BAA8B;AACtC,eAAe,eAAe,4BAA4B;AAC1D;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,iBAAiB,2FAA2F;AAC5G;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,iCAAiC,sFAAsB;AACvD;AACA;AACA,YAAY,IAAqC;AACjD;AACA,gBAAgB,yEAAa;AAC7B;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,oBAAoB,cAAc,4BAA4B,wBAAwB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU;AAC1B;AACA,YAAY,2EAA2B;AACvC,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,kBAAkB;AACtE;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB;AAChB;AACA;AACA;AACA,yBAAyB,yBAAyB;AAClD;AACA;AACA;AACA,oBAAoB,IAAqC;AACzD;AACA,2BAA2B,6BAA6B;AACxD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,kBAAkB;AACjC,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB;AAChB;AACA;AACA;AACA,+BAA+B,oCAAoC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAqC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD;AACA,iEAAiE,eAAe;AAChF;AACA;AACA,2DAA2D,eAAe;AAC1E;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;;;;;;;ACpMxB;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACE;AACU;AAC5B;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,kDAAQ;AAClC;AACA,eAAe,QAAQ;AACvB,eAAe,eAAe,4BAA4B;AAC1D;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wEAAO;AAC9C;AACA;AACA;AACA;AACA;AACA,uBAAuB,6BAA6B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU;AAC1B;AACA;AACA,gBAAgB,sEAAU;AAC1B;AACA,YAAY,2EAA2B;AACvC,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,yBAAyB;AAC7E;AACA;AACA;AACA;AACuB;;;;;;;;;;;;;;;;;;;;;;;ACjGvB;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACA;AACY;AACQ;AACpC;AACM;AACxB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kDAAQ;AAC3C;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,QAAQ,8BAA8B;AACtC,eAAe,eAAe,4BAA4B;AAC1D;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,iCAAiC,sFAAsB;AACvD;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,oCAAoC;AACnD;AACA,gBAAgB;AAChB;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,6EAAiB;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,6DAA6D,eAAe;AAC5E;AACA;AACA;AACA;AACA,gBAAgB,IAAqC;AACrD,uDAAuD,eAAe;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAqC;AACjD,YAAY,iFAAqB,CAAC,sEAAsB;AACxD;AACA,gBAAgB,sEAAU;AAC1B;AACA,YAAY,2EAA2B;AACvC,YAAY,2EAAe;AAC3B;AACA;AACA,sBAAsB,8EAAY,kBAAkB,yBAAyB;AAC7E;AACA;AACA;AACA;AACgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrHhC;AACA;;AAEA;AACA;AACA;AACA;AAC6C;AACF;AACM;AACF;AACkB;AACxB;AACc;AAChC;AACvB;AACA;AACA;AACA;AACA;AACA;AAC8G;;;;;;;;;;;;;;;;;ACrB9G;AACA;;AAEA;AACA;AACA;AACA;AACwB;AACjB;AACP;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,gBAAgB;AAChB;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;;ACzBA;AACA;;AAEA;AACA;AACA;AACA;AACyD;AACgB;AACjD;AACjB;AACP,uDAAuD,cAAc,iBAAiB,sFAAc,cAAc;AAClH;AACA;AACA,YAAY,iFAAqB;AACjC,YAAY,sEAAU;AACtB,YAAY,2EAAe;AAC3B;AACA,KAAK;AACL","sources":["webpack://jjbook/./src/sw.js","webpack://jjbook/./node_modules/workbox-routing/NavigationRoute.js","webpack://jjbook/./node_modules/workbox-routing/index.js","webpack://jjbook/./node_modules/workbox-routing/setCatchHandler.js","webpack://jjbook/./node_modules/workbox-routing/setDefaultHandler.js","webpack://jjbook/./node_modules/workbox-strategies/CacheFirst.js","webpack://jjbook/./node_modules/workbox-strategies/CacheOnly.js","webpack://jjbook/./node_modules/workbox-strategies/NetworkFirst.js","webpack://jjbook/./node_modules/workbox-strategies/NetworkOnly.js","webpack://jjbook/./node_modules/workbox-strategies/StaleWhileRevalidate.js","webpack://jjbook/./node_modules/workbox-strategies/index.js","webpack://jjbook/./node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js","webpack://jjbook/./node_modules/workbox-strategies/utils/messages.js","webpack://jjbook/./node_modules/workbox-routing/index.mjs","webpack://jjbook/./node_modules/workbox-strategies/index.mjs"],"sourcesContent":["import { registerRoute } from \"workbox-routing\";\nimport { StaleWhileRevalidate } from \"workbox-strategies\";\n\n// default fn export receiving some useful params\nexport default function swCustom(params) {\n const {\n debug, // :boolean\n offlineMode, // :boolean\n } = params;\n\n // Cache responses from external resources\n registerRoute((context) => {\n return [/githubusercontent/, /\\/awesome-interview\\//].some((regex) =>\n context.url.href.match(regex)\n );\n }, new StaleWhileRevalidate());\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 { 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 * {@link 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 * {@link https://fetch.spec.whatwg.org/#concept-request-mode|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 workbox-routing\n * @extends 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 * *Note*: These RegExps may be evaluated against every destination URL during\n * a navigation. Avoid using\n * [complex RegExps](https://github.com/GoogleChrome/workbox/issues/3077),\n * or else your users may see delays when navigating your site.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {Object} options\n * @param {Array} [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} [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.toString()}`);\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} ` + `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 { NavigationRoute, } from './NavigationRoute.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { registerRoute } from './registerRoute.js';\nimport { Route } from './Route.js';\nimport { Router } from './Router.js';\nimport { setCatchHandler } from './setCatchHandler.js';\nimport { setDefaultHandler } from './setDefaultHandler.js';\nimport './_version.js';\n/**\n * @module workbox-routing\n */\nexport { NavigationRoute, RegExpRoute, registerRoute, Route, Router, setCatchHandler, setDefaultHandler, };\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 {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n *\n * @memberof 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 {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n *\n * @memberof workbox-routing\n */\nfunction setDefaultHandler(handler) {\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.setDefaultHandler(handler);\n}\nexport { setDefaultHandler };\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 { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#cache-first-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 * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass CacheFirst extends Strategy {\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n let response = await handler.cacheMatch(request);\n let error = undefined;\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 handler.fetchAndCachePut(request);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\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(this.constructor.name, 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}\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 { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-only](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#cache-only)\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins](https://developer.chrome.com/docs/workbox/using-plugins/).\n *\n * If there is no cache match, this will throw a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass CacheOnly extends Strategy {\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n const response = await handler.cacheMatch(request);\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n if (response) {\n logger.log(`Found a cached response in the '${this.cacheName}' ` + `cache.`);\n messages.printFinalResponse(response);\n }\n else {\n logger.log(`No response found in the '${this.cacheName}' cache.`);\n }\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n}\nexport { CacheOnly };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#network-first-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](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses).\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS](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 * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass NetworkFirst extends Strategy {\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 * {@link workbox-core.cacheNames}.\n * @param {Array} [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 [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `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 super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(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: this.constructor.name,\n funcName: 'constructor',\n paramName: 'networkTimeoutSeconds',\n });\n }\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\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, logs, handler });\n timeoutId = id;\n promises.push(promise);\n }\n const networkPromise = this._getNetworkPromise({\n timeoutId,\n request,\n logs,\n handler,\n });\n promises.push(networkPromise);\n const response = await handler.waitUntil((async () => {\n // Promise.race() will resolve as soon as the first promise resolves.\n return ((await handler.waitUntil(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 (await networkPromise));\n })());\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, 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}\n *\n * @private\n */\n _getTimeoutPromise({ request, logs, handler, }) {\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 handler.cacheMatch(request));\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}\n *\n * @private\n */\n async _getNetworkPromise({ timeoutId, request, logs, handler, }) {\n let error;\n let response;\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (fetchError) {\n if (fetchError instanceof Error) {\n error = fetchError;\n }\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 handler.cacheMatch(request);\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Found a cached response in the '${this.cacheName}'` + ` cache.`);\n }\n else {\n logs.push(`No response found in the '${this.cacheName}' cache.`);\n }\n }\n }\n return response;\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 { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network-only](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#network-only)\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins](https://developer.chrome.com/docs/workbox/using-plugins/).\n *\n * If the network request fails, this will throw a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass NetworkOnly extends Strategy {\n /**\n * @param {Object} [options]\n * @param {Array} [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 [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {number} [options.networkTimeoutSeconds] If set, any network requests\n * that fail to respond within the timeout will result in a network error.\n */\n constructor(options = {}) {\n super(options);\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: '_handle',\n paramName: 'request',\n });\n }\n let error = undefined;\n let response;\n try {\n const promises = [\n handler.fetch(request),\n ];\n if (this._networkTimeoutSeconds) {\n const timeoutPromise = timeout(this._networkTimeoutSeconds * 1000);\n promises.push(timeoutPromise);\n }\n response = await Promise.race(promises);\n if (!response) {\n throw new Error(`Timed out the network response after ` +\n `${this._networkTimeoutSeconds} seconds.`);\n }\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, 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 { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [stale-while-revalidate](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#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](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses).\n * Opaque responses are cross-origin requests where the response doesn't\n * support [CORS](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 * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass StaleWhileRevalidate extends Strategy {\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 * {@link workbox-core.cacheNames}.\n * @param {Array} [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 [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'request',\n });\n }\n const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(() => {\n // Swallow this error because a 'no-response' error will be thrown in\n // main handler return flow. This will be in the `waitUntil()` flow.\n });\n void handler.waitUntil(fetchAndCachePromise);\n let response = await handler.cacheMatch(request);\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 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 // NOTE(philipwalton): Really annoying that we have to type cast here.\n // https://github.com/microsoft/TypeScript/issues/20006\n response = (await fetchAndCachePromise);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, 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}\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*/\nimport { CacheFirst } from './CacheFirst.js';\nimport { CacheOnly } from './CacheOnly.js';\nimport { NetworkFirst } from './NetworkFirst.js';\nimport { NetworkOnly } from './NetworkOnly.js';\nimport { StaleWhileRevalidate } from './StaleWhileRevalidate.js';\nimport { Strategy } from './Strategy.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\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 * @module workbox-strategies\n */\nexport { CacheFirst, CacheOnly, NetworkFirst, NetworkOnly, StaleWhileRevalidate, Strategy, StrategyHandler, };\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 { 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","export * from './index.js';","export * from './index.js';"],"names":["registerRoute","StaleWhileRevalidate","swCustom","params","debug","offlineMode","context","some","regex","url","href","match"],"sourceRoot":""} \ No newline at end of file diff --git a/sw.js b/sw.js index 1b33372..85f4e43 100644 --- a/sw.js +++ b/sw.js @@ -4635,7 +4635,7 @@ function getPossibleURLs(url) { (async () => { const params = parseSwParams(); // eslint-disable-next-line no-underscore-dangle - const precacheManifest = [{"revision":"c96802d6913e44dc590e3cfe83bff30d","url":"404.html"},{"revision":"92386779d15e01d4b7dddce0cb2344ec","url":"about.html"},{"revision":"776c9e86c39e24b547df01d1d4b36f9b","url":"assets/css/styles.0f62048e.css"},{"revision":"6f87439d38c2a566a95bfc97655041db","url":"assets/js/02fa4020.d80415df.js"},{"revision":"2f79ae91dbb07ab811642d93c70c1446","url":"assets/js/02fefe41.b3f9381e.js"},{"revision":"a385af6bb4054e71154e10b9c3dc2c39","url":"assets/js/0ba2ede9.56884b73.js"},{"revision":"6e998951c64db7d233ae83b5b97a4d68","url":"assets/js/1a4e3797.10deaa27.js"},{"revision":"edb94e524df6e60a51a6e2adf52f9a8f","url":"assets/js/1be78505.418dd524.js"},{"revision":"86a1a102148e6b6666de9aa84c27d4c5","url":"assets/js/1f391b9e.a00364fc.js"},{"revision":"828e172ac79ea1697b3f48f3dfeeee87","url":"assets/js/216712ef.2205d07e.js"},{"revision":"d982ab73c08ebb4090e6031cd4a2e142","url":"assets/js/223d151b.a2893301.js"},{"revision":"b19810e15a2f1aaa729ed9f2005584cf","url":"assets/js/230.34dddfc8.js"},{"revision":"61084057e6d23ecc8b1a27dbfca4d219","url":"assets/js/2384.4861d8b1.js"},{"revision":"558d8b0d50ee9329d3d64ce0061898d9","url":"assets/js/26d83c4c.edef56f4.js"},{"revision":"8fbfc81731128a26b15f8a827135250f","url":"assets/js/272.a34d203d.js"},{"revision":"06116d3f7ec91900bbbd9031cac9b478","url":"assets/js/2ad5369a.582e9919.js"},{"revision":"1e7c7d5002e1d9298ec742a7bb0a85a2","url":"assets/js/312ed758.c38443de.js"},{"revision":"e101ef4f79765a428593ac86080b1b7d","url":"assets/js/31bf44dd.fe411772.js"},{"revision":"1f3add7f57be1592666facb8936979d2","url":"assets/js/3bd79dc4.81d1364b.js"},{"revision":"6b154d24663e7c6cb4692f1189c89057","url":"assets/js/3d604b8e.a7165cd6.js"},{"revision":"83d66b8194923238c960299b55d1742a","url":"assets/js/4972.bea3865f.js"},{"revision":"34a94c91fc8fb6a45d80266dcffdcfc5","url":"assets/js/4f33924b.6c95a067.js"},{"revision":"0996414e2c5077df19d04d12a3db1a67","url":"assets/js/505fc875.611070a6.js"},{"revision":"3a79eb5d1a9a71af47b92d67081ec7e7","url":"assets/js/5178.6dd866d0.js"},{"revision":"596b28cc12cdb8e96c0a53a18ebf0112","url":"assets/js/520898ab.4d2ef29d.js"},{"revision":"ccbb72b9cbaf17bb6f89fcefe34062b8","url":"assets/js/5283.79fe536c.js"},{"revision":"5383f211d9a440836aa01c75de178dfd","url":"assets/js/57076a74.a9e996b1.js"},{"revision":"adcee72417145ca58531206968cb267f","url":"assets/js/5825b5f0.c4348d51.js"},{"revision":"e8d7ad3b6c0dc921f7de3019770f7af9","url":"assets/js/59da24a9.b2082b98.js"},{"revision":"be48e4f0613e3075d6b2d9eaaebc63a1","url":"assets/js/5ba709b9.3ab20d87.js"},{"revision":"95406e0c2dfd685ba542bb2c3c9214c9","url":"assets/js/5cddde15.3da6324e.js"},{"revision":"1ef35c7363ff769b6d2bcceaf8625b65","url":"assets/js/605371c8.71cb6ac4.js"},{"revision":"baa72c374dfbf546b41a31542f133e7b","url":"assets/js/6511.4f41f0a7.js"},{"revision":"360f7b30ec3d9297368edf586750616d","url":"assets/js/667a1a38.0def7602.js"},{"revision":"6ebb9861d4ab76802afdd516036c4d92","url":"assets/js/6b15a8e7.370eb108.js"},{"revision":"4d2b54b35c1097403bd76c8b6334a210","url":"assets/js/6b1ae1c5.73c2607f.js"},{"revision":"0a026e337ff2ea06091af62e6df0065d","url":"assets/js/7c39e10e.72217821.js"},{"revision":"3e77a5027aef961c975257d784b5a0ad","url":"assets/js/8584d295.ebf32f7e.js"},{"revision":"9c6bedb9d0e774791394ca0fc82e1488","url":"assets/js/8624.ef1f3195.js"},{"revision":"769f601644d503e971031074e9f3ca77","url":"assets/js/8894.446f680f.js"},{"revision":"e5a8e4d9e4b9e9559f93a6a04b80db4a","url":"assets/js/90b799f4.6601a4ef.js"},{"revision":"e74cc26b891cb9e2495d2779890f4373","url":"assets/js/92d10100.a6f541cd.js"},{"revision":"f3f2e1af90de4aa471ea8752bffda0a5","url":"assets/js/935f2afb.ae96f8c3.js"},{"revision":"82f77285b83da7da6fe77403e321ad22","url":"assets/js/972d49dd.e496a32b.js"},{"revision":"62f08caf3e53aa732d366dcdae60dd71","url":"assets/js/99c95826.de80d85d.js"},{"revision":"c2a5c0a83112a7aa0ab57a05f9d7081b","url":"assets/js/9e3afa9a.0b52dd30.js"},{"revision":"c391ee5a86241307f4d276654fe04108","url":"assets/js/9f1c36eb.f2d83d86.js"},{"revision":"4a45137797444ed6ff10e6fa748d41f7","url":"assets/js/a757db9b.62dd77de.js"},{"revision":"71a44e48e3fa20d59b7f1b9f75673189","url":"assets/js/ab21f6e2.e3bd364c.js"},{"revision":"e3af48e6d7ec23e3e11b1f7bb648507d","url":"assets/js/abf449ea.b1986ef7.js"},{"revision":"a72248a398ba44283bda5ce6c1b87a0d","url":"assets/js/b728f6fe.bba33834.js"},{"revision":"2be40b0e3a10ee5f687b2454983f2bff","url":"assets/js/b948ee85.51069a20.js"},{"revision":"25644e76ba7a5e161e951b853ae9065f","url":"assets/js/bfa6c7fa.580bf02d.js"},{"revision":"d7316b0fc65e451be8754322c311d77e","url":"assets/js/c48aeec7.94e91701.js"},{"revision":"abf084d9952e831c35af93772fa8145f","url":"assets/js/d04fa17f.2a5decdb.js"},{"revision":"f63015d5964152980d6790579ba8e27a","url":"assets/js/d4358da1.05e70cb8.js"},{"revision":"77647d01447df3220ae3ee790d8d475b","url":"assets/js/d5444868.acde29ec.js"},{"revision":"26d22022367f0dcf914f6cb72084d38b","url":"assets/js/d9cd0856.cc532560.js"},{"revision":"cc7d9defd7e8a08462417dea9a0a7ee2","url":"assets/js/d9d15992.54894bba.js"},{"revision":"55bec37dffd1c8e9a51d720e6e43defb","url":"assets/js/da95f3d6.ff213c15.js"},{"revision":"a11eba8db69b0b0c304973a0d4e67869","url":"assets/js/dd5deefd.039b46a5.js"},{"revision":"de334fda2763dabd727e522f77112ed5","url":"assets/js/dfd24482.a8c9edca.js"},{"revision":"f0a56040db25e20293d1bff86d0cae01","url":"assets/js/e2f5eafd.57ff7439.js"},{"revision":"af2391d45349e5dceeed3c1006e18443","url":"assets/js/e31563f4.3b2fb9de.js"},{"revision":"92dc99d1e7611b40e23d565b67c38213","url":"assets/js/e3741bf5.5a137d01.js"},{"revision":"957df6955f6894bef6f9b49cc498d4d6","url":"assets/js/e420c2e8.d885ff56.js"},{"revision":"c3bcdf044143c75017862559a1e7bc95","url":"assets/js/e9fc5b99.babb79cb.js"},{"revision":"b83af5b875b3f809e90d05b079b65fe6","url":"assets/js/f4f9ee34.40b1280a.js"},{"revision":"ea41e3b09be1da766bbf3f2e295142f2","url":"assets/js/f930e7e8.1501d559.js"},{"revision":"064505a29a5b6983e102db2b4cb1a148","url":"assets/js/main.55789724.js"},{"revision":"0152bf3bc45cb92a9d3c72f72fad018b","url":"assets/js/runtime~main.a05aa7a0.js"},{"revision":"527f0450ca0c75fac4b09cf586ea485e","url":"book1/algorithm-balanced-binary-trees.html"},{"revision":"9ca8bb67fe8861ba0ee6dd426f3ce343","url":"book1/browser-cross-origin.html"},{"revision":"0824da3e8ef994e2adba48ac6abaf17e","url":"book1/browser-repain-reflow.html"},{"revision":"711c91a81e8a9a9edf02c935cb40c30c","url":"book1/coding-promise.html"},{"revision":"c85778050ae2992ce32162bfaac357fa","url":"book1/css-bfc.html"},{"revision":"55f233d388f551a1c4e10cdf33053131","url":"book1/engineer-webpack-workflow.html"},{"revision":"cc37756256ad6df301dfc13ee8759a62","url":"book1/frame-vue-computed-watch.html"},{"revision":"7a269b8401cfe9d6018e079c281a9fc5","url":"book1/frame-vue-data-binding.html"},{"revision":"fbbba76fb912dd321025a3e2ccd4afbd","url":"book1/js-closures.html"},{"revision":"635e1ea31f97e3f6234555c004017c59","url":"book1/js-module-specs.html"},{"revision":"4a0565a91715c4b9571cb16319946ebe","url":"book1/network-security.html"},{"revision":"85c66afe2d68ed6f10efbf4d2c654318","url":"book1/topic-enter-url-display-xx.html"},{"revision":"ebec3c23af958cfc34298fad497b10df","url":"book2/algorithm-reverse-linked-list.html"},{"revision":"ce02f6535956f6124d24f48ea2441037","url":"book2/browser-garbage.html"},{"revision":"4eaf30bac5e7bbbeec5dc43c1443079b","url":"book2/browser-render-mechanism.html"},{"revision":"dcecb21bebcb217a551d70b215868cd7","url":"book2/coding-throttle-debounce.html"},{"revision":"5ece382c4cd706f29c8a17d34b114501","url":"book2/css-preprocessor.html"},{"revision":"bf2a79d1ca36f8613261f504f8ca75e2","url":"book2/engineer-babel.html"},{"revision":"7baf571cdc44f5765ad24ac1c27bad21","url":"book2/frame-react-fiber.html"},{"revision":"afacc8d5e5de6d76d6ae4e9a0f5d1708","url":"book2/frame-react-hoc-hooks.html"},{"revision":"4880b8f33b903d1d21d0a468072bd908","url":"book2/js-inherite.html"},{"revision":"f1a1731dc16b0b041ab16e71b8bb7317","url":"book2/js-new.html"},{"revision":"d1e9d5c64bde9bf44ee0f41fa9cda060","url":"book2/network-http-cache.html"},{"revision":"971fca4abce478931c87bf4d6b36cf83","url":"book2/topic-multi-pics-site-optimize.html"},{"revision":"b575c3cf2105cc7635135ca0b6c71963","url":"book3/algorithm-binary-tree-k.html"},{"revision":"ed69c751c85b9feb410415f4077a9dfc","url":"book3/browser-event-loop.html"},{"revision":"095b56619f3b22d6be29d8d93caad1f5","url":"book3/browser-memory-leaks.html"},{"revision":"dc531dc58f63369fa9410e69cdf46166","url":"book3/coding-arr-to-tree.html"},{"revision":"31fe412276f33e6925e359adf68eb5d7","url":"book3/css-mobile-adaptive.html"},{"revision":"7bcbd72432938de0d76fd49322f01cae","url":"book3/engineer-webpack-loader.html"},{"revision":"e960d94b599579dfdaef177342dcacc7","url":"book3/frame-diff.html"},{"revision":"ea3894ccfc42399a57b499a316f6db0e","url":"book3/frame-react-hooks.html"},{"revision":"7db6a4cf8c84857c409209377b28f2fa","url":"book3/js-async.html"},{"revision":"8ca90007696b9a4edfcbf16cccbfab41","url":"book3/js-ts-interface-type.html"},{"revision":"45876d71530eb83fdaa330db48f94ce7","url":"book3/network-http-1-2.html"},{"revision":"5218eba9ccd7dc54a0033daa74ba964f","url":"book3/topic-white-screen-optimization.html"},{"revision":"86a326d55c84e969e6f5934eb8396e19","url":"book4/array-repeat-number.html"},{"revision":"776b45975154dde6b616e8b3d88f7aa3","url":"book4/browser-local-storage.html"},{"revision":"5c4e3a22adcffc4ce23f5b0d1abca26a","url":"book4/browser-router.html"},{"revision":"e83d84fb737112660979af7c91b99cb5","url":"book4/coding-apply-call-bind.html"},{"revision":"580a03bebf15f9e63405bd06628dbf89","url":"book4/css-vertical-horizontal-center.html"},{"revision":"30dca412f5f493e9b02d8374afb0957f","url":"book4/engineer-front-end-testing.html"},{"revision":"b0f10ad57a3d19a274877f5f0f29c469","url":"book4/engineer-mfa.html"},{"revision":"c02243d0e2d093ae4f408e8d8f9eff24","url":"book4/frame-react-event-mechanism.html"},{"revision":"f570dfd4c02908409eaf55a2af1137ae","url":"book4/frame-react-vs-vue.html"},{"revision":"dcb57224b236acc4b8b4e9b48f93c4c8","url":"book4/js-ts-generics.html"},{"revision":"04c6d3833583123c7a4bb5324bd272f7","url":"guide.html"},{"revision":"46ed6349ecfa8d1a0fd6a3afa1e283b7","url":"index.html"},{"revision":"0b5d0a30a72f4f57af332297e57475ca","url":"manifest.json"},{"revision":"6bd2d13db6040e9603d3288b28449c9a","url":"search.html"},{"revision":"1d621acd0635d9aca9c8e570ab6b2bba","url":"src_sw_js.sw.js"},{"revision":"dc93c7184b0b39c1f57d820c4171152e","url":"img/arrow.svg"},{"revision":"d731e2242601d1fb02e261706792f96a","url":"img/badge-192.svg"},{"revision":"f06f79f3429a1da4a30749f75f886537","url":"img/badge-512.svg"},{"revision":"f6935ea4945b35d2b2ba8bed3b73adc0","url":"img/badge.svg"},{"revision":"bdda44c6c2115ed183c6110ea9e85101","url":"img/favicon.ico"}]; + const precacheManifest = [{"revision":"c96802d6913e44dc590e3cfe83bff30d","url":"404.html"},{"revision":"92386779d15e01d4b7dddce0cb2344ec","url":"about.html"},{"revision":"776c9e86c39e24b547df01d1d4b36f9b","url":"assets/css/styles.0f62048e.css"},{"revision":"6f87439d38c2a566a95bfc97655041db","url":"assets/js/02fa4020.d80415df.js"},{"revision":"2f79ae91dbb07ab811642d93c70c1446","url":"assets/js/02fefe41.b3f9381e.js"},{"revision":"a385af6bb4054e71154e10b9c3dc2c39","url":"assets/js/0ba2ede9.56884b73.js"},{"revision":"6e998951c64db7d233ae83b5b97a4d68","url":"assets/js/1a4e3797.10deaa27.js"},{"revision":"edb94e524df6e60a51a6e2adf52f9a8f","url":"assets/js/1be78505.418dd524.js"},{"revision":"86a1a102148e6b6666de9aa84c27d4c5","url":"assets/js/1f391b9e.a00364fc.js"},{"revision":"828e172ac79ea1697b3f48f3dfeeee87","url":"assets/js/216712ef.2205d07e.js"},{"revision":"d982ab73c08ebb4090e6031cd4a2e142","url":"assets/js/223d151b.a2893301.js"},{"revision":"b19810e15a2f1aaa729ed9f2005584cf","url":"assets/js/230.34dddfc8.js"},{"revision":"61084057e6d23ecc8b1a27dbfca4d219","url":"assets/js/2384.4861d8b1.js"},{"revision":"558d8b0d50ee9329d3d64ce0061898d9","url":"assets/js/26d83c4c.edef56f4.js"},{"revision":"8fbfc81731128a26b15f8a827135250f","url":"assets/js/272.a34d203d.js"},{"revision":"06116d3f7ec91900bbbd9031cac9b478","url":"assets/js/2ad5369a.582e9919.js"},{"revision":"1e7c7d5002e1d9298ec742a7bb0a85a2","url":"assets/js/312ed758.c38443de.js"},{"revision":"e101ef4f79765a428593ac86080b1b7d","url":"assets/js/31bf44dd.fe411772.js"},{"revision":"1f3add7f57be1592666facb8936979d2","url":"assets/js/3bd79dc4.81d1364b.js"},{"revision":"6b154d24663e7c6cb4692f1189c89057","url":"assets/js/3d604b8e.a7165cd6.js"},{"revision":"83d66b8194923238c960299b55d1742a","url":"assets/js/4972.bea3865f.js"},{"revision":"34a94c91fc8fb6a45d80266dcffdcfc5","url":"assets/js/4f33924b.6c95a067.js"},{"revision":"0996414e2c5077df19d04d12a3db1a67","url":"assets/js/505fc875.611070a6.js"},{"revision":"3a79eb5d1a9a71af47b92d67081ec7e7","url":"assets/js/5178.6dd866d0.js"},{"revision":"596b28cc12cdb8e96c0a53a18ebf0112","url":"assets/js/520898ab.4d2ef29d.js"},{"revision":"ccbb72b9cbaf17bb6f89fcefe34062b8","url":"assets/js/5283.79fe536c.js"},{"revision":"5383f211d9a440836aa01c75de178dfd","url":"assets/js/57076a74.a9e996b1.js"},{"revision":"adcee72417145ca58531206968cb267f","url":"assets/js/5825b5f0.c4348d51.js"},{"revision":"e8d7ad3b6c0dc921f7de3019770f7af9","url":"assets/js/59da24a9.b2082b98.js"},{"revision":"be48e4f0613e3075d6b2d9eaaebc63a1","url":"assets/js/5ba709b9.3ab20d87.js"},{"revision":"95406e0c2dfd685ba542bb2c3c9214c9","url":"assets/js/5cddde15.3da6324e.js"},{"revision":"1ef35c7363ff769b6d2bcceaf8625b65","url":"assets/js/605371c8.71cb6ac4.js"},{"revision":"baa72c374dfbf546b41a31542f133e7b","url":"assets/js/6511.4f41f0a7.js"},{"revision":"360f7b30ec3d9297368edf586750616d","url":"assets/js/667a1a38.0def7602.js"},{"revision":"6ebb9861d4ab76802afdd516036c4d92","url":"assets/js/6b15a8e7.370eb108.js"},{"revision":"4d2b54b35c1097403bd76c8b6334a210","url":"assets/js/6b1ae1c5.73c2607f.js"},{"revision":"0a026e337ff2ea06091af62e6df0065d","url":"assets/js/7c39e10e.72217821.js"},{"revision":"3e77a5027aef961c975257d784b5a0ad","url":"assets/js/8584d295.ebf32f7e.js"},{"revision":"9c6bedb9d0e774791394ca0fc82e1488","url":"assets/js/8624.ef1f3195.js"},{"revision":"769f601644d503e971031074e9f3ca77","url":"assets/js/8894.446f680f.js"},{"revision":"e5a8e4d9e4b9e9559f93a6a04b80db4a","url":"assets/js/90b799f4.6601a4ef.js"},{"revision":"e74cc26b891cb9e2495d2779890f4373","url":"assets/js/92d10100.a6f541cd.js"},{"revision":"f3f2e1af90de4aa471ea8752bffda0a5","url":"assets/js/935f2afb.ae96f8c3.js"},{"revision":"82f77285b83da7da6fe77403e321ad22","url":"assets/js/972d49dd.e496a32b.js"},{"revision":"62f08caf3e53aa732d366dcdae60dd71","url":"assets/js/99c95826.de80d85d.js"},{"revision":"c2a5c0a83112a7aa0ab57a05f9d7081b","url":"assets/js/9e3afa9a.0b52dd30.js"},{"revision":"c391ee5a86241307f4d276654fe04108","url":"assets/js/9f1c36eb.f2d83d86.js"},{"revision":"4a45137797444ed6ff10e6fa748d41f7","url":"assets/js/a757db9b.62dd77de.js"},{"revision":"71a44e48e3fa20d59b7f1b9f75673189","url":"assets/js/ab21f6e2.e3bd364c.js"},{"revision":"e3af48e6d7ec23e3e11b1f7bb648507d","url":"assets/js/abf449ea.b1986ef7.js"},{"revision":"a72248a398ba44283bda5ce6c1b87a0d","url":"assets/js/b728f6fe.bba33834.js"},{"revision":"2be40b0e3a10ee5f687b2454983f2bff","url":"assets/js/b948ee85.51069a20.js"},{"revision":"25644e76ba7a5e161e951b853ae9065f","url":"assets/js/bfa6c7fa.580bf02d.js"},{"revision":"d7316b0fc65e451be8754322c311d77e","url":"assets/js/c48aeec7.94e91701.js"},{"revision":"abf084d9952e831c35af93772fa8145f","url":"assets/js/d04fa17f.2a5decdb.js"},{"revision":"f63015d5964152980d6790579ba8e27a","url":"assets/js/d4358da1.05e70cb8.js"},{"revision":"77647d01447df3220ae3ee790d8d475b","url":"assets/js/d5444868.acde29ec.js"},{"revision":"26d22022367f0dcf914f6cb72084d38b","url":"assets/js/d9cd0856.cc532560.js"},{"revision":"cc7d9defd7e8a08462417dea9a0a7ee2","url":"assets/js/d9d15992.54894bba.js"},{"revision":"55bec37dffd1c8e9a51d720e6e43defb","url":"assets/js/da95f3d6.ff213c15.js"},{"revision":"a11eba8db69b0b0c304973a0d4e67869","url":"assets/js/dd5deefd.039b46a5.js"},{"revision":"de334fda2763dabd727e522f77112ed5","url":"assets/js/dfd24482.a8c9edca.js"},{"revision":"f0a56040db25e20293d1bff86d0cae01","url":"assets/js/e2f5eafd.57ff7439.js"},{"revision":"af2391d45349e5dceeed3c1006e18443","url":"assets/js/e31563f4.3b2fb9de.js"},{"revision":"92dc99d1e7611b40e23d565b67c38213","url":"assets/js/e3741bf5.5a137d01.js"},{"revision":"957df6955f6894bef6f9b49cc498d4d6","url":"assets/js/e420c2e8.d885ff56.js"},{"revision":"c3bcdf044143c75017862559a1e7bc95","url":"assets/js/e9fc5b99.babb79cb.js"},{"revision":"b83af5b875b3f809e90d05b079b65fe6","url":"assets/js/f4f9ee34.40b1280a.js"},{"revision":"ea41e3b09be1da766bbf3f2e295142f2","url":"assets/js/f930e7e8.1501d559.js"},{"revision":"064505a29a5b6983e102db2b4cb1a148","url":"assets/js/main.55789724.js"},{"revision":"0152bf3bc45cb92a9d3c72f72fad018b","url":"assets/js/runtime~main.a05aa7a0.js"},{"revision":"527f0450ca0c75fac4b09cf586ea485e","url":"book1/algorithm-balanced-binary-trees.html"},{"revision":"9ca8bb67fe8861ba0ee6dd426f3ce343","url":"book1/browser-cross-origin.html"},{"revision":"0824da3e8ef994e2adba48ac6abaf17e","url":"book1/browser-repain-reflow.html"},{"revision":"711c91a81e8a9a9edf02c935cb40c30c","url":"book1/coding-promise.html"},{"revision":"c85778050ae2992ce32162bfaac357fa","url":"book1/css-bfc.html"},{"revision":"55f233d388f551a1c4e10cdf33053131","url":"book1/engineer-webpack-workflow.html"},{"revision":"cc37756256ad6df301dfc13ee8759a62","url":"book1/frame-vue-computed-watch.html"},{"revision":"7a269b8401cfe9d6018e079c281a9fc5","url":"book1/frame-vue-data-binding.html"},{"revision":"fbbba76fb912dd321025a3e2ccd4afbd","url":"book1/js-closures.html"},{"revision":"635e1ea31f97e3f6234555c004017c59","url":"book1/js-module-specs.html"},{"revision":"4a0565a91715c4b9571cb16319946ebe","url":"book1/network-security.html"},{"revision":"85c66afe2d68ed6f10efbf4d2c654318","url":"book1/topic-enter-url-display-xx.html"},{"revision":"ebec3c23af958cfc34298fad497b10df","url":"book2/algorithm-reverse-linked-list.html"},{"revision":"ce02f6535956f6124d24f48ea2441037","url":"book2/browser-garbage.html"},{"revision":"4eaf30bac5e7bbbeec5dc43c1443079b","url":"book2/browser-render-mechanism.html"},{"revision":"dcecb21bebcb217a551d70b215868cd7","url":"book2/coding-throttle-debounce.html"},{"revision":"5ece382c4cd706f29c8a17d34b114501","url":"book2/css-preprocessor.html"},{"revision":"bf2a79d1ca36f8613261f504f8ca75e2","url":"book2/engineer-babel.html"},{"revision":"7baf571cdc44f5765ad24ac1c27bad21","url":"book2/frame-react-fiber.html"},{"revision":"afacc8d5e5de6d76d6ae4e9a0f5d1708","url":"book2/frame-react-hoc-hooks.html"},{"revision":"4880b8f33b903d1d21d0a468072bd908","url":"book2/js-inherite.html"},{"revision":"f1a1731dc16b0b041ab16e71b8bb7317","url":"book2/js-new.html"},{"revision":"d1e9d5c64bde9bf44ee0f41fa9cda060","url":"book2/network-http-cache.html"},{"revision":"971fca4abce478931c87bf4d6b36cf83","url":"book2/topic-multi-pics-site-optimize.html"},{"revision":"b575c3cf2105cc7635135ca0b6c71963","url":"book3/algorithm-binary-tree-k.html"},{"revision":"ed69c751c85b9feb410415f4077a9dfc","url":"book3/browser-event-loop.html"},{"revision":"095b56619f3b22d6be29d8d93caad1f5","url":"book3/browser-memory-leaks.html"},{"revision":"dc531dc58f63369fa9410e69cdf46166","url":"book3/coding-arr-to-tree.html"},{"revision":"31fe412276f33e6925e359adf68eb5d7","url":"book3/css-mobile-adaptive.html"},{"revision":"7bcbd72432938de0d76fd49322f01cae","url":"book3/engineer-webpack-loader.html"},{"revision":"e960d94b599579dfdaef177342dcacc7","url":"book3/frame-diff.html"},{"revision":"ea3894ccfc42399a57b499a316f6db0e","url":"book3/frame-react-hooks.html"},{"revision":"7db6a4cf8c84857c409209377b28f2fa","url":"book3/js-async.html"},{"revision":"8ca90007696b9a4edfcbf16cccbfab41","url":"book3/js-ts-interface-type.html"},{"revision":"45876d71530eb83fdaa330db48f94ce7","url":"book3/network-http-1-2.html"},{"revision":"5218eba9ccd7dc54a0033daa74ba964f","url":"book3/topic-white-screen-optimization.html"},{"revision":"86a326d55c84e969e6f5934eb8396e19","url":"book4/array-repeat-number.html"},{"revision":"776b45975154dde6b616e8b3d88f7aa3","url":"book4/browser-local-storage.html"},{"revision":"5c4e3a22adcffc4ce23f5b0d1abca26a","url":"book4/browser-router.html"},{"revision":"e83d84fb737112660979af7c91b99cb5","url":"book4/coding-apply-call-bind.html"},{"revision":"580a03bebf15f9e63405bd06628dbf89","url":"book4/css-vertical-horizontal-center.html"},{"revision":"30dca412f5f493e9b02d8374afb0957f","url":"book4/engineer-front-end-testing.html"},{"revision":"b0f10ad57a3d19a274877f5f0f29c469","url":"book4/engineer-mfa.html"},{"revision":"c02243d0e2d093ae4f408e8d8f9eff24","url":"book4/frame-react-event-mechanism.html"},{"revision":"f570dfd4c02908409eaf55a2af1137ae","url":"book4/frame-react-vs-vue.html"},{"revision":"dcb57224b236acc4b8b4e9b48f93c4c8","url":"book4/js-ts-generics.html"},{"revision":"04c6d3833583123c7a4bb5324bd272f7","url":"guide.html"},{"revision":"46ed6349ecfa8d1a0fd6a3afa1e283b7","url":"index.html"},{"revision":"0b5d0a30a72f4f57af332297e57475ca","url":"manifest.json"},{"revision":"6bd2d13db6040e9603d3288b28449c9a","url":"search.html"},{"revision":"0216538e39d4956a3cfb020333aad016","url":"src_sw_js.sw.js"},{"revision":"dc93c7184b0b39c1f57d820c4171152e","url":"img/arrow.svg"},{"revision":"d731e2242601d1fb02e261706792f96a","url":"img/badge-192.svg"},{"revision":"f06f79f3429a1da4a30749f75f886537","url":"img/badge-512.svg"},{"revision":"f6935ea4945b35d2b2ba8bed3b73adc0","url":"img/badge.svg"},{"revision":"bdda44c6c2115ed183c6110ea9e85101","url":"img/favicon.ico"}]; const controller = new workbox_precaching__WEBPACK_IMPORTED_MODULE_0__.PrecacheController({ // Safer to turn this true? fallbackToNetwork: true,