diff --git a/.gitignore b/.gitignore index c0f1fa6..f1b9ef4 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ .env.development.local .env.test.local .env.production.local +.env npm-debug.log* yarn-debug.log* diff --git a/package-lock.json b/package-lock.json index d0f3d32..9562f13 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@types/react": "^17.0.39", "@types/react-dom": "^17.0.13", "copy-to-clipboard": "^3.3.1", + "cuss": "^2.1.0", "firebase": "^9.14.0", "postscribe": "^2.0.8", "react": "^17.0.2", @@ -28,6 +29,7 @@ "react-select": "^5.2.2", "redux": "^4.2.0", "typescript": "^4.6.2", + "uid": "^2.0.2", "web-vitals": "^2.1.4" }, "devDependencies": { @@ -3526,6 +3528,14 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "engines": { + "node": ">=8" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -6561,6 +6571,15 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, + "node_modules/cuss": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cuss/-/cuss-2.1.0.tgz", + "integrity": "sha512-xqMndOHDNnwJFjqhVyMvH2ETnNN3p10C2vcndvNVc2DDDTDIAKMws3ZF/HR2q0d25eFi5sTKJPQRP/mcbhhAOA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -6941,14 +6960,6 @@ "tslib": "^2.0.3" } }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, "node_modules/dotenv-expand": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", @@ -14037,6 +14048,14 @@ } } }, + "node_modules/react-scripts/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, "node_modules/react-select": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.6.1.tgz", @@ -15921,6 +15940,17 @@ "node": ">=4.2.0" } }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", diff --git a/package.json b/package.json index 9b8c40d..7223818 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@types/react": "^17.0.39", "@types/react-dom": "^17.0.13", "copy-to-clipboard": "^3.3.1", + "cuss": "^2.1.0", "firebase": "^9.14.0", "postscribe": "^2.0.8", "react": "^17.0.2", @@ -24,6 +25,7 @@ "react-select": "^5.2.2", "redux": "^4.2.0", "typescript": "^4.6.2", + "uid": "^2.0.2", "web-vitals": "^2.1.4" }, "scripts": { diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png index 0ec3c0f..60728c9 100644 Binary files a/public/android-chrome-192x192.png and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png index 9d535d8..c721a77 100644 Binary files a/public/android-chrome-512x512.png and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png index 933b367..2fac2c1 100644 Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png index 73f17e8..8ac79bc 100644 Binary files a/public/favicon-16x16.png and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png index a04689f..a9f30ab 100644 Binary files a/public/favicon-32x32.png and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico index 7492465..d072770 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html index c97b9ad..20e7b3b 100644 --- a/public/index.html +++ b/public/index.html @@ -2,9 +2,10 @@ + - + diff --git a/public/manifest.json b/public/manifest.json index 71fd623..0978d74 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,7 +1,17 @@ { "short_name": "Heardle Italia", "name": "Heardle Italia", + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff", "icons": [ + { + "src": "maskable.png", + "size": "196x196", + "type": "image/png", + "purpose": "any maskable" + }, { "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", @@ -17,9 +27,5 @@ "sizes": "512x512", "type": "image/png" } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" + ] } \ No newline at end of file diff --git a/public/maskable.png b/public/maskable.png new file mode 100644 index 0000000..d381ec9 Binary files /dev/null and b/public/maskable.png differ diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png index 933b367..4d47fb1 100644 Binary files a/public/mstile-150x150.png and b/public/mstile-150x150.png differ diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg new file mode 100644 index 0000000..cace51f --- /dev/null +++ b/public/safari-pinned-tab.svg @@ -0,0 +1,15 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest index 989c40b..b20abb7 100644 --- a/public/site.webmanifest +++ b/public/site.webmanifest @@ -1,6 +1,6 @@ { - "name": "Heardle Italia", - "short_name": "Heardle Italia", + "name": "", + "short_name": "", "icons": [ { "src": "/android-chrome-192x192.png", diff --git a/src/App.css b/src/App.css index c5cc39d..e247a5f 100644 --- a/src/App.css +++ b/src/App.css @@ -37,6 +37,3 @@ } } -.adsbygoogle{ - display: block; -} diff --git a/src/App.tsx b/src/App.tsx index 69d6720..c410e31 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,43 +6,58 @@ import { GameContextProvider } from "./components/player/GameContext"; import { useEffect, useState } from "react"; import { getDailySong } from "./components/utils/dataService"; import { getAccessToken } from "./components/utils/spotifyService"; -import { SongConfig } from "./components/game/Models"; -import { getDayStr } from "./components/utils"; +import { SongConfig } from "./components/game/SongConfig"; +import Error from "./components/Error"; +import LoadingSpinner from "./components/LoadingSpinner"; -const APP_VERSION = process.env.REACT_APP_VERSION || "0" +const APP_VERSION = process.env.REACT_APP_VERSION || "0"; console.debug("v" + APP_VERSION); const currentVersion = localStorage.getItem("version"); if (currentVersion !== APP_VERSION) { - console.log(`version upgrated from ${currentVersion} to ${APP_VERSION}`) + console.log(`version upgrated from ${currentVersion} to ${APP_VERSION}`); localStorage.setItem("version", APP_VERSION); } const EMPTY_SONG_CONFIG: SongConfig = { trackName: "", breaks: [], - others: [] -} - + others: [], +}; function App() { - const [loading, setLoading] = useState(true); - const [currentSongConfig, setCurrentSongConfig] = useState(EMPTY_SONG_CONFIG); + const [currentSongConfig, setCurrentSongConfig] = + useState(EMPTY_SONG_CONFIG); const [accessToken, setAccessToken] = useState(""); + const [serverDate, setServerDate] = useState(""); + useEffect(() => { getAccessToken().then((value: any) => { setAccessToken(value); - getDailySong(value).then(songConfig => { - setCurrentSongConfig(songConfig); - setLoading(false) - }) - }); - - }, []) + console.debug("===== SERVER DATE CONTROL ===="); + + fetch("https://worldtimeapi.org/api/timezone/Europe/Rome") + .then((response) => response.json()) + .then((data) => { + let day: string = data.datetime.replaceAll("-", "/").substring(0, 10) + setServerDate(day); + + console.debug( + " - Server: " + + day + ); + + getDailySong(value, day).then((songConfig) => { + setCurrentSongConfig(songConfig); + setLoading(false); + }); + }); + }); + },[serverDate]) return (
@@ -50,22 +65,19 @@ function App() {
- - { - loading ? - <> -
-
- Caricamento... -
-
- . - : ( - - ) - } -
+ {loading ? ( + + ) : serverDate == "" ? ( + + ) : ( + + + + )}
); } diff --git a/src/Error.css b/src/Error.css new file mode 100644 index 0000000..25cd048 --- /dev/null +++ b/src/Error.css @@ -0,0 +1,19 @@ + + +.error-container { + padding: 28px 28px 30vh; + display: flex; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-flex: 1; + flex-grow: 1; + max-width: 370px; + width: 100%; + margin-left: auto; + margin-right: auto; + text-align: center; +} + diff --git a/src/Spinner.css b/src/Spinner.css new file mode 100644 index 0000000..42546ac --- /dev/null +++ b/src/Spinner.css @@ -0,0 +1,34 @@ +@keyframes spinner { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } + } + + .spinner-container { + padding: 28px 28px 30vh; + display: flex; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-flex: 1; + flex-grow: 1; + max-width: 370px; + width: 100%; + margin-left: auto; + margin-right: auto; + text-align: center; + } + + .loading-spinner { + width: 50px; + height: 50px; + border: 10px solid #f3f3f3; /* Light grey */ + border-top: 10px solid #383636; /* Black */ + border-radius: 50%; + animation: spinner 1.5s linear infinite; + } diff --git a/src/components/Error.jsx b/src/components/Error.jsx new file mode 100644 index 0000000..5de1c3b --- /dev/null +++ b/src/components/Error.jsx @@ -0,0 +1,14 @@ +import "../Error.css"; +import { errorString } from "./game/Constants"; + +function Error() { + return ( +
+

{errorString}

+ +
+ ); +} + +export default Error; \ No newline at end of file diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 74c8a78..2e8850f 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -1,9 +1,20 @@ import { useModalData } from "./modals/ModalContext"; +import { useState, useEffect } from "react"; function Header() { const { dispatch } = useModalData(); + const [uid, setUid] = useState(""); + useEffect(() => { + + setUid(localStorage.getItem("uid")); + + return () => { + setUid(""); + } + + }); const openAbout = () => { dispatch({ type: 'About' }) @@ -21,6 +32,10 @@ function Header() { dispatch({ type: 'HowToPlay' }) } + const openVersion = () => { + dispatch({ type: 'Versions' }) + } + return (
@@ -60,6 +75,15 @@ function Header() { + {uid? + : + }
diff --git a/src/components/LoadingSpinner.jsx b/src/components/LoadingSpinner.jsx new file mode 100644 index 0000000..fe534ac --- /dev/null +++ b/src/components/LoadingSpinner.jsx @@ -0,0 +1,12 @@ +import "../Spinner.css"; + +function LoadingSpinner() { + return ( +
+
+
+
+ ); +} + +export default LoadingSpinner; \ No newline at end of file diff --git a/src/components/game/Constants.ts b/src/components/game/Constants.ts index 834253a..cf4eced 100644 --- a/src/components/game/Constants.ts +++ b/src/components/game/Constants.ts @@ -14,4 +14,22 @@ export const GAME_RESULT_FAILED_MESSAGE = "Non ti preoccupare, chiedi ai tuoi am export const STRING_COMPARE_LOCALE = "it"; -export const SILENT_SONG = "https://w.soundcloud.com/player/?url=" + "https://soundcloud.com/bdsls01/silence-of-the-innocent"; \ No newline at end of file +export const SILENT_SONG = "https://w.soundcloud.com/player/?url=" + "https://soundcloud.com/bdsls01/silence-of-the-innocent"; + +export const icon = ["🥇","🥈","🥉"] + +export const errorString = "Oops... qualcosa è andato storto! Controlla le tue impostazioni di connessione e riprova!"; + +export const versions = [ + {name:"Indie", url: "http://indie.heardle.it/", tag: ""}, + {name:"90s", url: "", tag: "Coming Soon"}, + {name:"X Factor", url: "", tag: "Coming Soon"}, + {name:"Amici", url: "", tag: "Coming Soon"} +] + +export const banWords = [ + "rmx","unplugged", "reprise","remaster", "live", "remix", + "mix", "version", "edit", "remastered", "concert", "concerto", + "live", "studio", "registrazione", "dal vivo", "strumentale", + "session", "sanremo", "karaoke", "vrs", "performance" +]; diff --git a/src/components/game/Models.ts b/src/components/game/SongConfig.ts similarity index 100% rename from src/components/game/Models.ts rename to src/components/game/SongConfig.ts diff --git a/src/components/game/Utils.ts b/src/components/game/Utils.ts index e386df6..3b499f8 100644 --- a/src/components/game/Utils.ts +++ b/src/components/game/Utils.ts @@ -1,6 +1,6 @@ import { STRING_COMPARE_LOCALE } from './Constants'; -import { SongConfig } from './Models'; +import { SongConfig } from './SongConfig'; import { similarity } from '../utils' const checkStrings = (expected: string, userAnswer: string) => { diff --git a/src/components/modals/About.jsx b/src/components/modals/About.jsx index c8191e0..fa75d42 100644 --- a/src/components/modals/About.jsx +++ b/src/components/modals/About.jsx @@ -9,7 +9,7 @@ function About() { } return ( -
+
@@ -17,7 +17,7 @@ function About() {

Informazioni sull'app

-
-

Heardle Italia, indovina i più grandi successi Italiani.

Ogni giorno Heardle ti presenterà una clip di una canzone popolare italiana.

Indovinate nel minor numero possibile di tentativi e tornate ogni giorno per una nuova canzone.

+

Ogni settimana scala la classifica e conquista il podio per vedere il tuo nome immortalato sul nostro + Twitter. +

{/*

@@ -41,20 +43,20 @@ function About() {

diff --git a/src/components/modals/AllModals.jsx b/src/components/modals/AllModals.jsx index 18305e9..12c430f 100644 --- a/src/components/modals/AllModals.jsx +++ b/src/components/modals/AllModals.jsx @@ -1,8 +1,10 @@ import HowToPlay from "./HowToPlay"; +import Versions from "./Versions"; import Stats from "./Stats"; import About from "./About"; import Hearth from "./Hearth"; + function AllModals() { return ( @@ -11,6 +13,7 @@ function AllModals() { + ); diff --git a/src/components/modals/AllVersions.jsx b/src/components/modals/AllVersions.jsx new file mode 100644 index 0000000..807ff59 --- /dev/null +++ b/src/components/modals/AllVersions.jsx @@ -0,0 +1,27 @@ +import { versions } from "../game/Constants"; + + +function AllVersions() { + + return ( + <> +

Se ti piace Heardle Italia, adorerai :

+ {versions.map((v,i) => { + return ( +
+
+ {v.tag} + Heardle Italia {v.name}! + +
+
+ ) + })} + + ); +} + +export default AllVersions; \ No newline at end of file diff --git a/src/components/modals/Hearth.jsx b/src/components/modals/Hearth.jsx index 80f08dd..6112057 100644 --- a/src/components/modals/Hearth.jsx +++ b/src/components/modals/Hearth.jsx @@ -17,7 +17,7 @@ function Hearth() {

GRAZIE!

- -
- -
-
-
- - - - - -
-
-

- Indovina la canzone ascoltando solo una piccola parte. -

-
-
- {/*
-
- - - - - -
-
-

- Dopo aver digitato le canzone nella casella di ricerca e aver scelto uno dei risultati, premi il pulsante di invio. -

-
-
*/} -
-
- - - - -
-
-

I tentativi sbagliati o saltati sbloccano la parte successiva del brano.

-
-
-
-
- - - -
-
-

Indovina correttamente nel minor numero di tentativi possibili e condividi il tuo punteggio.

-
-
-
- -
-
-

- Per migliorare la tua esperienza utente questa applicazione usa: - Google, Spotify e - Soundcloud -

- + let nameString = convertToString(name); + if (nameString.length >= 3) { + for (const key in cuss) { + if ( + nameString.toLowerCase().includes(key) || + key.includes(nameString.toLowerCase()) + ) { + setIsValid(false); + return; + } + } + setIsValid(true); + } else setIsValid(false); + }; + + return ( +
+
+
+
+
+

+ Come giocare +

+
+
+
+
+
+ + + + + +
+
+

Indovina la canzone ascoltando solo una piccola parte.

+
+
+ {/*
+
+ + + + + +
+
+

+ Dopo aver digitato le canzone nella casella di ricerca e aver scelto uno dei risultati, premi il pulsante di invio. +

+
+
*/} +
+
+ + + + +
+
+

+ I tentativi sbagliati o saltati sbloccano la parte successiva + del brano. +

+
+
+
+
+ + + +
+
+

+ Indovina correttamente nel minor numero di tentativi possibili + e condividi il tuo punteggio. +

+
+
+
+

Inserisci il tuo Nome e scala la calssifica!

+
+
+ { + onChanged(event); + }} + /> +
+
+

+ Il nome non è modificabile per ora, quindi sceglilo bene! + {/* Google, Spotify e + Soundcloud */} +

- ); +
+
+ ); } -export default HowToPlay; \ No newline at end of file +export default HowToPlay; diff --git a/src/components/modals/ModalContext.js b/src/components/modals/ModalContext.js index 2aaa8d5..b6855f2 100644 --- a/src/components/modals/ModalContext.js +++ b/src/components/modals/ModalContext.js @@ -1,6 +1,5 @@ import * as React from 'react' -// const ThemeContext = React.createContext({ currentModal: "HowToPlay" }); const ModalContext = React.createContext(); function modalReducer(state, action) { @@ -8,6 +7,9 @@ function modalReducer(state, action) { case 'HowToPlay': { return { currentModal: "HowToPlay" } } + case 'Versions': { + return { currentModal: "Versions" } + } case 'Stats': { return { currentModal: "Stats" } } @@ -30,7 +32,7 @@ function modalReducer(state, action) { function ModalContextProvider({ children }) { let currentModal = "HowToPlay"; - if (localStorage.getItem("played") === "true") { + if (localStorage.getItem("firstTime") === "true") { currentModal = "" } diff --git a/src/components/modals/Stats.jsx b/src/components/modals/Stats.jsx index 70423fb..8617a08 100644 --- a/src/components/modals/Stats.jsx +++ b/src/components/modals/Stats.jsx @@ -1,222 +1,333 @@ import { useModalData } from "./ModalContext"; -import { useEffect } from 'react'; - const getDivScore = (scores, n) => { - let mTot = matches(scores); - - if(scores != null){ - - // fails n = 6 - if (n === 6){ - console.info("fails") - let fails = scores.fails; - let failsFract = fails/mTot; - - switch (true) { - case (failsFract > 0.9): return
; - case (failsFract > 0.8): return
; - case (failsFract > 0.7): return
; - case (failsFract > 0.6): return
; - case (failsFract > 0.5): return
; - case (failsFract > 0.4): return
; - case (failsFract > 0.3): return
; - case (failsFract > 0.2): return
; - case (failsFract > 0.1): return
; - case (failsFract > 0): return
; - default: return <> - } - return <> + let mTot = matches(scores); - } + if (scores != null) { + // fails n = 6 + if (n === 6) { + let fails = scores.fails; + let failsFract = fails / mTot; - console.info("scores") - let score = scores.guessList[n].count; - let scoreFract = score/mTot; - switch (true) { - case (scoreFract > 0.9): return
; - case (scoreFract > 0.8): return
; - case (scoreFract > 0.7): return
; - case (scoreFract > 0.6): return
; - case (scoreFract > 0.5): return
; - case (scoreFract > 0.4): return
; - case (scoreFract > 0.3): return
; - case (scoreFract > 0.2): return
; - case (scoreFract > 0.1): return
; - case (scoreFract > 0): return
; - default: return <> - } + switch (true) { + case failsFract > 0.9: + return ( +
+ ); + case failsFract > 0.8: + return ( +
+ ); + case failsFract > 0.7: + return ( +
+ ); + case failsFract > 0.6: + return ( +
+ ); + case failsFract > 0.5: + return ( +
+ ); + case failsFract > 0.4: + return ( +
+ ); + case failsFract > 0.3: + return ( +
+ ); + case failsFract > 0.2: + return ( +
+ ); + case failsFract > 0.1: + return ( +
+ ); + case failsFract > 0: + return ( +
+ ); + default: + return <>; + } + } - } + let score = scores.guessList[n].count; + let scoreFract = score / mTot; + + switch (true) { + case scoreFract > 0.9: + return ( +
+ ); + case scoreFract > 0.8: + return ( +
+ ); + case scoreFract > 0.7: + return ( +
+ ); + case scoreFract > 0.6: + return ( +
+ ); + case scoreFract > 0.5: + return ( +
+ ); + case scoreFract > 0.4: + return ( +
+ ); + case scoreFract > 0.3: + return ( +
+ ); + case scoreFract > 0.2: + return ( +
+ ); + case scoreFract > 0.1: + return ( +
+ ); + case scoreFract > 0: + return ( +
+ ); + default: + return <>; + } + } - return <> -} + return <>; +}; const matches = (scores) => { - if(scores != null) { - let sum = 0; - for ( let i = 0; i < scores.guessList.length; i++) { - sum = sum + scores.guessList[i].count; - } - sum = sum + scores.fails; - return sum; + if (scores != null) { + let sum = 0; + for (let i = 0; i < scores.guessList.length; i++) { + sum += scores.guessList[i].count; } - return 0; -} + sum += scores.fails; + return sum; + } + return 0; +}; const victory = (scores) => { - if(scores != null) { - let sum = 0; - for ( let i = 0; i < scores.guessList.length; i++) { - sum = sum + scores.guessList[i].count; - } - return sum; + if (scores != null) { + let sum = 0; + for (let i = 0; i < scores.guessList.length; i++) { + sum += scores.guessList[i].count; } - return 0; -} - + return sum; + } + return 0; +}; function Stats() { + const { + dispatch, + state: { currentModal }, + } = useModalData(); - const { dispatch, state: { currentModal } } = useModalData(); + // get info Game in localStorage + let scores = JSON.parse(localStorage.getItem("Game")); - // get info Game in localStorage - let scores = JSON.parse(localStorage.getItem("Game")); - - const onClose = () => { - dispatch({ type: 'Reset' }) - } + const onClose = () => { + dispatch({ type: "Reset" }); + }; - if (currentModal !== "Stats") { - return <> - } + if (currentModal !== "Stats") { + return <>; + } - const percentage = () => { - - if (victory(scores) != 0 && matches(scores) != 0) { - let p = ((victory(scores) / matches (scores)) * 100).toFixed(); - return p; - }else - return 0; + const percentage = () => { + if (victory(scores) != 0 && matches(scores) != 0) { + return ((victory(scores) / matches(scores)) * 100).toFixed(); + } else { + return 0; } + }; - return ( -
-
-
-
-
-

Statistiche

-
-
- -
-
-
-
-
-
{ (scores != null) ? scores.guessList[0].count : "0"}
-
-
-
-
{ (scores != null) ? scores.guessList[1].count : "0"}
-
-
-
-
{ (scores != null) ? scores.guessList[2].count : "0"}
-
-
-
-
{ (scores != null) ? scores.guessList[3].count : "0"}
-
-
-
-
{ (scores != null) ? scores.guessList[4].count : "0"}
-
-
-
-
{ (scores != null) ? scores.guessList[5].count : "0"}
-
-
-
-
{ (scores != null) ? scores.fails : "0"}
-
-
-
-
-
- {getDivScore(scores, 0)} -
-
-
-
-
- {getDivScore(scores, 1)} -
-
-
-
-
- { getDivScore(scores, 2)} -
-
-
-
-
- {getDivScore(scores, 3)} -
-
-
-
-
- {getDivScore(scores, 4)} -
-
-
-
-
- {getDivScore(scores, 5)} -
-
-
-
-
- {getDivScore(scores, 6)} -
-
- - - - - -
-
-
-
-
-
{matches(scores)}
-
Partite
-
-
-
{victory(scores)}
-
Vittorie
-
-
-
{percentage()}%
-
Percentuale di vincita
-
-
-
+ return ( +
+
+
+
+
+

+ Statistiche +

+
+
+ +
+
+
+
+
+
+ {scores != null ? scores.guessList[0].count : "0"} +
+
+
+
+
+ {scores != null ? scores.guessList[1].count : "0"} +
+
+
+
+
+ {scores != null ? scores.guessList[2].count : "0"} +
+
+
+
+
+ {scores != null ? scores.guessList[3].count : "0"} +
+
+
+
+
+ {scores != null ? scores.guessList[4].count : "0"} +
+
+
+
+
+ {scores != null ? scores.guessList[5].count : "0"} +
+
+
+
+
+ {scores != null ? scores.fails : "0"} +
+
+
+
+
+
+ {getDivScore(scores, 0)} +
+
+ +
+
+
+
+ {getDivScore(scores, 1)} +
+
+ +
+
+
+
+ {getDivScore(scores, 2)} +
+
+ +
+
+
+
+ {getDivScore(scores, 3)} +
+
+ +
+
+
+
+ {getDivScore(scores, 4)} +
+
+ +
+
+
+
+ {getDivScore(scores, 5)} +
+
+ +
+
+
+
+ {getDivScore(scores, 6)} +
+
+ + + + +
+
+
+
+
+
{matches(scores)}
+
Partite
+
+
+
{victory(scores)}
+
Vittorie
+
+
+
{percentage()}%
+
+ Percentuale di vincita +
+
- ); +
+
+ ); } -export default Stats; \ No newline at end of file +export default Stats; diff --git a/src/components/modals/Versions.jsx b/src/components/modals/Versions.jsx new file mode 100644 index 0000000..6173449 --- /dev/null +++ b/src/components/modals/Versions.jsx @@ -0,0 +1,39 @@ +import { useModalData } from "./ModalContext"; +import AllVersions from "./AllVersions"; + +function Versions() { + + const { dispatch, state: { currentModal } } = useModalData(); + + if (currentModal !== "Versions") { + return <> + } + + return ( +
+
+
+
+
+

SCOPRI ALTRE VERSIONI

+
+
+ +
+
+ +
+
+
+ + ); +} + +export default Versions; \ No newline at end of file diff --git a/src/components/music/MusicPlayer.tsx b/src/components/music/MusicPlayer.tsx index 3343c0a..797f1d7 100644 --- a/src/components/music/MusicPlayer.tsx +++ b/src/components/music/MusicPlayer.tsx @@ -1,7 +1,5 @@ import React, { useEffect, useState } from "react"; - import { SILENT_SONG } from '../game/Constants'; - import PlayerProgress from "./PlayerProgress"; import MusicPlayerControls from "./MusicPlayerControls"; import { useGameData } from "../player/GameContext"; diff --git a/src/components/music/PlayerProgress.jsx b/src/components/music/PlayerProgress.jsx index 5682e9b..9bb9d10 100644 --- a/src/components/music/PlayerProgress.jsx +++ b/src/components/music/PlayerProgress.jsx @@ -3,10 +3,6 @@ function PlayerProgress({ currentPositionInMilis, playerSlicePercentagesInSecond const availablePercentage = (playerSlicePercentagesInSeconds[openedStep]); - // const songLengthInMilis = maxStepLength * 1000; - // const percentage = (currentPositionInMilis / songLengthInMilis) * 100; - - // shortened expression; const percentage = (currentPositionInMilis / (maxStepLength * 10)); return ( @@ -20,8 +16,6 @@ function PlayerProgress({ currentPositionInMilis, playerSlicePercentagesInSecond
{ playerSlicePercentagesInSeconds.map((percentage, index) => { - // console.log(index); - // console.log(openedStep); if(index === openedStep) return
else if( index > openedStep) diff --git a/src/components/player/GameContext.js b/src/components/player/GameContext.js index c37b069..3ac7f2a 100644 --- a/src/components/player/GameContext.js +++ b/src/components/player/GameContext.js @@ -213,15 +213,14 @@ function modalReducer(state, action) { return latestState; } -function GameContextProvider({ children }) { +function GameContextProvider({ date, children }) { - let day = getDayStr(); //load from localstorage const [state, dispatch] = React.useReducer(modalReducer, loadState()) const value = {state, dispatch} React.useEffect(() => { - if(day.localeCompare(state.date) != 0) - dispatch({type: 'RESET'}) + if(date.replaceAll("/","").localeCompare(state.date) != 0) + dispatch({type: 'RESET'}) },[]) return {children} } diff --git a/src/components/player/GameResult.tsx b/src/components/player/GameResult.tsx index 1a5a44b..0dcf4d8 100644 --- a/src/components/player/GameResult.tsx +++ b/src/components/player/GameResult.tsx @@ -1,31 +1,16 @@ import { useGameData } from "./GameContext"; import copy from 'copy-to-clipboard'; import NextTimer from "./NextTimer"; -import { useState } from "react"; -import { GAME_RESULT_FAILED_MESSAGE, GAME_RESULT_MESSAGES, HEARDLE_SPOTIFY_LIST_URL, HEARDLE_IT_WEB_URL } from "../game/Constants"; -import { getDayFormattedText } from "../utils"; +import NextTimerScore from "./NextTimerScore"; +import { useState, useEffect } from "react"; +import { GAME_RESULT_FAILED_MESSAGE, GAME_RESULT_MESSAGES, HEARDLE_IT_WEB_URL } from "../game/Constants"; +import { buildScore, getDayFormattedText } from "../utils"; +import Table from "./Scoreboard"; import Banner from "../Banner"; -const buildScore = (guessList: any[]): number => { - let max = 100; - - const isCorrect = guessList.some((guess) => guess.isCorrect); - if (isCorrect === false) { - return 0; - } - - // punti persi: 12, 10, 8, 6, 4 - for (let i = 0; i < guessList.length; i++) { - if (guessList[i].isSkipped) { - max = max - ((guessList.length - i) * 2); - } - } - - return max; -} const buildBoxIcons = (guessList: any[]) => { - let icons = guessList.map(function(item, i){ + let icons = guessList.map(function (item, i) { if (item.isSkipped) { return "⬛️" } @@ -42,17 +27,17 @@ const buildBoxIcons = (guessList: any[]) => { } const buildResultIcons = (guessList: any[]) => { - let icons = guessList.map(function(item, i){ + let icons = guessList.map(function (item, i) { if (item.isSkipped) { - return

+ return

} if (item.isCorrect) { - return

+ return

} if (item.isSkipped === false && item.isCorrect === false && item.answer) { - return

+ return

} - return

+ return

}); return icons; @@ -73,19 +58,18 @@ const getSpeakerIcon = (score: number) => { const getResultIcons = (guessList: any[]) => { let score = buildScore(guessList); - console.log("score:", score) + console.debug("score:", score) return buildResultIcons(guessList); } const getBoxIcons = (guessList: any[]) => { let score = buildScore(guessList); - console.log("score:", score) + console.debug("score:", score) return getSpeakerIcon(score) + buildBoxIcons(guessList); } const buildShareText = (guessList: any[]) => { let score = buildScore(guessList); - console.debug(score) let icons = getBoxIcons(guessList); let todayStr = getDayFormattedText(); @@ -93,13 +77,29 @@ const buildShareText = (guessList: any[]) => { return `${icons} \n #HeardleItalia ${todayStr} \n \n ${HEARDLE_IT_WEB_URL}`; } -function GameResult({ songConfig }: { songConfig: any }) { + + +function GameResult({ songConfig, date }: { songConfig: any, date: string }) { + + const [weeks, setWeeks] = useState(0); const { state: { guessList } } = useGameData(); const guessScore = guessList.findIndex((guess: any) => guess.isCorrect); const [showCopied, setShowCopied] = useState(false); + useEffect(() => { + const interval = setInterval(() => { + const today = new Date(date); + const startOfYear = new Date(today.getFullYear(), 4, 1); // 1° maggio dell'anno corrente + const diffTime = today.getTime() - startOfYear.getTime(); + const diffWeeks = Math.floor(diffTime / (7 * 24 * 60 * 60 * 1000)); + setWeeks(diffWeeks); + }, 1000); + + return () => clearInterval(interval); + }, []); + const onCopyClicked = () => { const text = buildShareText(guessList); setShowCopied(true); @@ -113,18 +113,18 @@ function GameResult({ songConfig }: { songConfig: any }) { }); } - const onTwitterShareClicked = () => { - const text = buildShareText(guessList); - const url = `https://twitter.com/intent/tweet?original_referer=${HEARDLE_IT_WEB_URL}&text=${encodeURIComponent(text)}`; + const onTwitterShareClicked = () => { + const text = buildShareText(guessList); + const url = `https://twitter.com/intent/tweet?original_referer=${HEARDLE_IT_WEB_URL}&text=${encodeURIComponent(text)}`; - const winProxy = window.open(url, '_blank'); - if (winProxy) { - winProxy.focus(); - } - } + const winProxy = window.open(url, '_blank'); + if (winProxy) { + winProxy.focus(); + } + } return ( - +
@@ -139,14 +139,14 @@ function GameResult({ songConfig }: { songConfig: any }) {
}
- +
-
- { - getResultIcons(guessList) - } -
+
+ { + getResultIcons(guessList) + } +
{ guessScore > -1 && guessScore < 6 && <> @@ -157,36 +157,38 @@ function GameResult({ songConfig }: { songConfig: any }) { guessScore < 0 &&

{GAME_RESULT_FAILED_MESSAGE}

} - -
- -
-
- + +
+

Settimana #{weeks}

- +
+ + + + - + + ); } -export default GameResult; +export default GameResult; \ No newline at end of file diff --git a/src/components/player/NextTimer.jsx b/src/components/player/NextTimer.jsx index bac66dc..c8dfc7b 100644 --- a/src/components/player/NextTimer.jsx +++ b/src/components/player/NextTimer.jsx @@ -2,18 +2,31 @@ import { useEffect, useState } from "react"; function NextTimer() { const [countDown, setCountDown] = useState(); - const [countDownTitle, setCountDownTitle] = useState(); + const [countDownTitle, setCountDownTitle] = useState(); + const [serverDate, setServerDate] = useState(""); useEffect(() => { - let current = new Date(); + fetch("https://worldtimeapi.org/api/timezone/Europe/Rome").then( + (response) => { + response.json().then((data) => { + setServerDate(new Date(data.datetime)); + }); + } + ); + }, []); + + useEffect(() => { + let today = new Date(serverDate); + let current = new Date(serverDate); let countDownDate = current.setHours(23, 59, 59, 999); - // let countDownDate = current.setHours(16, 1, 0, 999); - let lastMinute = 0; - let interval = setInterval(function () { + let lastMinute = 0; - let now = new Date().getTime(); - let timeLeft = countDownDate - now; + let interval = setInterval(function() { + console.debug(""); + console.debug("===== SERVER TIMER NEXT ===="); + + let timeLeft = countDownDate - today.getTime(); if (timeLeft >= 0) { let hours = Math.floor((timeLeft % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); @@ -27,6 +40,15 @@ function NextTimer() { const result = hours + ":" + minutes + ":" + seconds; setCountDown(result); + console.debug( + hours + + " ore " + + minutes + + " min " + + seconds + + " sec" + ); + if (lastMinute !== minutes) { const resultDetailed = hours + " ore " + minutes + " minuti "; setCountDownTitle(resultDetailed); @@ -41,6 +63,10 @@ function NextTimer() { }, 2000); } + + today.setSeconds(today.getSeconds() + 1); + setServerDate(today) + }, 1000); return function cleanup() { diff --git a/src/components/player/NextTimerScore.jsx b/src/components/player/NextTimerScore.jsx new file mode 100644 index 0000000..e6b2217 --- /dev/null +++ b/src/components/player/NextTimerScore.jsx @@ -0,0 +1,75 @@ +import { useEffect, useState } from "react"; +import { resetAllScoreOfUsers } from "../utils/firebaseRealtime"; + +function NextTimerScore() { + const [serverDate, setServerDate] = useState(""); + + useEffect(() => { + fetch("https://worldtimeapi.org/api/timezone/Europe/Rome").then( + (response) => { + response.json().then((data) => { + setServerDate(data.datetime); + }); + } + ); + }, []); + + useEffect(() => { + const today = new Date(serverDate); + const nextMonday = new Date( + today.getFullYear(), + today.getMonth(), + today.getDate() + ((7 + 1 - today.getDay()) % 7) + ); + + let interval = setInterval(function() { + console.debug(""); + console.debug("===== SERVER TIMER SCORE ===="); + + let timeUntilMonday = nextMonday.getTime() - today.getTime(); + + let days = Math.floor(timeUntilMonday / (1000 * 60 * 60 * 24)); + let hours = Math.floor( + (timeUntilMonday % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60) + ); + let minutes = Math.floor( + (timeUntilMonday % (1000 * 60 * 60)) / (1000 * 60) + ); + let seconds = Math.floor((timeUntilMonday % (1000 * 60)) / 1000); + + console.debug( + today.toLocaleDateString("it-IT") + + " -> " + + nextMonday.toLocaleDateString("it-IT") + + " mancano:" + ); + console.debug( + days + + " giorni " + + hours + + " ore " + + minutes + + " min " + + seconds + + " sec" + ); + + if (timeUntilMonday < 0) { + clearInterval(interval); + setTimeout(() => { + console.debug("---- RESET SCORE ----") + resetAllScoreOfUsers(); + }, 1500); + } + + today.setSeconds(today.getSeconds() + 1); + + } , 1000); + + return () => clearInterval(interval); + }); + + return <>; +} + +export default NextTimerScore; diff --git a/src/components/player/PlayerContainer.tsx b/src/components/player/PlayerContainer.tsx index 4dd6f6e..c5e3426 100644 --- a/src/components/player/PlayerContainer.tsx +++ b/src/components/player/PlayerContainer.tsx @@ -1,144 +1,223 @@ -import { useEffect, useState } from "react"; - -import AsyncSelect from 'react-select/async'; - +import { useState } from "react"; +import AsyncSelect from "react-select/async"; import GamePlayground from "./GamePlayground"; import GameResult from "./GameResult"; - import { useGameData } from "./GameContext"; - import MusicPlayer from "../music/MusicPlayer"; import { checkAnswer } from "../game/Utils"; import { OnChangeValue } from "react-select"; -import { SongConfig } from "../game/Models"; +import { SongConfig } from "../game/SongConfig"; import { getList } from "../utils/spotifyService"; - - -function PlayerContainer({ songConfig, accessToken }: {songConfig: SongConfig, accessToken: string}) { - - const [answer, setAnswer] = useState(""); - const [selectedSong, setSelectedSong] = useState(""); - - const { dispatch, state: { openedStep, finished } } = useGameData(); - - const onSkipClicked = () => { - dispatch(({ type: "SKIP", payload: { step: openedStep } })) +import { getUserByUid, updateUserByUid } from "../utils/firebaseRealtime"; +import { buildScore } from "../utils"; + +function PlayerContainer({ + songConfig, + accessToken, + date, +}: { + songConfig: SongConfig; + accessToken: string; + date: string; +}) { + const [answer, setAnswer] = useState(""); + const [selectedSong, setSelectedSong] = useState(""); + + const { + dispatch, + state: { openedStep, finished, guessList }, + } = useGameData(); + + const onSkipClicked = () => { + dispatch({ type: "SKIP", payload: { step: openedStep } }); + }; + + const onSendClicked = () => { + if (!answer) { + return; } - const onSendClicked = () => { - if (!answer) { - return; - } + let win = checkAnswer(songConfig, answer); + console.debug("checkAnswer ", win); + + if (win) { + dispatch({ + type: "SUBMIT-CORRRECT", + payload: { step: openedStep, answer: answer }, + }); + updateScore(); + } else { + dispatch({ + type: "SUBMIT-WRONG", + payload: { step: openedStep, answer: answer }, + }); + } - let score = checkAnswer(songConfig, answer); - console.debug("checkAnswer ", score) + setAnswer(""); + setSelectedSong(""); + }; - if (score) { - dispatch(({ type: "SUBMIT-CORRRECT", payload: { step: openedStep, answer: answer } })); - } else { - dispatch(({ type: "SUBMIT-WRONG", payload: { step: openedStep, answer: answer } })); - } + const onFinishClicked = () => { + dispatch({ type: "FINISH" }); + }; - setAnswer(""); - setSelectedSong("") + const loadList = (inputValue: string, callback: (res: any[]) => void) => { + if (!inputValue || inputValue.trim().length < 1) { + callback([]); + return; } - const onFinishClicked = () => { - dispatch(({ type: "FINISH" })); - } + getList(accessToken, inputValue, callback); + }; - - const loadList = (inputValue: string, callback: (res: any[]) => void) => { - - if (!inputValue || inputValue.trim().length < 3) { - callback([]); - return; - } - - getList(accessToken, inputValue, callback); - + const handleInputChange = (newValue: OnChangeValue) => { + if (newValue) { + setSelectedSong(newValue); + console.debug("value:", newValue.value); + setAnswer(newValue.value); } - - const handleInputChange = (newValue: OnChangeValue) => { - if (newValue) { - console.log(newValue) - setSelectedSong(newValue); - console.log("value:", newValue.value) - setAnswer(newValue.value); - } - }; - - return ( - <> - { - finished ? - () : - () - } - - { - finished === false && -
-
-
-
-
- null, - IndicatorSeparator: () => null - }} - noOptionsMessage={({ inputValue }) => !inputValue.trim() ? "Inserisci almeno 3 caratteri per cercare" : "Nessuna Corrispondenza"} - placeholder={"Inserisci il titolo della canzone"} - loadOptions={loadList} - value={selectedSong} - // blurInputOnSelect={true} - // inputProps={{ 'aria-labelledby': 'react-select-2-placeholder' }} - menuPortalTarget={document.body} - styles={{ - menuPortal: base => ({ ...base, zIndex: 9999 }), - placeholder: base => ({ ...base, color: "black" }), - noOptionsMessage: base => ({ ...base, color: "red" }), - loadingMessage: base => ({ ...base, color: "black" }), - }} - onChange={handleInputChange} - maxMenuHeight={150}/> -
-
-
- { - openedStep < songConfig.breaks.length - 1 && - - } - { - openedStep === songConfig.breaks.length - 1 && - - } - { - openedStep < songConfig.breaks.length && - - } -
-
-
+ }; + + const updateScore = async () => { + const uid = localStorage.getItem("uid"); + let points = buildScore(guessList); + let user = (await getUserByUid(uid)).val(); + user.score = user.score + points; + if (uid != null) updateUserByUid(uid, user); + }; + + const customStyles = { + control: (provided: any, state: any) => ({ + ...provided, + border: state.isFocused ? "1px solid #1E9102" : "1px solid black", + boxShadow: state.isFocused ? "0 0 0 1px #1E9102" : "none", + "&:hover": { + border: "0 0 0 2px solid #1E9102", + }, + }), + menu: (provided: any, state: any) => ({ + ...provided, + backgroundColor: "white", + color: "black", + }), + option: (provided: any, state: any) => ({ + ...provided, + backgroundColor: state.isSelected + ? "#1E9102" + : state.isFocused + ? "lightgreen" + : "white", + color: "black", + border: "1px solid #4F4F4F" + }), + placeholder: (provided: any, state: any) => ({ + ...provided, + color: "black", + }), + noOptionsMessage: (provided: any, state: any) => ({ + ...provided, + color: "red", + }), + loadingMessage: (provided: any, state: any) => ({ + ...provided, + color: "black", + }), + menuList: (provided: any, state: any) => ({ + ...provided, + "&::-webkit-scrollbar": { + width: "8px", + height: "8px" + }, + "&::-webkit-scrollbar-thumb": { + backgroundColor: "#4F4F4F" + }, + "&::-webkit-scrollbar-track": { + backgroundColor: "black" + }, + "&::-webkit-scrollbar-corner": { + backgroundColor: "black" + }, + scrollbarColor: "#4F4F4F black", + scrollbarWidth: "thin" + }) + }; + + return ( + <> + {finished ? : } + + {finished === false && ( +
+
+
+
+
+ null, + IndicatorSeparator: () => null, + }} + noOptionsMessage={({ inputValue }) => + !inputValue.trim() + ? "Inserisci almeno 1 carattere per cercare" + : "Nessuna Corrispondenza" + } + placeholder={"La conosci? Cerca per artista / titolo"} + loadOptions={loadList} + value={selectedSong} + blurInputOnSelect={true} + //input={{ 'aria-labelledby': 'react-select-2-placeholder' }} + menuPortalTarget={document.body} + /* styles={{ + menuPortal: (base) => ({ ...base, zIndex: 9999 }), + placeholder: (base) => ({ ...base, color: "#4F4F4F" }), + noOptionsMessage: (base) => ({ ...base, color: "red" }), + loadingMessage: (base) => ({ ...base, color: "black" }), + }} */ + styles={customStyles} + onChange={handleInputChange} + maxMenuHeight={200} + />
- } - - ); +
+
+ {openedStep < songConfig.breaks.length - 1 && ( + + )} + {openedStep === songConfig.breaks.length - 1 && ( + + )} + {openedStep < songConfig.breaks.length && ( + + )} +
+
+
+
+ )} + + ); } -export default PlayerContainer; \ No newline at end of file +export default PlayerContainer; diff --git a/src/components/player/Scoreboard.jsx b/src/components/player/Scoreboard.jsx new file mode 100644 index 0000000..a84ed36 --- /dev/null +++ b/src/components/player/Scoreboard.jsx @@ -0,0 +1,168 @@ +import { useEffect, useState } from "react"; +import { getDB } from "../utils/firebaseRealtime"; +import LoadingSpinner from '../LoadingSpinner'; +import {icon} from "../game/Constants"; +import { buildScore } from "../utils"; +import { onValue, ref } from "@firebase/database"; +import { useGameData } from "./GameContext"; + +function Table() { + + const myUID = localStorage.getItem("uid"); + + const [usersTemp, setUsersTemp] = useState([]) + const [userTemp, setUserTemp] = useState([]) + + const [pos, setPos] = useState(-1) + const [loading, setLoading] = useState(false) + + const { state: { guessList } } = useGameData(); + + let todayScore = buildScore(guessList); + + const [bests, setBests] = useState([]); + + + function getUsersRT () { + + console.debug('getUsersRT') + + setLoading(true) + onValue(ref(getDB(),"users/"), (snapshot) => { + let users = []; + let bests = []; + snapshot.forEach((u) => { + let k = u.key; + let data = u.val(); + users.push({"uid": k, "data": data}) + }) + + let res = users.sort((a, b) => b.data.score-a.data.score); + setUsersTemp(res) + + setPos(res.findIndex((d) => d.uid === myUID)) + + let LENGTH = 0; + for(let i = 0; i < 3 && LENGTH < res.length; i++) { + let SCORE = res[LENGTH].data.score; + + let allU = users.filter((a) => a.data.score == SCORE); + + LENGTH += allU.length; + bests.push({"key": i, "value": allU}) + } + + bests.map((value, i) => { + value.value.forEach((uid) => { + uid.uid == myUID ? setPos(i) : pos; + }) + }) + + setBests(bests); + setLoading(false); + }); + + } + + + function getUserRTByUid() { + + console.debug('getUserRTByUid') + + onValue(ref(getDB(),"users/" + myUID), (snapshot) => { + setUserTemp(snapshot.val()) + }); + + } + + useEffect(() => { + + getUsersRT(); + getUserRTByUid(); + + },[]) + + + const ScrollingTableRow = () => { + + console.debug("---------- RT -----------") + console.debug("USER RT: ") + console.debug(userTemp) + console.debug("USERS RT:") + console.debug(usersTemp) + + + console.debug("CLASSIFICA: ") + let names = []; + for(let i = 0; i < bests.length; i++) { + let tmp = ""; + for(let j = 0; j < bests[i].value.length; j++) { + tmp = bests[i].value.map(item => item.data.name).join(', '); + } + names.push(tmp); + console.debug(names); + } + + + return ( + <> + {bests.map((value, i) => { + return ( +
+ + + + + )})} + + ); + }; + + + + return ( + <> + {loading ? + : +
+
{icon[i]} +
+ { + 1 ? 'animation' : ''}`} + > + {names[i]} + + } +
+
{value.value[0].data.score}
+ + + + + + + + + + + + + + + + + + + + + + +
NomePunti
{pos < 3 ? icon[pos] : pos+1+"°"}{userTemp.name}{userTemp.score}+{todayScore}
+
+ } + + ); + } + + export default Table; \ No newline at end of file diff --git a/src/components/utils/constants.js b/src/components/utils/artists.js similarity index 98% rename from src/components/utils/constants.js rename to src/components/utils/artists.js index 2712f40..3bea909 100644 --- a/src/components/utils/constants.js +++ b/src/components/utils/artists.js @@ -54,7 +54,6 @@ export const artists = [ "lazza", "lowlow", "massimo pericolo", - "tha supreme", "thasup", "shiva", "nayt", @@ -151,7 +150,7 @@ export const artists = [ "valerio scanu", "anna oxa", "maria scicolone", - "emma marrone", + "emma", "arisa", "pinguini tattici nucleari", "rovere", @@ -198,3 +197,4 @@ export const artists = [ "colapesce", "baby k" ] + diff --git a/src/components/utils/dataService.ts b/src/components/utils/dataService.ts index 08b786f..269d0fc 100644 --- a/src/components/utils/dataService.ts +++ b/src/components/utils/dataService.ts @@ -1,11 +1,9 @@ import { getDayStr, getDayStrAsPath } from "."; -import { SongConfig } from "../game/Models"; -import { artists } from "../utils/constants"; +import { SongConfig } from "../game/SongConfig"; +import { artists } from "../utils/artists"; import { getDatabase, ref, onValue, set } from "firebase/database"; import "./firebase"; -import { collapseTextChangeRangesAcrossMultipleVersions } from "typescript"; -import { valueContainerCSS } from "react-select/dist/declarations/src/components/containers"; - +import { banWords } from "../game/Constants"; interface Map { [key: string]: any @@ -61,10 +59,11 @@ async function fetchSong(accessToken:string, artist: string): Promise { } +export const getDailySong = (accessToken: string, dayPath: string): Promise => { + + //let day = getDayStr() -export const getDailySong = (accessToken: string): Promise => { - const banWords = ["sanremo", "rmx","unplugged", "reprise","remaster", "live", "remix", "mix", "version", "edit", "remastered", "concert", "concerto", "live", "studio", "registrazione", "dal vivo", "strumentale", "session", "original"]; // words to filter out - let day = getDayStr() + let day = dayPath.replaceAll("/",""); let artist = artists[Math.floor(Math.random() * artists.length)]; let hardCodedSong: any; @@ -75,7 +74,7 @@ export const getDailySong = (accessToken: string): Promise => { return new Promise(async (resolve, reject) => { - let day = getDayStrAsPath(); + //let day = getDayStrAsPath(); const database = getDatabase(); @@ -106,7 +105,7 @@ export const getDailySong = (accessToken: string): Promise => { trackname = trackname.replaceAll("!", ""); hardCodedSong = { - day: day, + day: dayPath, songLength: 30, breaks: [1, 2, 4, 8, 16, 30], trackName: trackname, @@ -121,14 +120,14 @@ export const getDailySong = (accessToken: string): Promise => { }; - const songRef = ref(database, 'songs/' + day); + const songRef = ref(database, 'songs/' + dayPath); onValue(songRef, (snapshot) => { const data = snapshot.val(); if (data) { resolve(data); } else { - setSong(day, hardCodedSong) + setSong(dayPath, hardCodedSong) resolve(hardCodedSong) } }, (err) => { diff --git a/src/components/utils/firebase.ts b/src/components/utils/firebase.ts index 6af6a95..39064dd 100644 --- a/src/components/utils/firebase.ts +++ b/src/components/utils/firebase.ts @@ -1,38 +1,17 @@ -// import { initializeApp } from 'firebase/app'; - -// const firebaseConfig = { -// apiKey: process.env.REACT_APP_FIREBASE_API_KEY, -// authDomain: "heardleturkish.firebaseapp.com", -// databaseURL: "https://heardleturkish-default-rtdb.europe-west1.firebasedatabase.app", -// projectId: "heardleturkish", -// storageBucket: "heardleturkish.appspot.com", -// messagingSenderId: "910815340133", -// appId: "1:910815340133:web:864454cc6382cf93c0488c" -// } - -// const app = initializeApp(firebaseConfig); - -// export default app; -// Import the functions you need from the SDKs you need -import { initializeApp } from 'firebase/app'; +import { initializeApp} from 'firebase/app'; import { getAnalytics } from "firebase/analytics"; -// TODO: Add SDKs for Firebase products that you want to use -// https://firebase.google.com/docs/web/setup#available-libraries -// Your web app's Firebase configuration -// For Firebase JS SDK v7.20.0 and later, measurementId is optional const firebaseConfig = { - apiKey: "AIzaSyAtjRSPq-Pt8dCMBOQiclgZv3oaEK1wn9A", - authDomain: "heardleita.firebaseapp.com", - databaseURL: "https://heardleita-default-rtdb.europe-west1.firebasedatabase.app", - projectId: "heardleita", - storageBucket: "heardleita.appspot.com", - messagingSenderId: "936930568527", - appId: "1:936930568527:web:0142beeb259f0ee9657d3a", - measurementId: "G-CDLP5D6VT1" + apiKey: process.env.REACT_APP_FIREBASE_API_KEY, + authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN, + databaseURL: process.env.REACT_APP_DATABASE_URL, + projectId: process.env.REACT_APP_PROJECT_ID, + storageBucket: process.env.REACT_APP_STORAGE_BUCKET, + messagingSenderId: process.env.REACT_APP_MESSAGGING, + appId: process.env.REACT_APP_APP_ID, + measurementId: process.env.REACT_APP_MEASUREMENT_ID }; // Initialize Firebase const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app); - diff --git a/src/components/utils/firebaseRealtime.ts b/src/components/utils/firebaseRealtime.ts new file mode 100644 index 0000000..17ba19e --- /dev/null +++ b/src/components/utils/firebaseRealtime.ts @@ -0,0 +1,49 @@ +import { getDatabase, ref, set, get, update} from "firebase/database"; +import { uid } from "uid"; +import './firebase'; + +const db = getDatabase(); + +function getDB() { + return db; +} + +async function setUser(user: string, score: any) { + + var u = uid(16); + localStorage.setItem("uid", u); + localStorage.setItem("user", user); + + await set(ref(db, "users/" + u), score); + + return u; +} + +const getUsers = async () => { + + return await get(ref(db,"users/")); + +} + +const getUserByUid = async (uid: any) => { + + return await get(ref(db,"users/" + uid)); + +} + + +async function updateUserByUid(uid: any, score: any) { + await update(ref(db, "users/" + uid), score); +} + +async function resetAllScoreOfUsers() { + await get(ref(db, "users/")).then((snapshot) => { + snapshot.forEach((u) => { + update(ref(db,"users/" + u.key), {score: 0}) + }) + }); +} + + + +export {getDB, setUser, getUsers, getUserByUid, updateUserByUid, resetAllScoreOfUsers}; \ No newline at end of file diff --git a/src/components/utils/index.ts b/src/components/utils/index.ts index d6b553f..553079e 100644 --- a/src/components/utils/index.ts +++ b/src/components/utils/index.ts @@ -92,5 +92,26 @@ function editDistance(s1: string, s2: string) { return costs[s2.length]; } + +const buildScore = (guessList: any[]): number => { + let max = 100; + let points = [82, 68, 54, 36, 12]; + let i; + + // punti persi: 12, 10, 8, 6, 4 + for (i = 0; i < guessList.length; i++) { + if(guessList[i].isCorrect === true) + break; + if (guessList[i].isSkipped || guessList[i].isCorrect === false) { + max = points[i]; + } + } + + if(i == 6) + return 0; + + return max; +} + -export { getDayStr, getDayStrAsPath, getDayFormattedText, similarity } \ No newline at end of file +export { getDayStr, getDayStrAsPath, getDayFormattedText, similarity, buildScore } \ No newline at end of file diff --git a/src/components/utils/spotifyService.ts b/src/components/utils/spotifyService.ts index 18453a6..ad99803 100644 --- a/src/components/utils/spotifyService.ts +++ b/src/components/utils/spotifyService.ts @@ -1,8 +1,5 @@ -import { resolveCaa } from "dns"; -import { useState } from "react"; -import { artists } from "../utils/constants"; - -const CLIENT_BASE64 = "Y2ZhZmZmNTM0YjA5NDQ5NTkyNDI4OTk3ZTc4YWNmMzg6M2ZkOWI1ZjNlMmU1NGQyNWFlZGU3ODYyMjczMWNmYjc=" +import { banWords } from "../game/Constants"; +import { artists } from "../utils/artists"; type artist = { name: string @@ -14,8 +11,6 @@ type SpotifyResult = { name: string } -const banWords = ["rmx","unplugged", "reprise","remaster", "live", "remix", "mix", "version", "edit", "remastered", "concert", "concerto", "live", "studio", "registrazione", "dal vivo", "strumentale", "session"]; // words to filter out - export const getAccessToken = (): Promise => { return new Promise((resolve, reject) => { @@ -23,20 +18,13 @@ export const getAccessToken = (): Promise => { console.log("Load access...") var myHeaders = new Headers(); - myHeaders.append("Authorization", "Basic " + CLIENT_BASE64); + myHeaders.append("Authorization", "Basic " + process.env.REACT_APP_SPOTIFY_API_KEY); myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); myHeaders.append("Cookie", "__Host-device_id=AQDPZSmHH_wn9eUQvhLOXgZ6dX2N_ADW-WOhrV5i0uBaLxJqODRvMyT9FeFAp7IZsoqpHUkWt94rWJMzQz6pblraDVkFMLAgEHA; sp_tr=false"); var urlencoded = new URLSearchParams(); urlencoded.append("grant_type", "client_credentials"); - var requestOptions = { - method: 'POST', - headers: myHeaders, - body: urlencoded, - redirect: 'follow' - }; - fetch("https://accounts.spotify.com/api/token", { method: 'POST', @@ -62,7 +50,7 @@ export const getList = (token: string, inputValue: string, callback: (res: any[] myHeaders.append("Authorization", "Bearer " + token); myHeaders.append("Content-Type", "application/json"); - fetch("https://api.spotify.com/v1/search?type=track&market=IT&q=" + inputValue, { + fetch("https://api.spotify.com/v1/search?type=track&market=IT&limit=40&q=" + inputValue, { method: 'GET', headers: myHeaders, redirect: 'follow' @@ -79,7 +67,7 @@ export const getList = (token: string, inputValue: string, callback: (res: any[] return (track && track.artists[0].name.indexOf("unknown") === -1 && track.name.indexOf("unknown") === -1) }) .map((track: SpotifyResult) => { - // console.info(track.artists[0].name.toLowerCase()) + var value = new RegExp(banWords.join('|')).test(track.name.toLowerCase()); if(artists.includes(track.artists[0].name.toLowerCase()) && !value) { let id = track.artists[0].name + track.name; diff --git a/src/index.css b/src/index.css index fbfbf16..c17231c 100644 --- a/src/index.css +++ b/src/index.css @@ -186,3 +186,32 @@ body { height: 100%; } +.username{ + color: black; +} + +.username:focus{ + outline: none; +} + +.scrolling-cell { + overflow-x: hidden; + overflow-y: hidden; + max-width: 200px; +} + +@keyframes scroll { + from { + transform: translateX(50%); + } + to { + transform: translateX(-100%); + } +} + +.animation { + animation-name: scroll; + animation-duration: 15s; + animation-timing-function: linear; + animation-iteration-count: infinite; +} \ No newline at end of file diff --git a/src/index.js b/src/index.js index b8d473c..ef4a615 100644 --- a/src/index.js +++ b/src/index.js @@ -2,6 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; +import * as serviceWorkerRegistration from './serviceWorkerRegistration'; if (process.env.NODE_ENV === 'production') { console.debug = () => { } @@ -12,4 +13,6 @@ ReactDOM.render( , document.getElementById('root') -); \ No newline at end of file +); + +serviceWorkerRegistration.register(); \ No newline at end of file diff --git a/src/service-worker.js b/src/service-worker.js new file mode 100644 index 0000000..a0ad009 --- /dev/null +++ b/src/service-worker.js @@ -0,0 +1,72 @@ +/* eslint-disable no-restricted-globals */ + +// This service worker can be customized! +// See https://developers.google.com/web/tools/workbox/modules +// for the list of available Workbox modules, or add any other +// code you'd like. +// You can also remove this file if you'd prefer not to use a +// service worker, and the Workbox build step will be skipped. + +import { clientsClaim } from 'workbox-core'; +import { ExpirationPlugin } from 'workbox-expiration'; +import { precacheAndRoute, createHandlerBoundToURL } from 'workbox-precaching'; +import { registerRoute } from 'workbox-routing'; +import { StaleWhileRevalidate } from 'workbox-strategies'; + +clientsClaim(); + +// Precache all of the assets generated by your build process. +// Their URLs are injected into the manifest variable below. +// This variable must be present somewhere in your service worker file, +// even if you decide not to use precaching. See https://cra.link/PWA +precacheAndRoute(self.__WB_MANIFEST); + +// Set up App Shell-style routing, so that all navigation requests +// are fulfilled with your index.html shell. Learn more at +// https://developers.google.com/web/fundamentals/architecture/app-shell +const fileExtensionRegexp = new RegExp('/[^/?]+\\.[^/]+$'); +registerRoute( + // Return false to exempt requests from being fulfilled by index.html. + ({ request, url }) => { + // If this isn't a navigation, skip. + if (request.mode !== 'navigate') { + return false; + } // If this is a URL that starts with /_, skip. + + if (url.pathname.startsWith('/_')) { + return false; + } // If this looks like a URL for a resource, because it contains // a file extension, skip. + + if (url.pathname.match(fileExtensionRegexp)) { + return false; + } // Return true to signal that we want to use the handler. + + return true; + }, + createHandlerBoundToURL(process.env.PUBLIC_URL + '/index.html') +); + +// An example runtime caching route for requests that aren't handled by the +// precache, in this case same-origin .png requests like those from in public/ +registerRoute( + // Add in any other file extensions or routing criteria as needed. + ({ url }) => url.origin === self.location.origin && url.pathname.endsWith('.png'), // Customize this strategy as needed, e.g., by changing to CacheFirst. + new StaleWhileRevalidate({ + cacheName: 'images', + plugins: [ + // Ensure that once this runtime cache reaches a maximum size the + // least-recently used images are removed. + new ExpirationPlugin({ maxEntries: 50 }), + ], + }) +); + +// This allows the web app to trigger skipWaiting via +// registration.waiting.postMessage({type: 'SKIP_WAITING'}) +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'SKIP_WAITING') { + self.skipWaiting(); + } +}); + +// Any other custom service worker logic can go here. \ No newline at end of file diff --git a/src/serviceWorkerRegistration.js b/src/serviceWorkerRegistration.js new file mode 100644 index 0000000..2ddd8b8 --- /dev/null +++ b/src/serviceWorkerRegistration.js @@ -0,0 +1,137 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://cra.link/PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/) + ); + + export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://cra.link/PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } + } + + function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then((registration) => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://cra.link/PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch((error) => { + console.error('Error during service worker registration:', error); + }); + } + + function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then((response) => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then((registration) => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log('No internet connection found. App is running in offline mode.'); + }); + } + + export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then((registration) => { + registration.unregister(); + }) + .catch((error) => { + console.error(error.message); + }); + } + } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 756deca..73f07fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,7 +36,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz" integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.16.0", "@babel/core@^7.4.0-0", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.11.0": version "7.20.2" resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz" integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== @@ -495,7 +495,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.18.6": +"@babel/plugin-syntax-flow@^7.14.5", "@babel/plugin-syntax-flow@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz" integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== @@ -806,7 +806,7 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.18.6": +"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.18.6": version "7.19.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz" integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg== @@ -1353,7 +1353,7 @@ "@firebase/util" "1.7.3" tslib "^2.1.0" -"@firebase/app-compat@0.1.39": +"@firebase/app-compat@0.1.39", "@firebase/app-compat@0.x": version "0.1.39" resolved "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.39.tgz" integrity sha512-F5O/N38dVGFzpe6zM//MslYT80rpX0V+MQNMvONPUlXhvDqS5T+8NMSCWOcZ++Z4Hkj8EvgTJk59AMnD8SdyFw== @@ -1364,12 +1364,12 @@ "@firebase/util" "1.7.3" tslib "^2.1.0" -"@firebase/app-types@0.8.1": +"@firebase/app-types@0.8.1", "@firebase/app-types@0.x": version "0.8.1" resolved "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.8.1.tgz" integrity sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw== -"@firebase/app@0.8.4": +"@firebase/app@0.8.4", "@firebase/app@0.x": version "0.8.4" resolved "https://registry.npmjs.org/@firebase/app/-/app-0.8.4.tgz" integrity sha512-gQntijd+sLaGWjcBQpk33giCEXNzGLB6489NMpypVgEXJwQXYQPSrtb9vUHXot1w1iy/j6xlNl4K8wwwNdRgDg== @@ -1656,7 +1656,7 @@ node-fetch "2.6.7" tslib "^2.1.0" -"@firebase/util@1.7.3": +"@firebase/util@1.7.3", "@firebase/util@1.x": version "1.7.3" resolved "https://registry.npmjs.org/@firebase/util/-/util-1.7.3.tgz" integrity sha512-wxNqWbqokF551WrJ9BIFouU/V5SL1oYCGx1oudcirdhadnQRFH5v1sjgGL7cUV/UsekSycygphdrF2lxBxOYKg== @@ -1968,7 +1968,16 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== @@ -1995,12 +2004,12 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== @@ -2008,19 +2017,16 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@jridgewell/trace-mapping@^0.3.17": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== +"@lukeed/csprng@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz" + integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== + "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz" @@ -2036,7 +2042,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2291,7 +2297,7 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" -"@testing-library/dom@^8.0.0": +"@testing-library/dom@^8.0.0", "@testing-library/dom@>=7.21.4": version "8.19.0" resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz" integrity sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A== @@ -2351,7 +2357,7 @@ resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz" integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.9": version "7.1.20" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz" integrity sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ== @@ -2430,7 +2436,7 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": +"@types/estree@*", "@types/estree@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== @@ -2440,11 +2446,6 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": version "4.17.31" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz" @@ -2530,7 +2531,7 @@ resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^17.0.21": +"@types/node@*", "@types/node@^17.0.21", "@types/node@>=12.12.47", "@types/node@>=13.7.0": version "17.0.45" resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== @@ -2565,7 +2566,7 @@ resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-dom@<18.0.0", "@types/react-dom@^17.0.13": +"@types/react-dom@^17.0.13", "@types/react-dom@<18.0.0": version "17.0.18" resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.18.tgz" integrity sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw== @@ -2675,7 +2676,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.5.0": +"@typescript-eslint/eslint-plugin@^4.0.0 || ^5.0.0", "@typescript-eslint/eslint-plugin@^5.5.0": version "5.43.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz" integrity sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA== @@ -2697,7 +2698,7 @@ dependencies: "@typescript-eslint/utils" "5.43.0" -"@typescript-eslint/parser@^5.5.0": +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.5.0": version "5.43.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz" integrity sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug== @@ -2743,7 +2744,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.43.0", "@typescript-eslint/utils@^5.13.0": +"@typescript-eslint/utils@^5.13.0", "@typescript-eslint/utils@5.43.0": version "5.43.0" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz" integrity sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A== @@ -2765,9 +2766,9 @@ "@typescript-eslint/types" "5.43.0" eslint-visitor-keys "^3.3.0" -"@webassemblyjs/ast@1.11.5", "@webassemblyjs/ast@^1.11.5": +"@webassemblyjs/ast@^1.11.5", "@webassemblyjs/ast@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.5.tgz#6e818036b94548c1fb53b754b5cae3c9b208281c" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz" integrity sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ== dependencies: "@webassemblyjs/helper-numbers" "1.11.5" @@ -2775,22 +2776,22 @@ "@webassemblyjs/floating-point-hex-parser@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz#e85dfdb01cad16b812ff166b96806c050555f1b4" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz" integrity sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ== "@webassemblyjs/helper-api-error@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz#1e82fa7958c681ddcf4eabef756ce09d49d442d1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz" integrity sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA== "@webassemblyjs/helper-buffer@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz#91381652ea95bb38bbfd270702351c0c89d69fba" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz" integrity sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg== "@webassemblyjs/helper-numbers@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz#23380c910d56764957292839006fecbe05e135a9" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz" integrity sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.11.5" @@ -2799,12 +2800,12 @@ "@webassemblyjs/helper-wasm-bytecode@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz#e258a25251bc69a52ef817da3001863cc1c24b9f" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz" integrity sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA== "@webassemblyjs/helper-wasm-section@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz#966e855a6fae04d5570ad4ec87fbcf29b42ba78e" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz" integrity sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA== dependencies: "@webassemblyjs/ast" "1.11.5" @@ -2814,26 +2815,26 @@ "@webassemblyjs/ieee754@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz#b2db1b33ce9c91e34236194c2b5cba9b25ca9d60" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz" integrity sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.5.tgz#482e44d26b6b949edf042a8525a66c649e38935a" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz" integrity sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.5.tgz#83bef94856e399f3740e8df9f63bc47a987eae1a" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz" integrity sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ== "@webassemblyjs/wasm-edit@^1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz#93ee10a08037657e21c70de31c47fdad6b522b2d" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz" integrity sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ== dependencies: "@webassemblyjs/ast" "1.11.5" @@ -2847,7 +2848,7 @@ "@webassemblyjs/wasm-gen@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz#ceb1c82b40bf0cf67a492c53381916756ef7f0b1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz" integrity sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA== dependencies: "@webassemblyjs/ast" "1.11.5" @@ -2858,7 +2859,7 @@ "@webassemblyjs/wasm-opt@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz#b52bac29681fa62487e16d3bb7f0633d5e62ca0a" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz" integrity sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw== dependencies: "@webassemblyjs/ast" "1.11.5" @@ -2866,9 +2867,9 @@ "@webassemblyjs/wasm-gen" "1.11.5" "@webassemblyjs/wasm-parser" "1.11.5" -"@webassemblyjs/wasm-parser@1.11.5", "@webassemblyjs/wasm-parser@^1.11.5": +"@webassemblyjs/wasm-parser@^1.11.5", "@webassemblyjs/wasm-parser@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz#7ba0697ca74c860ea13e3ba226b29617046982e2" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz" integrity sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew== dependencies: "@webassemblyjs/ast" "1.11.5" @@ -2880,7 +2881,7 @@ "@webassemblyjs/wast-printer@1.11.5": version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz#7a5e9689043f3eca82d544d7be7a8e6373a6fa98" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz" integrity sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA== dependencies: "@webassemblyjs/ast" "1.11.5" @@ -2932,16 +2933,16 @@ acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + acorn@^7.1.1: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - address@^1.0.1, address@^1.1.2: version "1.2.1" resolved "https://registry.npmjs.org/address/-/address-1.2.1.tgz" @@ -2969,7 +2970,12 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== @@ -2981,7 +2987,27 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.12.2, ajv@^6.12.5, ajv@^6.9.1: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.12.4, ajv@^6.9.1: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2991,7 +3017,7 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0, ajv@^8.8.2, ajv@>=8: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -3044,7 +3070,7 @@ ansi-styles@^5.0.0: any-promise@^1.0.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@^3.0.3, anymatch@~3.1.2: @@ -3087,16 +3113,16 @@ aria-query@^5.0.0: dependencies: deep-equal "^2.0.5" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - array-flatten@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.6" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" @@ -3439,7 +3465,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, "browserslist@>= 4", "browserslist@>= 4.21.0", browserslist@>=4: version "4.21.4" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== @@ -3532,7 +3558,16 @@ case-sensitive-paths-webpack-plugin@^2.4.0: resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3549,7 +3584,31 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3651,16 +3710,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + colord@^2.9.1: version "2.9.3" resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" @@ -3678,14 +3737,19 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@^2.18.0, commander@^2.20.0: +commander@^2.18.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^2.20.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commander@^7.2.0: @@ -3916,15 +3980,15 @@ css-select@^4.1.3: domutils "^2.8.0" nth-check "^2.0.1" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: - mdn-data "2.0.4" + mdn-data "2.0.14" source-map "^0.6.1" -css-tree@^1.1.2, css-tree@^1.1.3: +css-tree@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== @@ -3932,6 +3996,14 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + css-what@^3.2.1: version "3.4.2" resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" @@ -4035,6 +4107,11 @@ csstype@^3.0.2: resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== +cuss@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cuss/-/cuss-2.1.0.tgz" + integrity sha512-xqMndOHDNnwJFjqhVyMvH2ETnNN3p10C2vcndvNVc2DDDTDIAKMws3ZF/HR2q0d25eFi5sTKJPQRP/mcbhhAOA== + damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" @@ -4049,19 +4126,19 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@2.6.9, debug@^2.6.0, debug@^2.6.9: +debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: - ms "2.1.2" + ms "2.0.0" debug@^3.2.7: version "3.2.7" @@ -4070,6 +4147,20 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + decimal.js@^10.2.1: version "10.4.2" resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz" @@ -4136,16 +4227,16 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - depd@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" @@ -4237,14 +4328,6 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" @@ -4254,16 +4337,24 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -domelementtype@1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" @@ -4286,7 +4377,16 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.5.2, domutils@^2.8.0: +domutils@^2.5.2: + version "2.8.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^2.8.0: version "2.8.0" resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== @@ -4337,7 +4437,7 @@ electron-to-chromium@^1.4.251: email-addresses@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" + resolved "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz" integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== emittery@^0.10.2: @@ -4372,7 +4472,7 @@ encodeurl@~1.0.2: enhanced-resolve@^5.13.0: version "5.13.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz" integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg== dependencies: graceful-fs "^4.2.4" @@ -4448,7 +4548,7 @@ es-get-iterator@^1.1.2: es-module-lexer@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz" integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== es-shim-unscopables@^1.0.0: @@ -4624,7 +4724,7 @@ eslint-plugin-testing-library@^5.0.1: dependencies: "@typescript-eslint/utils" "^5.13.0" -eslint-scope@5.1.1, eslint-scope@^5.1.1: +eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -4640,6 +4740,14 @@ eslint-scope@^7.1.1: esrecurse "^4.3.0" estraverse "^5.2.0" +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" @@ -4647,7 +4755,12 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== @@ -4668,7 +4781,7 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@^8.3.0: +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.5.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.1.0, eslint@^8.3.0, "eslint@>= 6", eslint@>=5: version "8.27.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz" integrity sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ== @@ -4876,7 +4989,7 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -faye-websocket@0.11.4, faye-websocket@^0.11.3: +faye-websocket@^0.11.3, faye-websocket@0.11.4: version "0.11.4" resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== @@ -4972,7 +5085,15 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -5106,7 +5227,17 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1: +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5126,11 +5257,6 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -5195,7 +5321,7 @@ get-symbol-description@^1.0.0: gh-pages@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-5.0.0.tgz#e0893272a0e33f0453e53a3c017c33b91ddd6394" + resolved "https://registry.npmjs.org/gh-pages/-/gh-pages-5.0.0.tgz" integrity sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ== dependencies: async "^3.2.4" @@ -5206,7 +5332,7 @@ gh-pages@^5.0.0: fs-extra "^8.1.0" globby "^6.1.0" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5220,32 +5346,39 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" @@ -5458,6 +5591,16 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -5469,16 +5612,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -5526,13 +5659,6 @@ human-signals@^2.1.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" @@ -5540,12 +5666,19 @@ iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -idb@7.0.1, idb@^7.0.1: +idb@^7.0.1, idb@7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz" integrity sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg== @@ -5606,7 +5739,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5630,16 +5763,16 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - ipaddr.js@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-arguments@^1.1.0, is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" @@ -6190,7 +6323,7 @@ jest-resolve-dependencies@^27.5.1: jest-regex-util "^27.5.1" jest-snapshot "^27.5.1" -jest-resolve@^27.4.2, jest-resolve@^27.5.1: +jest-resolve@*, jest-resolve@^27.4.2, jest-resolve@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== @@ -6400,7 +6533,7 @@ jest-worker@^28.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.4.3: +"jest@^27.0.0 || ^28.0.0", jest@^27.4.3: version "27.5.1" resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== @@ -6411,7 +6544,7 @@ jest@^27.4.3: jiti@^1.17.2: version "1.18.2" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz" integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== js-sdsl@^4.1.4: @@ -6509,14 +6642,14 @@ json-stable-stringify-without-jsonify@^1.0.1: json5@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.1.2, json5@^2.2.0, json5@^2.2.1: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^4.0.0: @@ -6821,7 +6954,7 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -6886,16 +7019,16 @@ mkdirp@~0.5.1: dependencies: minimist "^1.2.6" +ms@^2.1.1, ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" @@ -6911,7 +7044,7 @@ multicast-dns@^7.2.5: mz@^2.7.0: version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: any-promise "^1.0.0" @@ -6920,7 +7053,7 @@ mz@^2.7.0: nanoid@^3.3.6: version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== natural-compare-lite@^1.4.0: @@ -7161,7 +7294,14 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -7857,7 +7997,7 @@ postcss-selector-not@^6.0.1: postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== dependencies: cssesc "^3.0.0" @@ -7883,6 +8023,15 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.1.4, postcss@^8.2, postcss@^8.2.14, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.3, postcss@^8.3.3, postcss@^8.3.5, postcss@^8.4, postcss@^8.4.18, postcss@^8.4.23, postcss@^8.4.4, postcss@^8.4.6, "postcss@>= 8", postcss@>=8, postcss@>=8.0.9: + version "8.4.23" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@^7.0.35: version "7.0.39" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" @@ -7891,15 +8040,6 @@ postcss@^7.0.35: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.0.9, postcss@^8.3.5, postcss@^8.4.18, postcss@^8.4.23, postcss@^8.4.4: - version "8.4.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" - integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - postscribe@^2.0.8: version "2.0.8" resolved "https://registry.npmjs.org/postscribe/-/postscribe-2.0.8.tgz" @@ -7974,7 +8114,7 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1, prop-types@>=15.0.0: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8141,7 +8281,7 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@^17.0.2: +"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^17.0.2, "react-dom@^17.0.2 || ^18.0.0", react-dom@<18.0.0, react-dom@>=16.6.0: version "17.0.2" resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== @@ -8170,7 +8310,12 @@ react-helmet@^6.1.0: react-fast-compare "^3.1.1" react-side-effect "^2.1.0" -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -8203,7 +8348,7 @@ react-player@^2.10.1: prop-types "^15.7.2" react-fast-compare "^3.0.1" -react-refresh@^0.11.0: +react-refresh@^0.11.0, "react-refresh@>=0.10.0 <1.0.0": version "0.11.0" resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== @@ -8293,7 +8438,7 @@ react-transition-group@^4.3.0: loose-envify "^1.4.0" prop-types "^15.6.2" -react@^17.0.2: +"react@^16.3.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^17.0.2, "react@^17.0.2 || ^18.0.0", react@<18.0.0, "react@>= 16", "react@>=0.13.2 || ^0.14 || ^15.0.0 || ^16.0.0", react@>=16.3.0, react@>=16.6.0, react@>=16.8.0, react@17.0.2: version "17.0.2" resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz" integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== @@ -8535,7 +8680,7 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup@^2.43.1: +"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1: version "2.79.1" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== @@ -8549,7 +8694,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.1.2, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -8606,15 +8751,6 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" @@ -8624,18 +8760,9 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.2: +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz" integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== dependencies: "@types/json-schema" "^7.0.8" @@ -8652,6 +8779,15 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" @@ -8673,7 +8809,22 @@ selfsigned@^2.1.1: dependencies: node-forge "^1" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^6.1.1: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^6.1.2: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -8711,16 +8862,9 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.1: +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== dependencies: randombytes "^2.1.0" @@ -8845,16 +8989,21 @@ source-map-support@^0.5.6, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@^0.5.7: version "0.5.7" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.6.1, source-map@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + source-map@^0.7.3: version "0.7.4" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" @@ -8867,6 +9016,16 @@ source-map@^0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" +source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" @@ -8917,15 +9076,22 @@ stackframe@^1.3.4: resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" string-length@^4.0.1: version "4.0.2" @@ -8989,13 +9155,6 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@^1.1.1, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" @@ -9078,7 +9237,7 @@ stylis@4.1.3: sucrase@^3.29.0: version "3.32.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz" integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ== dependencies: "@jridgewell/gen-mapping" "^0.3.2" @@ -9167,7 +9326,7 @@ symbol-tree@^3.2.4: tailwindcss@^3.0.2, tailwindcss@^3.3.1: version "3.3.1" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.1.tgz#b6662fab6a9b704779e48d083a9fef5a81d2b81e" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz" integrity sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g== dependencies: arg "^5.0.2" @@ -9228,20 +9387,9 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.2.5: - version "5.3.6" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.14" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" - -terser-webpack-plugin@^5.3.7: +terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.7: version "5.3.7" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz" integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== dependencies: "@jridgewell/trace-mapping" "^0.3.17" @@ -9250,19 +9398,9 @@ terser-webpack-plugin@^5.3.7: serialize-javascript "^6.0.1" terser "^5.16.5" -terser@^5.0.0, terser@^5.10.0, terser@^5.14.1: - version "5.15.1" - resolved "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz" - integrity sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -terser@^5.16.5: +terser@^5.0.0, terser@^5.10.0, terser@^5.16.5: version "5.17.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.1.tgz#948f10830454761e2eeedc6debe45c532c83fd69" + resolved "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz" integrity sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw== dependencies: "@jridgewell/source-map" "^0.3.2" @@ -9286,14 +9424,14 @@ text-table@^0.2.0: thenify-all@^1.0.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== dependencies: any-promise "^1.0.0" @@ -9385,7 +9523,7 @@ tryer@^1.0.1: ts-interface-checker@^0.1.9: version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== tsconfig-paths@^3.14.1: @@ -9439,7 +9577,7 @@ type-fest@^0.16.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== -type-fest@^0.20.2: +type-fest@^0.20.2, "type-fest@>=0.17.0 <4.0.0": version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== @@ -9464,11 +9602,18 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^4.6.2: +"typescript@^3.2.1 || ^4", typescript@^4.6.2, "typescript@>= 2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": version "4.9.3" resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz" integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== +uid@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz" + integrity sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g== + dependencies: + "@lukeed/csprng" "^1.0.0" + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" @@ -9524,7 +9669,7 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -9683,7 +9828,7 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0: +webpack-dev-server@^4.6.0, "webpack-dev-server@3.x || 4.x": version "4.11.1" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== @@ -9747,9 +9892,9 @@ webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.64.4: +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^4.4.0 || ^5.9.0", "webpack@^4.44.2 || ^5.47.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.64.4, "webpack@>= 4", webpack@>=2, "webpack@>=4.43.0 <6.0.0": version "5.80.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.80.0.tgz#3e660b4ab572be38c5e954bdaae7e2bf76010fdc" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz" integrity sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA== dependencies: "@types/eslint-scope" "^3.7.3" @@ -9777,7 +9922,7 @@ webpack@^5.64.4: watchpack "^2.4.0" webpack-sources "^3.2.3" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== @@ -9825,7 +9970,16 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: +whatwg-url@^8.0.0: + version "8.7.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +whatwg-url@^8.5.0: version "8.7.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== @@ -10079,16 +10233,16 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@>=8.7.0, ws@^8.4.2: - version "8.11.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== - ws@^7.4.6: version "7.5.9" resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^8.4.2, ws@>=8.7.0: + version "8.11.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz"