diff --git a/components/PageBlocks.tsx b/components/PageBlocks.tsx index 56bd3a9..2e84865 100644 --- a/components/PageBlocks.tsx +++ b/components/PageBlocks.tsx @@ -9,16 +9,17 @@ import Video from './Video'; import Signup from './Signup'; import Speakers from './Speakers'; import Blocks from './Blocks'; +import Sessions from './Sessions' import IBlocks from './../interfaces/IBlocks' interface IProps { content: IBlocks[]; + sessions: any; } -function renderContent(content: IBlocks[]){ +function renderContent(content: IBlocks[], sessions: any){ const pageBlocksList = Object.entries(content).map((block: any, id: number) => { const blockContent = block[1]; - switch(blockContent['blockType']) { case 'header': @@ -90,6 +91,10 @@ function renderContent(content: IBlocks[]){ image2={blockContent['image2']} /> ); + case 'sessions': + return ( + + ); // case 'tickets': // return default: @@ -108,10 +113,10 @@ function renderContent(content: IBlocks[]){ return pageBlocksList; } -const PageBlocks = ({ content }: IProps) => { +const PageBlocks = ({ content, sessions }: IProps) => { return( <> - {renderContent(content)} + {renderContent(content, sessions)} ) } diff --git a/components/Sessions.tsx b/components/Sessions.tsx new file mode 100644 index 0000000..7b65451 --- /dev/null +++ b/components/Sessions.tsx @@ -0,0 +1,132 @@ +import { format } from 'date-fns' + +const Sessions = ({ content, sessions }) => { + console.log('content', content) + const { + blockType, + ctaLabel, + ctaLink, + hasCta, + heading, + isComingSoon, + selectedSession, + text, + uid + } = content + const { data } = sessions + const sortedData = data.sort( + (a, b) => { + const aDate = new Date(a.sessionDayDate.date); + const bDate = new Date (b.sessionDayDate.date); + return (Number(aDate) - Number(bDate)) + }, + ); + console.log('data', sortedData) + let selected = 0; + return( +
+
+ {isComingSoon ? + (
+

Coming soon

+
+

+ The agenda is still under construction. + Please check back soon! +

+
+
) + : + (
+
+
+ {heading && +

{heading}

+ } +
+ {text ? text : ''} +
    + {sortedData.length && sortedData.map((d, i) => ( +
  • {d.title}
  • + ))} +
+
+ {hasCta && + + } +
+
+
+
+
+ {sortedData.length && sortedData.map((d, i) => { + const startDate = new Date(d.sessionTimeStart.date).toDateString() + const now = new Date().toDateString(); + if(startDate === now){ + selected = i + } + return ( + + )})} +
+ {sortedData.length && sortedData.map((d, i) => { + const startDate = new Date(d.sessionTimeStart.date).toDateString() + const endDate = new Date(d.sessionTimeEnd.date).toDateString() + const typeClassName = d.sessionType ? ('c-session--'+`${d.slug}`) : '' + return ( +
+

{d.sessionType}

+
    +
  1. +
    {format(new Date(startDate), 'p')} – {format(new Date(endDate), 'p')}
    +
    + {/*
    {d.title}
    */} +
    {d.sessionSpeakers}
    +
    +
  2. +
+
+ )})} + {/* {% set visible = useDate ? (day.sessionDate|date('Y-m-d') == now|date('Y-m-d')) : (loop.index == 1) %} */} + {/* {% set sessions = craft.entries.section('sessions').relatedTo(day).orderBy('sessionTimeStart ASC').all() %} + {% for session in sessions %} + {% set type = session.sessionType.one() %} + {% set typeClassName = type ? 'c-session--' ~ type.slug : '' %} +
    +
  1. +
    {{ session.sessionTimeStart|date('H:i') }} – {{ session.sessionTimeEnd|date('H:i') }}
    +
    +
    {{ session.title }}
    +
    {{ session.sessionSpeakers }}
    +
    +
  2. +
+ {% endfor %} +
*/} +
+
+
+ ) + } + +
+ ) +} + +export default Sessions; + diff --git a/package-lock.json b/package-lock.json index 0492990..3223bf0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,6 +6,7 @@ "": { "dependencies": { "babel-plugin-styled-components": "^2.0.7", + "date-fns": "^2.29.3", "framer-motion": "^6.4.3", "next": "^12.3.0", "next-auth": "^4.10.3", @@ -65,9 +66,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", - "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.1.tgz", + "integrity": "sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==", "engines": { "node": ">=6.9.0" } @@ -151,13 +152,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", - "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz", + "integrity": "sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==", "dependencies": { - "@babel/compat-data": "^7.19.0", + "@babel/compat-data": "^7.19.1", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "engines": { @@ -337,15 +338,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -449,9 +450,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz", - "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", + "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==", "bin": { "parser": "bin/babel-parser.js" }, @@ -490,9 +491,9 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz", - "integrity": "sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.19.0", @@ -1216,9 +1217,9 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz", - "integrity": "sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.19.0", "@babel/helper-plugin-utils": "^7.19.0" @@ -1417,17 +1418,17 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.0.tgz", - "integrity": "sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.1.tgz", + "integrity": "sha512-c8B2c6D16Lp+Nt6HcD+nHl0VbPKVnNPTpszahuxJJnurfMtKeZ80A+qUv48Y7wqvS+dTFuLuaM9oYxyNHbCLWA==", "dependencies": { - "@babel/compat-data": "^7.19.0", - "@babel/helper-compilation-targets": "^7.19.0", + "@babel/compat-data": "^7.19.1", + "@babel/helper-compilation-targets": "^7.19.1", "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-validator-option": "^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.0", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-class-static-block": "^7.18.6", "@babel/plugin-proposal-dynamic-import": "^7.18.6", @@ -1475,7 +1476,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.18.6", "@babel/plugin-transform-modules-systemjs": "^7.19.0", "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", "@babel/plugin-transform-parameters": "^7.18.8", @@ -1491,10 +1492,10 @@ "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, "engines": { @@ -1557,9 +1558,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", - "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", + "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.19.0", @@ -1567,7 +1568,7 @@ "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.0", + "@babel/parser": "^7.19.1", "@babel/types": "^7.19.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -1621,9 +1622,9 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "node_modules/@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", + "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2548,36 +2549,6 @@ "glob": "7.1.7" } }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.0.tgz", - "integrity": "sha512-/PuirPnAKsYBw93w/7Q9hqy+KGOU9mjYprZ/faxMUJh/dc6v3rYLxkZKNG9nFPIW4QKNTCnhP40xF9hLnxO+xg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.0.tgz", - "integrity": "sha512-OaI+FhAM6P9B6Ybwbn0Zl8YwWido0lLwhDBi9WiYCh4RQmIXAyVIoIJPHo4fP05+mXaJ/k1trvDvuURvHOq2qw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@next/swc-darwin-arm64": { "version": "12.3.0", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.0.tgz", @@ -2593,156 +2564,6 @@ "node": ">= 10" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.0.tgz", - "integrity": "sha512-2scC4MqUTwGwok+wpVxP+zWp7WcCAVOtutki2E1n99rBOTnUOX6qXkgxSy083yBN6GqwuC/dzHeN7hIKjavfRA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-freebsd-x64": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.0.tgz", - "integrity": "sha512-xAlruUREij/bFa+qsE1tmsP28t7vz02N4ZDHt2lh3uJUniE0Ne9idyIDLc1Ed0IF2RjfgOp4ZVunuS3OM0sngw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.0.tgz", - "integrity": "sha512-jin2S4VT/cugc2dSZEUIabhYDJNgrUh7fufbdsaAezgcQzqfdfJqfxl4E9GuafzB4cbRPTaqA0V5uqbp0IyGkQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.0.tgz", - "integrity": "sha512-RqJHDKe0WImeUrdR0kayTkRWgp4vD/MS7g0r6Xuf8+ellOFH7JAAJffDW3ayuVZeMYOa7RvgNFcOoWnrTUl9Nw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.0.tgz", - "integrity": "sha512-nvNWoUieMjvDjpYJ/4SQe9lQs2xMj6ZRs8N+bmTrVu9leY2Fg3WD6W9p/1uU9hGO8u+OdF13wc4iRShu/WYIHg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.0.tgz", - "integrity": "sha512-4ajhIuVU9PeQCMMhdDgZTLrHmjbOUFuIyg6J19hZqwEwDTSqQyrSLkbJs2Nd7IRiM6Ul/XyrtEFCpk4k+xD2+w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.0.tgz", - "integrity": "sha512-U092RBYbaGxoMAwpauePJEu2PuZSEoUCGJBvsptQr2/2XIMwAJDYM4c/M5NfYEsBr+yjvsYNsOpYfeQ88D82Yg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.0.tgz", - "integrity": "sha512-pzSzaxjDEJe67bUok9Nxf9rykbJfHXW0owICFsPBsqHyc+cr8vpF7g9e2APTCddtVhvjkga9ILoZJ9NxWS7Yiw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.0.tgz", - "integrity": "sha512-MQGUpMbYhQmTZ06a9e0hPQJnxFMwETo2WtyAotY3GEzbNCQVbCGhsvqEKcl+ZEHgShlHXUWvSffq1ZscY6gK7A==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.0.tgz", - "integrity": "sha512-C/nw6OgQpEULWqs+wgMHXGvlJLguPRFFGqR2TAqWBerQ8J+Sg3z1ZTqwelkSi4FoqStGuZ2UdFHIDN1ySmR1xA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2864,9 +2685,9 @@ "dev": true }, "node_modules/@sinclair/typebox": { - "version": "0.24.41", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.41.tgz", - "integrity": "sha512-TJCgQurls4FipFvHeC+gfAzb+GGstL0TDwYJKQVtTeSvJIznWzP7g3bAd5gEBlr8+bIxqnWS9VGVWREDhmE8jA==", + "version": "0.24.39", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.39.tgz", + "integrity": "sha512-GqtkxoAjhTzoMwFg/JYRl+1+miOoyvp6mkLpbMSd2fIQak2KvY00ndlXxxkDBpuCPYkorZeEZf0LEQn9V9NRVQ==", "dev": true }, "node_modules/@sinonjs/commons": { @@ -3304,9 +3125,9 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "node_modules/@types/node": { - "version": "18.7.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.17.tgz", - "integrity": "sha512-0UyfUnt02zIuqp7yC8RYtDkp/vo8bFaQ13KkSEvUAohPOAlnVNbj5Fi3fgPSuwzakS+EvvnnZ4x9y7i6ASaSPQ==" + "version": "18.7.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.16.tgz", + "integrity": "sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg==" }, "node_modules/@types/parse5": { "version": "6.0.3", @@ -3402,14 +3223,14 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz", - "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.2.tgz", + "integrity": "sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.37.0", - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/typescript-estree": "5.37.0", + "@typescript-eslint/scope-manager": "5.36.2", + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/typescript-estree": "5.36.2", "debug": "^4.3.4" }, "engines": { @@ -3429,13 +3250,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", - "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz", + "integrity": "sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0" + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/visitor-keys": "5.36.2" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3446,9 +3267,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", - "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.2.tgz", + "integrity": "sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3459,13 +3280,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", - "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz", + "integrity": "sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0", + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/visitor-keys": "5.36.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3501,12 +3322,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", - "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz", + "integrity": "sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/types": "5.36.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4164,12 +3985,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -4405,9 +4226,9 @@ "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" }, "node_modules/caniuse-lite": { - "version": "1.0.30001399", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz", - "integrity": "sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA==", + "version": "1.0.30001393", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz", + "integrity": "sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA==", "funding": [ { "type": "opencollective", @@ -4865,9 +4686,9 @@ "dev": true }, "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", "dev": true }, "node_modules/damerau-levenshtein": { @@ -4911,6 +4732,18 @@ "node": ">=12" } }, + "node_modules/date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -5121,9 +4954,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.248", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.248.tgz", - "integrity": "sha512-qShjzEYpa57NnhbW2K+g+Fl+eNoDvQ7I+2MRwWnU6Z6F0HhXekzsECCLv+y2OJUsRodjqoSfwHkIX42VUFtUzg==" + "version": "1.4.247", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.247.tgz", + "integrity": "sha512-FLs6R4FQE+1JHM0hh3sfdxnYjKvJpHZyhQDjc2qFq/xFvmmRt/TATNToZhrcGUFzpF2XjeiuozrA8lI0PZmYYw==" }, "node_modules/emittery": { "version": "0.10.2", @@ -6345,9 +6178,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -6778,9 +6611,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.5.tgz", - "integrity": "sha512-ZIWRujF6MvYGkEuHMYtFRkL2wAtFw89EHfKlXrkPkjQZZRWeh9L1q3SV13NIfHnqxugjLvAOkEHx9mb1zcMnEw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "engines": { "node": ">= 0.4" }, @@ -10336,14 +10169,14 @@ } }, "node_modules/regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" }, @@ -10372,14 +10205,14 @@ } }, "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": "~0.5.0" }, @@ -11732,9 +11565,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.8.tgz", - "integrity": "sha512-GHg7C4M7oJSJYW/ED/5QOJ7nL/E0lwTOBGsOorA7jqHr8ExUhPfwAotIAmdSw/LWv3SMLSNpzTAgeLG9zaZKTA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", + "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", "funding": [ { "type": "opencollective", @@ -12563,42 +12396,222 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - } - }, - "dependencies": { - "@adobe/css-tools": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", - "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" + "node_modules/@next/swc-android-arm-eabi": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.0.tgz", + "integrity": "sha512-/PuirPnAKsYBw93w/7Q9hqy+KGOU9mjYprZ/faxMUJh/dc6v3rYLxkZKNG9nFPIW4QKNTCnhP40xF9hLnxO+xg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, - "@babel/compat-data": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", - "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==" - }, - "@babel/core": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", - "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", - "requires": { + "node_modules/@next/swc-android-arm64": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.0.tgz", + "integrity": "sha512-OaI+FhAM6P9B6Ybwbn0Zl8YwWido0lLwhDBi9WiYCh4RQmIXAyVIoIJPHo4fP05+mXaJ/k1trvDvuURvHOq2qw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.0.tgz", + "integrity": "sha512-2scC4MqUTwGwok+wpVxP+zWp7WcCAVOtutki2E1n99rBOTnUOX6qXkgxSy083yBN6GqwuC/dzHeN7hIKjavfRA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.0.tgz", + "integrity": "sha512-xAlruUREij/bFa+qsE1tmsP28t7vz02N4ZDHt2lh3uJUniE0Ne9idyIDLc1Ed0IF2RjfgOp4ZVunuS3OM0sngw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.0.tgz", + "integrity": "sha512-jin2S4VT/cugc2dSZEUIabhYDJNgrUh7fufbdsaAezgcQzqfdfJqfxl4E9GuafzB4cbRPTaqA0V5uqbp0IyGkQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.0.tgz", + "integrity": "sha512-RqJHDKe0WImeUrdR0kayTkRWgp4vD/MS7g0r6Xuf8+ellOFH7JAAJffDW3ayuVZeMYOa7RvgNFcOoWnrTUl9Nw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.0.tgz", + "integrity": "sha512-nvNWoUieMjvDjpYJ/4SQe9lQs2xMj6ZRs8N+bmTrVu9leY2Fg3WD6W9p/1uU9hGO8u+OdF13wc4iRShu/WYIHg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.0.tgz", + "integrity": "sha512-4ajhIuVU9PeQCMMhdDgZTLrHmjbOUFuIyg6J19hZqwEwDTSqQyrSLkbJs2Nd7IRiM6Ul/XyrtEFCpk4k+xD2+w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.0.tgz", + "integrity": "sha512-U092RBYbaGxoMAwpauePJEu2PuZSEoUCGJBvsptQr2/2XIMwAJDYM4c/M5NfYEsBr+yjvsYNsOpYfeQ88D82Yg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.0.tgz", + "integrity": "sha512-pzSzaxjDEJe67bUok9Nxf9rykbJfHXW0owICFsPBsqHyc+cr8vpF7g9e2APTCddtVhvjkga9ILoZJ9NxWS7Yiw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.0.tgz", + "integrity": "sha512-MQGUpMbYhQmTZ06a9e0hPQJnxFMwETo2WtyAotY3GEzbNCQVbCGhsvqEKcl+ZEHgShlHXUWvSffq1ZscY6gK7A==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.0.tgz", + "integrity": "sha512-C/nw6OgQpEULWqs+wgMHXGvlJLguPRFFGqR2TAqWBerQ8J+Sg3z1ZTqwelkSi4FoqStGuZ2UdFHIDN1ySmR1xA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + } + }, + "dependencies": { + "@adobe/css-tools": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", + "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==", + "dev": true + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.1.tgz", + "integrity": "sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==" + }, + "@babel/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", + "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", + "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.19.0", @@ -12656,13 +12669,13 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", - "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz", + "integrity": "sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==", "requires": { - "@babel/compat-data": "^7.19.0", + "@babel/compat-data": "^7.19.1", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", "semver": "^6.3.0" } }, @@ -12788,15 +12801,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" } }, "@babel/helper-simple-access": { @@ -12870,9 +12883,9 @@ } }, "@babel/parser": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz", - "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", + "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -12893,9 +12906,9 @@ } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz", - "integrity": "sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.19.0", @@ -13352,9 +13365,9 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz", - "integrity": "sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "requires": { "@babel/helper-create-regexp-features-plugin": "^7.19.0", "@babel/helper-plugin-utils": "^7.19.0" @@ -13469,17 +13482,17 @@ } }, "@babel/preset-env": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.0.tgz", - "integrity": "sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.1.tgz", + "integrity": "sha512-c8B2c6D16Lp+Nt6HcD+nHl0VbPKVnNPTpszahuxJJnurfMtKeZ80A+qUv48Y7wqvS+dTFuLuaM9oYxyNHbCLWA==", "requires": { - "@babel/compat-data": "^7.19.0", - "@babel/helper-compilation-targets": "^7.19.0", + "@babel/compat-data": "^7.19.1", + "@babel/helper-compilation-targets": "^7.19.1", "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-validator-option": "^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.0", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-class-static-block": "^7.18.6", "@babel/plugin-proposal-dynamic-import": "^7.18.6", @@ -13527,7 +13540,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.18.6", "@babel/plugin-transform-modules-systemjs": "^7.19.0", "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", "@babel/plugin-transform-parameters": "^7.18.8", @@ -13543,10 +13556,10 @@ "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" } }, @@ -13591,9 +13604,9 @@ } }, "@babel/traverse": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", - "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", + "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", "requires": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.19.0", @@ -13601,7 +13614,7 @@ "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.0", + "@babel/parser": "^7.19.1", "@babel/types": "^7.19.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -13649,9 +13662,9 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", + "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -14367,84 +14380,12 @@ "glob": "7.1.7" } }, - "@next/swc-android-arm-eabi": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.0.tgz", - "integrity": "sha512-/PuirPnAKsYBw93w/7Q9hqy+KGOU9mjYprZ/faxMUJh/dc6v3rYLxkZKNG9nFPIW4QKNTCnhP40xF9hLnxO+xg==", - "optional": true - }, - "@next/swc-android-arm64": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.0.tgz", - "integrity": "sha512-OaI+FhAM6P9B6Ybwbn0Zl8YwWido0lLwhDBi9WiYCh4RQmIXAyVIoIJPHo4fP05+mXaJ/k1trvDvuURvHOq2qw==", - "optional": true - }, "@next/swc-darwin-arm64": { "version": "12.3.0", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.0.tgz", "integrity": "sha512-9s4d3Mhii+WFce8o8Jok7WC3Bawkr9wEUU++SJRptjU1L5tsfYJMrSYCACHLhZujziNDLyExe4Hwwsccps1sfg==", "optional": true }, - "@next/swc-darwin-x64": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.0.tgz", - "integrity": "sha512-2scC4MqUTwGwok+wpVxP+zWp7WcCAVOtutki2E1n99rBOTnUOX6qXkgxSy083yBN6GqwuC/dzHeN7hIKjavfRA==", - "optional": true - }, - "@next/swc-freebsd-x64": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.0.tgz", - "integrity": "sha512-xAlruUREij/bFa+qsE1tmsP28t7vz02N4ZDHt2lh3uJUniE0Ne9idyIDLc1Ed0IF2RjfgOp4ZVunuS3OM0sngw==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.0.tgz", - "integrity": "sha512-jin2S4VT/cugc2dSZEUIabhYDJNgrUh7fufbdsaAezgcQzqfdfJqfxl4E9GuafzB4cbRPTaqA0V5uqbp0IyGkQ==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.0.tgz", - "integrity": "sha512-RqJHDKe0WImeUrdR0kayTkRWgp4vD/MS7g0r6Xuf8+ellOFH7JAAJffDW3ayuVZeMYOa7RvgNFcOoWnrTUl9Nw==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.0.tgz", - "integrity": "sha512-nvNWoUieMjvDjpYJ/4SQe9lQs2xMj6ZRs8N+bmTrVu9leY2Fg3WD6W9p/1uU9hGO8u+OdF13wc4iRShu/WYIHg==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.0.tgz", - "integrity": "sha512-4ajhIuVU9PeQCMMhdDgZTLrHmjbOUFuIyg6J19hZqwEwDTSqQyrSLkbJs2Nd7IRiM6Ul/XyrtEFCpk4k+xD2+w==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.0.tgz", - "integrity": "sha512-U092RBYbaGxoMAwpauePJEu2PuZSEoUCGJBvsptQr2/2XIMwAJDYM4c/M5NfYEsBr+yjvsYNsOpYfeQ88D82Yg==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.0.tgz", - "integrity": "sha512-pzSzaxjDEJe67bUok9Nxf9rykbJfHXW0owICFsPBsqHyc+cr8vpF7g9e2APTCddtVhvjkga9ILoZJ9NxWS7Yiw==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.0.tgz", - "integrity": "sha512-MQGUpMbYhQmTZ06a9e0hPQJnxFMwETo2WtyAotY3GEzbNCQVbCGhsvqEKcl+ZEHgShlHXUWvSffq1ZscY6gK7A==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.0.tgz", - "integrity": "sha512-C/nw6OgQpEULWqs+wgMHXGvlJLguPRFFGqR2TAqWBerQ8J+Sg3z1ZTqwelkSi4FoqStGuZ2UdFHIDN1ySmR1xA==", - "optional": true - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -14528,9 +14469,9 @@ "dev": true }, "@sinclair/typebox": { - "version": "0.24.41", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.41.tgz", - "integrity": "sha512-TJCgQurls4FipFvHeC+gfAzb+GGstL0TDwYJKQVtTeSvJIznWzP7g3bAd5gEBlr8+bIxqnWS9VGVWREDhmE8jA==", + "version": "0.24.39", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.39.tgz", + "integrity": "sha512-GqtkxoAjhTzoMwFg/JYRl+1+miOoyvp6mkLpbMSd2fIQak2KvY00ndlXxxkDBpuCPYkorZeEZf0LEQn9V9NRVQ==", "dev": true }, "@sinonjs/commons": { @@ -14902,9 +14843,9 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "@types/node": { - "version": "18.7.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.17.tgz", - "integrity": "sha512-0UyfUnt02zIuqp7yC8RYtDkp/vo8bFaQ13KkSEvUAohPOAlnVNbj5Fi3fgPSuwzakS+EvvnnZ4x9y7i6ASaSPQ==" + "version": "18.7.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.16.tgz", + "integrity": "sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg==" }, "@types/parse5": { "version": "6.0.3", @@ -15000,41 +14941,41 @@ "dev": true }, "@typescript-eslint/parser": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz", - "integrity": "sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.2.tgz", + "integrity": "sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.37.0", - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/typescript-estree": "5.37.0", + "@typescript-eslint/scope-manager": "5.36.2", + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/typescript-estree": "5.36.2", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", - "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz", + "integrity": "sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0" + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/visitor-keys": "5.36.2" } }, "@typescript-eslint/types": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", - "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.2.tgz", + "integrity": "sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", - "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz", + "integrity": "sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", - "@typescript-eslint/visitor-keys": "5.37.0", + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/visitor-keys": "5.36.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -15054,12 +14995,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", - "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz", + "integrity": "sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/types": "5.36.2", "eslint-visitor-keys": "^3.3.0" } }, @@ -15578,12 +15519,12 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" } }, "babel-plugin-polyfill-regenerator": { @@ -15757,9 +15698,9 @@ "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" }, "caniuse-lite": { - "version": "1.0.30001399", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz", - "integrity": "sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA==" + "version": "1.0.30001393", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz", + "integrity": "sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA==" }, "chalk": { "version": "2.4.2", @@ -16121,9 +16062,9 @@ } }, "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", "dev": true }, "damerau-levenshtein": { @@ -16160,6 +16101,11 @@ } } }, + "date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -16315,9 +16261,9 @@ } }, "electron-to-chromium": { - "version": "1.4.248", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.248.tgz", - "integrity": "sha512-qShjzEYpa57NnhbW2K+g+Fl+eNoDvQ7I+2MRwWnU6Z6F0HhXekzsECCLv+y2OJUsRodjqoSfwHkIX42VUFtUzg==" + "version": "1.4.247", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.247.tgz", + "integrity": "sha512-FLs6R4FQE+1JHM0hh3sfdxnYjKvJpHZyhQDjc2qFq/xFvmmRt/TATNToZhrcGUFzpF2XjeiuozrA8lI0PZmYYw==" }, "emittery": { "version": "0.10.2", @@ -17237,9 +17183,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -17557,9 +17503,9 @@ } }, "is-callable": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.5.tgz", - "integrity": "sha512-ZIWRujF6MvYGkEuHMYtFRkL2wAtFw89EHfKlXrkPkjQZZRWeh9L1q3SV13NIfHnqxugjLvAOkEHx9mb1zcMnEw==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-core-module": { "version": "2.10.0", @@ -20142,14 +20088,14 @@ "dev": true }, "regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "requires": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" } @@ -20172,14 +20118,14 @@ } }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "requires": { "jsesc": "~0.5.0" }, @@ -21175,9 +21121,9 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, "update-browserslist-db": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.8.tgz", - "integrity": "sha512-GHg7C4M7oJSJYW/ED/5QOJ7nL/E0lwTOBGsOorA7jqHr8ExUhPfwAotIAmdSw/LWv3SMLSNpzTAgeLG9zaZKTA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", + "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -21834,6 +21780,78 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true + }, + "@next/swc-android-arm-eabi": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.0.tgz", + "integrity": "sha512-/PuirPnAKsYBw93w/7Q9hqy+KGOU9mjYprZ/faxMUJh/dc6v3rYLxkZKNG9nFPIW4QKNTCnhP40xF9hLnxO+xg==", + "optional": true + }, + "@next/swc-android-arm64": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.0.tgz", + "integrity": "sha512-OaI+FhAM6P9B6Ybwbn0Zl8YwWido0lLwhDBi9WiYCh4RQmIXAyVIoIJPHo4fP05+mXaJ/k1trvDvuURvHOq2qw==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.0.tgz", + "integrity": "sha512-2scC4MqUTwGwok+wpVxP+zWp7WcCAVOtutki2E1n99rBOTnUOX6qXkgxSy083yBN6GqwuC/dzHeN7hIKjavfRA==", + "optional": true + }, + "@next/swc-freebsd-x64": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.0.tgz", + "integrity": "sha512-xAlruUREij/bFa+qsE1tmsP28t7vz02N4ZDHt2lh3uJUniE0Ne9idyIDLc1Ed0IF2RjfgOp4ZVunuS3OM0sngw==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.0.tgz", + "integrity": "sha512-jin2S4VT/cugc2dSZEUIabhYDJNgrUh7fufbdsaAezgcQzqfdfJqfxl4E9GuafzB4cbRPTaqA0V5uqbp0IyGkQ==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.0.tgz", + "integrity": "sha512-RqJHDKe0WImeUrdR0kayTkRWgp4vD/MS7g0r6Xuf8+ellOFH7JAAJffDW3ayuVZeMYOa7RvgNFcOoWnrTUl9Nw==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.0.tgz", + "integrity": "sha512-nvNWoUieMjvDjpYJ/4SQe9lQs2xMj6ZRs8N+bmTrVu9leY2Fg3WD6W9p/1uU9hGO8u+OdF13wc4iRShu/WYIHg==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.0.tgz", + "integrity": "sha512-4ajhIuVU9PeQCMMhdDgZTLrHmjbOUFuIyg6J19hZqwEwDTSqQyrSLkbJs2Nd7IRiM6Ul/XyrtEFCpk4k+xD2+w==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.0.tgz", + "integrity": "sha512-U092RBYbaGxoMAwpauePJEu2PuZSEoUCGJBvsptQr2/2XIMwAJDYM4c/M5NfYEsBr+yjvsYNsOpYfeQ88D82Yg==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.0.tgz", + "integrity": "sha512-pzSzaxjDEJe67bUok9Nxf9rykbJfHXW0owICFsPBsqHyc+cr8vpF7g9e2APTCddtVhvjkga9ILoZJ9NxWS7Yiw==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.0.tgz", + "integrity": "sha512-MQGUpMbYhQmTZ06a9e0hPQJnxFMwETo2WtyAotY3GEzbNCQVbCGhsvqEKcl+ZEHgShlHXUWvSffq1ZscY6gK7A==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.0.tgz", + "integrity": "sha512-C/nw6OgQpEULWqs+wgMHXGvlJLguPRFFGqR2TAqWBerQ8J+Sg3z1ZTqwelkSi4FoqStGuZ2UdFHIDN1ySmR1xA==", + "optional": true } } } diff --git a/package.json b/package.json index c919212..b8978c6 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "private": true, "dependencies": { "babel-plugin-styled-components": "^2.0.7", + "date-fns": "^2.29.3", "framer-motion": "^6.4.3", "next": "^12.3.0", "next-auth": "^4.10.3", diff --git a/pages/all-components.tsx b/pages/all-components.tsx index 5d3e1fb..9bbdb30 100644 --- a/pages/all-components.tsx +++ b/pages/all-components.tsx @@ -3,14 +3,15 @@ import Layout from '../components/Layout' import PageBlocks from '../components/PageBlocks' // import CardScroller from '../components/CardScroller/CardScroller'; -export default function AllComps({ entry }) { +export default function AllComps({ entry, sessions }) { const content = entry.data[0]['pageBlocks']; + // console.log('content', content) return ( All Components - + {/* */} ) @@ -19,12 +20,21 @@ export default function AllComps({ entry }) { export const getStaticProps = async ({params}) => { const slug = params?.slug || "all-components"; const response = await fetch( - `https://cities.thenextweb.com/api/pages/${slug}.json` + // remember to remove the local link and keep + // the production one before merging to master! + `https://cities.local.tnw.dev/api/pages/${slug}.json` + // `https://cities.thenextweb.com/api/pages/${slug}.json` + ) + const sessionsResponse = await fetch( + 'https://cities.local.tnw.dev/api/sessions.json' + // `https://cities.thenextweb.com/api/sessions.json` ) const entry = await response.json(); + const sessions = await sessionsResponse.json() return { props: { - entry: entry + entry: entry, + sessions: sessions, }, } } diff --git a/public/sw.js b/public/sw.js index 17f3280..9107a64 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1 +1,114 @@ -if(!self.define){let e,s={};const a=(a,i)=>(a=new URL(a+".js",i).href,s[a]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()})).then((()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e})));self.define=(i,c)=>{const n=e||("document"in self?document.currentScript.src:"")||location.href;if(s[n])return;let t={};const r=e=>a(e,n),o={module:{uri:n},exports:t,require:r};s[n]=Promise.all(i.map((e=>o[e]||r(e)))).then((e=>(c(...e),t)))}}define(["./workbox-6a1bf588"],(function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/static/8oa3YLbbhzqTsysf1vjx0/_buildManifest.js",revision:"772caf9fea9c9e76e6c39f9ec46e8b7f"},{url:"/_next/static/8oa3YLbbhzqTsysf1vjx0/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/chunks/141-ce16aca61bf5c572.js",revision:"ce16aca61bf5c572"},{url:"/_next/static/chunks/353-14df4b722df2cd4a.js",revision:"14df4b722df2cd4a"},{url:"/_next/static/chunks/573-1582259f8fdb4d26.js",revision:"1582259f8fdb4d26"},{url:"/_next/static/chunks/598-52e50cccf0585c65.js",revision:"52e50cccf0585c65"},{url:"/_next/static/chunks/651.04e5fe4036c82801.js",revision:"04e5fe4036c82801"},{url:"/_next/static/chunks/692-30706e4360ad9239.js",revision:"30706e4360ad9239"},{url:"/_next/static/chunks/741.8b828148889177c6.js",revision:"8b828148889177c6"},{url:"/_next/static/chunks/framework-4556c45dd113b893.js",revision:"4556c45dd113b893"},{url:"/_next/static/chunks/main-e833bda908a7b8cc.js",revision:"e833bda908a7b8cc"},{url:"/_next/static/chunks/pages/_app-a2bb208abf038168.js",revision:"a2bb208abf038168"},{url:"/_next/static/chunks/pages/_error-28b0dba9dbcfb4ed.js",revision:"28b0dba9dbcfb4ed"},{url:"/_next/static/chunks/pages/about-de875e00ccade195.js",revision:"de875e00ccade195"},{url:"/_next/static/chunks/pages/all-components-4e9233d4c5e1c065.js",revision:"4e9233d4c5e1c065"},{url:"/_next/static/chunks/pages/authors/%5Bslug%5D-5d3517b5318b83ed.js",revision:"5d3517b5318b83ed"},{url:"/_next/static/chunks/pages/conference-a66c8e0bb5b1298a.js",revision:"a66c8e0bb5b1298a"},{url:"/_next/static/chunks/pages/conference/about-46c2f73365287f33.js",revision:"46c2f73365287f33"},{url:"/_next/static/chunks/pages/conference/tickets-419bb482336d90db.js",revision:"419bb482336d90db"},{url:"/_next/static/chunks/pages/fallback-596ac37784577530.js",revision:"596ac37784577530"},{url:"/_next/static/chunks/pages/index-38ab621e2d5f0051.js",revision:"38ab621e2d5f0051"},{url:"/_next/static/chunks/pages/news-f37f9fcc0aebb706.js",revision:"f37f9fcc0aebb706"},{url:"/_next/static/chunks/pages/posts-ab01ec3bad3d0cb5.js",revision:"ab01ec3bad3d0cb5"},{url:"/_next/static/chunks/pages/posts/%5Bslug%5D-eee5d94a1f240a2d.js",revision:"eee5d94a1f240a2d"},{url:"/_next/static/chunks/pages/programs-b8bc98f433a81181.js",revision:"b8bc98f433a81181"},{url:"/_next/static/chunks/pages/programs/%5Bslug%5D-ef1e9f9bd50a442f.js",revision:"ef1e9f9bd50a442f"},{url:"/_next/static/chunks/pages/spaces-4fae02af5c03a5d7.js",revision:"4fae02af5c03a5d7"},{url:"/_next/static/chunks/pages/spaces/%5Bslug%5D-69a011d9b2e29420.js",revision:"69a011d9b2e29420"},{url:"/_next/static/chunks/pages/topic/%5Btag%5D-43b10407492cc9cc.js",revision:"43b10407492cc9cc"},{url:"/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js",revision:"837c0df77fd5009c9e46d446188ecfd0"},{url:"/_next/static/chunks/webpack-a38d1778568c7fde.js",revision:"a38d1778568c7fde"},{url:"/_next/static/css/2acfb845fbf8f3b4.css",revision:"2acfb845fbf8f3b4"},{url:"/_next/static/css/3130cc23038613f6.css",revision:"3130cc23038613f6"},{url:"/_next/static/css/8fb94eca47ededd6.css",revision:"8fb94eca47ededd6"},{url:"/assets/fonts/graphik-medium.woff",revision:"66a39c52d7476e7c823af80341a7fcc2"},{url:"/assets/fonts/graphik-medium.woff2",revision:"9d52fdc183d101a1eacb5a6e5fd82b95"},{url:"/assets/fonts/graphik-regular-italic.woff",revision:"5e1f1b641a3f8c7a133dcfa0329d0bd7"},{url:"/assets/fonts/graphik-regular-italic.woff2",revision:"b67d9a0ab593c17cc2d44fdfecae807b"},{url:"/assets/fonts/graphik-regular.woff",revision:"810cfa0faa09964ed34b28cdae213e8c"},{url:"/assets/fonts/graphik-regular.woff2",revision:"3f97ed33719cc57b85648b5b6b0d8115"},{url:"/assets/fonts/shentox-medium.woff",revision:"1d04a9986c9c8a8ceb2f3f6f6634080c"},{url:"/assets/fonts/shentox-medium.woff2",revision:"ae282d9fad8d91075d8139ee873d91f3"},{url:"/assets/fonts/tnw-avalon-bold.woff",revision:"4d60170699188c45e916e68c735c5dc4"},{url:"/assets/fonts/tnw-avalon-bold.woff2",revision:"bd1f08918c3b46c85f59d6cdaa95f436"},{url:"/assets/img/Garage_innovationhub2.png",revision:"d22a9f58fe26d35cafab7734ccad313c"},{url:"/assets/img/_htn-floats-2.png",revision:"3734dac08039c13741abc98a96231434"},{url:"/assets/img/_ye_olde_hero-bg.jpg",revision:"3ac6a1420c2bbd2aad9ea8e0d28e57fb"},{url:"/assets/img/beko.svg",revision:"56101c2bbd660bc2eaf5e502fa372dfa"},{url:"/assets/img/cc-bg.jpg",revision:"34fbc22ff3916fe0dc98f39d46d67957"},{url:"/assets/img/cc-floats-2.png",revision:"2431d99677707e9819ffce3a9370aca3"},{url:"/assets/img/ce-bg.jpg",revision:"22d2ff504ca0d055013262cee9f495ee"},{url:"/assets/img/ce-floats-2.png",revision:"547b5cd24710be81859e0e2416cf7324"},{url:"/assets/img/facebook.svg",revision:"f44ba9bcad1dbdbc7681c6d082bbe843"},{url:"/assets/img/favicon/apple-touch-icon-114x114.png",revision:"d46186dfd795dda1fa7a0e3325c511e5"},{url:"/assets/img/favicon/apple-touch-icon-120x120.png",revision:"6bdd788c3e86adeb9aa0f0777c2418b2"},{url:"/assets/img/favicon/apple-touch-icon-144x144.png",revision:"2caffc090d2647dc0b16e973cd37649a"},{url:"/assets/img/favicon/apple-touch-icon-152x152.png",revision:"4643ca0195ab2355518d7c6d8f922e60"},{url:"/assets/img/favicon/apple-touch-icon-180x180.png",revision:"5c05be09646b18f205b3b97f7a944e79"},{url:"/assets/img/favicon/apple-touch-icon-57x57.png",revision:"e287ed3d73aa215dde45bdc18914e18a"},{url:"/assets/img/favicon/apple-touch-icon-60x60.png",revision:"5b71468ce1b75b4dc72db8f224b9d9ca"},{url:"/assets/img/favicon/apple-touch-icon-72x72.png",revision:"659245477d8dbc13ddd032a03bdaa32d"},{url:"/assets/img/favicon/apple-touch-icon-76x76.png",revision:"8d5dde6ede9121130c49d1cbb18047db"},{url:"/assets/img/favicon/favicon-16x16.png",revision:"b3598c6132f87839691e6e4f71096866"},{url:"/assets/img/favicon/favicon-192x192.png",revision:"1b147b22301852d8bf47dd282faa2fb7"},{url:"/assets/img/favicon/favicon-194x194.png",revision:"555748fa8c8652aef0296fe64dc5cc77"},{url:"/assets/img/favicon/favicon-32x32.png",revision:"9cd71bf405d0b443c0f56ff21a8a8fa7"},{url:"/assets/img/favicon/favicon-48x48.png",revision:"014397910656e9785b67d9ed75baa04a"},{url:"/assets/img/favicon/favicon-96x96.png",revision:"ec56f721705fac5c8fd66250304e6d6d"},{url:"/assets/img/favicon/favicon.png",revision:"7534dba10d7e4a8422a335e9e05ab87e"},{url:"/assets/img/ft-talent.svg",revision:"ae3a6278eb3d9eae8bd32c2cc9bb57dd"},{url:"/assets/img/ft-tnw-dublin.svg",revision:"8a346ab9239129ebf53ce20d67ce3ab2"},{url:"/assets/img/hack-the-normal-2022.svg",revision:"6dc6e70e556dfb164b57996e258bb9ab"},{url:"/assets/img/header-glow.jpg",revision:"1f78f0433387ec3c6647b5509e2b52d7"},{url:"/assets/img/header-layer-1.png",revision:"6037f5fd43f203dd97297e697e9044a9"},{url:"/assets/img/header-layer-2.png",revision:"06776c7f3eddd38a168baf3cfe8f76df"},{url:"/assets/img/hero-bg.jpg",revision:"e5fabf24b48a95c1b6e559ba1e207021"},{url:"/assets/img/hero-fg.png",revision:"664734e26d8f58af954251a8748f1cca"},{url:"/assets/img/hero-glow.jpg",revision:"6855a2d802b1406732b32b1efcddb95e"},{url:"/assets/img/htn-bg.jpg",revision:"a46f52dd07ee3c5e4d23feb181b478a9"},{url:"/assets/img/htn-floats-2.png",revision:"14f0283167745c162540f3c47ec85621"},{url:"/assets/img/icons.svg",revision:"720490798de9cc71a0755eace9cdc496"},{url:"/assets/img/instagram.svg",revision:"439d1a40a23a14e2f036d8971d27aa98"},{url:"/assets/img/linkedin.svg",revision:"adcc9fbb671d46b0a7f1137be9856100"},{url:"/assets/img/modal-header.jpg",revision:"e5752a4e9f3b8dc20fa5aede8b8e0193"},{url:"/assets/img/molly.jpg",revision:"f8f94f0af92afa67e04d319a643c0bd5"},{url:"/assets/img/molly1.jpg",revision:"047df8424bcc903a1a1877771b5608d5"},{url:"/assets/img/molly2.jpg",revision:"747b22e2faac4b8541a6ad3b12e99d1a"},{url:"/assets/img/molly3.jpg",revision:"f8f94f0af92afa67e04d319a643c0bd5"},{url:"/assets/img/partner-ft.png",revision:"b5f5c4eb1f2d691312b459e7cdc1ab47"},{url:"/assets/img/reward-appliances.svg",revision:"c7b9b4e54c45f5dd1569cc3a85a8e5ec"},{url:"/assets/img/reward-network.svg",revision:"872bfff82e8fbab305cd632dc4a5c39c"},{url:"/assets/img/reward-preaccelerator.svg",revision:"2cab6398110b3fea6ee9f4277a1a71b5"},{url:"/assets/img/reward-prize.svg",revision:"e1d2382198871a2b30c74088913774df"},{url:"/assets/img/shapes.svg",revision:"8e6636390c8e08b1ee9f858d8cac3e9f"},{url:"/assets/img/speaker-overlay.png",revision:"327c17d1325c8705a52350e377b42f62"},{url:"/assets/img/spinner.png",revision:"46bba147f4c1a4c91617a58278d9452a"},{url:"/assets/img/tnw.png",revision:"8b6098a5338bbb19c46d55c851a14f6f"},{url:"/assets/img/tnw.svg",revision:"865e6ed4d3090269d35304e2b3417a59"},{url:"/assets/img/trophy.svg",revision:"b2589e6159f81b5809ca8d7b3083f811"},{url:"/assets/img/twitter.svg",revision:"56a1f4d6f9ae7e0330748b038c50d13c"},{url:"/assets/img/wm-bg.jpg",revision:"762b9fc3a44ade0b65b4283dbed933ec"},{url:"/assets/img/youtube.svg",revision:"1395eba5e46133c022333efd3b0e6f45"},{url:"/assets/types/next.d.ts",revision:"75e64d8bf4566f941c267d7f8950a7f8"},{url:"/favicon.ico",revision:"7534dba10d7e4a8422a335e9e05ab87e"},{url:"/icons/icon-192x192.png",revision:"469f1824f7ca5408c8f919163fd18e99"},{url:"/icons/icon-256x256.png",revision:"ed951865a7c8b24b16b1f7e7ca400a4d"},{url:"/icons/icon-384x384.png",revision:"14a10ed1a95d1599ae34c151a24dff76"},{url:"/icons/icon-512x512.png",revision:"ba31e2018e235b0931ea829bc13cd678"},{url:"/icons/maskable.png",revision:"40513148be233633cbf6c086c8823669"},{url:"/icons/maskable_icon.png",revision:"ca1c191700c948041729dfad23a58d45"},{url:"/manifest.json",revision:"6811135bbdfd323afbc5f37c0715cd3d"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:a,state:i})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")}),new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")}),new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>!(self.origin===e.origin)),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")})); +/** + * 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) { + let registry = {}; + + // Used for `eval` and `importScripts` where we can't get script URL by other means. + // In both cases, it's safe to use a global var because those functions are synchronous. + let nextDefineUri; + + const singleRequire = (uri, parentUri) => { + uri = new URL(uri + ".js", parentUri).href; + return registry[uri] || ( + + new Promise(resolve => { + if ("document" in self) { + const script = document.createElement("script"); + script.src = uri; + script.onload = resolve; + document.head.appendChild(script); + } else { + nextDefineUri = uri; + importScripts(uri); + resolve(); + } + }) + + .then(() => { + let promise = registry[uri]; + if (!promise) { + throw new Error(`Module ${uri} didn’t register its module`); + } + return promise; + }) + ); + }; + + self.define = (depsNames, factory) => { + const uri = nextDefineUri || ("document" in self ? document.currentScript.src : "") || location.href; + if (registry[uri]) { + // Module is already loading or loaded. + return; + } + let exports = {}; + const require = depUri => singleRequire(depUri, uri); + const specialDeps = { + module: { uri }, + exports, + require + }; + registry[uri] = Promise.all(depsNames.map( + depName => specialDeps[depName] || require(depName) + )).then(deps => { + factory(...deps); + return exports; + }); + }; +} +define(['./workbox-eac1af49'], (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 0000000..80b3bce --- /dev/null +++ b/public/sw.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sw.js","sources":["../../../../../private/var/folders/9b/s78nmpgx3j731nw3b6x1hk1w0000gq/T/d02c1da1817ec7f3fd5257a840ae2d07/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/Users/irenedenicolo/code/tnw/cfprototype/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/Users/irenedenicolo/code/tnw/cfprototype/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from '/Users/irenedenicolo/code/tnw/cfprototype/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/Users/irenedenicolo/code/tnw/cfprototype/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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG+I,CAAA,CAAA,CAAA,CAAA,CAAA;AAC/I,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AA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"} \ No newline at end of file diff --git a/public/workbox-6a1bf588.js b/public/workbox-6a1bf588.js deleted file mode 100644 index db34521..0000000 --- a/public/workbox-6a1bf588.js +++ /dev/null @@ -1 +0,0 @@ -define(["exports"],(function(t){"use strict";try{self["workbox:core:6.5.3"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:6.5.3"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class r{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class i extends r{constructor(t,e,s){super((({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)}),e,s)}}class a{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",(t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map((e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})})));t.waitUntil(s),t.ports&&t.ports[0]&&s.then((()=>t.ports[0].postMessage(!0)))}}))}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:r,route:i}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let a=i&&i.handler;const o=t.method;if(!a&&this.i.has(o)&&(a=this.i.get(o)),!a)return;let c;try{c=a.handle({url:s,request:t,event:e,params:r})}catch(t){c=Promise.reject(t)}const h=i&&i.catchHandler;return c instanceof Promise&&(this.o||h)&&(c=c.catch((async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:r})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n}))),c}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const r=this.t.get(s.method)||[];for(const i of r){let r;const a=i.match({url:t,sameOrigin:e,request:s,event:n});if(a)return r=a,(Array.isArray(r)&&0===r.length||a.constructor===Object&&0===Object.keys(a).length||"boolean"==typeof a)&&(r=void 0),{route:i,params:r}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let o;const c=()=>(o||(o=new a,o.addFetchListener(),o.addCacheListener()),o);function h(t,e,n){let a;if("string"==typeof t){const s=new URL(t,location.href);a=new r((({url:t})=>t.href===s.href),e,n)}else if(t instanceof RegExp)a=new i(t,e,n);else if("function"==typeof t)a=new r(t,e,n);else{if(!(t instanceof r))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=t}return c().registerRoute(a),a}try{self["workbox:strategies:6.5.3"]&&_()}catch(t){}const u={cacheWillUpdate:async({response:t})=>200===t.status||0===t.status?t:null},l={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},f=t=>[l.prefix,t,l.suffix].filter((t=>t&&t.length>0)).join("-"),w=t=>t||f(l.precache),d=t=>t||f(l.runtime);function p(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class y{constructor(){this.promise=new Promise(((t,e)=>{this.resolve=t,this.reject=e}))}}const g=new Set;function m(t){return"string"==typeof t?new Request(t):t}class v{constructor(t,e){this.h={},Object.assign(this,e),this.event=e.event,this.u=t,this.l=new y,this.p=[],this.g=[...t.plugins],this.m=new Map;for(const t of this.g)this.m.set(t,{});this.event.waitUntil(this.l.promise)}async fetch(t){const{event:e}=this;let n=m(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const r=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const i=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.u.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:i,response:t});return t}catch(t){throw r&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:r.clone(),request:i.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=m(t);let s;const{cacheName:n,matchOptions:r}=this.u,i=await this.getCacheKey(e,"read"),a=Object.assign(Object.assign({},r),{cacheName:n});s=await caches.match(i,a);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:r,cachedResponse:s,request:i,event:this.event})||void 0;return s}async cachePut(t,e){const n=m(t);var r;await(r=0,new Promise((t=>setTimeout(t,r))));const i=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(a=i.url,new URL(String(a),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var a;const o=await this.v(e);if(!o)return!1;const{cacheName:c,matchOptions:h}=this.u,u=await self.caches.open(c),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const r=p(e.url,s);if(e.url===r)return t.match(e,n);const i=Object.assign(Object.assign({},n),{ignoreSearch:!0}),a=await t.keys(e,i);for(const e of a)if(r===p(e.url,s))return t.match(e,n)}(u,i.clone(),["__WB_REVISION__"],h):null;try{await u.put(i,l?o.clone():o)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of g)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:c,oldResponse:f,newResponse:o.clone(),request:i,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.h[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=m(await t({mode:e,request:n,event:this.event,params:this.params}));this.h[s]=n}return this.h[s]}hasCallback(t){for(const e of this.u.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.u.plugins)if("function"==typeof e[t]){const s=this.m.get(e),n=n=>{const r=Object.assign(Object.assign({},n),{state:s});return e[t](r)};yield n}}waitUntil(t){return this.p.push(t),t}async doneWaiting(){let t;for(;t=this.p.shift();)await t}destroy(){this.l.resolve(null)}async v(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class R{constructor(t={}){this.cacheName=d(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,r=new v(this,{event:e,request:s,params:n}),i=this.R(r,s,e);return[i,this.q(i,r,s,e)]}async R(t,e,n){let r;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(r=await this.D(e,t),!r||"error"===r.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const i of t.iterateCallbacks("handlerDidError"))if(r=await i({error:s,event:n,request:e}),r)break;if(!r)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))r=await s({event:n,request:e,response:r});return r}async q(t,e,s,n){let r,i;try{r=await t}catch(i){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:r}),await e.doneWaiting()}catch(t){t instanceof Error&&(i=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:r,error:i}),e.destroy(),i)throw i}}function b(t){t.then((()=>{}))}function q(){return q=Object.assign?Object.assign.bind():function(t){for(var e=1;e(t[e]=s,!0),has:(t,e)=>t instanceof IDBTransaction&&("done"===e||"store"===e)||e in t};function O(t){return t!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(U||(U=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(t)?function(...e){return t.apply(B(this),e),k(x.get(this))}:function(...e){return k(t.apply(B(this),e))}:function(e,...s){const n=t.call(B(this),e,...s);return I.set(n,e.sort?e.sort():[e]),k(n)}}function T(t){return"function"==typeof t?O(t):(t instanceof IDBTransaction&&function(t){if(L.has(t))return;const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("complete",r),t.removeEventListener("error",i),t.removeEventListener("abort",i)},r=()=>{e(),n()},i=()=>{s(t.error||new DOMException("AbortError","AbortError")),n()};t.addEventListener("complete",r),t.addEventListener("error",i),t.addEventListener("abort",i)}));L.set(t,e)}(t),e=t,(D||(D=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some((t=>e instanceof t))?new Proxy(t,N):t);var e}function k(t){if(t instanceof IDBRequest)return function(t){const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("success",r),t.removeEventListener("error",i)},r=()=>{e(k(t.result)),n()},i=()=>{s(t.error),n()};t.addEventListener("success",r),t.addEventListener("error",i)}));return e.then((e=>{e instanceof IDBCursor&&x.set(e,t)})).catch((()=>{})),E.set(e,t),e}(t);if(C.has(t))return C.get(t);const e=T(t);return e!==t&&(C.set(t,e),E.set(e,t)),e}const B=t=>E.get(t);const P=["get","getKey","getAll","getAllKeys","count"],M=["put","add","delete","clear"],W=new Map;function j(t,e){if(!(t instanceof IDBDatabase)||e in t||"string"!=typeof e)return;if(W.get(e))return W.get(e);const s=e.replace(/FromIndex$/,""),n=e!==s,r=M.includes(s);if(!(s in(n?IDBIndex:IDBObjectStore).prototype)||!r&&!P.includes(s))return;const i=async function(t,...e){const i=this.transaction(t,r?"readwrite":"readonly");let a=i.store;return n&&(a=a.index(e.shift())),(await Promise.all([a[s](...e),r&&i.done]))[0]};return W.set(e,i),i}N=(t=>q({},t,{get:(e,s,n)=>j(e,s)||t.get(e,s,n),has:(e,s)=>!!j(e,s)||t.has(e,s)}))(N);try{self["workbox:expiration:6.5.3"]&&_()}catch(t){}const S="cache-entries",K=t=>{const e=new URL(t,location.href);return e.hash="",e.href};class A{constructor(t){this.U=null,this._=t}L(t){const e=t.createObjectStore(S,{keyPath:"id"});e.createIndex("cacheName","cacheName",{unique:!1}),e.createIndex("timestamp","timestamp",{unique:!1})}I(t){this.L(t),this._&&function(t,{blocked:e}={}){const s=indexedDB.deleteDatabase(t);e&&s.addEventListener("blocked",(()=>e())),k(s).then((()=>{}))}(this._)}async setTimestamp(t,e){const s={url:t=K(t),timestamp:e,cacheName:this._,id:this.C(t)},n=(await this.getDb()).transaction(S,"readwrite",{durability:"relaxed"});await n.store.put(s),await n.done}async getTimestamp(t){const e=await this.getDb(),s=await e.get(S,this.C(t));return null==s?void 0:s.timestamp}async expireEntries(t,e){const s=await this.getDb();let n=await s.transaction(S).store.index("timestamp").openCursor(null,"prev");const r=[];let i=0;for(;n;){const s=n.value;s.cacheName===this._&&(t&&s.timestamp=e?r.push(n.value):i++),n=await n.continue()}const a=[];for(const t of r)await s.delete(S,t.id),a.push(t.url);return a}C(t){return this._+"|"+K(t)}async getDb(){return this.U||(this.U=await function(t,e,{blocked:s,upgrade:n,blocking:r,terminated:i}={}){const a=indexedDB.open(t,e),o=k(a);return n&&a.addEventListener("upgradeneeded",(t=>{n(k(a.result),t.oldVersion,t.newVersion,k(a.transaction))})),s&&a.addEventListener("blocked",(()=>s())),o.then((t=>{i&&t.addEventListener("close",(()=>i())),r&&t.addEventListener("versionchange",(()=>r()))})).catch((()=>{})),o}("workbox-expiration",1,{upgrade:this.I.bind(this)})),this.U}}class F{constructor(t,e={}){this.N=!1,this.O=!1,this.T=e.maxEntries,this.k=e.maxAgeSeconds,this.B=e.matchOptions,this._=t,this.P=new A(t)}async expireEntries(){if(this.N)return void(this.O=!0);this.N=!0;const t=this.k?Date.now()-1e3*this.k:0,e=await this.P.expireEntries(t,this.T),s=await self.caches.open(this._);for(const t of e)await s.delete(t,this.B);this.N=!1,this.O&&(this.O=!1,b(this.expireEntries()))}async updateTimestamp(t){await this.P.setTimestamp(t,Date.now())}async isURLExpired(t){if(this.k){const e=await this.P.getTimestamp(t),s=Date.now()-1e3*this.k;return void 0===e||er||e&&e<0)throw new s("range-not-satisfiable",{size:r,end:n,start:e});let i,a;return void 0!==e&&void 0!==n?(i=e,a=n+1):void 0!==e&&void 0===n?(i=e,a=r):void 0!==n&&void 0===e&&(i=r-n,a=r),{start:i,end:a}}(i,r.start,r.end),o=i.slice(a.start,a.end),c=o.size,h=new Response(o,{status:206,statusText:"Partial Content",headers:e.headers});return h.headers.set("Content-Length",String(c)),h.headers.set("Content-Range",`bytes ${a.start}-${a.end-1}/${i.size}`),h}catch(t){return new Response("",{status:416,statusText:"Range Not Satisfiable"})}}function $(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.3"]&&_()}catch(t){}function z(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const r=new URL(n,location.href),i=new URL(n,location.href);return r.searchParams.set("__WB_REVISION__",e),{cacheKey:r.href,url:i.href}}class G{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class V{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.M.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.M=t}}let J,Q;async function X(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const r=t.clone(),i={headers:new Headers(r.headers),status:r.status,statusText:r.statusText},a=e?e(i):i,o=function(){if(void 0===J){const t=new Response("");if("body"in t)try{new Response(t.body),J=!0}catch(t){J=!1}J=!1}return J}()?r.body:await r.blob();return new Response(o,a)}class Y extends R{constructor(t={}){t.cacheName=w(t.cacheName),super(t),this.W=!1!==t.fallbackToNetwork,this.plugins.push(Y.copyRedirectedCacheableResponsesPlugin)}async D(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.j(t,e):await this.S(t,e))}async S(t,e){let n;const r=e.params||{};if(!this.W)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=r.integrity,i=t.integrity,a=!i||i===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?i||s:void 0})),s&&a&&"no-cors"!==t.mode&&(this.K(),await e.cachePut(t,n.clone()))}return n}async j(t,e){this.K();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}K(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==Y.copyRedirectedCacheableResponsesPlugin&&(n===Y.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(Y.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}Y.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},Y.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await X(t):t};class Z{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.A=new Map,this.F=new Map,this.H=new Map,this.u=new Y({cacheName:w(t),plugins:[...e,new V({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.u}precache(t){this.addToCacheList(t),this.$||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.$=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:r}=z(n),i="string"!=typeof n&&n.revision?"reload":"default";if(this.A.has(r)&&this.A.get(r)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.A.get(r),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.H.has(t)&&this.H.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:r});this.H.set(t,n.integrity)}if(this.A.set(r,t),this.F.set(r,i),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return $(t,(async()=>{const e=new G;this.strategy.plugins.push(e);for(const[e,s]of this.A){const n=this.H.get(s),r=this.F.get(e),i=new Request(e,{integrity:n,cache:r,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:i,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}}))}activate(t){return $(t,(async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.A.values()),n=[];for(const r of e)s.has(r.url)||(await t.delete(r),n.push(r.url));return{deletedURLs:n}}))}getURLsToCacheKeys(){return this.A}getCachedURLs(){return[...this.A.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.A.get(e.href)}getIntegrityForCacheKey(t){return this.H.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}const tt=()=>(Q||(Q=new Z),Q);class et extends r{constructor(t,e){super((({request:s})=>{const n=t.getURLsToCacheKeys();for(const r of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:r}={}){const i=new URL(t,location.href);i.hash="",yield i.href;const a=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some((t=>t.test(s)))&&t.searchParams.delete(s);return t}(i,e);if(yield a.href,s&&a.pathname.endsWith("/")){const t=new URL(a.href);t.pathname+=s,yield t.href}if(n){const t=new URL(a.href);t.pathname+=".html",yield t.href}if(r){const t=r({url:i});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(r);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}}),t.strategy)}}t.CacheFirst=class extends R{async D(t,e){let n,r=await e.cacheMatch(t);if(!r)try{r=await e.fetchAndCachePut(t)}catch(t){t instanceof Error&&(n=t)}if(!r)throw new s("no-response",{url:t.url,error:n});return r}},t.ExpirationPlugin=class{constructor(t={}){this.cachedResponseWillBeUsed=async({event:t,request:e,cacheName:s,cachedResponse:n})=>{if(!n)return null;const r=this.G(n),i=this.V(s);b(i.expireEntries());const a=i.updateTimestamp(e.url);if(t)try{t.waitUntil(a)}catch(t){}return r?n:null},this.cacheDidUpdate=async({cacheName:t,request:e})=>{const s=this.V(t);await s.updateTimestamp(e.url),await s.expireEntries()},this.J=t,this.k=t.maxAgeSeconds,this.X=new Map,t.purgeOnQuotaError&&function(t){g.add(t)}((()=>this.deleteCacheAndMetadata()))}V(t){if(t===d())throw new s("expire-custom-caches-only");let e=this.X.get(t);return e||(e=new F(t,this.J),this.X.set(t,e)),e}G(t){if(!this.k)return!0;const e=this.Y(t);if(null===e)return!0;return e>=Date.now()-1e3*this.k}Y(t){if(!t.headers.has("date"))return null;const e=t.headers.get("date"),s=new Date(e).getTime();return isNaN(s)?null:s}async deleteCacheAndMetadata(){for(const[t,e]of this.X)await self.caches.delete(t),await e.delete();this.X=new Map}},t.NetworkFirst=class extends R{constructor(t={}){super(t),this.plugins.some((t=>"cacheWillUpdate"in t))||this.plugins.unshift(u),this.Z=t.networkTimeoutSeconds||0}async D(t,e){const n=[],r=[];let i;if(this.Z){const{id:s,promise:a}=this.tt({request:t,logs:n,handler:e});i=s,r.push(a)}const a=this.et({timeoutId:i,request:t,logs:n,handler:e});r.push(a);const o=await e.waitUntil((async()=>await e.waitUntil(Promise.race(r))||await a)());if(!o)throw new s("no-response",{url:t.url});return o}tt({request:t,logs:e,handler:s}){let n;return{promise:new Promise((e=>{n=setTimeout((async()=>{e(await s.cacheMatch(t))}),1e3*this.Z)})),id:n}}async et({timeoutId:t,request:e,logs:s,handler:n}){let r,i;try{i=await n.fetchAndCachePut(e)}catch(t){t instanceof Error&&(r=t)}return t&&clearTimeout(t),!r&&i||(i=await n.cacheMatch(e)),i}},t.RangeRequestsPlugin=class{constructor(){this.cachedResponseWillBeUsed=async({request:t,cachedResponse:e})=>e&&t.headers.has("range")?await H(t,e):e}},t.StaleWhileRevalidate=class extends R{constructor(t={}){super(t),this.plugins.some((t=>"cacheWillUpdate"in t))||this.plugins.unshift(u)}async D(t,e){const n=e.fetchAndCachePut(t).catch((()=>{}));e.waitUntil(n);let r,i=await e.cacheMatch(t);if(i);else try{i=await n}catch(t){t instanceof Error&&(r=t)}if(!i)throw new s("no-response",{url:t.url,error:r});return i}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",(t=>{const e=w();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter((s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t));return await Promise.all(s.map((t=>self.caches.delete(t)))),s})(e).then((t=>{})))}))},t.clientsClaim=function(){self.addEventListener("activate",(()=>self.clients.claim()))},t.precacheAndRoute=function(t,e){!function(t){tt().precache(t)}(t),function(t){const e=tt();h(new et(e,t))}(e)},t.registerRoute=h})); diff --git a/public/workbox-eac1af49.js b/public/workbox-eac1af49.js new file mode 100644 index 0000000..35e8c65 --- /dev/null +++ b/public/workbox-eac1af49.js @@ -0,0 +1,2744 @@ +define(['exports'], (function (exports) { 'use strict'; + + try { + self['workbox:core:6.5.3'] && _(); + } 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 // No colored prefix on groupEnd + + }; + + 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; + } + }; // eslint-disable-next-line @typescript-eslint/ban-types + + + 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.`); + } + + const classNameStr = className ? `${className}.` : ''; + return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}` + `${funcName}()' must be of type ${expectedType}.`; + }, + 'incorrect-class': ({ + expectedClassName, + paramName, + moduleName, + className, + funcName, + isReturnValueProblem + }) => { + if (!expectedClassName || !moduleName || !funcName) { + throw new Error(`Unexpected input to 'incorrect-class' error.`); + } + + const classNameStr = className ? `${className}.` : ''; + + if (isReturnValueProblem) { + return `The return value from ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.`; + } + + return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.`; + }, + '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} 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': ({ + thrownErrorMessage + }) => { + if (!thrownErrorMessage) { + 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: '${thrownErrorMessage}'.`; + }, + '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}.`; + }, + 'opaque-streams-source': ({ + type + }) => { + const message = `One of the workbox-streams sources resulted in an ` + `'${type}' response.`; + + if (type === 'opaqueredirect') { + return `${message} Please do not use a navigation request that results ` + `in a redirect as a source.`; + } + + return `${message} Please ensure your sources are CORS-enabled.`; + } + }; + + /* + 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, // Need the general type to do the check later. + // eslint-disable-next-line @typescript-eslint/ban-types + expectedClass, details) => { + if (!(object instanceof expectedClass)) { + details['expectedClassName'] = expectedClass.name; + 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, // Need general type to do check later. + expectedClass, // eslint-disable-line + 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.5.3'] && _(); + } 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 workbox-routing + */ + + class Route { + /** + * Constructor for Route class. + * + * @param {workbox-routing~matchCallback} match + * A callback function that determines whether the route matches a given + * `fetch` event by returning a non-falsy value. + * @param {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 {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 + * {@link 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. + * + * @memberof workbox-routing + * @extends 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 + * {@link workbox-routing~handlerCallback} `params` + * argument. + * + * @param {RegExp} regExp The regular expression to match against URLs. + * @param {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.toString()}' only partially matched ` + `against the cross-origin URL '${url.toString()}'. 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` using one or more + * {@link workbox-routing.Route}, responding with a `Response` 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 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 => { + // event.data is type 'any' + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (event.data && event.data.type === 'CACHE_URLS') { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + 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]) { + void 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) { + if (catchErr instanceof Error) { + 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; // route.match returns type any, not possible to change right now. + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + + 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 + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + + + params = matchResult; + + if (Array.isArray(params) && params.length === 0) { + // Instead of passing an empty array in as params, use undefined. + params = undefined; + } else if (matchResult.constructor === Object && // eslint-disable-line + 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 {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 {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 {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 {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 {@link workbox-routing.Router#registerRoute}. + * + * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture + * If the capture param is a `Route`, all other arguments will be ignored. + * @param {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 {workbox-routing.Route} The generated `Route`. + * + * @memberof 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.toString()}. 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.5.3'] && _(); + } 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; + } + }; + + /* + 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. + */ + + 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 = Object.assign(Object.assign({}, 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. + */ + // Can't change Function type right now. + // eslint-disable-next-line @typescript-eslint/ban-types + + 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 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)); + } + + /* + 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. + */ + + function toRequest(input) { + return typeof input === 'string' ? new Request(input) : input; + } + /** + * A class created every time a Strategy instance instance calls + * {@link workbox-strategies.Strategy~handle} or + * {@link 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 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 {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] The return value from the + * {@link 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 workbox-strategies.StrategyHandler + */ + + /** + * The event associated with this request. + * @name event + * @instance + * @type {ExtendableEvent} + * @memberof 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 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 + * {@link workbox-routing~matchCallback} returned + * a truthy value (it will be that value). + * @name params + * @instance + * @type {*|undefined} + * @memberof 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) { + if (err instanceof Error) { + throw new WorkboxError('plugin-error-request-will-fetch', { + thrownErrorMessage: err.message + }); + } + } // 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: 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(); + void 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 = Object.assign(Object.assign({}, 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 + }); + } // See https://github.com/GoogleChrome/workbox/issues/2818 + + + const vary = response.headers.get('Vary'); + + if (vary) { + logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` + `has a 'Vary: ${vary}' header. ` + `Consider setting the {ignoreVary: true} option on your strategy ` + `to ensure cache matching and deletion works as expected.`); + } + } + + 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) { + if (error instanceof 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) { + const key = `${request.url} | ${mode}`; + + if (!this._cacheKeys[key]) { + let effectiveRequest = request; + + for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) { + effectiveRequest = toRequest(await callback({ + mode, + request: effectiveRequest, + event: this.event, + // params has a type any can't change right now. + params: this.params // eslint-disable-line + + })); + } + + this._cacheKeys[key] = effectiveRequest; + } + + return this._cacheKeys[key]; + } + /** + * 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 + * {@link 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 = Object.assign(Object.assign({}, 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 + * {@link 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 + * {@link 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(null); + } + /** + * 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 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 + * {@link 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 + * {@link 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 + * {@link 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 {@link 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) { + if (error instanceof 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 instanceof Error ? error.toString() : ''} 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) { + if (waitUntilError instanceof Error) { + error = waitUntilError; + } + } + + await handler.runCallbacks('handlerDidComplete', { + event, + request, + response, + error: error + }); + handler.destroy(); + + if (error) { + throw error; + } + } + + } + /** + * Classes extending the `Strategy` based class should implement this method, + * and leverage the {@link 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 {workbox-strategies.StrategyHandler} handler + * @return {Promise} + * + * @memberof 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](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#network-first-falling-back-to-cache) + * request strategy. + * + * By default, this strategy will cache responses with a 200 status code as + * well as [opaque responses](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses). + * Opaque responses are are cross-origin requests where the response doesn't + * support [CORS](https://enable-cors.org/). + * + * If the network request fails, and there is no cache match, this will throw + * a `WorkboxError` exception. + * + * @extends workbox-strategies.Strategy + * @memberof 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 + * {@link 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 {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) { + if (fetchError instanceof Error) { + 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](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#network-only) + * request strategy. + * + * This class is useful if you want to take advantage of any + * [Workbox plugins](https://developer.chrome.com/docs/workbox/using-plugins/). + * + * If the network request fails, this will throw a `WorkboxError` exception. + * + * @extends workbox-strategies.Strategy + * @memberof 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 {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) { + if (err instanceof Error) { + 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 workbox-core + */ + + function clientsClaim() { + self.addEventListener('activate', () => self.clients.claim()); + } + + exports.NetworkFirst = NetworkFirst; + exports.NetworkOnly = NetworkOnly; + exports.clientsClaim = clientsClaim; + exports.registerRoute = registerRoute; + +})); +//# sourceMappingURL=workbox-eac1af49.js.map diff --git a/public/workbox-eac1af49.js.map b/public/workbox-eac1af49.js.map new file mode 100644 index 0000000..fe604ae --- /dev/null +++ b/public/workbox-eac1af49.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workbox-eac1af49.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.5.3'] && _();\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'\n ? null\n : (() => {\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, // No colored prefix on groupEnd\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 // eslint-disable-next-line @typescript-eslint/ban-types\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 const classNameStr = className ? `${className}.` : '';\n return (`The parameter '${paramName}' passed into ` +\n `'${moduleName}.${classNameStr}` +\n `${funcName}()' must be of type ${expectedType}.`);\n },\n 'incorrect-class': ({ expectedClassName, paramName, moduleName, className, funcName, isReturnValueProblem, }) => {\n if (!expectedClassName || !moduleName || !funcName) {\n throw new Error(`Unexpected input to 'incorrect-class' error.`);\n }\n const classNameStr = className ? `${className}.` : '';\n if (isReturnValueProblem) {\n return (`The return value from ` +\n `'${moduleName}.${classNameStr}${funcName}()' ` +\n `must be an instance of class ${expectedClassName}.`);\n }\n return (`The parameter '${paramName}' passed into ` +\n `'${moduleName}.${classNameStr}${funcName}()' ` +\n `must be an instance of class ${expectedClassName}.`);\n },\n 'missing-a-method': ({ expectedMethod, paramName, moduleName, className, funcName, }) => {\n if (!expectedMethod ||\n !paramName ||\n !moduleName ||\n !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 ` + `'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} 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': ({ thrownErrorMessage }) => {\n if (!thrownErrorMessage) {\n throw new Error(`Unexpected input to ` + `'plugin-error-request-will-fetch', error.`);\n }\n return (`An error was thrown by a plugins 'requestWillFetch()' method. ` +\n `The thrown error message was: '${thrownErrorMessage}'.`);\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 'opaque-streams-source': ({ type }) => {\n const message = `One of the workbox-streams sources resulted in an ` +\n `'${type}' response.`;\n if (type === 'opaqueredirect') {\n return (`${message} Please do not use a navigation request that results ` +\n `in a redirect as a source.`);\n }\n return `${message} Please ensure your sources are CORS-enabled.`;\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' ? 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, \n// Need the general type to do the check later.\n// eslint-disable-next-line @typescript-eslint/ban-types\nexpectedClass, details) => {\n if (!(object instanceof expectedClass)) {\n details['expectedClassName'] = expectedClass.name;\n throw new WorkboxError('incorrect-class', details);\n }\n};\nconst isOneOf = (value, validValues, details) => {\n if (!validValues.includes(value)) {\n details['validValueDescription'] = `Valid values are ${JSON.stringify(validValues)}.`;\n throw new WorkboxError('invalid-value', details);\n }\n};\nconst isArrayOfClass = (value, \n// Need general type to do check later.\nexpectedClass, // eslint-disable-line\ndetails) => {\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'\n ? null\n : {\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.5.3'] && _();\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 workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {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 {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 {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 * {@link 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 * @memberof workbox-routing\n * @extends 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 * {@link workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {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.toString()}' only partially matched ` +\n `against the cross-origin URL '${url.toString()}'. 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` using one or more\n * {@link workbox-routing.Route}, responding with a `Response` 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 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 // event.data is type 'any'\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.data && event.data.type === 'CACHE_URLS') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\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 void 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([`Found a route to handle this request:`, route]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`,\n 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 &&\n (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 if (catchErr instanceof Error) {\n err = catchErr;\n }\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 // route.match returns type any, not possible to change right now.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\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 // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params = matchResult;\n if (Array.isArray(params) && params.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if (matchResult.constructor === Object && // eslint-disable-line\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 {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 {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 {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 {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 {@link workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {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 {workbox-routing.Route} The generated `Route`.\n *\n * @memberof 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\n : 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.toString()}. 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.5.3'] && _();\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 = Object.assign(Object.assign({}, 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.\n// Can't change Function type right now.\n// eslint-disable-next-line @typescript-eslint/ban-types\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 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 * {@link workbox-strategies.Strategy~handle} or\n * {@link 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 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 {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] The return value from the\n * {@link workbox-routing~matchCallback} (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 workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof 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 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 * {@link workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof 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()\n : 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 if (err instanceof Error) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownErrorMessage: err.message,\n });\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' ? 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: 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 void 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 = Object.assign(Object.assign({}, 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 =\n (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 // See https://github.com/GoogleChrome/workbox/issues/2818\n const vary = response.headers.get('Vary');\n if (vary) {\n logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` +\n `has a 'Vary: ${vary}' header. ` +\n `Consider setting the {ignoreVary: true} option on your strategy ` +\n `to ensure cache matching and deletion works as expected.`);\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\n ? 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 ? responseToCache.clone() : responseToCache);\n }\n catch (error) {\n if (error instanceof 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 }\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 const key = `${request.url} | ${mode}`;\n if (!this._cacheKeys[key]) {\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 has a type any can't change right now.\n params: this.params, // eslint-disable-line\n }));\n }\n this._cacheKeys[key] = effectiveRequest;\n }\n return this._cacheKeys[key];\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 * {@link 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 = Object.assign(Object.assign({}, 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 * {@link 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 * {@link 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(null);\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 =\n (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 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 * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] 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 * {@link 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 * {@link 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 {@link 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 if (error instanceof Error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\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 instanceof Error ? error.toString() : ''} 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 if (waitUntilError instanceof Error) {\n error = waitUntilError;\n }\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error: 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 {@link 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 {workbox-strategies.StrategyHandler} handler\n * @return {Promise}\n *\n * @memberof 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](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#network-first-falling-back-to-cache)\n * request strategy.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses).\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS](https://enable-cors.org/).\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass NetworkFirst extends Strategy {\n /**\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n * @param {number} [options.networkTimeoutSeconds] If set, any network requests\n * that fail to respond within the timeout will fallback to the cache.\n *\n * This option can be used to combat\n * \"[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}\"\n * scenarios.\n */\n constructor(options = {}) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n if (process.env.NODE_ENV !== 'production') {\n if (this._networkTimeoutSeconds) {\n assert.isType(this._networkTimeoutSeconds, 'number', {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'constructor',\n paramName: 'networkTimeoutSeconds',\n });\n }\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'makeRequest',\n });\n }\n const promises = [];\n let timeoutId;\n if (this._networkTimeoutSeconds) {\n const { id, promise } = this._getTimeoutPromise({ request, logs, handler });\n timeoutId = id;\n promises.push(promise);\n }\n const networkPromise = this._getNetworkPromise({\n timeoutId,\n request,\n logs,\n handler,\n });\n promises.push(networkPromise);\n const response = await handler.waitUntil((async () => {\n // Promise.race() will resolve as soon as the first promise resolves.\n return ((await handler.waitUntil(Promise.race(promises))) ||\n // If Promise.race() resolved with null, it might be due to a network\n // timeout + a cache miss. If that were to happen, we'd rather wait until\n // the networkPromise resolves instead of returning null.\n // Note that it's fine to await an already-resolved promise, so we don't\n // have to check to see if it's still \"in flight\".\n (await networkPromise));\n })());\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs array\n * @param {Event} options.event\n * @return {Promise}\n *\n * @private\n */\n _getTimeoutPromise({ request, logs, handler, }) {\n let timeoutId;\n const timeoutPromise = new Promise((resolve) => {\n const onNetworkTimeout = async () => {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Timing out the network response at ` +\n `${this._networkTimeoutSeconds} seconds.`);\n }\n resolve(await handler.cacheMatch(request));\n };\n timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n });\n return {\n promise: timeoutPromise,\n id: timeoutId,\n };\n }\n /**\n * @param {Object} options\n * @param {number|undefined} options.timeoutId\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs Array.\n * @param {Event} options.event\n * @return {Promise}\n *\n * @private\n */\n async _getNetworkPromise({ timeoutId, request, logs, handler, }) {\n let error;\n let response;\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (fetchError) {\n if (fetchError instanceof Error) {\n error = fetchError;\n }\n }\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network. Will respond ` +\n `with a cached response.`);\n }\n }\n if (error || !response) {\n response = await handler.cacheMatch(request);\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Found a cached response in the '${this.cacheName}'` + ` cache.`);\n }\n else {\n logs.push(`No response found in the '${this.cacheName}' cache.`);\n }\n }\n }\n return response;\n }\n}\nexport { NetworkFirst };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network-only](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#network-only)\n * request strategy.\n *\n * This class is useful if you want to take advantage of any\n * [Workbox plugins](https://developer.chrome.com/docs/workbox/using-plugins/).\n *\n * If the network request fails, this will throw a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass NetworkOnly extends Strategy {\n /**\n * @param {Object} [options]\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {number} [options.networkTimeoutSeconds] If set, any network requests\n * that fail to respond within the timeout will result in a network error.\n */\n constructor(options = {}) {\n super(options);\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: '_handle',\n paramName: 'request',\n });\n }\n let error = undefined;\n let response;\n try {\n const promises = [\n handler.fetch(request),\n ];\n if (this._networkTimeoutSeconds) {\n const timeoutPromise = timeout(this._networkTimeoutSeconds * 1000);\n promises.push(timeoutPromise);\n }\n response = await Promise.race(promises);\n if (!response) {\n throw new Error(`Timed out the network response after ` +\n `${this._networkTimeoutSeconds} seconds.`);\n }\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n if (response) {\n logger.log(`Got response from network.`);\n }\n else {\n logger.log(`Unable to get a response from the network.`);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { NetworkOnly };\n","/*\n Copyright 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 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","classNameStr","expectedClassName","isReturnValueProblem","expectedMethod","entry","firstEntry","secondEntry","thrownErrorMessage","cacheNameId","name","methodName","expectedClass","normalizedRangeHeader","size","start","end","url","message","status","cacheName","origin","type","generatorFunction","code","details","messageGenerator","WorkboxError","constructor","errorCode","isArray","Array","hasMethod","object","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","toString","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","assign","ignoreSearch","cacheKeys","cacheKey","strippedCacheKeyURL","Deferred","promise","resolve","quotaErrorCallbacks","Set","executeQuotaErrorCallbacks","callback","timeout","ms","setTimeout","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","ExtendableEvent","_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","vary","headers","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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CA;IACA;IACA;IACA;IACA;IAOA;IACA;IACA;IACA;IACA;;IACA,MAAMc,QAAN,CAAe;IACX;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACI1M,EAAAA,WAAW,CAACyJ,OAAO,GAAG,EAAX,EAAe;IACtB;IACR;IACA;IACA;IACA;IACA;IACA;QACQ,IAAKjK,CAAAA,SAAL,GAAiB0H,UAAU,CAACM,cAAX,CAA0BiC,OAAO,CAACjK,SAAlC,CAAjB,CAAA;IACA;IACR;IACA;IACA;IACA;IACA;IACA;;IACQ,IAAA,IAAA,CAAKwK,OAAL,GAAeP,OAAO,CAACO,OAAR,IAAmB,EAAlC,CAAA;IACA;IACR;IACA;IACA;IACA;IACA;IACA;;IACQ,IAAA,IAAA,CAAKe,YAAL,GAAoBtB,OAAO,CAACsB,YAA5B,CAAA;IACA;IACR;IACA;IACA;IACA;IACA;IACA;;IACQ,IAAA,IAAA,CAAK5C,YAAL,GAAoBsB,OAAO,CAACtB,YAA5B,CAAA;IACH,GAAA;IACD;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;MACIhH,MAAM,CAACsI,OAAD,EAAU;IACZ,IAAA,MAAM,CAACkD,YAAD,CAAA,GAAiB,KAAKC,SAAL,CAAenD,OAAf,CAAvB,CAAA;IACA,IAAA,OAAOkD,YAAP,CAAA;IACH,GAAA;IACD;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;MACIC,SAAS,CAACnD,OAAD,EAAU;IACf;QACA,IAAIA,OAAO,YAAYY,UAAvB,EAAmC;IAC/BZ,MAAAA,OAAO,GAAG;IACN3G,QAAAA,KAAK,EAAE2G,OADD;YAEN1G,OAAO,EAAE0G,OAAO,CAAC1G,OAAAA;WAFrB,CAAA;IAIH,KAAA;;IACD,IAAA,MAAMD,KAAK,GAAG2G,OA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"} \ No newline at end of file