diff --git a/components/editor.tsx b/components/editor.tsx
index 107ac938c..48b24c62e 100644
--- a/components/editor.tsx
+++ b/components/editor.tsx
@@ -27,7 +27,7 @@ export default function Editor() {
-
+ {/* */}
)
}
diff --git a/components/tools-panel/tools-panel.tsx b/components/tools-panel/tools-panel.tsx
index 00b8b57cf..8dea6a11b 100644
--- a/components/tools-panel/tools-panel.tsx
+++ b/components/tools-panel/tools-panel.tsx
@@ -177,7 +177,7 @@ export default function ToolsPanel() {
const OuterContainer = styled('div', {
position: 'fixed',
- bottom: 40,
+ bottom: 32,
left: 0,
right: 0,
padding: '0 8px 12px 8px',
diff --git a/next.config.js b/next.config.js
new file mode 100644
index 000000000..58b238cbb
--- /dev/null
+++ b/next.config.js
@@ -0,0 +1,7 @@
+const withPWA = require('next-pwa')
+
+module.exports = withPWA({
+ pwa: {
+ dest: 'public',
+ },
+})
diff --git a/package.json b/package.json
index 05d62d7be..608d6ebce 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
"framer-motion": "^4.1.16",
"ismobilejs": "^1.1.1",
"next": "10.2.0",
+ "next-pwa": "^5.2.21",
"perfect-freehand": "^0.4.8",
"prettier": "^2.3.0",
"react": "17.0.2",
diff --git a/pages/_app.tsx b/pages/_app.tsx
index 4750d5317..ff3afc91b 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -4,7 +4,17 @@ import 'styles/globals.css'
function MyApp({ Component, pageProps }: AppProps) {
globalStyles()
- return
+ return (
+ <>
+
+
+
+
+ >
+ )
}
export default MyApp
diff --git a/pages/_document.tsx b/pages/_document.tsx
index e8c20429c..584850f07 100644
--- a/pages/_document.tsx
+++ b/pages/_document.tsx
@@ -27,7 +27,39 @@ class MyDocument extends NextDocument {
render() {
return (
-
diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png
new file mode 100644
index 000000000..93ebeb9cc
Binary files /dev/null and b/public/android-chrome-192x192.png differ
diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png
new file mode 100644
index 000000000..ae481987b
Binary files /dev/null and b/public/android-chrome-512x512.png differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 000000000..85725d8c8
Binary files /dev/null and b/public/apple-touch-icon.png differ
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
new file mode 100644
index 000000000..5e7e44f87
Binary files /dev/null and b/public/favicon-16x16.png differ
diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png
new file mode 100644
index 000000000..610ecd0bb
Binary files /dev/null and b/public/favicon-32x32.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
index 4965832f2..4cb94011b 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/manifest.json b/public/manifest.json
new file mode 100644
index 000000000..21b3911a3
--- /dev/null
+++ b/public/manifest.json
@@ -0,0 +1,21 @@
+{
+ "name": "tldraw",
+ "short_name": "tldraw",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#FFFFFF",
+ "background_color": "#FFFFFF",
+ "start_url": "/",
+ "display": "minimal-ui",
+ "orientation": "portrait"
+}
diff --git a/public/sw.js b/public/sw.js
new file mode 100644
index 000000000..357e57a9e
--- /dev/null
+++ b/public/sw.js
@@ -0,0 +1,128 @@
+/**
+ * Copyright 2018 Google Inc. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// If the loader is already loaded, just stop.
+if (!self.define) {
+ const singleRequire = name => {
+ if (name !== 'require') {
+ name = name + '.js';
+ }
+ let promise = Promise.resolve();
+ if (!registry[name]) {
+
+ promise = new Promise(async resolve => {
+ if ("document" in self) {
+ const script = document.createElement("script");
+ script.src = name;
+ document.head.appendChild(script);
+ script.onload = resolve;
+ } else {
+ importScripts(name);
+ resolve();
+ }
+ });
+
+ }
+ return promise.then(() => {
+ if (!registry[name]) {
+ throw new Error(`Module ${name} didn’t register its module`);
+ }
+ return registry[name];
+ });
+ };
+
+ const require = (names, resolve) => {
+ Promise.all(names.map(singleRequire))
+ .then(modules => resolve(modules.length === 1 ? modules[0] : modules));
+ };
+
+ const registry = {
+ require: Promise.resolve(require)
+ };
+
+ self.define = (moduleName, depsNames, factory) => {
+ if (registry[moduleName]) {
+ // Module is already loading or loaded.
+ return;
+ }
+ registry[moduleName] = Promise.resolve().then(() => {
+ let exports = {};
+ const module = {
+ uri: location.origin + moduleName.slice(1)
+ };
+ return Promise.all(
+ depsNames.map(depName => {
+ switch(depName) {
+ case "exports":
+ return exports;
+ case "module":
+ return module;
+ default:
+ return singleRequire(depName);
+ }
+ })
+ ).then(deps => {
+ const facValue = factory(...deps);
+ if(!exports.default) {
+ exports.default = facValue;
+ }
+ return exports;
+ });
+ });
+ };
+}
+define("./sw.js",['./workbox-6b19f60b'], function (workbox) { 'use strict';
+
+ /**
+ * Welcome to your Workbox-powered service worker!
+ *
+ * You'll need to register this file in your web app.
+ * See https://goo.gl/nhQhGp
+ *
+ * The rest of the code is auto-generated. Please don't update this file
+ * directly; instead, make changes to your Workbox build configuration
+ * and re-run your build process.
+ * See https://goo.gl/2aRDsh
+ */
+
+ importScripts();
+ self.skipWaiting();
+ workbox.clientsClaim();
+ workbox.registerRoute("/", new workbox.NetworkFirst({
+ "cacheName": "start-url",
+ plugins: [{
+ cacheWillUpdate: async ({
+ request,
+ response,
+ event,
+ state
+ }) => {
+ if (response && response.type === 'opaqueredirect') {
+ return new Response(response.body, {
+ status: 200,
+ statusText: 'OK',
+ headers: response.headers
+ });
+ }
+
+ return response;
+ }
+ }]
+ }), 'GET');
+ workbox.registerRoute(/.*/i, new workbox.NetworkOnly({
+ "cacheName": "dev",
+ plugins: []
+ }), 'GET');
+
+});
+//# sourceMappingURL=sw.js.map
diff --git a/public/sw.js.map b/public/sw.js.map
new file mode 100644
index 000000000..d1faaf625
--- /dev/null
+++ b/public/sw.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"sw.js","sources":["../../../../../private/var/folders/3w/cj9n4h8j7xl3b82k45v7xw2r0000gn/T/af88887397cd2af68f658e66ccc7f5cc/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-core/clientsClaim.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({request, response, event, state}) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, {status: 200, statusText: 'OK', headers: response.headers}); } return response; } }] }), 'GET');\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_routing_registerRoute","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_NetworkOnly"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGoJ;EACpJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAGAA,aAAa;EAUbC,IAAI,CAACC,WAAL;AAEAC,sBAAyB;AAIzBC,uBAA6B,CAAC,GAAD,EAAM,IAAIC,oBAAJ,CAAoC;EAAE,eAAY,WAAd;EAA2BC,EAAAA,OAAO,EAAE,CAAC;EAAEC,IAAAA,eAAe,EAAE,OAAO;EAACC,MAAAA,OAAD;EAAUC,MAAAA,QAAV;EAAoBC,MAAAA,KAApB;EAA2BC,MAAAA;EAA3B,KAAP,KAA6C;EAAE,UAAIF,QAAQ,IAAIA,QAAQ,CAACG,IAAT,KAAkB,gBAAlC,EAAoD;EAAE,eAAO,IAAIC,QAAJ,CAAaJ,QAAQ,CAACK,IAAtB,EAA4B;EAACC,UAAAA,MAAM,EAAE,GAAT;EAAcC,UAAAA,UAAU,EAAE,IAA1B;EAAgCC,UAAAA,OAAO,EAAER,QAAQ,CAACQ;EAAlD,SAA5B,CAAP;EAAiG;;EAAC,aAAOR,QAAP;EAAkB;EAA5O,GAAD;EAApC,CAApC,CAAN,EAAmU,KAAnU,CAA7B;AACAL,uBAA6B,CAAC,KAAD,EAAQ,IAAIc,mBAAJ,CAAmC;EAAE,eAAY,KAAd;EAAqBZ,EAAAA,OAAO,EAAE;EAA9B,CAAnC,CAAR,EAAgF,KAAhF,CAA7B;;"}
\ No newline at end of file
diff --git a/public/workbox-6b19f60b.js b/public/workbox-6b19f60b.js
new file mode 100644
index 000000000..41d35339c
--- /dev/null
+++ b/public/workbox-6b19f60b.js
@@ -0,0 +1,2701 @@
+define("./workbox-6b19f60b.js",['exports'], function (exports) { 'use strict';
+
+ try {
+ self['workbox:core:6.1.5'] && _();
+ } catch (e) {}
+
+ /*
+ Copyright 2019 Google LLC
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ const logger = (() => {
+ // Don't overwrite this value if it's already set.
+ // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923
+ if (!('__WB_DISABLE_DEV_LOGS' in self)) {
+ self.__WB_DISABLE_DEV_LOGS = false;
+ }
+
+ let inGroup = false;
+ const methodToColorMap = {
+ debug: `#7f8c8d`,
+ log: `#2ecc71`,
+ warn: `#f39c12`,
+ error: `#c0392b`,
+ groupCollapsed: `#3498db`,
+ groupEnd: null
+ };
+
+ const print = function (method, args) {
+ if (self.__WB_DISABLE_DEV_LOGS) {
+ return;
+ }
+
+ if (method === 'groupCollapsed') {
+ // Safari doesn't print all console.groupCollapsed() arguments:
+ // https://bugs.webkit.org/show_bug.cgi?id=182754
+ if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
+ console[method](...args);
+ return;
+ }
+ }
+
+ const styles = [`background: ${methodToColorMap[method]}`, `border-radius: 0.5em`, `color: white`, `font-weight: bold`, `padding: 2px 0.5em`]; // When in a group, the workbox prefix is not displayed.
+
+ const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];
+ console[method](...logPrefix, ...args);
+
+ if (method === 'groupCollapsed') {
+ inGroup = true;
+ }
+
+ if (method === 'groupEnd') {
+ inGroup = false;
+ }
+ };
+
+ const api = {};
+ const loggerMethods = Object.keys(methodToColorMap);
+
+ for (const key of loggerMethods) {
+ const method = key;
+
+ api[method] = (...args) => {
+ print(method, args);
+ };
+ }
+
+ return api;
+ })();
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ const messages$1 = {
+ 'invalid-value': ({
+ paramName,
+ validValueDescription,
+ value
+ }) => {
+ if (!paramName || !validValueDescription) {
+ throw new Error(`Unexpected input to 'invalid-value' error.`);
+ }
+
+ return `The '${paramName}' parameter was given a value with an ` + `unexpected value. ${validValueDescription} Received a value of ` + `${JSON.stringify(value)}.`;
+ },
+ 'not-an-array': ({
+ moduleName,
+ className,
+ funcName,
+ paramName
+ }) => {
+ if (!moduleName || !className || !funcName || !paramName) {
+ throw new Error(`Unexpected input to 'not-an-array' error.`);
+ }
+
+ return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className}.${funcName}()' must be an array.`;
+ },
+ 'incorrect-type': ({
+ expectedType,
+ paramName,
+ moduleName,
+ className,
+ funcName
+ }) => {
+ if (!expectedType || !paramName || !moduleName || !funcName) {
+ throw new Error(`Unexpected input to 'incorrect-type' error.`);
+ }
+
+ return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className ? className + '.' : ''}` + `${funcName}()' must be of type ${expectedType}.`;
+ },
+ 'incorrect-class': ({
+ expectedClass,
+ paramName,
+ moduleName,
+ className,
+ funcName,
+ isReturnValueProblem
+ }) => {
+ if (!expectedClass || !moduleName || !funcName) {
+ throw new Error(`Unexpected input to 'incorrect-class' error.`);
+ }
+
+ if (isReturnValueProblem) {
+ return `The return value from ` + `'${moduleName}.${className ? className + '.' : ''}${funcName}()' ` + `must be an instance of class ${expectedClass.name}.`;
+ }
+
+ return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className ? className + '.' : ''}${funcName}()' ` + `must be an instance of class ${expectedClass.name}.`;
+ },
+ 'missing-a-method': ({
+ expectedMethod,
+ paramName,
+ moduleName,
+ className,
+ funcName
+ }) => {
+ if (!expectedMethod || !paramName || !moduleName || !className || !funcName) {
+ throw new Error(`Unexpected input to 'missing-a-method' error.`);
+ }
+
+ return `${moduleName}.${className}.${funcName}() expected the ` + `'${paramName}' parameter to expose a '${expectedMethod}' method.`;
+ },
+ 'add-to-cache-list-unexpected-type': ({
+ entry
+ }) => {
+ return `An unexpected entry was passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' The entry ` + `'${JSON.stringify(entry)}' isn't supported. You must supply an array of ` + `strings with one or more characters, objects with a url property or ` + `Request objects.`;
+ },
+ 'add-to-cache-list-conflicting-entries': ({
+ firstEntry,
+ secondEntry
+ }) => {
+ if (!firstEntry || !secondEntry) {
+ throw new Error(`Unexpected input to ` + `'add-to-cache-list-duplicate-entries' error.`);
+ }
+
+ return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${firstEntry._entryId} but different revision details. Workbox is ` + `unable to cache and version the asset correctly. Please remove one ` + `of the entries.`;
+ },
+ 'plugin-error-request-will-fetch': ({
+ thrownError
+ }) => {
+ if (!thrownError) {
+ throw new Error(`Unexpected input to ` + `'plugin-error-request-will-fetch', error.`);
+ }
+
+ return `An error was thrown by a plugins 'requestWillFetch()' method. ` + `The thrown error message was: '${thrownError.message}'.`;
+ },
+ 'invalid-cache-name': ({
+ cacheNameId,
+ value
+ }) => {
+ if (!cacheNameId) {
+ throw new Error(`Expected a 'cacheNameId' for error 'invalid-cache-name'`);
+ }
+
+ return `You must provide a name containing at least one character for ` + `setCacheDetails({${cacheNameId}: '...'}). Received a value of ` + `'${JSON.stringify(value)}'`;
+ },
+ 'unregister-route-but-not-found-with-method': ({
+ method
+ }) => {
+ if (!method) {
+ throw new Error(`Unexpected input to ` + `'unregister-route-but-not-found-with-method' error.`);
+ }
+
+ return `The route you're trying to unregister was not previously ` + `registered for the method type '${method}'.`;
+ },
+ 'unregister-route-route-not-registered': () => {
+ return `The route you're trying to unregister was not previously ` + `registered.`;
+ },
+ 'queue-replay-failed': ({
+ name
+ }) => {
+ return `Replaying the background sync queue '${name}' failed.`;
+ },
+ 'duplicate-queue-name': ({
+ name
+ }) => {
+ return `The Queue name '${name}' is already being used. ` + `All instances of backgroundSync.Queue must be given unique names.`;
+ },
+ 'expired-test-without-max-age': ({
+ methodName,
+ paramName
+ }) => {
+ return `The '${methodName}()' method can only be used when the ` + `'${paramName}' is used in the constructor.`;
+ },
+ 'unsupported-route-type': ({
+ moduleName,
+ className,
+ funcName,
+ paramName
+ }) => {
+ return `The supplied '${paramName}' parameter was an unsupported type. ` + `Please check the docs for ${moduleName}.${className}.${funcName} for ` + `valid input types.`;
+ },
+ 'not-array-of-class': ({
+ value,
+ expectedClass,
+ moduleName,
+ className,
+ funcName,
+ paramName
+ }) => {
+ return `The supplied '${paramName}' parameter must be an array of ` + `'${expectedClass}' objects. Received '${JSON.stringify(value)},'. ` + `Please check the call to ${moduleName}.${className}.${funcName}() ` + `to fix the issue.`;
+ },
+ 'max-entries-or-age-required': ({
+ moduleName,
+ className,
+ funcName
+ }) => {
+ return `You must define either config.maxEntries or config.maxAgeSeconds` + `in ${moduleName}.${className}.${funcName}`;
+ },
+ 'statuses-or-headers-required': ({
+ moduleName,
+ className,
+ funcName
+ }) => {
+ return `You must define either config.statuses or config.headers` + `in ${moduleName}.${className}.${funcName}`;
+ },
+ 'invalid-string': ({
+ moduleName,
+ funcName,
+ paramName
+ }) => {
+ if (!paramName || !moduleName || !funcName) {
+ throw new Error(`Unexpected input to 'invalid-string' error.`);
+ }
+
+ return `When using strings, the '${paramName}' parameter must start with ` + `'http' (for cross-origin matches) or '/' (for same-origin matches). ` + `Please see the docs for ${moduleName}.${funcName}() for ` + `more info.`;
+ },
+ 'channel-name-required': () => {
+ return `You must provide a channelName to construct a ` + `BroadcastCacheUpdate instance.`;
+ },
+ 'invalid-responses-are-same-args': () => {
+ return `The arguments passed into responsesAreSame() appear to be ` + `invalid. Please ensure valid Responses are used.`;
+ },
+ 'expire-custom-caches-only': () => {
+ return `You must provide a 'cacheName' property when using the ` + `expiration plugin with a runtime caching strategy.`;
+ },
+ 'unit-must-be-bytes': ({
+ normalizedRangeHeader
+ }) => {
+ if (!normalizedRangeHeader) {
+ throw new Error(`Unexpected input to 'unit-must-be-bytes' error.`);
+ }
+
+ return `The 'unit' portion of the Range header must be set to 'bytes'. ` + `The Range header provided was "${normalizedRangeHeader}"`;
+ },
+ 'single-range-only': ({
+ normalizedRangeHeader
+ }) => {
+ if (!normalizedRangeHeader) {
+ throw new Error(`Unexpected input to 'single-range-only' error.`);
+ }
+
+ return `Multiple ranges are not supported. Please use a single start ` + `value, and optional end value. The Range header provided was ` + `"${normalizedRangeHeader}"`;
+ },
+ 'invalid-range-values': ({
+ normalizedRangeHeader
+ }) => {
+ if (!normalizedRangeHeader) {
+ throw new Error(`Unexpected input to 'invalid-range-values' error.`);
+ }
+
+ return `The Range header is missing both start and end values. At least ` + `one of those values is needed. The Range header provided was ` + `"${normalizedRangeHeader}"`;
+ },
+ 'no-range-header': () => {
+ return `No Range header was found in the Request provided.`;
+ },
+ 'range-not-satisfiable': ({
+ size,
+ start,
+ end
+ }) => {
+ return `The start (${start}) and end (${end}) values in the Range are ` + `not satisfiable by the cached response, which is ${size} bytes.`;
+ },
+ 'attempt-to-cache-non-get-request': ({
+ url,
+ method
+ }) => {
+ return `Unable to cache '${url}' because it is a '${method}' request and ` + `only 'GET' requests can be cached.`;
+ },
+ 'cache-put-with-no-response': ({
+ url
+ }) => {
+ return `There was an attempt to cache '${url}' but the response was not ` + `defined.`;
+ },
+ 'no-response': ({
+ url,
+ error
+ }) => {
+ let message = `The strategy could not generate a response for '${url}'.`;
+
+ if (error) {
+ message += ` The underlying error is ${error}.`;
+ }
+
+ return message;
+ },
+ 'bad-precaching-response': ({
+ url,
+ status
+ }) => {
+ return `The precaching request for '${url}' failed` + (status ? ` with an HTTP status of ${status}.` : `.`);
+ },
+ 'non-precached-url': ({
+ url
+ }) => {
+ return `createHandlerBoundToURL('${url}') was called, but that URL is ` + `not precached. Please pass in a URL that is precached instead.`;
+ },
+ 'add-to-cache-list-conflicting-integrities': ({
+ url
+ }) => {
+ return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${url} with different integrity values. Please remove one of them.`;
+ },
+ 'missing-precache-entry': ({
+ cacheName,
+ url
+ }) => {
+ return `Unable to find a precached response in ${cacheName} for ${url}.`;
+ },
+ 'cross-origin-copy-response': ({
+ origin
+ }) => {
+ return `workbox-core.copyResponse() can only be used with same-origin ` + `responses. It was passed a response with origin ${origin}.`;
+ }
+ };
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+
+ const generatorFunction = (code, details = {}) => {
+ const message = messages$1[code];
+
+ if (!message) {
+ throw new Error(`Unable to find message for code '${code}'.`);
+ }
+
+ return message(details);
+ };
+
+ const messageGenerator = generatorFunction;
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * Workbox errors should be thrown with this class.
+ * This allows use to ensure the type easily in tests,
+ * helps developers identify errors from workbox
+ * easily and allows use to optimise error
+ * messages correctly.
+ *
+ * @private
+ */
+
+ class WorkboxError extends Error {
+ /**
+ *
+ * @param {string} errorCode The error code that
+ * identifies this particular error.
+ * @param {Object=} details Any relevant arguments
+ * that will help developers identify issues should
+ * be added as a key on the context object.
+ */
+ constructor(errorCode, details) {
+ const message = messageGenerator(errorCode, details);
+ super(message);
+ this.name = errorCode;
+ this.details = details;
+ }
+
+ }
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /*
+ * This method throws if the supplied value is not an array.
+ * The destructed values are required to produce a meaningful error for users.
+ * The destructed and restructured object is so it's clear what is
+ * needed.
+ */
+
+ const isArray = (value, details) => {
+ if (!Array.isArray(value)) {
+ throw new WorkboxError('not-an-array', details);
+ }
+ };
+
+ const hasMethod = (object, expectedMethod, details) => {
+ const type = typeof object[expectedMethod];
+
+ if (type !== 'function') {
+ details['expectedMethod'] = expectedMethod;
+ throw new WorkboxError('missing-a-method', details);
+ }
+ };
+
+ const isType = (object, expectedType, details) => {
+ if (typeof object !== expectedType) {
+ details['expectedType'] = expectedType;
+ throw new WorkboxError('incorrect-type', details);
+ }
+ };
+
+ const isInstance = (object, expectedClass, details) => {
+ if (!(object instanceof expectedClass)) {
+ details['expectedClass'] = expectedClass;
+ throw new WorkboxError('incorrect-class', details);
+ }
+ };
+
+ const isOneOf = (value, validValues, details) => {
+ if (!validValues.includes(value)) {
+ details['validValueDescription'] = `Valid values are ${JSON.stringify(validValues)}.`;
+ throw new WorkboxError('invalid-value', details);
+ }
+ };
+
+ const isArrayOfClass = (value, expectedClass, details) => {
+ const error = new WorkboxError('not-array-of-class', details);
+
+ if (!Array.isArray(value)) {
+ throw error;
+ }
+
+ for (const item of value) {
+ if (!(item instanceof expectedClass)) {
+ throw error;
+ }
+ }
+ };
+
+ const finalAssertExports = {
+ hasMethod,
+ isArray,
+ isInstance,
+ isOneOf,
+ isType,
+ isArrayOfClass
+ };
+
+ try {
+ self['workbox:routing:6.1.5'] && _();
+ } catch (e) {}
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * The default HTTP method, 'GET', used when there's no specific method
+ * configured for a route.
+ *
+ * @type {string}
+ *
+ * @private
+ */
+
+ const defaultMethod = 'GET';
+ /**
+ * The list of valid HTTP methods associated with requests that could be routed.
+ *
+ * @type {Array}
+ *
+ * @private
+ */
+
+ const validMethods = ['DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT'];
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * @param {function()|Object} handler Either a function, or an object with a
+ * 'handle' method.
+ * @return {Object} An object with a handle method.
+ *
+ * @private
+ */
+
+ const normalizeHandler = handler => {
+ if (handler && typeof handler === 'object') {
+ {
+ finalAssertExports.hasMethod(handler, 'handle', {
+ moduleName: 'workbox-routing',
+ className: 'Route',
+ funcName: 'constructor',
+ paramName: 'handler'
+ });
+ }
+
+ return handler;
+ } else {
+ {
+ finalAssertExports.isType(handler, 'function', {
+ moduleName: 'workbox-routing',
+ className: 'Route',
+ funcName: 'constructor',
+ paramName: 'handler'
+ });
+ }
+
+ return {
+ handle: handler
+ };
+ }
+ };
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * A `Route` consists of a pair of callback functions, "match" and "handler".
+ * The "match" callback determine if a route should be used to "handle" a
+ * request by returning a non-falsy value if it can. The "handler" callback
+ * is called when there is a match and should return a Promise that resolves
+ * to a `Response`.
+ *
+ * @memberof module:workbox-routing
+ */
+
+ class Route {
+ /**
+ * Constructor for Route class.
+ *
+ * @param {module:workbox-routing~matchCallback} match
+ * A callback function that determines whether the route matches a given
+ * `fetch` event by returning a non-falsy value.
+ * @param {module:workbox-routing~handlerCallback} handler A callback
+ * function that returns a Promise resolving to a Response.
+ * @param {string} [method='GET'] The HTTP method to match the Route
+ * against.
+ */
+ constructor(match, handler, method = defaultMethod) {
+ {
+ finalAssertExports.isType(match, 'function', {
+ moduleName: 'workbox-routing',
+ className: 'Route',
+ funcName: 'constructor',
+ paramName: 'match'
+ });
+
+ if (method) {
+ finalAssertExports.isOneOf(method, validMethods, {
+ paramName: 'method'
+ });
+ }
+ } // These values are referenced directly by Router so cannot be
+ // altered by minificaton.
+
+
+ this.handler = normalizeHandler(handler);
+ this.match = match;
+ this.method = method;
+ }
+ /**
+ *
+ * @param {module:workbox-routing-handlerCallback} handler A callback
+ * function that returns a Promise resolving to a Response
+ */
+
+
+ setCatchHandler(handler) {
+ this.catchHandler = normalizeHandler(handler);
+ }
+
+ }
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * RegExpRoute makes it easy to create a regular expression based
+ * [Route]{@link module:workbox-routing.Route}.
+ *
+ * For same-origin requests the RegExp only needs to match part of the URL. For
+ * requests against third-party servers, you must define a RegExp that matches
+ * the start of the URL.
+ *
+ * [See the module docs for info.]{@link https://developers.google.com/web/tools/workbox/modules/workbox-routing}
+ *
+ * @memberof module:workbox-routing
+ * @extends module:workbox-routing.Route
+ */
+
+ class RegExpRoute extends Route {
+ /**
+ * If the regular expression contains
+ * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},
+ * the captured values will be passed to the
+ * [handler's]{@link module:workbox-routing~handlerCallback} `params`
+ * argument.
+ *
+ * @param {RegExp} regExp The regular expression to match against URLs.
+ * @param {module:workbox-routing~handlerCallback} handler A callback
+ * function that returns a Promise resulting in a Response.
+ * @param {string} [method='GET'] The HTTP method to match the Route
+ * against.
+ */
+ constructor(regExp, handler, method) {
+ {
+ finalAssertExports.isInstance(regExp, RegExp, {
+ moduleName: 'workbox-routing',
+ className: 'RegExpRoute',
+ funcName: 'constructor',
+ paramName: 'pattern'
+ });
+ }
+
+ const match = ({
+ url
+ }) => {
+ const result = regExp.exec(url.href); // Return immediately if there's no match.
+
+ if (!result) {
+ return;
+ } // Require that the match start at the first character in the URL string
+ // if it's a cross-origin request.
+ // See https://github.com/GoogleChrome/workbox/issues/281 for the context
+ // behind this behavior.
+
+
+ if (url.origin !== location.origin && result.index !== 0) {
+ {
+ logger.debug(`The regular expression '${regExp}' only partially matched ` + `against the cross-origin URL '${url}'. RegExpRoute's will only ` + `handle cross-origin requests if they match the entire URL.`);
+ }
+
+ return;
+ } // If the route matches, but there aren't any capture groups defined, then
+ // this will return [], which is truthy and therefore sufficient to
+ // indicate a match.
+ // If there are capture groups, then it will return their values.
+
+
+ return result.slice(1);
+ };
+
+ super(match, handler, method);
+ }
+
+ }
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+
+ const getFriendlyURL = url => {
+ const urlObj = new URL(String(url), location.href); // See https://github.com/GoogleChrome/workbox/issues/2323
+ // We want to include everything, except for the origin if it's same-origin.
+
+ return urlObj.href.replace(new RegExp(`^${location.origin}`), '');
+ };
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * The Router can be used to process a FetchEvent through one or more
+ * [Routes]{@link module:workbox-routing.Route} responding with a Request if
+ * a matching route exists.
+ *
+ * If no route matches a given a request, the Router will use a "default"
+ * handler if one is defined.
+ *
+ * Should the matching Route throw an error, the Router will use a "catch"
+ * handler if one is defined to gracefully deal with issues and respond with a
+ * Request.
+ *
+ * If a request matches multiple routes, the **earliest** registered route will
+ * be used to respond to the request.
+ *
+ * @memberof module:workbox-routing
+ */
+
+ class Router {
+ /**
+ * Initializes a new Router.
+ */
+ constructor() {
+ this._routes = new Map();
+ this._defaultHandlerMap = new Map();
+ }
+ /**
+ * @return {Map>} routes A `Map` of HTTP
+ * method name ('GET', etc.) to an array of all the corresponding `Route`
+ * instances that are registered.
+ */
+
+
+ get routes() {
+ return this._routes;
+ }
+ /**
+ * Adds a fetch event listener to respond to events when a route matches
+ * the event's request.
+ */
+
+
+ addFetchListener() {
+ // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705
+ self.addEventListener('fetch', event => {
+ const {
+ request
+ } = event;
+ const responsePromise = this.handleRequest({
+ request,
+ event
+ });
+
+ if (responsePromise) {
+ event.respondWith(responsePromise);
+ }
+ });
+ }
+ /**
+ * Adds a message event listener for URLs to cache from the window.
+ * This is useful to cache resources loaded on the page prior to when the
+ * service worker started controlling it.
+ *
+ * The format of the message data sent from the window should be as follows.
+ * Where the `urlsToCache` array may consist of URL strings or an array of
+ * URL string + `requestInit` object (the same as you'd pass to `fetch()`).
+ *
+ * ```
+ * {
+ * type: 'CACHE_URLS',
+ * payload: {
+ * urlsToCache: [
+ * './script1.js',
+ * './script2.js',
+ * ['./script3.js', {mode: 'no-cors'}],
+ * ],
+ * },
+ * }
+ * ```
+ */
+
+
+ addCacheListener() {
+ // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705
+ self.addEventListener('message', event => {
+ if (event.data && event.data.type === 'CACHE_URLS') {
+ const {
+ payload
+ } = event.data;
+
+ {
+ logger.debug(`Caching URLs from the window`, payload.urlsToCache);
+ }
+
+ const requestPromises = Promise.all(payload.urlsToCache.map(entry => {
+ if (typeof entry === 'string') {
+ entry = [entry];
+ }
+
+ const request = new Request(...entry);
+ return this.handleRequest({
+ request,
+ event
+ }); // TODO(philipwalton): TypeScript errors without this typecast for
+ // some reason (probably a bug). The real type here should work but
+ // doesn't: `Array | undefined>`.
+ })); // TypeScript
+
+ event.waitUntil(requestPromises); // If a MessageChannel was used, reply to the message on success.
+
+ if (event.ports && event.ports[0]) {
+ requestPromises.then(() => event.ports[0].postMessage(true));
+ }
+ }
+ });
+ }
+ /**
+ * Apply the routing rules to a FetchEvent object to get a Response from an
+ * appropriate Route's handler.
+ *
+ * @param {Object} options
+ * @param {Request} options.request The request to handle.
+ * @param {ExtendableEvent} options.event The event that triggered the
+ * request.
+ * @return {Promise|undefined} A promise is returned if a
+ * registered route can handle the request. If there is no matching
+ * route and there's no `defaultHandler`, `undefined` is returned.
+ */
+
+
+ handleRequest({
+ request,
+ event
+ }) {
+ {
+ finalAssertExports.isInstance(request, Request, {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'handleRequest',
+ paramName: 'options.request'
+ });
+ }
+
+ const url = new URL(request.url, location.href);
+
+ if (!url.protocol.startsWith('http')) {
+ {
+ logger.debug(`Workbox Router only supports URLs that start with 'http'.`);
+ }
+
+ return;
+ }
+
+ const sameOrigin = url.origin === location.origin;
+ const {
+ params,
+ route
+ } = this.findMatchingRoute({
+ event,
+ request,
+ sameOrigin,
+ url
+ });
+ let handler = route && route.handler;
+ const debugMessages = [];
+
+ {
+ if (handler) {
+ debugMessages.push([`Found a route to handle this request:`, route]);
+
+ if (params) {
+ debugMessages.push([`Passing the following params to the route's handler:`, params]);
+ }
+ }
+ } // If we don't have a handler because there was no matching route, then
+ // fall back to defaultHandler if that's defined.
+
+
+ const method = request.method;
+
+ if (!handler && this._defaultHandlerMap.has(method)) {
+ {
+ debugMessages.push(`Failed to find a matching route. Falling ` + `back to the default handler for ${method}.`);
+ }
+
+ handler = this._defaultHandlerMap.get(method);
+ }
+
+ if (!handler) {
+ {
+ // No handler so Workbox will do nothing. If logs is set of debug
+ // i.e. verbose, we should print out this information.
+ logger.debug(`No route found for: ${getFriendlyURL(url)}`);
+ }
+
+ return;
+ }
+
+ {
+ // We have a handler, meaning Workbox is going to handle the route.
+ // print the routing details to the console.
+ logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);
+ debugMessages.forEach(msg => {
+ if (Array.isArray(msg)) {
+ logger.log(...msg);
+ } else {
+ logger.log(msg);
+ }
+ });
+ logger.groupEnd();
+ } // Wrap in try and catch in case the handle method throws a synchronous
+ // error. It should still callback to the catch handler.
+
+
+ let responsePromise;
+
+ try {
+ responsePromise = handler.handle({
+ url,
+ request,
+ event,
+ params
+ });
+ } catch (err) {
+ responsePromise = Promise.reject(err);
+ } // Get route's catch handler, if it exists
+
+
+ const catchHandler = route && route.catchHandler;
+
+ if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) {
+ responsePromise = responsePromise.catch(async err => {
+ // If there's a route catch handler, process that first
+ if (catchHandler) {
+ {
+ // Still include URL here as it will be async from the console group
+ // and may not make sense without the URL
+ logger.groupCollapsed(`Error thrown when responding to: ` + ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);
+ logger.error(`Error thrown by:`, route);
+ logger.error(err);
+ logger.groupEnd();
+ }
+
+ try {
+ return await catchHandler.handle({
+ url,
+ request,
+ event,
+ params
+ });
+ } catch (catchErr) {
+ err = catchErr;
+ }
+ }
+
+ if (this._catchHandler) {
+ {
+ // Still include URL here as it will be async from the console group
+ // and may not make sense without the URL
+ logger.groupCollapsed(`Error thrown when responding to: ` + ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);
+ logger.error(`Error thrown by:`, route);
+ logger.error(err);
+ logger.groupEnd();
+ }
+
+ return this._catchHandler.handle({
+ url,
+ request,
+ event
+ });
+ }
+
+ throw err;
+ });
+ }
+
+ return responsePromise;
+ }
+ /**
+ * Checks a request and URL (and optionally an event) against the list of
+ * registered routes, and if there's a match, returns the corresponding
+ * route along with any params generated by the match.
+ *
+ * @param {Object} options
+ * @param {URL} options.url
+ * @param {boolean} options.sameOrigin The result of comparing `url.origin`
+ * against the current origin.
+ * @param {Request} options.request The request to match.
+ * @param {Event} options.event The corresponding event.
+ * @return {Object} An object with `route` and `params` properties.
+ * They are populated if a matching route was found or `undefined`
+ * otherwise.
+ */
+
+
+ findMatchingRoute({
+ url,
+ sameOrigin,
+ request,
+ event
+ }) {
+ const routes = this._routes.get(request.method) || [];
+
+ for (const route of routes) {
+ let params;
+ const matchResult = route.match({
+ url,
+ sameOrigin,
+ request,
+ event
+ });
+
+ if (matchResult) {
+ {
+ // Warn developers that using an async matchCallback is almost always
+ // not the right thing to do.
+ if (matchResult instanceof Promise) {
+ logger.warn(`While routing ${getFriendlyURL(url)}, an async ` + `matchCallback function was used. Please convert the ` + `following route to use a synchronous matchCallback function:`, route);
+ }
+ } // See https://github.com/GoogleChrome/workbox/issues/2079
+
+
+ params = matchResult;
+
+ if (Array.isArray(matchResult) && matchResult.length === 0) {
+ // Instead of passing an empty array in as params, use undefined.
+ params = undefined;
+ } else if (matchResult.constructor === Object && Object.keys(matchResult).length === 0) {
+ // Instead of passing an empty object in as params, use undefined.
+ params = undefined;
+ } else if (typeof matchResult === 'boolean') {
+ // For the boolean value true (rather than just something truth-y),
+ // don't set params.
+ // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353
+ params = undefined;
+ } // Return early if have a match.
+
+
+ return {
+ route,
+ params
+ };
+ }
+ } // If no match was found above, return and empty object.
+
+
+ return {};
+ }
+ /**
+ * Define a default `handler` that's called when no routes explicitly
+ * match the incoming request.
+ *
+ * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.
+ *
+ * Without a default handler, unmatched requests will go against the
+ * network as if there were no service worker present.
+ *
+ * @param {module:workbox-routing~handlerCallback} handler A callback
+ * function that returns a Promise resulting in a Response.
+ * @param {string} [method='GET'] The HTTP method to associate with this
+ * default handler. Each method has its own default.
+ */
+
+
+ setDefaultHandler(handler, method = defaultMethod) {
+ this._defaultHandlerMap.set(method, normalizeHandler(handler));
+ }
+ /**
+ * If a Route throws an error while handling a request, this `handler`
+ * will be called and given a chance to provide a response.
+ *
+ * @param {module:workbox-routing~handlerCallback} handler A callback
+ * function that returns a Promise resulting in a Response.
+ */
+
+
+ setCatchHandler(handler) {
+ this._catchHandler = normalizeHandler(handler);
+ }
+ /**
+ * Registers a route with the router.
+ *
+ * @param {module:workbox-routing.Route} route The route to register.
+ */
+
+
+ registerRoute(route) {
+ {
+ finalAssertExports.isType(route, 'object', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route'
+ });
+ finalAssertExports.hasMethod(route, 'match', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route'
+ });
+ finalAssertExports.isType(route.handler, 'object', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route'
+ });
+ finalAssertExports.hasMethod(route.handler, 'handle', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route.handler'
+ });
+ finalAssertExports.isType(route.method, 'string', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route.method'
+ });
+ }
+
+ if (!this._routes.has(route.method)) {
+ this._routes.set(route.method, []);
+ } // Give precedence to all of the earlier routes by adding this additional
+ // route to the end of the array.
+
+
+ this._routes.get(route.method).push(route);
+ }
+ /**
+ * Unregisters a route with the router.
+ *
+ * @param {module:workbox-routing.Route} route The route to unregister.
+ */
+
+
+ unregisterRoute(route) {
+ if (!this._routes.has(route.method)) {
+ throw new WorkboxError('unregister-route-but-not-found-with-method', {
+ method: route.method
+ });
+ }
+
+ const routeIndex = this._routes.get(route.method).indexOf(route);
+
+ if (routeIndex > -1) {
+ this._routes.get(route.method).splice(routeIndex, 1);
+ } else {
+ throw new WorkboxError('unregister-route-route-not-registered');
+ }
+ }
+
+ }
+
+ /*
+ Copyright 2019 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ let defaultRouter;
+ /**
+ * Creates a new, singleton Router instance if one does not exist. If one
+ * does already exist, that instance is returned.
+ *
+ * @private
+ * @return {Router}
+ */
+
+ const getOrCreateDefaultRouter = () => {
+ if (!defaultRouter) {
+ defaultRouter = new Router(); // The helpers that use the default Router assume these listeners exist.
+
+ defaultRouter.addFetchListener();
+ defaultRouter.addCacheListener();
+ }
+
+ return defaultRouter;
+ };
+
+ /*
+ Copyright 2019 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * Easily register a RegExp, string, or function with a caching
+ * strategy to a singleton Router instance.
+ *
+ * This method will generate a Route for you if needed and
+ * call [registerRoute()]{@link module:workbox-routing.Router#registerRoute}.
+ *
+ * @param {RegExp|string|module:workbox-routing.Route~matchCallback|module:workbox-routing.Route} capture
+ * If the capture param is a `Route`, all other arguments will be ignored.
+ * @param {module:workbox-routing~handlerCallback} [handler] A callback
+ * function that returns a Promise resulting in a Response. This parameter
+ * is required if `capture` is not a `Route` object.
+ * @param {string} [method='GET'] The HTTP method to match the Route
+ * against.
+ * @return {module:workbox-routing.Route} The generated `Route`(Useful for
+ * unregistering).
+ *
+ * @memberof module:workbox-routing
+ */
+
+ function registerRoute(capture, handler, method) {
+ let route;
+
+ if (typeof capture === 'string') {
+ const captureUrl = new URL(capture, location.href);
+
+ {
+ if (!(capture.startsWith('/') || capture.startsWith('http'))) {
+ throw new WorkboxError('invalid-string', {
+ moduleName: 'workbox-routing',
+ funcName: 'registerRoute',
+ paramName: 'capture'
+ });
+ } // We want to check if Express-style wildcards are in the pathname only.
+ // TODO: Remove this log message in v4.
+
+
+ const valueToCheck = capture.startsWith('http') ? captureUrl.pathname : capture; // See https://github.com/pillarjs/path-to-regexp#parameters
+
+ const wildcards = '[*:?+]';
+
+ if (new RegExp(`${wildcards}`).exec(valueToCheck)) {
+ logger.debug(`The '$capture' parameter contains an Express-style wildcard ` + `character (${wildcards}). Strings are now always interpreted as ` + `exact matches; use a RegExp for partial or wildcard matches.`);
+ }
+ }
+
+ const matchCallback = ({
+ url
+ }) => {
+ {
+ if (url.pathname === captureUrl.pathname && url.origin !== captureUrl.origin) {
+ logger.debug(`${capture} only partially matches the cross-origin URL ` + `${url}. This route will only handle cross-origin requests ` + `if they match the entire URL.`);
+ }
+ }
+
+ return url.href === captureUrl.href;
+ }; // If `capture` is a string then `handler` and `method` must be present.
+
+
+ route = new Route(matchCallback, handler, method);
+ } else if (capture instanceof RegExp) {
+ // If `capture` is a `RegExp` then `handler` and `method` must be present.
+ route = new RegExpRoute(capture, handler, method);
+ } else if (typeof capture === 'function') {
+ // If `capture` is a function then `handler` and `method` must be present.
+ route = new Route(capture, handler, method);
+ } else if (capture instanceof Route) {
+ route = capture;
+ } else {
+ throw new WorkboxError('unsupported-route-type', {
+ moduleName: 'workbox-routing',
+ funcName: 'registerRoute',
+ paramName: 'capture'
+ });
+ }
+
+ const defaultRouter = getOrCreateDefaultRouter();
+ defaultRouter.registerRoute(route);
+ return route;
+ }
+
+ try {
+ self['workbox:strategies:6.1.5'] && _();
+ } catch (e) {}
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ const cacheOkAndOpaquePlugin = {
+ /**
+ * Returns a valid response (to allow caching) if the status is 200 (OK) or
+ * 0 (opaque).
+ *
+ * @param {Object} options
+ * @param {Response} options.response
+ * @return {Response|null}
+ *
+ * @private
+ */
+ cacheWillUpdate: async ({
+ response
+ }) => {
+ if (response.status === 200 || response.status === 0) {
+ return response;
+ }
+
+ return null;
+ }
+ };
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ const _cacheNameDetails = {
+ googleAnalytics: 'googleAnalytics',
+ precache: 'precache-v2',
+ prefix: 'workbox',
+ runtime: 'runtime',
+ suffix: typeof registration !== 'undefined' ? registration.scope : ''
+ };
+
+ const _createCacheName = cacheName => {
+ return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix].filter(value => value && value.length > 0).join('-');
+ };
+
+ const eachCacheNameDetail = fn => {
+ for (const key of Object.keys(_cacheNameDetails)) {
+ fn(key);
+ }
+ };
+
+ const cacheNames = {
+ updateDetails: details => {
+ eachCacheNameDetail(key => {
+ if (typeof details[key] === 'string') {
+ _cacheNameDetails[key] = details[key];
+ }
+ });
+ },
+ getGoogleAnalyticsName: userCacheName => {
+ return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);
+ },
+ getPrecacheName: userCacheName => {
+ return userCacheName || _createCacheName(_cacheNameDetails.precache);
+ },
+ getPrefix: () => {
+ return _cacheNameDetails.prefix;
+ },
+ getRuntimeName: userCacheName => {
+ return userCacheName || _createCacheName(_cacheNameDetails.runtime);
+ },
+ getSuffix: () => {
+ return _cacheNameDetails.suffix;
+ }
+ };
+
+ function _extends() {
+ _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+
+ return _extends.apply(this, arguments);
+ }
+
+ function stripParams(fullURL, ignoreParams) {
+ const strippedURL = new URL(fullURL);
+
+ for (const param of ignoreParams) {
+ strippedURL.searchParams.delete(param);
+ }
+
+ return strippedURL.href;
+ }
+ /**
+ * Matches an item in the cache, ignoring specific URL params. This is similar
+ * to the `ignoreSearch` option, but it allows you to ignore just specific
+ * params (while continuing to match on the others).
+ *
+ * @private
+ * @param {Cache} cache
+ * @param {Request} request
+ * @param {Object} matchOptions
+ * @param {Array} ignoreParams
+ * @return {Promise}
+ */
+
+
+ async function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {
+ const strippedRequestURL = stripParams(request.url, ignoreParams); // If the request doesn't include any ignored params, match as normal.
+
+ if (request.url === strippedRequestURL) {
+ return cache.match(request, matchOptions);
+ } // Otherwise, match by comparing keys
+
+
+ const keysOptions = _extends({}, matchOptions, {
+ ignoreSearch: true
+ });
+
+ const cacheKeys = await cache.keys(request, keysOptions);
+
+ for (const cacheKey of cacheKeys) {
+ const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);
+
+ if (strippedRequestURL === strippedCacheKeyURL) {
+ return cache.match(cacheKey, matchOptions);
+ }
+ }
+
+ return;
+ }
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * The Deferred class composes Promises in a way that allows for them to be
+ * resolved or rejected from outside the constructor. In most cases promises
+ * should be used directly, but Deferreds can be necessary when the logic to
+ * resolve a promise must be separate.
+ *
+ * @private
+ */
+
+ class Deferred {
+ /**
+ * Creates a promise and exposes its resolve and reject functions as methods.
+ */
+ constructor() {
+ this.promise = new Promise((resolve, reject) => {
+ this.resolve = resolve;
+ this.reject = reject;
+ });
+ }
+
+ }
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+
+ const quotaErrorCallbacks = new Set();
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * Runs all of the callback functions, one at a time sequentially, in the order
+ * in which they were registered.
+ *
+ * @memberof module:workbox-core
+ * @private
+ */
+
+ async function executeQuotaErrorCallbacks() {
+ {
+ logger.log(`About to run ${quotaErrorCallbacks.size} ` + `callbacks to clean up caches.`);
+ }
+
+ for (const callback of quotaErrorCallbacks) {
+ await callback();
+
+ {
+ logger.log(callback, 'is complete.');
+ }
+ }
+
+ {
+ logger.log('Finished running callbacks.');
+ }
+ }
+
+ /*
+ Copyright 2019 Google LLC
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * Returns a promise that resolves and the passed number of milliseconds.
+ * This utility is an async/await-friendly version of `setTimeout`.
+ *
+ * @param {number} ms
+ * @return {Promise}
+ * @private
+ */
+
+ function timeout(ms) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+ }
+
+ function toRequest(input) {
+ return typeof input === 'string' ? new Request(input) : input;
+ }
+ /**
+ * A class created every time a Strategy instance instance calls
+ * [handle()]{@link module:workbox-strategies.Strategy~handle} or
+ * [handleAll()]{@link module:workbox-strategies.Strategy~handleAll} that wraps all fetch and
+ * cache actions around plugin callbacks and keeps track of when the strategy
+ * is "done" (i.e. all added `event.waitUntil()` promises have resolved).
+ *
+ * @memberof module:workbox-strategies
+ */
+
+
+ class StrategyHandler {
+ /**
+ * Creates a new instance associated with the passed strategy and event
+ * that's handling the request.
+ *
+ * The constructor also initializes the state that will be passed to each of
+ * the plugins handling this request.
+ *
+ * @param {module:workbox-strategies.Strategy} strategy
+ * @param {Object} options
+ * @param {Request|string} options.request A request to run this strategy for.
+ * @param {ExtendableEvent} options.event The event associated with the
+ * request.
+ * @param {URL} [options.url]
+ * @param {*} [options.params]
+ * [match callback]{@link module:workbox-routing~matchCallback},
+ * (if applicable).
+ */
+ constructor(strategy, options) {
+ this._cacheKeys = {};
+ /**
+ * The request the strategy is performing (passed to the strategy's
+ * `handle()` or `handleAll()` method).
+ * @name request
+ * @instance
+ * @type {Request}
+ * @memberof module:workbox-strategies.StrategyHandler
+ */
+
+ /**
+ * The event associated with this request.
+ * @name event
+ * @instance
+ * @type {ExtendableEvent}
+ * @memberof module:workbox-strategies.StrategyHandler
+ */
+
+ /**
+ * A `URL` instance of `request.url` (if passed to the strategy's
+ * `handle()` or `handleAll()` method).
+ * Note: the `url` param will be present if the strategy was invoked
+ * from a workbox `Route` object.
+ * @name url
+ * @instance
+ * @type {URL|undefined}
+ * @memberof module:workbox-strategies.StrategyHandler
+ */
+
+ /**
+ * A `param` value (if passed to the strategy's
+ * `handle()` or `handleAll()` method).
+ * Note: the `param` param will be present if the strategy was invoked
+ * from a workbox `Route` object and the
+ * [match callback]{@link module:workbox-routing~matchCallback} returned
+ * a truthy value (it will be that value).
+ * @name params
+ * @instance
+ * @type {*|undefined}
+ * @memberof module:workbox-strategies.StrategyHandler
+ */
+
+ {
+ finalAssertExports.isInstance(options.event, ExtendableEvent, {
+ moduleName: 'workbox-strategies',
+ className: 'StrategyHandler',
+ funcName: 'constructor',
+ paramName: 'options.event'
+ });
+ }
+
+ Object.assign(this, options);
+ this.event = options.event;
+ this._strategy = strategy;
+ this._handlerDeferred = new Deferred();
+ this._extendLifetimePromises = []; // Copy the plugins list (since it's mutable on the strategy),
+ // so any mutations don't affect this handler instance.
+
+ this._plugins = [...strategy.plugins];
+ this._pluginStateMap = new Map();
+
+ for (const plugin of this._plugins) {
+ this._pluginStateMap.set(plugin, {});
+ }
+
+ this.event.waitUntil(this._handlerDeferred.promise);
+ }
+ /**
+ * Fetches a given request (and invokes any applicable plugin callback
+ * methods) using the `fetchOptions` (for non-navigation requests) and
+ * `plugins` defined on the `Strategy` object.
+ *
+ * The following plugin lifecycle methods are invoked when using this method:
+ * - `requestWillFetch()`
+ * - `fetchDidSucceed()`
+ * - `fetchDidFail()`
+ *
+ * @param {Request|string} input The URL or request to fetch.
+ * @return {Promise}
+ */
+
+
+ async fetch(input) {
+ const {
+ event
+ } = this;
+ let request = toRequest(input);
+
+ if (request.mode === 'navigate' && event instanceof FetchEvent && event.preloadResponse) {
+ const possiblePreloadResponse = await event.preloadResponse;
+
+ if (possiblePreloadResponse) {
+ {
+ logger.log(`Using a preloaded navigation response for ` + `'${getFriendlyURL(request.url)}'`);
+ }
+
+ return possiblePreloadResponse;
+ }
+ } // If there is a fetchDidFail plugin, we need to save a clone of the
+ // original request before it's either modified by a requestWillFetch
+ // plugin or before the original request's body is consumed via fetch().
+
+
+ const originalRequest = this.hasCallback('fetchDidFail') ? request.clone() : null;
+
+ try {
+ for (const cb of this.iterateCallbacks('requestWillFetch')) {
+ request = await cb({
+ request: request.clone(),
+ event
+ });
+ }
+ } catch (err) {
+ throw new WorkboxError('plugin-error-request-will-fetch', {
+ thrownError: err
+ });
+ } // The request can be altered by plugins with `requestWillFetch` making
+ // the original request (most likely from a `fetch` event) different
+ // from the Request we make. Pass both to `fetchDidFail` to aid debugging.
+
+
+ const pluginFilteredRequest = request.clone();
+
+ try {
+ let fetchResponse; // See https://github.com/GoogleChrome/workbox/issues/1796
+
+ fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions);
+
+ if ("development" !== 'production') {
+ logger.debug(`Network request for ` + `'${getFriendlyURL(request.url)}' returned a response with ` + `status '${fetchResponse.status}'.`);
+ }
+
+ for (const callback of this.iterateCallbacks('fetchDidSucceed')) {
+ fetchResponse = await callback({
+ event,
+ request: pluginFilteredRequest,
+ response: fetchResponse
+ });
+ }
+
+ return fetchResponse;
+ } catch (error) {
+ {
+ logger.log(`Network request for ` + `'${getFriendlyURL(request.url)}' threw an error.`, error);
+ } // `originalRequest` will only exist if a `fetchDidFail` callback
+ // is being used (see above).
+
+
+ if (originalRequest) {
+ await this.runCallbacks('fetchDidFail', {
+ error,
+ event,
+ originalRequest: originalRequest.clone(),
+ request: pluginFilteredRequest.clone()
+ });
+ }
+
+ throw error;
+ }
+ }
+ /**
+ * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on
+ * the response generated by `this.fetch()`.
+ *
+ * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,
+ * so you do not have to manually call `waitUntil()` on the event.
+ *
+ * @param {Request|string} input The request or URL to fetch and cache.
+ * @return {Promise}
+ */
+
+
+ async fetchAndCachePut(input) {
+ const response = await this.fetch(input);
+ const responseClone = response.clone();
+ this.waitUntil(this.cachePut(input, responseClone));
+ return response;
+ }
+ /**
+ * Matches a request from the cache (and invokes any applicable plugin
+ * callback methods) using the `cacheName`, `matchOptions`, and `plugins`
+ * defined on the strategy object.
+ *
+ * The following plugin lifecycle methods are invoked when using this method:
+ * - cacheKeyWillByUsed()
+ * - cachedResponseWillByUsed()
+ *
+ * @param {Request|string} key The Request or URL to use as the cache key.
+ * @return {Promise} A matching response, if found.
+ */
+
+
+ async cacheMatch(key) {
+ const request = toRequest(key);
+ let cachedResponse;
+ const {
+ cacheName,
+ matchOptions
+ } = this._strategy;
+ const effectiveRequest = await this.getCacheKey(request, 'read');
+
+ const multiMatchOptions = _extends({}, matchOptions, {
+ cacheName
+ });
+
+ cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);
+
+ {
+ if (cachedResponse) {
+ logger.debug(`Found a cached response in '${cacheName}'.`);
+ } else {
+ logger.debug(`No cached response found in '${cacheName}'.`);
+ }
+ }
+
+ for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {
+ cachedResponse = (await callback({
+ cacheName,
+ matchOptions,
+ cachedResponse,
+ request: effectiveRequest,
+ event: this.event
+ })) || undefined;
+ }
+
+ return cachedResponse;
+ }
+ /**
+ * Puts a request/response pair in the cache (and invokes any applicable
+ * plugin callback methods) using the `cacheName` and `plugins` defined on
+ * the strategy object.
+ *
+ * The following plugin lifecycle methods are invoked when using this method:
+ * - cacheKeyWillByUsed()
+ * - cacheWillUpdate()
+ * - cacheDidUpdate()
+ *
+ * @param {Request|string} key The request or URL to use as the cache key.
+ * @param {Response} response The response to cache.
+ * @return {Promise} `false` if a cacheWillUpdate caused the response
+ * not be cached, and `true` otherwise.
+ */
+
+
+ async cachePut(key, response) {
+ const request = toRequest(key); // Run in the next task to avoid blocking other cache reads.
+ // https://github.com/w3c/ServiceWorker/issues/1397
+
+ await timeout(0);
+ const effectiveRequest = await this.getCacheKey(request, 'write');
+
+ {
+ if (effectiveRequest.method && effectiveRequest.method !== 'GET') {
+ throw new WorkboxError('attempt-to-cache-non-get-request', {
+ url: getFriendlyURL(effectiveRequest.url),
+ method: effectiveRequest.method
+ });
+ }
+ }
+
+ if (!response) {
+ {
+ logger.error(`Cannot cache non-existent response for ` + `'${getFriendlyURL(effectiveRequest.url)}'.`);
+ }
+
+ throw new WorkboxError('cache-put-with-no-response', {
+ url: getFriendlyURL(effectiveRequest.url)
+ });
+ }
+
+ const responseToCache = await this._ensureResponseSafeToCache(response);
+
+ if (!responseToCache) {
+ {
+ logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` + `will not be cached.`, responseToCache);
+ }
+
+ return false;
+ }
+
+ const {
+ cacheName,
+ matchOptions
+ } = this._strategy;
+ const cache = await self.caches.open(cacheName);
+ const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');
+ const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams( // TODO(philipwalton): the `__WB_REVISION__` param is a precaching
+ // feature. Consider into ways to only add this behavior if using
+ // precaching.
+ cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions) : null;
+
+ {
+ logger.debug(`Updating the '${cacheName}' cache with a new Response ` + `for ${getFriendlyURL(effectiveRequest.url)}.`);
+ }
+
+ try {
+ await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);
+ } catch (error) {
+ // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError
+ if (error.name === 'QuotaExceededError') {
+ await executeQuotaErrorCallbacks();
+ }
+
+ throw error;
+ }
+
+ for (const callback of this.iterateCallbacks('cacheDidUpdate')) {
+ await callback({
+ cacheName,
+ oldResponse,
+ newResponse: responseToCache.clone(),
+ request: effectiveRequest,
+ event: this.event
+ });
+ }
+
+ return true;
+ }
+ /**
+ * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and
+ * executes any of those callbacks found in sequence. The final `Request`
+ * object returned by the last plugin is treated as the cache key for cache
+ * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have
+ * been registered, the passed request is returned unmodified
+ *
+ * @param {Request} request
+ * @param {string} mode
+ * @return {Promise}
+ */
+
+
+ async getCacheKey(request, mode) {
+ if (!this._cacheKeys[mode]) {
+ let effectiveRequest = request;
+
+ for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {
+ effectiveRequest = toRequest(await callback({
+ mode,
+ request: effectiveRequest,
+ event: this.event,
+ params: this.params
+ }));
+ }
+
+ this._cacheKeys[mode] = effectiveRequest;
+ }
+
+ return this._cacheKeys[mode];
+ }
+ /**
+ * Returns true if the strategy has at least one plugin with the given
+ * callback.
+ *
+ * @param {string} name The name of the callback to check for.
+ * @return {boolean}
+ */
+
+
+ hasCallback(name) {
+ for (const plugin of this._strategy.plugins) {
+ if (name in plugin) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ /**
+ * Runs all plugin callbacks matching the given name, in order, passing the
+ * given param object (merged ith the current plugin state) as the only
+ * argument.
+ *
+ * Note: since this method runs all plugins, it's not suitable for cases
+ * where the return value of a callback needs to be applied prior to calling
+ * the next callback. See
+ * [`iterateCallbacks()`]{@link module:workbox-strategies.StrategyHandler#iterateCallbacks}
+ * below for how to handle that case.
+ *
+ * @param {string} name The name of the callback to run within each plugin.
+ * @param {Object} param The object to pass as the first (and only) param
+ * when executing each callback. This object will be merged with the
+ * current plugin state prior to callback execution.
+ */
+
+
+ async runCallbacks(name, param) {
+ for (const callback of this.iterateCallbacks(name)) {
+ // TODO(philipwalton): not sure why `any` is needed. It seems like
+ // this should work with `as WorkboxPluginCallbackParam[C]`.
+ await callback(param);
+ }
+ }
+ /**
+ * Accepts a callback and returns an iterable of matching plugin callbacks,
+ * where each callback is wrapped with the current handler state (i.e. when
+ * you call each callback, whatever object parameter you pass it will
+ * be merged with the plugin's current state).
+ *
+ * @param {string} name The name fo the callback to run
+ * @return {Array}
+ */
+
+
+ *iterateCallbacks(name) {
+ for (const plugin of this._strategy.plugins) {
+ if (typeof plugin[name] === 'function') {
+ const state = this._pluginStateMap.get(plugin);
+
+ const statefulCallback = param => {
+ const statefulParam = _extends({}, param, {
+ state
+ }); // TODO(philipwalton): not sure why `any` is needed. It seems like
+ // this should work with `as WorkboxPluginCallbackParam[C]`.
+
+
+ return plugin[name](statefulParam);
+ };
+
+ yield statefulCallback;
+ }
+ }
+ }
+ /**
+ * Adds a promise to the
+ * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}
+ * of the event event associated with the request being handled (usually a
+ * `FetchEvent`).
+ *
+ * Note: you can await
+ * [`doneWaiting()`]{@link module:workbox-strategies.StrategyHandler~doneWaiting}
+ * to know when all added promises have settled.
+ *
+ * @param {Promise} promise A promise to add to the extend lifetime promises
+ * of the event that triggered the request.
+ */
+
+
+ waitUntil(promise) {
+ this._extendLifetimePromises.push(promise);
+
+ return promise;
+ }
+ /**
+ * Returns a promise that resolves once all promises passed to
+ * [`waitUntil()`]{@link module:workbox-strategies.StrategyHandler~waitUntil}
+ * have settled.
+ *
+ * Note: any work done after `doneWaiting()` settles should be manually
+ * passed to an event's `waitUntil()` method (not this handler's
+ * `waitUntil()` method), otherwise the service worker thread my be killed
+ * prior to your work completing.
+ */
+
+
+ async doneWaiting() {
+ let promise;
+
+ while (promise = this._extendLifetimePromises.shift()) {
+ await promise;
+ }
+ }
+ /**
+ * Stops running the strategy and immediately resolves any pending
+ * `waitUntil()` promises.
+ */
+
+
+ destroy() {
+ this._handlerDeferred.resolve();
+ }
+ /**
+ * This method will call cacheWillUpdate on the available plugins (or use
+ * status === 200) to determine if the Response is safe and valid to cache.
+ *
+ * @param {Request} options.request
+ * @param {Response} options.response
+ * @return {Promise}
+ *
+ * @private
+ */
+
+
+ async _ensureResponseSafeToCache(response) {
+ let responseToCache = response;
+ let pluginsUsed = false;
+
+ for (const callback of this.iterateCallbacks('cacheWillUpdate')) {
+ responseToCache = (await callback({
+ request: this.request,
+ response: responseToCache,
+ event: this.event
+ })) || undefined;
+ pluginsUsed = true;
+
+ if (!responseToCache) {
+ break;
+ }
+ }
+
+ if (!pluginsUsed) {
+ if (responseToCache && responseToCache.status !== 200) {
+ responseToCache = undefined;
+ }
+
+ {
+ if (responseToCache) {
+ if (responseToCache.status !== 200) {
+ if (responseToCache.status === 0) {
+ logger.warn(`The response for '${this.request.url}' ` + `is an opaque response. The caching strategy that you're ` + `using will not cache opaque responses by default.`);
+ } else {
+ logger.debug(`The response for '${this.request.url}' ` + `returned a status code of '${response.status}' and won't ` + `be cached as a result.`);
+ }
+ }
+ }
+ }
+ }
+
+ return responseToCache;
+ }
+
+ }
+
+ /*
+ Copyright 2020 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * An abstract base class that all other strategy classes must extend from:
+ *
+ * @memberof module:workbox-strategies
+ */
+
+ class Strategy {
+ /**
+ * Creates a new instance of the strategy and sets all documented option
+ * properties as public instance properties.
+ *
+ * Note: if a custom strategy class extends the base Strategy class and does
+ * not need more than these properties, it does not need to define its own
+ * constructor.
+ *
+ * @param {Object} [options]
+ * @param {string} [options.cacheName] Cache name to store and retrieve
+ * requests. Defaults to the cache names provided by
+ * [workbox-core]{@link module:workbox-core.cacheNames}.
+ * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}
+ * to use in conjunction with this caching strategy.
+ * @param {Object} [options.fetchOptions] Values passed along to the
+ * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)
+ * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)
+ * `fetch()` requests made by this strategy.
+ * @param {Object} [options.matchOptions] The
+ * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}
+ * for any `cache.match()` or `cache.put()` calls made by this strategy.
+ */
+ constructor(options = {}) {
+ /**
+ * Cache name to store and retrieve
+ * requests. Defaults to the cache names provided by
+ * [workbox-core]{@link module:workbox-core.cacheNames}.
+ *
+ * @type {string}
+ */
+ this.cacheName = cacheNames.getRuntimeName(options.cacheName);
+ /**
+ * The list
+ * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}
+ * used by this strategy.
+ *
+ * @type {Array}
+ */
+
+ this.plugins = options.plugins || [];
+ /**
+ * Values passed along to the
+ * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}
+ * of all fetch() requests made by this strategy.
+ *
+ * @type {Object}
+ */
+
+ this.fetchOptions = options.fetchOptions;
+ /**
+ * The
+ * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}
+ * for any `cache.match()` or `cache.put()` calls made by this strategy.
+ *
+ * @type {Object}
+ */
+
+ this.matchOptions = options.matchOptions;
+ }
+ /**
+ * Perform a request strategy and returns a `Promise` that will resolve with
+ * a `Response`, invoking all relevant plugin callbacks.
+ *
+ * When a strategy instance is registered with a Workbox
+ * [route]{@link module:workbox-routing.Route}, this method is automatically
+ * called when the route matches.
+ *
+ * Alternatively, this method can be used in a standalone `FetchEvent`
+ * listener by passing it to `event.respondWith()`.
+ *
+ * @param {FetchEvent|Object} options A `FetchEvent` or an object with the
+ * properties listed below.
+ * @param {Request|string} options.request A request to run this strategy for.
+ * @param {ExtendableEvent} options.event The event associated with the
+ * request.
+ * @param {URL} [options.url]
+ * @param {*} [options.params]
+ */
+
+
+ handle(options) {
+ const [responseDone] = this.handleAll(options);
+ return responseDone;
+ }
+ /**
+ * Similar to [`handle()`]{@link module:workbox-strategies.Strategy~handle}, but
+ * instead of just returning a `Promise` that resolves to a `Response` it
+ * it will return an tuple of [response, done] promises, where the former
+ * (`response`) is equivalent to what `handle()` returns, and the latter is a
+ * Promise that will resolve once any promises that were added to
+ * `event.waitUntil()` as part of performing the strategy have completed.
+ *
+ * You can await the `done` promise to ensure any extra work performed by
+ * the strategy (usually caching responses) completes successfully.
+ *
+ * @param {FetchEvent|Object} options A `FetchEvent` or an object with the
+ * properties listed below.
+ * @param {Request|string} options.request A request to run this strategy for.
+ * @param {ExtendableEvent} options.event The event associated with the
+ * request.
+ * @param {URL} [options.url]
+ * @param {*} [options.params]
+ * @return {Array} A tuple of [response, done]
+ * promises that can be used to determine when the response resolves as
+ * well as when the handler has completed all its work.
+ */
+
+
+ handleAll(options) {
+ // Allow for flexible options to be passed.
+ if (options instanceof FetchEvent) {
+ options = {
+ event: options,
+ request: options.request
+ };
+ }
+
+ const event = options.event;
+ const request = typeof options.request === 'string' ? new Request(options.request) : options.request;
+ const params = 'params' in options ? options.params : undefined;
+ const handler = new StrategyHandler(this, {
+ event,
+ request,
+ params
+ });
+
+ const responseDone = this._getResponse(handler, request, event);
+
+ const handlerDone = this._awaitComplete(responseDone, handler, request, event); // Return an array of promises, suitable for use with Promise.all().
+
+
+ return [responseDone, handlerDone];
+ }
+
+ async _getResponse(handler, request, event) {
+ await handler.runCallbacks('handlerWillStart', {
+ event,
+ request
+ });
+ let response = undefined;
+
+ try {
+ response = await this._handle(request, handler); // The "official" Strategy subclasses all throw this error automatically,
+ // but in case a third-party Strategy doesn't, ensure that we have a
+ // consistent failure when there's no response or an error response.
+
+ if (!response || response.type === 'error') {
+ throw new WorkboxError('no-response', {
+ url: request.url
+ });
+ }
+ } catch (error) {
+ for (const callback of handler.iterateCallbacks('handlerDidError')) {
+ response = await callback({
+ error,
+ event,
+ request
+ });
+
+ if (response) {
+ break;
+ }
+ }
+
+ if (!response) {
+ throw error;
+ } else {
+ logger.log(`While responding to '${getFriendlyURL(request.url)}', ` + `an ${error} error occurred. Using a fallback response provided by ` + `a handlerDidError plugin.`);
+ }
+ }
+
+ for (const callback of handler.iterateCallbacks('handlerWillRespond')) {
+ response = await callback({
+ event,
+ request,
+ response
+ });
+ }
+
+ return response;
+ }
+
+ async _awaitComplete(responseDone, handler, request, event) {
+ let response;
+ let error;
+
+ try {
+ response = await responseDone;
+ } catch (error) {// Ignore errors, as response errors should be caught via the `response`
+ // promise above. The `done` promise will only throw for errors in
+ // promises passed to `handler.waitUntil()`.
+ }
+
+ try {
+ await handler.runCallbacks('handlerDidRespond', {
+ event,
+ request,
+ response
+ });
+ await handler.doneWaiting();
+ } catch (waitUntilError) {
+ error = waitUntilError;
+ }
+
+ await handler.runCallbacks('handlerDidComplete', {
+ event,
+ request,
+ response,
+ error
+ });
+ handler.destroy();
+
+ if (error) {
+ throw error;
+ }
+ }
+
+ }
+ /**
+ * Classes extending the `Strategy` based class should implement this method,
+ * and leverage the [`handler`]{@link module:workbox-strategies.StrategyHandler}
+ * arg to perform all fetching and cache logic, which will ensure all relevant
+ * cache, cache options, fetch options and plugins are used (per the current
+ * strategy instance).
+ *
+ * @name _handle
+ * @instance
+ * @abstract
+ * @function
+ * @param {Request} request
+ * @param {module:workbox-strategies.StrategyHandler} handler
+ * @return {Promise}
+ *
+ * @memberof module:workbox-strategies.Strategy
+ */
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ const messages = {
+ strategyStart: (strategyName, request) => `Using ${strategyName} to respond to '${getFriendlyURL(request.url)}'`,
+ printFinalResponse: response => {
+ if (response) {
+ logger.groupCollapsed(`View the final response here.`);
+ logger.log(response || '[No response returned]');
+ logger.groupEnd();
+ }
+ }
+ };
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * An implementation of a
+ * [network first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-falling-back-to-cache}
+ * request strategy.
+ *
+ * By default, this strategy will cache responses with a 200 status code as
+ * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.
+ * Opaque responses are are cross-origin requests where the response doesn't
+ * support [CORS]{@link https://enable-cors.org/}.
+ *
+ * If the network request fails, and there is no cache match, this will throw
+ * a `WorkboxError` exception.
+ *
+ * @extends module:workbox-strategies.Strategy
+ * @memberof module:workbox-strategies
+ */
+
+ class NetworkFirst extends Strategy {
+ /**
+ * @param {Object} [options]
+ * @param {string} [options.cacheName] Cache name to store and retrieve
+ * requests. Defaults to cache names provided by
+ * [workbox-core]{@link module:workbox-core.cacheNames}.
+ * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}
+ * to use in conjunction with this caching strategy.
+ * @param {Object} [options.fetchOptions] Values passed along to the
+ * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)
+ * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)
+ * `fetch()` requests made by this strategy.
+ * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)
+ * @param {number} [options.networkTimeoutSeconds] If set, any network requests
+ * that fail to respond within the timeout will fallback to the cache.
+ *
+ * This option can be used to combat
+ * "[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}"
+ * scenarios.
+ */
+ constructor(options = {}) {
+ super(options); // If this instance contains no plugins with a 'cacheWillUpdate' callback,
+ // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.
+
+ if (!this.plugins.some(p => 'cacheWillUpdate' in p)) {
+ this.plugins.unshift(cacheOkAndOpaquePlugin);
+ }
+
+ this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;
+
+ {
+ if (this._networkTimeoutSeconds) {
+ finalAssertExports.isType(this._networkTimeoutSeconds, 'number', {
+ moduleName: 'workbox-strategies',
+ className: this.constructor.name,
+ funcName: 'constructor',
+ paramName: 'networkTimeoutSeconds'
+ });
+ }
+ }
+ }
+ /**
+ * @private
+ * @param {Request|string} request A request to run this strategy for.
+ * @param {module:workbox-strategies.StrategyHandler} handler The event that
+ * triggered the request.
+ * @return {Promise}
+ */
+
+
+ async _handle(request, handler) {
+ const logs = [];
+
+ {
+ finalAssertExports.isInstance(request, Request, {
+ moduleName: 'workbox-strategies',
+ className: this.constructor.name,
+ funcName: 'handle',
+ paramName: 'makeRequest'
+ });
+ }
+
+ const promises = [];
+ let timeoutId;
+
+ if (this._networkTimeoutSeconds) {
+ const {
+ id,
+ promise
+ } = this._getTimeoutPromise({
+ request,
+ logs,
+ handler
+ });
+
+ timeoutId = id;
+ promises.push(promise);
+ }
+
+ const networkPromise = this._getNetworkPromise({
+ timeoutId,
+ request,
+ logs,
+ handler
+ });
+
+ promises.push(networkPromise);
+ const response = await handler.waitUntil((async () => {
+ // Promise.race() will resolve as soon as the first promise resolves.
+ return (await handler.waitUntil(Promise.race(promises))) || ( // If Promise.race() resolved with null, it might be due to a network
+ // timeout + a cache miss. If that were to happen, we'd rather wait until
+ // the networkPromise resolves instead of returning null.
+ // Note that it's fine to await an already-resolved promise, so we don't
+ // have to check to see if it's still "in flight".
+ await networkPromise);
+ })());
+
+ {
+ logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));
+
+ for (const log of logs) {
+ logger.log(log);
+ }
+
+ messages.printFinalResponse(response);
+ logger.groupEnd();
+ }
+
+ if (!response) {
+ throw new WorkboxError('no-response', {
+ url: request.url
+ });
+ }
+
+ return response;
+ }
+ /**
+ * @param {Object} options
+ * @param {Request} options.request
+ * @param {Array} options.logs A reference to the logs array
+ * @param {Event} options.event
+ * @return {Promise}
+ *
+ * @private
+ */
+
+
+ _getTimeoutPromise({
+ request,
+ logs,
+ handler
+ }) {
+ let timeoutId;
+ const timeoutPromise = new Promise(resolve => {
+ const onNetworkTimeout = async () => {
+ {
+ logs.push(`Timing out the network response at ` + `${this._networkTimeoutSeconds} seconds.`);
+ }
+
+ resolve(await handler.cacheMatch(request));
+ };
+
+ timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);
+ });
+ return {
+ promise: timeoutPromise,
+ id: timeoutId
+ };
+ }
+ /**
+ * @param {Object} options
+ * @param {number|undefined} options.timeoutId
+ * @param {Request} options.request
+ * @param {Array} options.logs A reference to the logs Array.
+ * @param {Event} options.event
+ * @return {Promise}
+ *
+ * @private
+ */
+
+
+ async _getNetworkPromise({
+ timeoutId,
+ request,
+ logs,
+ handler
+ }) {
+ let error;
+ let response;
+
+ try {
+ response = await handler.fetchAndCachePut(request);
+ } catch (fetchError) {
+ error = fetchError;
+ }
+
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+
+ {
+ if (response) {
+ logs.push(`Got response from network.`);
+ } else {
+ logs.push(`Unable to get a response from the network. Will respond ` + `with a cached response.`);
+ }
+ }
+
+ if (error || !response) {
+ response = await handler.cacheMatch(request);
+
+ {
+ if (response) {
+ logs.push(`Found a cached response in the '${this.cacheName}'` + ` cache.`);
+ } else {
+ logs.push(`No response found in the '${this.cacheName}' cache.`);
+ }
+ }
+ }
+
+ return response;
+ }
+
+ }
+
+ /*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * An implementation of a
+ * [network-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-only}
+ * request strategy.
+ *
+ * This class is useful if you want to take advantage of any
+ * [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.
+ *
+ * If the network request fails, this will throw a `WorkboxError` exception.
+ *
+ * @extends module:workbox-strategies.Strategy
+ * @memberof module:workbox-strategies
+ */
+
+ class NetworkOnly extends Strategy {
+ /**
+ * @param {Object} [options]
+ * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}
+ * to use in conjunction with this caching strategy.
+ * @param {Object} [options.fetchOptions] Values passed along to the
+ * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)
+ * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)
+ * `fetch()` requests made by this strategy.
+ * @param {number} [options.networkTimeoutSeconds] If set, any network requests
+ * that fail to respond within the timeout will result in a network error.
+ */
+ constructor(options = {}) {
+ super(options);
+ this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;
+ }
+ /**
+ * @private
+ * @param {Request|string} request A request to run this strategy for.
+ * @param {module:workbox-strategies.StrategyHandler} handler The event that
+ * triggered the request.
+ * @return {Promise}
+ */
+
+
+ async _handle(request, handler) {
+ {
+ finalAssertExports.isInstance(request, Request, {
+ moduleName: 'workbox-strategies',
+ className: this.constructor.name,
+ funcName: '_handle',
+ paramName: 'request'
+ });
+ }
+
+ let error = undefined;
+ let response;
+
+ try {
+ const promises = [handler.fetch(request)];
+
+ if (this._networkTimeoutSeconds) {
+ const timeoutPromise = timeout(this._networkTimeoutSeconds * 1000);
+ promises.push(timeoutPromise);
+ }
+
+ response = await Promise.race(promises);
+
+ if (!response) {
+ throw new Error(`Timed out the network response after ` + `${this._networkTimeoutSeconds} seconds.`);
+ }
+ } catch (err) {
+ error = err;
+ }
+
+ {
+ logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));
+
+ if (response) {
+ logger.log(`Got response from network.`);
+ } else {
+ logger.log(`Unable to get a response from the network.`);
+ }
+
+ messages.printFinalResponse(response);
+ logger.groupEnd();
+ }
+
+ if (!response) {
+ throw new WorkboxError('no-response', {
+ url: request.url,
+ error
+ });
+ }
+
+ return response;
+ }
+
+ }
+
+ /*
+ Copyright 2019 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+ */
+ /**
+ * Claim any currently available clients once the service worker
+ * becomes active. This is normally used in conjunction with `skipWaiting()`.
+ *
+ * @memberof module:workbox-core
+ */
+
+ function clientsClaim() {
+ self.addEventListener('activate', () => self.clients.claim());
+ }
+
+ exports.NetworkFirst = NetworkFirst;
+ exports.NetworkOnly = NetworkOnly;
+ exports.clientsClaim = clientsClaim;
+ exports.registerRoute = registerRoute;
+
+});
+//# sourceMappingURL=workbox-6b19f60b.js.map
diff --git a/public/workbox-6b19f60b.js.map b/public/workbox-6b19f60b.js.map
new file mode 100644
index 000000000..c0d0a8fe7
--- /dev/null
+++ b/public/workbox-6b19f60b.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"workbox-6b19f60b.js","sources":["node_modules/workbox-core/_version.js","node_modules/workbox-core/_private/logger.js","node_modules/workbox-core/models/messages/messages.js","node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-core/_private/assert.js","node_modules/workbox-routing/_version.js","node_modules/workbox-routing/utils/constants.js","node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-routing/Route.js","node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-routing/Router.js","node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-routing/registerRoute.js","node_modules/workbox-strategies/_version.js","node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js","node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-core/_private/timeout.js","node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-strategies/Strategy.js","node_modules/workbox-strategies/utils/messages.js","node_modules/workbox-strategies/NetworkFirst.js","node_modules/workbox-strategies/NetworkOnly.js","node_modules/workbox-core/clientsClaim.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.1.5'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst logger = (process.env.NODE_ENV === 'production' ? null : (() => {\n // Don't overwrite this value if it's already set.\n // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923\n if (!('__WB_DISABLE_DEV_LOGS' in self)) {\n self.__WB_DISABLE_DEV_LOGS = false;\n }\n let inGroup = false;\n const methodToColorMap = {\n debug: `#7f8c8d`,\n log: `#2ecc71`,\n warn: `#f39c12`,\n error: `#c0392b`,\n groupCollapsed: `#3498db`,\n groupEnd: null,\n };\n const print = function (method, args) {\n if (self.__WB_DISABLE_DEV_LOGS) {\n return;\n }\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n console[method](...logPrefix, ...args);\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n const api = {};\n const loggerMethods = Object.keys(methodToColorMap);\n for (const key of loggerMethods) {\n const method = key;\n api[method] = (...args) => {\n print(method, args);\n };\n }\n return api;\n})());\nexport { logger };\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 messages = {\n 'invalid-value': ({ paramName, validValueDescription, value }) => {\n if (!paramName || !validValueDescription) {\n throw new Error(`Unexpected input to 'invalid-value' error.`);\n }\n return `The '${paramName}' parameter was given a value with an ` +\n `unexpected value. ${validValueDescription} Received a value of ` +\n `${JSON.stringify(value)}.`;\n },\n 'not-an-array': ({ moduleName, className, funcName, paramName }) => {\n if (!moduleName || !className || !funcName || !paramName) {\n throw new Error(`Unexpected input to 'not-an-array' error.`);\n }\n return `The parameter '${paramName}' passed into ` +\n `'${moduleName}.${className}.${funcName}()' must be an array.`;\n },\n 'incorrect-type': ({ expectedType, paramName, moduleName, className, funcName }) => {\n if (!expectedType || !paramName || !moduleName || !funcName) {\n throw new Error(`Unexpected input to 'incorrect-type' error.`);\n }\n return `The parameter '${paramName}' passed into ` +\n `'${moduleName}.${className ? (className + '.') : ''}` +\n `${funcName}()' must be of type ${expectedType}.`;\n },\n 'incorrect-class': ({ expectedClass, paramName, moduleName, className, funcName, isReturnValueProblem }) => {\n if (!expectedClass || !moduleName || !funcName) {\n throw new Error(`Unexpected input to 'incorrect-class' error.`);\n }\n if (isReturnValueProblem) {\n return `The return value from ` +\n `'${moduleName}.${className ? (className + '.') : ''}${funcName}()' ` +\n `must be an instance of class ${expectedClass.name}.`;\n }\n return `The parameter '${paramName}' passed into ` +\n `'${moduleName}.${className ? (className + '.') : ''}${funcName}()' ` +\n `must be an instance of class ${expectedClass.name}.`;\n },\n 'missing-a-method': ({ expectedMethod, paramName, moduleName, className, funcName }) => {\n if (!expectedMethod || !paramName || !moduleName || !className\n || !funcName) {\n throw new Error(`Unexpected input to 'missing-a-method' error.`);\n }\n return `${moduleName}.${className}.${funcName}() expected the ` +\n `'${paramName}' parameter to expose a '${expectedMethod}' method.`;\n },\n 'add-to-cache-list-unexpected-type': ({ entry }) => {\n return `An unexpected entry was passed to ` +\n `'workbox-precaching.PrecacheController.addToCacheList()' The entry ` +\n `'${JSON.stringify(entry)}' isn't supported. You must supply an array of ` +\n `strings with one or more characters, objects with a url property or ` +\n `Request objects.`;\n },\n 'add-to-cache-list-conflicting-entries': ({ firstEntry, secondEntry }) => {\n if (!firstEntry || !secondEntry) {\n throw new Error(`Unexpected input to ` +\n `'add-to-cache-list-duplicate-entries' error.`);\n }\n return `Two of the entries passed to ` +\n `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` +\n `${firstEntry._entryId} but different revision details. Workbox is ` +\n `unable to cache and version the asset correctly. Please remove one ` +\n `of the entries.`;\n },\n 'plugin-error-request-will-fetch': ({ thrownError }) => {\n if (!thrownError) {\n throw new Error(`Unexpected input to ` +\n `'plugin-error-request-will-fetch', error.`);\n }\n return `An error was thrown by a plugins 'requestWillFetch()' method. ` +\n `The thrown error message was: '${thrownError.message}'.`;\n },\n 'invalid-cache-name': ({ cacheNameId, value }) => {\n if (!cacheNameId) {\n throw new Error(`Expected a 'cacheNameId' for error 'invalid-cache-name'`);\n }\n return `You must provide a name containing at least one character for ` +\n `setCacheDetails({${cacheNameId}: '...'}). Received a value of ` +\n `'${JSON.stringify(value)}'`;\n },\n 'unregister-route-but-not-found-with-method': ({ method }) => {\n if (!method) {\n throw new Error(`Unexpected input to ` +\n `'unregister-route-but-not-found-with-method' error.`);\n }\n return `The route you're trying to unregister was not previously ` +\n `registered for the method type '${method}'.`;\n },\n 'unregister-route-route-not-registered': () => {\n return `The route you're trying to unregister was not previously ` +\n `registered.`;\n },\n 'queue-replay-failed': ({ name }) => {\n return `Replaying the background sync queue '${name}' failed.`;\n },\n 'duplicate-queue-name': ({ name }) => {\n return `The Queue name '${name}' is already being used. ` +\n `All instances of backgroundSync.Queue must be given unique names.`;\n },\n 'expired-test-without-max-age': ({ methodName, paramName }) => {\n return `The '${methodName}()' method can only be used when the ` +\n `'${paramName}' is used in the constructor.`;\n },\n 'unsupported-route-type': ({ moduleName, className, funcName, paramName }) => {\n return `The supplied '${paramName}' parameter was an unsupported type. ` +\n `Please check the docs for ${moduleName}.${className}.${funcName} for ` +\n `valid input types.`;\n },\n 'not-array-of-class': ({ value, expectedClass, moduleName, className, funcName, paramName }) => {\n return `The supplied '${paramName}' parameter must be an array of ` +\n `'${expectedClass}' objects. Received '${JSON.stringify(value)},'. ` +\n `Please check the call to ${moduleName}.${className}.${funcName}() ` +\n `to fix the issue.`;\n },\n 'max-entries-or-age-required': ({ moduleName, className, funcName }) => {\n return `You must define either config.maxEntries or config.maxAgeSeconds` +\n `in ${moduleName}.${className}.${funcName}`;\n },\n 'statuses-or-headers-required': ({ moduleName, className, funcName }) => {\n return `You must define either config.statuses or config.headers` +\n `in ${moduleName}.${className}.${funcName}`;\n },\n 'invalid-string': ({ moduleName, funcName, paramName }) => {\n if (!paramName || !moduleName || !funcName) {\n throw new Error(`Unexpected input to 'invalid-string' error.`);\n }\n return `When using strings, the '${paramName}' parameter must start with ` +\n `'http' (for cross-origin matches) or '/' (for same-origin matches). ` +\n `Please see the docs for ${moduleName}.${funcName}() for ` +\n `more info.`;\n },\n 'channel-name-required': () => {\n return `You must provide a channelName to construct a ` +\n `BroadcastCacheUpdate instance.`;\n },\n 'invalid-responses-are-same-args': () => {\n return `The arguments passed into responsesAreSame() appear to be ` +\n `invalid. Please ensure valid Responses are used.`;\n },\n 'expire-custom-caches-only': () => {\n return `You must provide a 'cacheName' property when using the ` +\n `expiration plugin with a runtime caching strategy.`;\n },\n 'unit-must-be-bytes': ({ normalizedRangeHeader }) => {\n if (!normalizedRangeHeader) {\n throw new Error(`Unexpected input to 'unit-must-be-bytes' error.`);\n }\n return `The 'unit' portion of the Range header must be set to 'bytes'. ` +\n `The Range header provided was \"${normalizedRangeHeader}\"`;\n },\n 'single-range-only': ({ normalizedRangeHeader }) => {\n if (!normalizedRangeHeader) {\n throw new Error(`Unexpected input to 'single-range-only' error.`);\n }\n return `Multiple ranges are not supported. Please use a single start ` +\n `value, and optional end value. The Range header provided was ` +\n `\"${normalizedRangeHeader}\"`;\n },\n 'invalid-range-values': ({ normalizedRangeHeader }) => {\n if (!normalizedRangeHeader) {\n throw new Error(`Unexpected input to 'invalid-range-values' error.`);\n }\n return `The Range header is missing both start and end values. At least ` +\n `one of those values is needed. The Range header provided was ` +\n `\"${normalizedRangeHeader}\"`;\n },\n 'no-range-header': () => {\n return `No Range header was found in the Request provided.`;\n },\n 'range-not-satisfiable': ({ size, start, end }) => {\n return `The start (${start}) and end (${end}) values in the Range are ` +\n `not satisfiable by the cached response, which is ${size} bytes.`;\n },\n 'attempt-to-cache-non-get-request': ({ url, method }) => {\n return `Unable to cache '${url}' because it is a '${method}' request and ` +\n `only 'GET' requests can be cached.`;\n },\n 'cache-put-with-no-response': ({ url }) => {\n return `There was an attempt to cache '${url}' but the response was not ` +\n `defined.`;\n },\n 'no-response': ({ url, error }) => {\n let message = `The strategy could not generate a response for '${url}'.`;\n if (error) {\n message += ` The underlying error is ${error}.`;\n }\n return message;\n },\n 'bad-precaching-response': ({ url, status }) => {\n return `The precaching request for '${url}' failed` +\n (status ? ` with an HTTP status of ${status}.` : `.`);\n },\n 'non-precached-url': ({ url }) => {\n return `createHandlerBoundToURL('${url}') was called, but that URL is ` +\n `not precached. Please pass in a URL that is precached instead.`;\n },\n 'add-to-cache-list-conflicting-integrities': ({ url }) => {\n return `Two of the entries passed to ` +\n `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` +\n `${url} with different integrity values. Please remove one of them.`;\n },\n 'missing-precache-entry': ({ cacheName, url }) => {\n return `Unable to find a precached response in ${cacheName} for ${url}.`;\n },\n 'cross-origin-copy-response': ({ origin }) => {\n return `workbox-core.copyResponse() can only be used with same-origin ` +\n `responses. It was passed a response with origin ${origin}.`;\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 { messages } from './messages.js';\nimport '../../_version.js';\nconst fallback = (code, ...args) => {\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {}) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nexport const messageGenerator = (process.env.NODE_ENV === 'production') ?\n fallback : generatorFunction;\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 { messageGenerator } from '../models/messages/messageGenerator.js';\nimport '../_version.js';\n/**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\nclass WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\nexport { WorkboxError };\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 { WorkboxError } from '../_private/WorkboxError.js';\nimport '../_version.js';\n/*\n * This method throws if the supplied value is not an array.\n * The destructed values are required to produce a meaningful error for users.\n * The destructed and restructured object is so it's clear what is\n * needed.\n */\nconst isArray = (value, details) => {\n if (!Array.isArray(value)) {\n throw new WorkboxError('not-an-array', details);\n }\n};\nconst hasMethod = (object, expectedMethod, details) => {\n const type = typeof object[expectedMethod];\n if (type !== 'function') {\n details['expectedMethod'] = expectedMethod;\n throw new WorkboxError('missing-a-method', details);\n }\n};\nconst isType = (object, expectedType, details) => {\n if (typeof object !== expectedType) {\n details['expectedType'] = expectedType;\n throw new WorkboxError('incorrect-type', details);\n }\n};\nconst isInstance = (object, expectedClass, details) => {\n if (!(object instanceof expectedClass)) {\n details['expectedClass'] = expectedClass;\n throw new WorkboxError('incorrect-class', details);\n }\n};\nconst isOneOf = (value, validValues, details) => {\n if (!validValues.includes(value)) {\n details['validValueDescription'] =\n `Valid values are ${JSON.stringify(validValues)}.`;\n throw new WorkboxError('invalid-value', details);\n }\n};\nconst isArrayOfClass = (value, expectedClass, details) => {\n const error = new WorkboxError('not-array-of-class', details);\n if (!Array.isArray(value)) {\n throw error;\n }\n for (const item of value) {\n if (!(item instanceof expectedClass)) {\n throw error;\n }\n }\n};\nconst finalAssertExports = process.env.NODE_ENV === 'production' ? null : {\n hasMethod,\n isArray,\n isInstance,\n isOneOf,\n isType,\n isArrayOfClass,\n};\nexport { finalAssertExports as assert };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.1.5'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array}\n *\n * @private\n */\nexport const validMethods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'PATCH',\n 'POST',\n 'PUT',\n];\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n if (handler && typeof handler === 'object') {\n if (process.env.NODE_ENV !== 'production') {\n assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return handler;\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return { handle: handler };\n }\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof module:workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {module:workbox-routing~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method = defaultMethod) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match',\n });\n if (method) {\n assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n // These values are referenced directly by Router so cannot be\n // altered by minificaton.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n /**\n *\n * @param {module:workbox-routing-handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response\n */\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\nexport { Route };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * [Route]{@link module:workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * [See the module docs for info.]{@link https://developers.google.com/web/tools/workbox/modules/workbox-routing}\n *\n * @memberof module:workbox-routing\n * @extends module:workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n /**\n * If the regular expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * the captured values will be passed to the\n * [handler's]{@link module:workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern',\n });\n }\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n // Return immediately if there's no match.\n if (!result) {\n return;\n }\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if ((url.origin !== location.origin) && (result.index !== 0)) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`The regular expression '${regExp}' only partially matched ` +\n `against the cross-origin URL '${url}'. RegExpRoute's will only ` +\n `handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\nexport { RegExpRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(String(url), location.href);\n // See https://github.com/GoogleChrome/workbox/issues/2323\n // We want to include everything, except for the origin if it's same-origin.\n return urlObj.href.replace(new RegExp(`^${location.origin}`), '');\n};\nexport { getFriendlyURL };\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 { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { defaultMethod } from './utils/constants.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\n/**\n * The Router can be used to process a FetchEvent through one or more\n * [Routes]{@link module:workbox-routing.Route} responding with a Request if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof module:workbox-routing\n */\nclass Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n }\n /**\n * @return {Map>} routes A `Map` of HTTP\n * method name ('GET', etc.) to an array of all the corresponding `Route`\n * instances that are registered.\n */\n get routes() {\n return this._routes;\n }\n /**\n * Adds a fetch event listener to respond to events when a route matches\n * the event's request.\n */\n addFetchListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const { request } = event;\n const responsePromise = this.handleRequest({ request, event });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }));\n }\n /**\n * Adds a message event listener for URLs to cache from the window.\n * This is useful to cache resources loaded on the page prior to when the\n * service worker started controlling it.\n *\n * The format of the message data sent from the window should be as follows.\n * Where the `urlsToCache` array may consist of URL strings or an array of\n * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n *\n * ```\n * {\n * type: 'CACHE_URLS',\n * payload: {\n * urlsToCache: [\n * './script1.js',\n * './script2.js',\n * ['./script3.js', {mode: 'no-cors'}],\n * ],\n * },\n * }\n * ```\n */\n addCacheListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('message', ((event) => {\n if (event.data && event.data.type === 'CACHE_URLS') {\n const { payload } = event.data;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n if (typeof entry === 'string') {\n entry = [entry];\n }\n const request = new Request(...entry);\n return this.handleRequest({ request, event });\n // TODO(philipwalton): TypeScript errors without this typecast for\n // some reason (probably a bug). The real type here should work but\n // doesn't: `Array | undefined>`.\n })); // TypeScript\n event.waitUntil(requestPromises);\n // If a MessageChannel was used, reply to the message on success.\n if (event.ports && event.ports[0]) {\n requestPromises.then(() => event.ports[0].postMessage(true));\n }\n }\n }));\n }\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {Object} options\n * @param {Request} options.request The request to handle.\n * @param {ExtendableEvent} options.event The event that triggered the\n * request.\n * @return {Promise|undefined} A promise is returned if a\n * registered route can handle the request. If there is no matching\n * route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest({ request, event }) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'options.request',\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith('http')) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url,\n });\n let handler = route && route.handler;\n const debugMessages = [];\n if (process.env.NODE_ENV !== 'production') {\n if (handler) {\n debugMessages.push([\n `Found a route to handle this request:`, route,\n ]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`, params,\n ]);\n }\n }\n }\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (process.env.NODE_ENV !== 'production') {\n debugMessages.push(`Failed to find a matching route. Falling ` +\n `back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (process.env.NODE_ENV !== 'production') {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n }\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n debugMessages.forEach((msg) => {\n if (Array.isArray(msg)) {\n logger.log(...msg);\n }\n else {\n logger.log(msg);\n }\n });\n logger.groupEnd();\n }\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, request, event, params });\n }\n catch (err) {\n responsePromise = Promise.reject(err);\n }\n // Get route's catch handler, if it exists\n const catchHandler = route && route.catchHandler;\n if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err) => {\n // If there's a route catch handler, process that first\n if (catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n try {\n return await catchHandler.handle({ url, request, event, params });\n }\n catch (catchErr) {\n err = catchErr;\n }\n }\n if (this._catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n return this._catchHandler.handle({ url, request, event });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n /**\n * Checks a request and URL (and optionally an event) against the list of\n * registered routes, and if there's a match, returns the corresponding\n * route along with any params generated by the match.\n *\n * @param {Object} options\n * @param {URL} options.url\n * @param {boolean} options.sameOrigin The result of comparing `url.origin`\n * against the current origin.\n * @param {Request} options.request The request to match.\n * @param {Event} options.event The corresponding event.\n * @return {Object} An object with `route` and `params` properties.\n * They are populated if a matching route was found or `undefined`\n * otherwise.\n */\n findMatchingRoute({ url, sameOrigin, request, event }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes) {\n let params;\n const matchResult = route.match({ url, sameOrigin, request, event });\n if (matchResult) {\n if (process.env.NODE_ENV !== 'production') {\n // Warn developers that using an async matchCallback is almost always\n // not the right thing to do. \n if (matchResult instanceof Promise) {\n logger.warn(`While routing ${getFriendlyURL(url)}, an async ` +\n `matchCallback function was used. Please convert the ` +\n `following route to use a synchronous matchCallback function:`, route);\n }\n }\n // See https://github.com/GoogleChrome/workbox/issues/2079\n params = matchResult;\n if (Array.isArray(matchResult) && matchResult.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if ((matchResult.constructor === Object &&\n Object.keys(matchResult).length === 0)) {\n // Instead of passing an empty object in as params, use undefined.\n params = undefined;\n }\n else if (typeof matchResult === 'boolean') {\n // For the boolean value true (rather than just something truth-y),\n // don't set params.\n // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n params = undefined;\n }\n // Return early if have a match.\n return { route, params };\n }\n }\n // If no match was found above, return and empty object.\n return {};\n }\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to associate with this\n * default handler. Each method has its own default.\n */\n setDefaultHandler(handler, method = defaultMethod) {\n this._defaultHandlerMap.set(method, normalizeHandler(handler));\n }\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n /**\n * Registers a route with the router.\n *\n * @param {module:workbox-routing.Route} route The route to register.\n */\n registerRoute(route) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler',\n });\n assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method',\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n /**\n * Unregisters a route with the router.\n *\n * @param {module:workbox-routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method,\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n }\n else {\n throw new WorkboxError('unregister-route-route-not-registered');\n }\n }\n}\nexport { Router };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n if (!defaultRouter) {\n defaultRouter = new Router();\n // The helpers that use the default Router assume these listeners exist.\n defaultRouter.addFetchListener();\n defaultRouter.addCacheListener();\n }\n return defaultRouter;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call [registerRoute()]{@link module:workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|module:workbox-routing.Route~matchCallback|module:workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {module:workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {module:workbox-routing.Route} The generated `Route`(Useful for\n * unregistering).\n *\n * @memberof module:workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n let route;\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location.href);\n if (process.env.NODE_ENV !== 'production') {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http') ?\n captureUrl.pathname : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if ((new RegExp(`${wildcards}`)).exec(valueToCheck)) {\n logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n `character (${wildcards}). Strings are now always interpreted as ` +\n `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url }) => {\n if (process.env.NODE_ENV !== 'production') {\n if ((url.pathname === captureUrl.pathname) &&\n (url.origin !== captureUrl.origin)) {\n logger.debug(`${capture} only partially matches the cross-origin URL ` +\n `${url}. This route will only handle cross-origin requests ` +\n `if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n // If `capture` is a string then `handler` and `method` must be present.\n route = new Route(matchCallback, handler, method);\n }\n else if (capture instanceof RegExp) {\n // If `capture` is a `RegExp` then `handler` and `method` must be present.\n route = new RegExpRoute(capture, handler, method);\n }\n else if (typeof capture === 'function') {\n // If `capture` is a function then `handler` and `method` must be present.\n route = new Route(capture, handler, method);\n }\n else if (capture instanceof Route) {\n route = capture;\n }\n else {\n throw new WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.registerRoute(route);\n return route;\n}\nexport { registerRoute };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.1.5'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nexport const cacheOkAndOpaquePlugin = {\n /**\n * Returns a valid response (to allow caching) if the status is 200 (OK) or\n * 0 (opaque).\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: async ({ response }) => {\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\n },\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst _cacheNameDetails = {\n googleAnalytics: 'googleAnalytics',\n precache: 'precache-v2',\n prefix: 'workbox',\n runtime: 'runtime',\n suffix: typeof registration !== 'undefined' ? registration.scope : '',\n};\nconst _createCacheName = (cacheName) => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix]\n .filter((value) => value && value.length > 0)\n .join('-');\n};\nconst eachCacheNameDetail = (fn) => {\n for (const key of Object.keys(_cacheNameDetails)) {\n fn(key);\n }\n};\nexport const cacheNames = {\n updateDetails: (details) => {\n eachCacheNameDetail((key) => {\n if (typeof details[key] === 'string') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: () => {\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: () => {\n return _cacheNameDetails.suffix;\n },\n};\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams) {\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\n/**\n * Matches an item in the cache, ignoring specific URL params. This is similar\n * to the `ignoreSearch` option, but it allows you to ignore just specific\n * params (while continuing to match on the others).\n *\n * @private\n * @param {Cache} cache\n * @param {Request} request\n * @param {Object} matchOptions\n * @param {Array} ignoreParams\n * @return {Promise}\n */\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n // If the request doesn't include any ignored params, match as normal.\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n // Otherwise, match by comparing keys\n const keysOptions = { ...matchOptions, ignoreSearch: true };\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys) {\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\nexport { cacheMatchIgnoreParams };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nclass Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexport { Deferred };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n// Callbacks to be executed whenever there's a quota error.\nconst quotaErrorCallbacks = new Set();\nexport { quotaErrorCallbacks };\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 '../_private/logger.js';\nimport { quotaErrorCallbacks } from '../models/quotaErrorCallbacks.js';\nimport '../_version.js';\n/**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof module:workbox-core\n * @private\n */\nasync function executeQuotaErrorCallbacks() {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`About to run ${quotaErrorCallbacks.size} ` +\n `callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks) {\n await callback();\n if (process.env.NODE_ENV !== 'production') {\n logger.log(callback, 'is complete.');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Finished running callbacks.');\n }\n}\nexport { executeQuotaErrorCallbacks };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Returns a promise that resolves and the passed number of milliseconds.\n * This utility is an async/await-friendly version of `setTimeout`.\n *\n * @param {number} ms\n * @return {Promise}\n * @private\n */\nexport function timeout(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/*\n Copyright 2020 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 { cacheMatchIgnoreParams } from 'workbox-core/_private/cacheMatchIgnoreParams.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport { executeQuotaErrorCallbacks } from 'workbox-core/_private/executeQuotaErrorCallbacks.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.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 './_version.js';\nfunction toRequest(input) {\n return (typeof input === 'string') ? new Request(input) : input;\n}\n/**\n * A class created every time a Strategy instance instance calls\n * [handle()]{@link module:workbox-strategies.Strategy~handle} or\n * [handleAll()]{@link module:workbox-strategies.Strategy~handleAll} that wraps all fetch and\n * cache actions around plugin callbacks and keeps track of when the strategy\n * is \"done\" (i.e. all added `event.waitUntil()` promises have resolved).\n *\n * @memberof module:workbox-strategies\n */\nclass StrategyHandler {\n /**\n * Creates a new instance associated with the passed strategy and event\n * that's handling the request.\n *\n * The constructor also initializes the state that will be passed to each of\n * the plugins handling this request.\n *\n * @param {module:workbox-strategies.Strategy} strategy\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * [match callback]{@link module:workbox-routing~matchCallback},\n * (if applicable).\n */\n constructor(strategy, options) {\n this._cacheKeys = {};\n /**\n * The request the strategy is performing (passed to the strategy's\n * `handle()` or `handleAll()` method).\n * @name request\n * @instance\n * @type {Request}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n /**\n * A `URL` instance of `request.url` (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `url` param will be present if the strategy was invoked\n * from a workbox `Route` object.\n * @name url\n * @instance\n * @type {URL|undefined}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n /**\n * A `param` value (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `param` param will be present if the strategy was invoked\n * from a workbox `Route` object and the\n * [match callback]{@link module:workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(options.event, ExtendableEvent, {\n moduleName: 'workbox-strategies',\n className: 'StrategyHandler',\n funcName: 'constructor',\n paramName: 'options.event',\n });\n }\n Object.assign(this, options);\n this.event = options.event;\n this._strategy = strategy;\n this._handlerDeferred = new Deferred();\n this._extendLifetimePromises = [];\n // Copy the plugins list (since it's mutable on the strategy),\n // so any mutations don't affect this handler instance.\n this._plugins = [...strategy.plugins];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins) {\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n /**\n * Fetches a given request (and invokes any applicable plugin callback\n * methods) using the `fetchOptions` (for non-navigation requests) and\n * `plugins` defined on the `Strategy` object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - `requestWillFetch()`\n * - `fetchDidSucceed()`\n * - `fetchDidFail()`\n *\n * @param {Request|string} input The URL or request to fetch.\n * @return {Promise}\n */\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === 'navigate' &&\n event instanceof FetchEvent &&\n event.preloadResponse) {\n const possiblePreloadResponse = await event.preloadResponse;\n if (possiblePreloadResponse) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Using a preloaded navigation response for ` +\n `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = this.hasCallback('fetchDidFail') ?\n request.clone() : null;\n try {\n for (const cb of this.iterateCallbacks('requestWillFetch')) {\n request = await cb({ request: request.clone(), event });\n }\n }\n catch (err) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownError: err,\n });\n }\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (most likely from a `fetch` event) different\n // from the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n // See https://github.com/GoogleChrome/workbox/issues/1796\n fetchResponse = await fetch(request, request.mode === 'navigate' ?\n undefined : this._strategy.fetchOptions);\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Network request for ` +\n `'${getFriendlyURL(request.url)}' returned a response with ` +\n `status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks('fetchDidSucceed')) {\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse,\n });\n }\n return fetchResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Network request for ` +\n `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n // `originalRequest` will only exist if a `fetchDidFail` callback\n // is being used (see above).\n if (originalRequest) {\n await this.runCallbacks('fetchDidFail', {\n error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone(),\n });\n }\n throw error;\n }\n }\n /**\n * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on\n * the response generated by `this.fetch()`.\n *\n * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,\n * so you do not have to manually call `waitUntil()` on the event.\n *\n * @param {Request|string} input The request or URL to fetch and cache.\n * @return {Promise}\n */\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n /**\n * Matches a request from the cache (and invokes any applicable plugin\n * callback methods) using the `cacheName`, `matchOptions`, and `plugins`\n * defined on the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cachedResponseWillByUsed()\n *\n * @param {Request|string} key The Request or URL to use as the cache key.\n * @return {Promise} A matching response, if found.\n */\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, 'read');\n const multiMatchOptions = { ...matchOptions, ...{ cacheName } };\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (process.env.NODE_ENV !== 'production') {\n if (cachedResponse) {\n logger.debug(`Found a cached response in '${cacheName}'.`);\n }\n else {\n logger.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {\n cachedResponse = (await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event,\n })) || undefined;\n }\n return cachedResponse;\n }\n /**\n * Puts a request/response pair in the cache (and invokes any applicable\n * plugin callback methods) using the `cacheName` and `plugins` defined on\n * the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cacheWillUpdate()\n * - cacheDidUpdate()\n *\n * @param {Request|string} key The request or URL to use as the cache key.\n * @param {Response} response The response to cache.\n * @return {Promise} `false` if a cacheWillUpdate caused the response\n * not be cached, and `true` otherwise.\n */\n async cachePut(key, response) {\n const request = toRequest(key);\n // Run in the next task to avoid blocking other cache reads.\n // https://github.com/w3c/ServiceWorker/issues/1397\n await timeout(0);\n const effectiveRequest = await this.getCacheKey(request, 'write');\n if (process.env.NODE_ENV !== 'production') {\n if (effectiveRequest.method && effectiveRequest.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(effectiveRequest.url),\n method: effectiveRequest.method,\n });\n }\n }\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Cannot cache non-existent response for ` +\n `'${getFriendlyURL(effectiveRequest.url)}'.`);\n }\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(effectiveRequest.url),\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` +\n `will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');\n const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams(\n // TODO(philipwalton): the `__WB_REVISION__` param is a precaching\n // feature. Consider into ways to only add this behavior if using\n // precaching.\n cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions) :\n null;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Updating the '${cacheName}' cache with a new Response ` +\n `for ${getFriendlyURL(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ?\n responseToCache.clone() : responseToCache);\n }\n catch (error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n await executeQuotaErrorCallbacks();\n }\n throw error;\n }\n for (const callback of this.iterateCallbacks('cacheDidUpdate')) {\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event,\n });\n }\n return true;\n }\n /**\n * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and\n * executes any of those callbacks found in sequence. The final `Request`\n * object returned by the last plugin is treated as the cache key for cache\n * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have\n * been registered, the passed request is returned unmodified\n *\n * @param {Request} request\n * @param {string} mode\n * @return {Promise}\n */\n async getCacheKey(request, mode) {\n if (!this._cacheKeys[mode]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n params: this.params,\n }));\n }\n this._cacheKeys[mode] = effectiveRequest;\n }\n return this._cacheKeys[mode];\n }\n /**\n * Returns true if the strategy has at least one plugin with the given\n * callback.\n *\n * @param {string} name The name of the callback to check for.\n * @return {boolean}\n */\n hasCallback(name) {\n for (const plugin of this._strategy.plugins) {\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n /**\n * Runs all plugin callbacks matching the given name, in order, passing the\n * given param object (merged ith the current plugin state) as the only\n * argument.\n *\n * Note: since this method runs all plugins, it's not suitable for cases\n * where the return value of a callback needs to be applied prior to calling\n * the next callback. See\n * [`iterateCallbacks()`]{@link module:workbox-strategies.StrategyHandler#iterateCallbacks}\n * below for how to handle that case.\n *\n * @param {string} name The name of the callback to run within each plugin.\n * @param {Object} param The object to pass as the first (and only) param\n * when executing each callback. This object will be merged with the\n * current plugin state prior to callback execution.\n */\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)) {\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n await callback(param);\n }\n }\n /**\n * Accepts a callback and returns an iterable of matching plugin callbacks,\n * where each callback is wrapped with the current handler state (i.e. when\n * you call each callback, whatever object parameter you pass it will\n * be merged with the plugin's current state).\n *\n * @param {string} name The name fo the callback to run\n * @return {Array}\n */\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins) {\n if (typeof plugin[name] === 'function') {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param) => {\n const statefulParam = { ...param, state };\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n /**\n * Adds a promise to the\n * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}\n * of the event event associated with the request being handled (usually a\n * `FetchEvent`).\n *\n * Note: you can await\n * [`doneWaiting()`]{@link module:workbox-strategies.StrategyHandler~doneWaiting}\n * to know when all added promises have settled.\n *\n * @param {Promise} promise A promise to add to the extend lifetime promises\n * of the event that triggered the request.\n */\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n /**\n * Returns a promise that resolves once all promises passed to\n * [`waitUntil()`]{@link module:workbox-strategies.StrategyHandler~waitUntil}\n * have settled.\n *\n * Note: any work done after `doneWaiting()` settles should be manually\n * passed to an event's `waitUntil()` method (not this handler's\n * `waitUntil()` method), otherwise the service worker thread my be killed\n * prior to your work completing.\n */\n async doneWaiting() {\n let promise;\n while (promise = this._extendLifetimePromises.shift()) {\n await promise;\n }\n }\n /**\n * Stops running the strategy and immediately resolves any pending\n * `waitUntil()` promises.\n */\n destroy() {\n this._handlerDeferred.resolve();\n }\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * status === 200) to determine if the Response is safe and valid to cache.\n *\n * @param {Request} options.request\n * @param {Response} options.response\n * @return {Promise}\n *\n * @private\n */\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks('cacheWillUpdate')) {\n responseToCache = (await callback({\n request: this.request,\n response: responseToCache,\n event: this.event,\n })) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n logger.warn(`The response for '${this.request.url}' ` +\n `is an opaque response. The caching strategy that you're ` +\n `using will not cache opaque responses by default.`);\n }\n else {\n logger.debug(`The response for '${this.request.url}' ` +\n `returned a status code of '${response.status}' and won't ` +\n `be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\nexport { StrategyHandler };\n","/*\n Copyright 2020 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 { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\n/**\n * An abstract base class that all other strategy classes must extend from:\n *\n * @memberof module:workbox-strategies\n */\nclass Strategy {\n /**\n * Creates a new instance of the strategy and sets all documented option\n * properties as public instance properties.\n *\n * Note: if a custom strategy class extends the base Strategy class and does\n * not need more than these properties, it does not need to define its own\n * constructor.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * [workbox-core]{@link module: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] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n */\n constructor(options = {}) {\n /**\n * Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n *\n * @type {string}\n */\n this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n /**\n * The list\n * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * used by this strategy.\n *\n * @type {Array}\n */\n this.plugins = options.plugins || [];\n /**\n * Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n *\n * @type {Object}\n */\n this.fetchOptions = options.fetchOptions;\n /**\n * The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n *\n * @type {Object}\n */\n this.matchOptions = options.matchOptions;\n }\n /**\n * Perform a request strategy and returns a `Promise` that will resolve with\n * a `Response`, invoking all relevant plugin callbacks.\n *\n * When a strategy instance is registered with a Workbox\n * [route]{@link module:workbox-routing.Route}, this method is automatically\n * called when the route matches.\n *\n * Alternatively, this method can be used in a standalone `FetchEvent`\n * listener by passing it to `event.respondWith()`.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n */\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n /**\n * Similar to [`handle()`]{@link module:workbox-strategies.Strategy~handle}, but\n * instead of just returning a `Promise` that resolves to a `Response` it\n * it will return an tuple of [response, done] promises, where the former\n * (`response`) is equivalent to what `handle()` returns, and the latter is a\n * Promise that will resolve once any promises that were added to\n * `event.waitUntil()` as part of performing the strategy have completed.\n *\n * You can await the `done` promise to ensure any extra work performed by\n * the strategy (usually caching responses) completes successfully.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * @return {Array} A tuple of [response, done]\n * promises that can be used to determine when the response resolves as\n * well as when the handler has completed all its work.\n */\n handleAll(options) {\n // Allow for flexible options to be passed.\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request,\n };\n }\n const event = options.event;\n const request = typeof options.request === 'string' ?\n new Request(options.request) :\n options.request;\n const params = 'params' in options ? options.params : undefined;\n const handler = new StrategyHandler(this, { event, request, params });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n // Return an array of promises, suitable for use with Promise.all().\n return [responseDone, handlerDone];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks('handlerWillStart', { event, request });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n // The \"official\" Strategy subclasses all throw this error automatically,\n // but in case a third-party Strategy doesn't, ensure that we have a\n // consistent failure when there's no response or an error response.\n if (!response || response.type === 'error') {\n throw new WorkboxError('no-response', { url: request.url });\n }\n }\n catch (error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\n }\n if (!response) {\n throw error;\n }\n else if (process.env.NODE_ENV !== 'production') {\n logger.log(`While responding to '${getFriendlyURL(request.url)}', ` +\n `an ${error} error occurred. Using a fallback response provided by ` +\n `a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks('handlerWillRespond')) {\n response = await callback({ event, request, response });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response;\n let error;\n try {\n response = await responseDone;\n }\n catch (error) {\n // Ignore errors, as response errors should be caught via the `response`\n // promise above. The `done` promise will only throw for errors in\n // promises passed to `handler.waitUntil()`.\n }\n try {\n await handler.runCallbacks('handlerDidRespond', {\n event,\n request,\n response,\n });\n await handler.doneWaiting();\n }\n catch (waitUntilError) {\n error = waitUntilError;\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error,\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\nexport { Strategy };\n/**\n * Classes extending the `Strategy` based class should implement this method,\n * and leverage the [`handler`]{@link module:workbox-strategies.StrategyHandler}\n * arg to perform all fetching and cache logic, which will ensure all relevant\n * cache, cache options, fetch options and plugins are used (per the current\n * strategy instance).\n *\n * @name _handle\n * @instance\n * @abstract\n * @function\n * @param {Request} request\n * @param {module:workbox-strategies.StrategyHandler} handler\n * @return {Promise}\n *\n * @memberof module:workbox-strategies.Strategy\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","/*\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]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-falling-back-to-cache}\n * request strategy.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends module:workbox-strategies.Strategy\n * @memberof module: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 * [workbox-core]{@link module: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 {module: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({ timeoutId, request, logs, handler });\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 error = fetchError;\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}'` +\n ` 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]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-only}\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.\n *\n * If the network request fails, this will throw a `WorkboxError` exception.\n *\n * @extends module:workbox-strategies.Strategy\n * @memberof module: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 {module: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 = [handler.fetch(request)];\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 error = err;\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 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 './_version.js';\n/**\n * Claim any currently available clients once the service worker\n * becomes active. This is normally used in conjunction with `skipWaiting()`.\n *\n * @memberof module:workbox-core\n */\nfunction clientsClaim() {\n self.addEventListener('activate', () => self.clients.claim());\n}\nexport { clientsClaim };\n"],"names":["self","_","e","logger","__WB_DISABLE_DEV_LOGS","inGroup","methodToColorMap","debug","log","warn","error","groupCollapsed","groupEnd","print","method","args","test","navigator","userAgent","console","styles","logPrefix","join","api","loggerMethods","Object","keys","key","messages","paramName","validValueDescription","value","Error","JSON","stringify","moduleName","className","funcName","expectedType","expectedClass","isReturnValueProblem","name","expectedMethod","entry","firstEntry","secondEntry","_entryId","thrownError","message","cacheNameId","methodName","normalizedRangeHeader","size","start","end","url","status","cacheName","origin","generatorFunction","code","details","messageGenerator","WorkboxError","constructor","errorCode","isArray","Array","hasMethod","object","type","isType","isInstance","isOneOf","validValues","includes","isArrayOfClass","item","finalAssertExports","defaultMethod","validMethods","normalizeHandler","handler","assert","handle","Route","match","setCatchHandler","catchHandler","RegExpRoute","regExp","RegExp","result","exec","href","location","index","slice","getFriendlyURL","urlObj","URL","String","replace","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","payload","urlsToCache","requestPromises","Promise","all","map","Request","waitUntil","ports","then","postMessage","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","debugMessages","push","has","get","forEach","msg","err","reject","_catchHandler","catch","catchErr","matchResult","length","undefined","setDefaultHandler","set","registerRoute","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","getOrCreateDefaultRouter","capture","captureUrl","valueToCheck","pathname","wildcards","matchCallback","cacheOkAndOpaquePlugin","cacheWillUpdate","response","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","filter","eachCacheNameDetail","fn","cacheNames","updateDetails","getGoogleAnalyticsName","userCacheName","getPrecacheName","getPrefix","getRuntimeName","getSuffix","stripParams","fullURL","ignoreParams","strippedURL","param","searchParams","delete","cacheMatchIgnoreParams","cache","matchOptions","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheKey","strippedCacheKeyURL","Deferred","promise","resolve","quotaErrorCallbacks","Set","executeQuotaErrorCallbacks","callback","timeout","ms","setTimeout","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","ExtendableEvent","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","originalRequest","hasCallback","clone","cb","iterateCallbacks","pluginFilteredRequest","fetchResponse","fetchOptions","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","cachedResponse","effectiveRequest","getCacheKey","multiMatchOptions","caches","responseToCache","_ensureResponseSafeToCache","open","hasCacheUpdateCallback","oldResponse","put","newResponse","state","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","handlerDone","_awaitComplete","_handle","waitUntilError","strategyStart","strategyName","printFinalResponse","NetworkFirst","some","p","unshift","_networkTimeoutSeconds","networkTimeoutSeconds","logs","promises","timeoutId","id","_getTimeoutPromise","networkPromise","_getNetworkPromise","race","timeoutPromise","onNetworkTimeout","fetchError","clearTimeout","NetworkOnly","clientsClaim","clients","claim"],"mappings":"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"}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index bcd02eac5..471db7ea3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -16,11 +16,23 @@
dependencies:
"@babel/highlight" "^7.12.13"
+"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"
+ integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==
+ dependencies:
+ "@babel/highlight" "^7.14.5"
+
"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.4":
version "7.14.4"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58"
integrity sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==
+"@babel/compat-data@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea"
+ integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==
+
"@babel/core@^7.1.0", "@babel/core@^7.4.4", "@babel/core@^7.7.5":
version "7.14.3"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38"
@@ -42,6 +54,27 @@
semver "^6.3.0"
source-map "^0.5.0"
+"@babel/core@^7.11.1":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.5.tgz#d281f46a9905f07d1b3bf71ead54d9c7d89cb1e3"
+ integrity sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/generator" "^7.14.5"
+ "@babel/helper-compilation-targets" "^7.14.5"
+ "@babel/helper-module-transforms" "^7.14.5"
+ "@babel/helpers" "^7.14.5"
+ "@babel/parser" "^7.14.5"
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.1.2"
+ semver "^6.3.0"
+ source-map "^0.5.0"
+
"@babel/generator@^7.14.2", "@babel/generator@^7.14.3":
version "7.14.3"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91"
@@ -51,6 +84,15 @@
jsesc "^2.5.1"
source-map "^0.5.0"
+"@babel/generator@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"
+ integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
"@babel/helper-annotate-as-pure@^7.12.13":
version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab"
@@ -76,6 +118,16 @@
browserslist "^4.16.6"
semver "^6.3.0"
+"@babel/helper-compilation-targets@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf"
+ integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==
+ dependencies:
+ "@babel/compat-data" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ browserslist "^4.16.6"
+ semver "^6.3.0"
+
"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.3":
version "7.14.4"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz#abf888d836a441abee783c75229279748705dc42"
@@ -140,6 +192,15 @@
"@babel/template" "^7.12.13"
"@babel/types" "^7.14.2"
+"@babel/helper-function-name@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4"
+ integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.14.5"
+ "@babel/template" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
"@babel/helper-get-function-arity@^7.12.13":
version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"
@@ -147,6 +208,13 @@
dependencies:
"@babel/types" "^7.12.13"
+"@babel/helper-get-function-arity@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815"
+ integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
"@babel/helper-hoist-variables@^7.13.0":
version "7.13.16"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30"
@@ -155,6 +223,13 @@
"@babel/traverse" "^7.13.15"
"@babel/types" "^7.13.16"
+"@babel/helper-hoist-variables@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d"
+ integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
"@babel/helper-member-expression-to-functions@^7.13.12":
version "7.13.12"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72"
@@ -162,6 +237,13 @@
dependencies:
"@babel/types" "^7.13.12"
+"@babel/helper-member-expression-to-functions@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8"
+ integrity sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12":
version "7.13.12"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977"
@@ -169,6 +251,13 @@
dependencies:
"@babel/types" "^7.13.12"
+"@babel/helper-module-imports@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"
+ integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2":
version "7.14.2"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5"
@@ -183,6 +272,20 @@
"@babel/traverse" "^7.14.2"
"@babel/types" "^7.14.2"
+"@babel/helper-module-transforms@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e"
+ integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==
+ dependencies:
+ "@babel/helper-module-imports" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.14.5"
+ "@babel/helper-simple-access" "^7.14.5"
+ "@babel/helper-split-export-declaration" "^7.14.5"
+ "@babel/helper-validator-identifier" "^7.14.5"
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
"@babel/helper-optimise-call-expression@^7.12.13":
version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea"
@@ -190,6 +293,13 @@
dependencies:
"@babel/types" "^7.12.13"
+"@babel/helper-optimise-call-expression@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"
+ integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.13.0"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af"
@@ -214,6 +324,16 @@
"@babel/traverse" "^7.14.2"
"@babel/types" "^7.14.4"
+"@babel/helper-replace-supers@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94"
+ integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.14.5"
+ "@babel/helper-optimise-call-expression" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
"@babel/helper-simple-access@^7.13.12":
version "7.13.12"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6"
@@ -221,6 +341,13 @@
dependencies:
"@babel/types" "^7.13.12"
+"@babel/helper-simple-access@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4"
+ integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
"@babel/helper-skip-transparent-expression-wrappers@^7.12.1":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf"
@@ -235,16 +362,33 @@
dependencies:
"@babel/types" "^7.12.13"
+"@babel/helper-split-export-declaration@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a"
+ integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==
+ dependencies:
+ "@babel/types" "^7.14.5"
+
"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
+"@babel/helper-validator-identifier@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"
+ integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==
+
"@babel/helper-validator-option@^7.12.17":
version "7.12.17"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==
+"@babel/helper-validator-option@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
+ integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
+
"@babel/helper-wrap-function@^7.13.0":
version "7.13.0"
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4"
@@ -264,6 +408,15 @@
"@babel/traverse" "^7.14.0"
"@babel/types" "^7.14.0"
+"@babel/helpers@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.5.tgz#4870f8d9a6fdbbd65e5674a3558b4ff7fef0d9b2"
+ integrity sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q==
+ dependencies:
+ "@babel/template" "^7.14.5"
+ "@babel/traverse" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf"
@@ -273,11 +426,25 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
+"@babel/highlight@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
+ integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.5"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
"@babel/parser@^7.1.0", "@babel/parser@^7.11.5", "@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3", "@babel/parser@^7.7.0":
version "7.14.4"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18"
integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==
+"@babel/parser@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.5.tgz#4cd2f346261061b2518873ffecdf1612cb032829"
+ integrity sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg==
+
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12":
version "7.13.12"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a"
@@ -896,6 +1063,15 @@
"@babel/parser" "^7.12.13"
"@babel/types" "^7.12.13"
+"@babel/template@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"
+ integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/parser" "^7.14.5"
+ "@babel/types" "^7.14.5"
+
"@babel/traverse@^7.1.0", "@babel/traverse@^7.11.5", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2", "@babel/traverse@^7.7.0":
version "7.14.2"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b"
@@ -910,6 +1086,21 @@
debug "^4.1.0"
globals "^11.1.0"
+"@babel/traverse@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870"
+ integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==
+ dependencies:
+ "@babel/code-frame" "^7.14.5"
+ "@babel/generator" "^7.14.5"
+ "@babel/helper-function-name" "^7.14.5"
+ "@babel/helper-hoist-variables" "^7.14.5"
+ "@babel/helper-split-export-declaration" "^7.14.5"
+ "@babel/parser" "^7.14.5"
+ "@babel/types" "^7.14.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
"@babel/types@7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
@@ -927,6 +1118,14 @@
"@babel/helper-validator-identifier" "^7.14.0"
to-fast-properties "^2.0.0"
+"@babel/types@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"
+ integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.5"
+ to-fast-properties "^2.0.0"
+
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@@ -1012,6 +1211,11 @@
"@hapi/boom" "9.x.x"
"@hapi/hoek" "9.x.x"
+"@hapi/address@^2.1.2":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
+ integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
+
"@hapi/boom@9.x.x":
version "9.1.2"
resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.2.tgz#48bd41d67437164a2d636e3b5bc954f8c8dc5e38"
@@ -1019,11 +1223,44 @@
dependencies:
"@hapi/hoek" "9.x.x"
+"@hapi/formula@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@hapi/formula/-/formula-1.2.0.tgz#994649c7fea1a90b91a0a1e6d983523f680e10cd"
+ integrity sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA==
+
"@hapi/hoek@9.x.x":
version "9.2.0"
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.0.tgz#f3933a44e365864f4dad5db94158106d511e8131"
integrity sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==
+"@hapi/hoek@^8.2.4", "@hapi/hoek@^8.3.0":
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06"
+ integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==
+
+"@hapi/joi@^16.1.8":
+ version "16.1.8"
+ resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-16.1.8.tgz#84c1f126269489871ad4e2decc786e0adef06839"
+ integrity sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg==
+ dependencies:
+ "@hapi/address" "^2.1.2"
+ "@hapi/formula" "^1.2.0"
+ "@hapi/hoek" "^8.2.4"
+ "@hapi/pinpoint" "^1.0.2"
+ "@hapi/topo" "^3.1.3"
+
+"@hapi/pinpoint@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@hapi/pinpoint/-/pinpoint-1.0.2.tgz#025b7a36dbbf4d35bf1acd071c26b20ef41e0d13"
+ integrity sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ==
+
+"@hapi/topo@^3.1.3":
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+ integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
+ dependencies:
+ "@hapi/hoek" "^8.3.0"
+
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -1288,6 +1525,27 @@
resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.2.3.tgz#2f3e42fe6680798f276e3621345c2886b231348b"
integrity sha512-qtBF56vPC6d6a8p7LYd0iRjW89fhY80kAIzmj+VonvIGjK/nymBjcFUhbKiMFqlhsarCksnhwX+Zmn95Dw9qvA==
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2"
+ integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
"@opentelemetry/api@0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae"
@@ -1674,7 +1932,7 @@
dependencies:
"@babel/runtime" "^7.13.10"
-"@rollup/plugin-babel@^5.1.0":
+"@rollup/plugin-babel@^5.1.0", "@rollup/plugin-babel@^5.2.0":
version "5.3.0"
resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879"
integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==
@@ -1702,6 +1960,18 @@
dependencies:
"@rollup/pluginutils" "^3.0.8"
+"@rollup/plugin-node-resolve@^11.2.1":
+ version "11.2.1"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60"
+ integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==
+ dependencies:
+ "@rollup/pluginutils" "^3.1.0"
+ "@types/resolve" "1.17.1"
+ builtin-modules "^3.1.0"
+ deepmerge "^4.2.2"
+ is-module "^1.0.0"
+ resolve "^1.19.0"
+
"@rollup/plugin-node-resolve@^9.0.0":
version "9.0.0"
resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6"
@@ -1714,7 +1984,7 @@
is-module "^1.0.0"
resolve "^1.17.0"
-"@rollup/plugin-replace@^2.2.1":
+"@rollup/plugin-replace@^2.2.1", "@rollup/plugin-replace@^2.4.1":
version "2.4.2"
resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a"
integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==
@@ -1776,6 +2046,14 @@
dependencies:
"@stitches/core" "^0.1.9"
+"@surma/rollup-plugin-off-main-thread@^1.4.1":
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58"
+ integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==
+ dependencies:
+ ejs "^2.6.1"
+ magic-string "^0.25.0"
+
"@types/babel__core@^7.1.7":
version "7.1.14"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402"
@@ -1824,6 +2102,14 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+"@types/glob@^7.1.1":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
+ integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==
+ dependencies:
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
"@types/graceful-fs@^4.1.2":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
@@ -1859,7 +2145,7 @@
jest-diff "^25.2.1"
pretty-format "^25.2.1"
-"@types/json-schema@^7.0.3":
+"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
version "7.0.7"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
@@ -1869,6 +2155,11 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+"@types/minimatch@*":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21"
+ integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==
+
"@types/next@^9.0.0":
version "9.0.0"
resolved "https://registry.yarnpkg.com/@types/next/-/next-9.0.0.tgz#29aca06f8a5cfffc974a83b87e52ca57b2a506c4"
@@ -1944,16 +2235,54 @@
resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef"
integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==
+"@types/source-list-map@*":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
+ integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==
+
"@types/stack-utils@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+"@types/tapable@^1":
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4"
+ integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==
+
+"@types/uglify-js@*":
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124"
+ integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q==
+ dependencies:
+ source-map "^0.6.1"
+
"@types/uuid@^8.3.0":
version "8.3.0"
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f"
integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==
+"@types/webpack-sources@*":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10"
+ integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==
+ dependencies:
+ "@types/node" "*"
+ "@types/source-list-map" "*"
+ source-map "^0.7.3"
+
+"@types/webpack@^4.4.31":
+ version "4.41.29"
+ resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.29.tgz#2e66c1de8223c440366469415c50a47d97625773"
+ integrity sha512-6pLaORaVNZxiB3FSHbyBiWM7QdazAWda1zvAq4SbZObZqHSDbWLi62iFdblVea6SK9eyBIVp5yHhKt/yNQdR7Q==
+ dependencies:
+ "@types/node" "*"
+ "@types/tapable" "^1"
+ "@types/uglify-js" "*"
+ "@types/webpack-sources" "*"
+ anymatch "^3.0.0"
+ source-map "^0.6.0"
+
"@types/yargs-parser@*":
version "20.2.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9"
@@ -2049,7 +2378,12 @@ acorn@^7.1.0, acorn@^7.1.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3:
+ajv-keywords@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+ integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -2133,7 +2467,7 @@ anymatch@^2.0.0:
micromatch "^3.1.4"
normalize-path "^2.1.1"
-anymatch@^3.0.3, anymatch@~3.1.1:
+anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.1:
version "3.1.2"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
@@ -2199,6 +2533,23 @@ array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3:
get-intrinsic "^1.1.1"
is-string "^1.0.5"
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
array-unique@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
@@ -2359,6 +2710,16 @@ babel-jest@^25.5.1:
graceful-fs "^4.2.4"
slash "^3.0.0"
+babel-loader@^8.2.2:
+ version "8.2.2"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81"
+ integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==
+ dependencies:
+ find-cache-dir "^3.3.1"
+ loader-utils "^1.4.0"
+ make-dir "^3.1.0"
+ schema-utils "^2.6.5"
+
babel-plugin-annotate-pure-calls@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz#78aa00fd878c4fcde4d49f3da397fcf5defbcce8"
@@ -2890,6 +3251,14 @@ classnames@2.2.6:
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
+clean-webpack-plugin@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b"
+ integrity sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==
+ dependencies:
+ "@types/webpack" "^4.4.31"
+ del "^4.1.1"
+
cli-cursor@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
@@ -3176,6 +3545,11 @@ crypto-browserify@3.12.0, crypto-browserify@^3.11.0:
randombytes "^2.0.0"
randomfill "^1.0.3"
+crypto-random-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
+ integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+
css.escape@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
@@ -3382,6 +3756,19 @@ define-property@^2.0.2:
is-descriptor "^1.0.2"
isobject "^3.0.1"
+del@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+ integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ globby "^6.1.0"
+ is-path-cwd "^2.0.0"
+ is-path-in-cwd "^2.0.0"
+ p-map "^2.0.0"
+ pify "^4.0.1"
+ rimraf "^2.6.3"
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -3424,6 +3811,13 @@ diffie-hellman@^5.0.0:
miller-rabin "^4.0.0"
randombytes "^2.0.0"
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
doctrine@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
@@ -3463,6 +3857,11 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
+ejs@^2.6.1:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
+ integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
+
electron-to-chromium@^1.3.634, electron-to-chromium@^1.3.723:
version "1.3.749"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz#0ecebc529ceb49dd2a7c838ae425236644c3439a"
@@ -3506,6 +3905,11 @@ emojis-list@^2.0.0:
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
encoding@0.1.13:
version "0.1.13"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
@@ -4013,7 +4417,19 @@ fast-diff@^1.1.2:
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
-fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
+fast-glob@^3.1.1:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
+ integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
@@ -4023,6 +4439,13 @@ fast-levenshtein@~2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+fastq@^1.6.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
+ integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
+ dependencies:
+ reusify "^1.0.4"
+
fb-watchman@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
@@ -4181,7 +4604,7 @@ fs-extra@8.1.0:
jsonfile "^4.0.0"
universalify "^0.1.0"
-fs-extra@^9.0.0, fs-extra@^9.1.0:
+fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
@@ -4242,6 +4665,11 @@ get-orientation@1.1.2:
dependencies:
stream-parser "^0.3.1"
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
get-package-type@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
@@ -4285,7 +4713,7 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
-glob-parent@^5.0.0, glob-parent@~5.1.0:
+glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@@ -4297,7 +4725,7 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
-glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.1.7"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
@@ -4333,6 +4761,29 @@ globalyzer@0.1.0:
resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465"
integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==
+globby@^11.0.3:
+ version "11.0.3"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
+ integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
globrex@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
@@ -4538,6 +4989,11 @@ ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+ignore@^5.1.4:
+ version "5.1.8"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+
immer@^8.0.2:
version "8.0.4"
resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.4.tgz#3a21605a4e2dded852fb2afd208ad50969737b7a"
@@ -4859,6 +5315,11 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
is-observable@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
@@ -4866,6 +5327,25 @@ is-observable@^1.1.0:
dependencies:
symbol-observable "^1.1.0"
+is-path-cwd@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+ integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
+ dependencies:
+ is-path-inside "^2.1.0"
+
+is-path-inside@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+ integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
+ dependencies:
+ path-is-inside "^1.0.2"
+
is-path-inside@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
@@ -4898,6 +5378,11 @@ is-regex@^1.1.3:
call-bind "^1.0.2"
has-symbols "^1.0.2"
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@@ -5411,6 +5896,24 @@ jest-worker@^25.5.0:
merge-stream "^2.0.0"
supports-color "^7.0.0"
+jest-worker@^26.2.1:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
+ integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
+jest-worker@^27.0.2:
+ version "27.0.2"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05"
+ integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
jest@^25.3.0:
version "25.5.4"
resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db"
@@ -5690,6 +6193,15 @@ loader-utils@1.2.3:
emojis-list "^2.0.0"
json5 "^1.0.1"
+loader-utils@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -5735,7 +6247,7 @@ lodash.sortby@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
-lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21:
+lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -5799,14 +6311,14 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-magic-string@^0.25.2, magic-string@^0.25.7:
+magic-string@^0.25.0, magic-string@^0.25.2, magic-string@^0.25.7:
version "0.25.7"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
dependencies:
sourcemap-codec "^1.4.4"
-make-dir@^3.0.0, make-dir@^3.0.2:
+make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
@@ -5851,6 +6363,11 @@ merge-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
micromatch@4.x, micromatch@^4.0.2:
version "4.0.4"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
@@ -6009,6 +6526,18 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+next-pwa@^5.2.21:
+ version "5.2.21"
+ resolved "https://registry.yarnpkg.com/next-pwa/-/next-pwa-5.2.21.tgz#fb71ba35b1a984ec6641c5def64ca8c0ab9c2b0f"
+ integrity sha512-jL782UGX0E59TmmYi1xe5kgImeGPBO3me/b3RX7bLP0eG8oJeZiJqTVkc5DJNmXgdwOc6RSvRSOUdBQ9zLu4RA==
+ dependencies:
+ babel-loader "^8.2.2"
+ clean-webpack-plugin "^3.0.0"
+ globby "^11.0.3"
+ terser-webpack-plugin "^5.1.1"
+ workbox-webpack-plugin "^6.1.5"
+ workbox-window "^6.1.5"
+
next@*:
version "10.2.3"
resolved "https://registry.yarnpkg.com/next/-/next-10.2.3.tgz#5aa058a63626338cea91c198fda8f2715c058394"
@@ -6252,7 +6781,7 @@ oauth-sign@~0.9.0:
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-object-assign@^4.1.0, object-assign@^4.1.1:
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -6418,7 +6947,7 @@ p-finally@^2.0.0:
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
-p-limit@3.1.0:
+p-limit@3.1.0, p-limit@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
@@ -6552,6 +7081,11 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
path-key@^2.0.0, path-key@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
@@ -6610,7 +7144,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
-pify@^2.2.0:
+pify@^2.0.0, pify@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
@@ -6620,6 +7154,23 @@ pify@^3.0.0:
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
pirates@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
@@ -6711,7 +7262,7 @@ prettier@^2.3.0:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6"
integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==
-pretty-bytes@^5.6.0:
+pretty-bytes@^5.3.0, pretty-bytes@^5.4.1, pretty-bytes@^5.6.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
@@ -6828,6 +7379,11 @@ querystring@^0.2.0:
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd"
integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
ramda@~0.27.1:
version "0.27.1"
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9"
@@ -7184,7 +7740,7 @@ resolve@1.17.0:
dependencies:
path-parse "^1.0.6"
-resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0:
+resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0:
version "1.20.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
@@ -7229,6 +7785,11 @@ ret@~0.1.10:
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
rimraf@2.6.3:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
@@ -7236,6 +7797,13 @@ rimraf@2.6.3:
dependencies:
glob "^7.1.3"
+rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
rimraf@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -7270,6 +7838,16 @@ rollup-plugin-terser@^5.1.2:
serialize-javascript "^4.0.0"
terser "^4.6.2"
+rollup-plugin-terser@^7.0.0:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
+ integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ jest-worker "^26.2.1"
+ serialize-javascript "^4.0.0"
+ terser "^5.0.0"
+
rollup-plugin-typescript2@^0.27.3:
version "0.27.3"
resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz#cd9455ac026d325b20c5728d2cc54a08a771b68b"
@@ -7297,6 +7875,13 @@ rollup@^1.32.1:
"@types/node" "*"
acorn "^7.1.0"
+rollup@^2.43.1:
+ version "2.51.2"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.51.2.tgz#6de71e28c833089a0bd745a09671a3e2b92af6b7"
+ integrity sha512-ReV2eGEadA7hmXSzjxdDKs10neqH2QURf2RxJ6ayAlq93ugy6qIvXMmbc5cWMGCDh1h5T4thuWO1e2VNbMq8FA==
+ optionalDependencies:
+ fsevents "~2.3.1"
+
rsvp@^4.8.4:
version "4.8.5"
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
@@ -7307,6 +7892,13 @@ run-async@^2.4.0:
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
rxjs@^6.3.3, rxjs@^6.6.0:
version "6.6.7"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
@@ -7373,6 +7965,24 @@ scheduler@^0.20.2:
loose-envify "^1.1.0"
object-assign "^4.1.1"
+schema-utils@^2.6.5:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
+ integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
+ dependencies:
+ "@types/json-schema" "^7.0.5"
+ ajv "^6.12.4"
+ ajv-keywords "^3.5.2"
+
+schema-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
+ integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==
+ dependencies:
+ "@types/json-schema" "^7.0.6"
+ ajv "^6.12.5"
+ ajv-keywords "^3.5.2"
+
"semver@2 || 3 || 4 || 5", semver@^5.5.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
@@ -7402,6 +8012,13 @@ serialize-javascript@^4.0.0:
dependencies:
randombytes "^2.1.0"
+serialize-javascript@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
+ integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
+ dependencies:
+ randombytes "^2.1.0"
+
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
@@ -7546,6 +8163,11 @@ snapdragon@^0.8.1:
source-map-resolve "^0.5.0"
use "^3.1.0"
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
source-map-resolve@^0.5.0:
version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
@@ -7565,7 +8187,7 @@ source-map-resolve@^0.6.0:
atob "^2.1.2"
decode-uri-component "^0.2.0"
-source-map-support@^0.5.6, source-map-support@~0.5.12:
+source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19:
version "0.5.19"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
@@ -7578,12 +8200,12 @@ source-map-url@^0.4.0:
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-source-map@0.7.3, source-map@^0.7.3:
+source-map@0.7.3, source-map@^0.7.3, source-map@~0.7.2:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
-source-map@0.8.0-beta.0:
+source-map@0.8.0-beta.0, source-map@^0.8.0-beta.0:
version "0.8.0-beta.0"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
@@ -7831,6 +8453,15 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
+stringify-object@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
strip-ansi@6.0.0, strip-ansi@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
@@ -7869,6 +8500,11 @@ strip-bom@^4.0.0:
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+strip-comments@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"
+ integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==
+
strip-eof@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
@@ -7977,6 +8613,21 @@ table@^5.2.3:
slice-ansi "^2.1.0"
string-width "^3.0.0"
+temp-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"
+ integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==
+
+tempy@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3"
+ integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==
+ dependencies:
+ is-stream "^2.0.0"
+ temp-dir "^2.0.0"
+ type-fest "^0.16.0"
+ unique-string "^2.0.0"
+
terminal-link@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
@@ -7985,6 +8636,18 @@ terminal-link@^2.0.0:
ansi-escapes "^4.2.1"
supports-hyperlinks "^2.0.0"
+terser-webpack-plugin@^5.1.1:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af"
+ integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==
+ dependencies:
+ jest-worker "^27.0.2"
+ p-limit "^3.1.0"
+ schema-utils "^3.0.0"
+ serialize-javascript "^5.0.1"
+ source-map "^0.6.1"
+ terser "^5.7.0"
+
terser@^4.6.2:
version "4.8.0"
resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
@@ -7994,6 +8657,15 @@ terser@^4.6.2:
source-map "~0.6.1"
source-map-support "~0.5.12"
+terser@^5.0.0, terser@^5.7.0:
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693"
+ integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.7.2"
+ source-map-support "~0.5.19"
+
test-exclude@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
@@ -8277,6 +8949,11 @@ type-detect@4.0.8:
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+type-fest@^0.16.0:
+ version "0.16.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
+ integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
+
type-fest@^0.21.3:
version "0.21.3"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
@@ -8357,6 +9034,13 @@ union-value@^1.0.0:
is-extendable "^0.1.1"
set-value "^2.0.1"
+unique-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
+ integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ dependencies:
+ crypto-random-string "^2.0.0"
+
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -8385,6 +9069,11 @@ untildify@^4.0.0:
resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
+upath@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -8562,6 +9251,14 @@ webidl-conversions@^4.0.2:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+webpack-sources@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
@@ -8631,6 +9328,173 @@ word-wrap@~1.2.3:
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+workbox-background-sync@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.1.5.tgz#83904fc6487722db98ed9b19eaa39ab5f826c33e"
+ integrity sha512-VbUmPLsdz+sLzuNxHvMylzyRTiM4q+q7rwLBk3p2mtRL5NZozI8j/KgoGbno96vs84jx4b9zCZMEOIKEUTPf6w==
+ dependencies:
+ workbox-core "^6.1.5"
+
+workbox-broadcast-update@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.1.5.tgz#49a2a4cc50c7b1cfe86bed6d8f15edf1891d1e79"
+ integrity sha512-zGrTTs+n4wHpYtqYMqBg6kl/x5j1UrczGCQnODSHTxIDV8GXLb/GtA1BCZdysNxpMmdVSeLmTcgIYAAqWFamrA==
+ dependencies:
+ workbox-core "^6.1.5"
+
+workbox-build@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.1.5.tgz#31c3034a38527f1f7697335c15af9c5593168841"
+ integrity sha512-P+fakR5QFVqJN9l9xHVXtmafga72gh9I+jM3A9HiB/6UNRmOAejXnDgD+RMegOHgQHPwnB44TalMToFaXKWIyA==
+ dependencies:
+ "@babel/core" "^7.11.1"
+ "@babel/preset-env" "^7.11.0"
+ "@babel/runtime" "^7.11.2"
+ "@hapi/joi" "^16.1.8"
+ "@rollup/plugin-babel" "^5.2.0"
+ "@rollup/plugin-node-resolve" "^11.2.1"
+ "@rollup/plugin-replace" "^2.4.1"
+ "@surma/rollup-plugin-off-main-thread" "^1.4.1"
+ common-tags "^1.8.0"
+ fast-json-stable-stringify "^2.1.0"
+ fs-extra "^9.0.1"
+ glob "^7.1.6"
+ lodash "^4.17.20"
+ pretty-bytes "^5.3.0"
+ rollup "^2.43.1"
+ rollup-plugin-terser "^7.0.0"
+ source-map "^0.8.0-beta.0"
+ source-map-url "^0.4.0"
+ stringify-object "^3.3.0"
+ strip-comments "^2.0.1"
+ tempy "^0.6.0"
+ upath "^1.2.0"
+ workbox-background-sync "^6.1.5"
+ workbox-broadcast-update "^6.1.5"
+ workbox-cacheable-response "^6.1.5"
+ workbox-core "^6.1.5"
+ workbox-expiration "^6.1.5"
+ workbox-google-analytics "^6.1.5"
+ workbox-navigation-preload "^6.1.5"
+ workbox-precaching "^6.1.5"
+ workbox-range-requests "^6.1.5"
+ workbox-recipes "^6.1.5"
+ workbox-routing "^6.1.5"
+ workbox-strategies "^6.1.5"
+ workbox-streams "^6.1.5"
+ workbox-sw "^6.1.5"
+ workbox-window "^6.1.5"
+
+workbox-cacheable-response@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.1.5.tgz#2772e09a333cba47b0923ed91fd022416b69e75c"
+ integrity sha512-x8DC71lO/JCgiaJ194l9le8wc8lFPLgUpDkLhp2si7mXV6S/wZO+8Osvw1LLgYa8YYTWGbhbFhFTXIkEMknIIA==
+ dependencies:
+ workbox-core "^6.1.5"
+
+workbox-core@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.1.5.tgz#424ff600e2c5448b14ebd58b2f5ac8ed91b73fb9"
+ integrity sha512-9SOEle7YcJzg3njC0xMSmrPIiFjfsFm9WjwGd5enXmI8Lwk8wLdy63B0nzu5LXoibEmS9k+aWF8EzaKtOWjNSA==
+
+workbox-expiration@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.1.5.tgz#a62a4ac953bb654aa969ede13507ca5bd154adc2"
+ integrity sha512-6cN+FVbh8fNq56LFKPMchGNKCJeyboHsDuGBqmhDUPvD4uDjsegQpDQzn52VaE0cpywbSIsDF/BSq9E9Yjh5oQ==
+ dependencies:
+ workbox-core "^6.1.5"
+
+workbox-google-analytics@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.1.5.tgz#895fcc50e4976c176b5982e1a8fd08776f18d639"
+ integrity sha512-LYsJ/VxTkYVLxM1uJKXZLz4cJdemidY7kPyAYtKVZ6EiDG89noASqis75/5lhqM1m3HwQfp2DtoPrelKSpSDBA==
+ dependencies:
+ workbox-background-sync "^6.1.5"
+ workbox-core "^6.1.5"
+ workbox-routing "^6.1.5"
+ workbox-strategies "^6.1.5"
+
+workbox-navigation-preload@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.1.5.tgz#47a0d3a6d2e74bd3a52b58b72ca337cb5b654310"
+ integrity sha512-hDbNcWlffv0uvS21jCAC/mYk7NzaGRSWOQXv1p7bj2aONAX5l699D2ZK4D27G8TO0BaLHUmW/1A5CZcsvweQdg==
+ dependencies:
+ workbox-core "^6.1.5"
+
+workbox-precaching@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.1.5.tgz#9e0fecb5c567192f46783323fccea10bffc9f79e"
+ integrity sha512-yhm1kb6wgi141JeM5X7z42XJxCry53tbMLB3NgrxktrZbwbrJF8JILzYy+RFKC9tHC6u2bPmL789GPLT2NCDzw==
+ dependencies:
+ workbox-core "^6.1.5"
+ workbox-routing "^6.1.5"
+ workbox-strategies "^6.1.5"
+
+workbox-range-requests@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.1.5.tgz#047ccd12838bebe51a720256a4ca0cfa7197dfd3"
+ integrity sha512-iACChSapzB0yuIum3ascP/+cfBNuZi5DRrE+u4u5mCHigPlwfSWtlaY+y8p+a8EwcDTVTZVtnrGrRnF31SiLqQ==
+ dependencies:
+ workbox-core "^6.1.5"
+
+workbox-recipes@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.1.5.tgz#bb1f8976bcdb202618d967596e9f248e6077e69a"
+ integrity sha512-MD1yabHca6O/oj1hrRdfj9cRwhKA5zqIE53rWOAg/dKMMzWQsf9nyRbXRgzK3a13iQvYKuQzURU4Cx58tdnR+Q==
+ dependencies:
+ workbox-cacheable-response "^6.1.5"
+ workbox-core "^6.1.5"
+ workbox-expiration "^6.1.5"
+ workbox-precaching "^6.1.5"
+ workbox-routing "^6.1.5"
+ workbox-strategies "^6.1.5"
+
+workbox-routing@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.1.5.tgz#15884d6152dba03faef83f0b23331846d8b6ef8e"
+ integrity sha512-uC/Ctz+4GXGL42h1WxUNKxqKRik/38uS0NZ6VY/EHqL2F1ObLFqMHUZ4ZYvyQsKdyI82cxusvhJZHOrY0a2fIQ==
+ dependencies:
+ workbox-core "^6.1.5"
+
+workbox-strategies@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.1.5.tgz#2549a3e78f0eda371b760c4db21feb0d26143573"
+ integrity sha512-QhiOn9KT9YGBdbfWOmJT6pXZOIAxaVrs6J6AMYzRpkUegBTEcv36+ZhE/cfHoT0u2fxVtthHnskOQ/snEzaXQw==
+ dependencies:
+ workbox-core "^6.1.5"
+
+workbox-streams@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.1.5.tgz#bb7678677275fc23c9627565a1f238e4ca350290"
+ integrity sha512-OI1kLvRHGFXV+soDvs6aEwfBwdAkvPB0mRryqdh3/K17qUj/1gRXc8QtpgU+83xqx/I/ar2bTCIj0KPzI/ChCQ==
+ dependencies:
+ workbox-core "^6.1.5"
+ workbox-routing "^6.1.5"
+
+workbox-sw@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.1.5.tgz#06eb0c91f22e207422175b3f815cd2181c7074a0"
+ integrity sha512-IMDiqxYbKzPorZLGMUMacLB6r76iVQbdTzYthIZoPfy+uFURJFUtqiWQJKg1L+RMyuYXwKXTahCIGkgFs4jBeg==
+
+workbox-webpack-plugin@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.1.5.tgz#d573f959417c3dae49e112dae9c6b82cc1679229"
+ integrity sha512-tsgeNAYiFP4STNPDxBVT58eiU8nGUmcv7Lq9FFJkQf5MMu6tPw1OLp+KpszhbCWP+R/nEdu85Gjexs6fY647Kg==
+ dependencies:
+ fast-json-stable-stringify "^2.1.0"
+ pretty-bytes "^5.4.1"
+ source-map-url "^0.4.0"
+ upath "^1.2.0"
+ webpack-sources "^1.4.3"
+ workbox-build "^6.1.5"
+
+workbox-window@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.1.5.tgz#017b22342e10c6df6b9672326b575ec950b6cd80"
+ integrity sha512-akL0X6mAegai2yypnq78RgfazeqvKbsllRtEI4dnbhPcRINEY1NmecFmsQk8SD+zWLK1gw5OdwAOX+zHSRVmeA==
+ dependencies:
+ workbox-core "^6.1.5"
+
wrap-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"