From b07895db1713f08475ea1ed2e916f055a0d6708c Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Fri, 28 Apr 2023 17:39:49 -0400 Subject: [PATCH 01/72] initial docker-compose --- .dockerignore | 3 +++ .gitignore | 1 + Dockerfile | 11 +++++++++++ docker-compose.yaml | 13 +++++++++++++ 4 files changed, 28 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..38a5c84 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +/node_modules +/npm-debug.log +/build \ No newline at end of file diff --git a/.gitignore b/.gitignore index 4d29575..e3a8fcf 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ npm-debug.log* yarn-debug.log* yarn-error.log* +.fuse_hidden* \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5538160 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM node:14-alpine AS development +ENV NODE_ENV development + +WORKDIR /app +COPY package*.json ./ +RUN npm install + +COPY . . + +EXPOSE 3000 +CMD ["npm", "start"] \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..cd36c2f --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,13 @@ +version: '3.8' + +services: + app: + container_name: app-dev + image: development + build: + context: . + target: development + volumes: + - ./src:/app/src + ports: + - 2003:2003 \ No newline at end of file From b0a59ba5833ccf25e08c50bed272560c138d45fa Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Fri, 28 Apr 2023 18:17:15 -0400 Subject: [PATCH 02/72] added nginx and mysql --- .gitignore | 4 +++- docker-compose.yaml | 58 +++++++++++++++++++++++++++++++++++++++++++-- nginx/nginx.conf | 24 +++++++++++++++++++ 3 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 nginx/nginx.conf diff --git a/.gitignore b/.gitignore index e3a8fcf..b7e6a3e 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,6 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -.fuse_hidden* \ No newline at end of file +.fuse_hidden* + +mysql_password.txt diff --git a/docker-compose.yaml b/docker-compose.yaml index cd36c2f..691099a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -3,11 +3,65 @@ version: '3.8' services: app: container_name: app-dev - image: development build: context: . target: development volumes: - ./src:/app/src ports: - - 2003:2003 \ No newline at end of file + - 2003:2003 + secrets: + - mysql-password + networks: + - frontend + - backend + depends_on: + - db + + db: + container_name: mysql-db + image: mysql:8.0 + command: --default-authentication-plugin=mysql_native_password + restart: always + healthcheck: + test: + [ + "CMD-SHELL", + 'mysqladmin ping -h 127.0.0.1 --password="$$(cat /run/secrets/mysql-password)" --silent', + ] + interval: 3s + retries: 5 + start_period: 30s + secrets: + - mysql-password + environment: + MYSQL_DATABASE: scc-web + MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql-password + volumes: + - mysql-data:/var/lib/mysql + networks: + - backend + + nginx: + container_name: nginx-server + image: nginx:latest + ports: + - 80:80 + volumes: + - ./nginx/nginx.conf:/etc/nginx/nginx.conf + - ./nginx/conf.d:/etc/nginx/conf.d + networks: + - frontend + depends_on: + - app + +networks: + frontend: + backend: + +secrets: + mysql-password: + file: mysql_password.txt + +volumes: + mysql-data: diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..a1e69c9 --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,24 @@ +worker_processes auto; + +events {} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + sendfile on; + keepalive_timeout 65; + + server { + listen 80; + + location / { + proxy_pass http://app:2003; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + } + } +} From f9edbcef3a0cdd0faabfa6cad89bb38f3ce729fd Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Fri, 28 Apr 2023 18:23:23 -0400 Subject: [PATCH 03/72] small fix depends_on --- docker-compose.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 691099a..d2ed4c2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -16,7 +16,9 @@ services: - frontend - backend depends_on: - - db + db: + condition: service_healthy + db: container_name: mysql-db From 18eb34cac5014c3fecd060f6a98c5069442f96b6 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Fri, 28 Apr 2023 19:16:06 -0400 Subject: [PATCH 04/72] two new empty pages for the future --- src/App.tsx | 7 ++++++- src/components/Base.tsx | 8 ++++++-- src/locale.ts | 4 ++++ src/pages/Account.tsx | 14 ++++++++++++++ src/pages/Rankings.tsx | 14 ++++++++++++++ 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 src/pages/Account.tsx create mode 100644 src/pages/Rankings.tsx diff --git a/src/App.tsx b/src/App.tsx index 4217b90..76a1cef 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -9,6 +9,9 @@ import { Home } from "./pages/Home"; import { About } from "./pages/About"; import { Organization } from "./pages/Organization"; import { FAQ } from "./pages/FAQ"; +import { Rankings } from "./pages/Rankings"; +import { Account } from "./pages/Account"; + i18n.use(initReactI18next).init({ resources, @@ -43,8 +46,10 @@ const App = () => { } /> } /> } /> + } /> + } /> - {["about", "organization", "faq"].map((route) => ( + {["about", "organization", "faq", "rankins", "account"].map((route) => ( { diff --git a/src/locale.ts b/src/locale.ts index f1693e0..5198258 100644 --- a/src/locale.ts +++ b/src/locale.ts @@ -27,6 +27,8 @@ export const resources = { about: "About", organization: "Organization", faq: "FAQ", + account: "Account", + rankings: "Rankings", }, about: { title: "About", @@ -111,6 +113,8 @@ export const resources = { about: "À propos", organization: "Organisation", faq: "FAQ", + account: "Compte", + rankings: "Classement", }, about: { title: "À propos", diff --git a/src/pages/Account.tsx b/src/pages/Account.tsx new file mode 100644 index 0000000..8f24305 --- /dev/null +++ b/src/pages/Account.tsx @@ -0,0 +1,14 @@ +import { useTranslation } from "react-i18next"; +import { + Container, +} from "@mui/material"; + +export const Account = () => { + const { t } = useTranslation(); + + return ( + +
Account
+
+ ); +}; \ No newline at end of file diff --git a/src/pages/Rankings.tsx b/src/pages/Rankings.tsx new file mode 100644 index 0000000..5816a7a --- /dev/null +++ b/src/pages/Rankings.tsx @@ -0,0 +1,14 @@ +import { useTranslation } from "react-i18next"; +import { + Container, +} from "@mui/material"; + +export const Rankings = () => { + const { t } = useTranslation(); + + return ( + +
Rankings
+
+ ); +}; \ No newline at end of file From bf2292a4bd3178c209063e0a1825da31f2718de3 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 23 May 2023 10:58:18 -0400 Subject: [PATCH 05/72] root gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..91248b8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.fuse_hidden* + +mysql_password.txt \ No newline at end of file From 3c68d0ad48f815a95a75ac16bdcbbde3dad5ee08 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 23 May 2023 11:11:09 -0400 Subject: [PATCH 06/72] fix docker-compose new project structure --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index d2ed4c2..75b38f2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -7,7 +7,7 @@ services: context: . target: development volumes: - - ./src:/app/src + - ./app/src:/app/src ports: - 2003:2003 secrets: From c1d7f2343c97aef3c8e8a2070762dcbb041bd2c9 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 23 May 2023 11:14:46 -0400 Subject: [PATCH 07/72] update readme for docker-compose --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8dda9a4..cc24694 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ First, please move into the `app` directory. In the project directory, you can run: +### `docker-compose up` + +Runs de app and a development mysql database and an nginx server. The app is available at [http://localhost/](http://localhost/). + ### `npm start` Runs the app in the development mode.\ From f53e1fcb03131ead788dc087f7ad8aaefb4d4414 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 23 May 2023 17:23:03 -0400 Subject: [PATCH 08/72] starting auth based on what scramble-matcher is doing --- app/src/logic/auth.ts | 35 +++++++++++++++++++++++++++++++++++ app/src/logic/wca-env.ts | 11 +++++++++++ app/src/pages/Account.tsx | 10 ++++++++++ 3 files changed, 56 insertions(+) create mode 100644 app/src/logic/auth.ts create mode 100644 app/src/logic/wca-env.ts diff --git a/app/src/logic/auth.ts b/app/src/logic/auth.ts new file mode 100644 index 0000000..db5b6be --- /dev/null +++ b/app/src/logic/auth.ts @@ -0,0 +1,35 @@ +import { WCA_ORIGIN, WCA_OAUTH_CLIENT_ID } from './wca-env'; + +/** + * Checks the URL hash for presence of OAuth access token + * and return it if it's found. + * Should be called on application initialization (before any kind of router takes over the location). + */ +export const getOauthTokenIfAny = () => { + const hash = window.location.hash.replace(/^#/, ''); + const hashParams = new URLSearchParams(hash); + if (hashParams.has('access_token')) { + window.location.hash = ''; + return hashParams.get('access_token'); + } + return null; +}; + +export const signIn = () => { + const params = new URLSearchParams({ + client_id: WCA_OAUTH_CLIENT_ID, + response_type: 'token', + redirect_uri: oauthRedirectUri(), + scope: 'public manage_competitions', + }); + const win: Window = window; + win.location = `${WCA_ORIGIN}/oauth/authorize?${params.toString()}`; +}; + +const oauthRedirectUri = () => { + const { origin, pathname, search } = window.location; + const searchParams = new URLSearchParams(search); + const staging = searchParams.get('staging'); + const appUri = `${origin}${pathname}`.replace(/\/$/, ''); + return staging ? `${appUri}?staging=true` : appUri; +}; \ No newline at end of file diff --git a/app/src/logic/wca-env.ts b/app/src/logic/wca-env.ts new file mode 100644 index 0000000..e7fa95d --- /dev/null +++ b/app/src/logic/wca-env.ts @@ -0,0 +1,11 @@ +const searchParams = new URLSearchParams(window.location.search); +export const PRODUCTION = + process.env.NODE_ENV === 'production' && !searchParams.has('staging'); + +export const WCA_ORIGIN = PRODUCTION + ? 'https://www.worldcubeassociation.org' + : 'https://staging.worldcubeassociation.org'; + +export const WCA_OAUTH_CLIENT_ID = PRODUCTION + ? 'fill-in-production-client-id' + : 'example-application-id'; \ No newline at end of file diff --git a/app/src/pages/Account.tsx b/app/src/pages/Account.tsx index 8f24305..1dada51 100644 --- a/app/src/pages/Account.tsx +++ b/app/src/pages/Account.tsx @@ -2,6 +2,8 @@ import { useTranslation } from "react-i18next"; import { Container, } from "@mui/material"; +import Button from '@mui/material/Button'; +import { signIn } from '../logic/auth'; export const Account = () => { const { t } = useTranslation(); @@ -9,6 +11,14 @@ export const Account = () => { return (
Account
+
); }; \ No newline at end of file From 5d20075a0dc131d76016a55d16471bed419873da Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 24 May 2023 01:28:58 -0400 Subject: [PATCH 09/72] update in how the environment variables are used --- .env | 11 +++++++++++ .gitignore | 2 -- app/src/logic/wca-env.ts | 2 +- docker-compose.yaml | 26 ++++++++++++++------------ 4 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..2555cc0 --- /dev/null +++ b/.env @@ -0,0 +1,11 @@ +MYSQLDB_USER=root +MYSQLDB_ROOT_PASSWORD=123456 +MYSQLDB_DATABASE=scc-web +MYSQLDB_LOCAL_PORT=3307 +MYSQLDB_DOCKER_PORT=3306 + +NODE_LOCAL_PORT=2003 +NODE_DOCKER_PORT=2003 + +ENV=DEV +WCA_CLIENT_SECRET='aXRLtrjdi-jMX2R1jPXUgR32fPyCgsGBDS6OWyEAQes' \ No newline at end of file diff --git a/.gitignore b/.gitignore index 91248b8..c7d679e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ .fuse_hidden* - -mysql_password.txt \ No newline at end of file diff --git a/app/src/logic/wca-env.ts b/app/src/logic/wca-env.ts index e7fa95d..a35cecf 100644 --- a/app/src/logic/wca-env.ts +++ b/app/src/logic/wca-env.ts @@ -7,5 +7,5 @@ export const WCA_ORIGIN = PRODUCTION : 'https://staging.worldcubeassociation.org'; export const WCA_OAUTH_CLIENT_ID = PRODUCTION - ? 'fill-in-production-client-id' + ? 'Vl63_0nuaxjlnaGVmS2XUkpHxfrwz1i78vI3iXu72Gs' : 'example-application-id'; \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 75b38f2..350c90a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -8,10 +8,15 @@ services: target: development volumes: - ./app/src:/app/src + env_file: ./.env ports: - - 2003:2003 - secrets: - - mysql-password + - $NODE_LOCAL_PORT:$NODE_DOCKER_PORT + environment: + - DB_HOST=db + - DB_USER=$MYSQLDB_USER + - DB_PASSWORD=$MYSQLDB_ROOT_PASSWORD + - DB_NAME=$MYSQLDB_DATABASE + - DB_PORT=$MYSQLDB_DOCKER_PORT networks: - frontend - backend @@ -25,20 +30,21 @@ services: image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password restart: always + env_file: ./.env healthcheck: test: [ "CMD-SHELL", - 'mysqladmin ping -h 127.0.0.1 --password="$$(cat /run/secrets/mysql-password)" --silent', + 'mysqladmin ping -h 127.0.0.1 --password="$MYSQLDB_ROOT_PASSWORD" --silent', ] interval: 3s retries: 5 start_period: 30s - secrets: - - mysql-password environment: - MYSQL_DATABASE: scc-web - MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql-password + - MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD + - MYSQL_DATABASE=$MYSQLDB_DATABASE + ports: + - $MYSQLDB_LOCAL_PORT:$MYSQLDB_DOCKER_PORT volumes: - mysql-data:/var/lib/mysql networks: @@ -61,9 +67,5 @@ networks: frontend: backend: -secrets: - mysql-password: - file: mysql_password.txt - volumes: mysql-data: From 5cd2e20d4f6e1c4f09e795798b4c1c02bb45d902 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 24 May 2023 01:37:38 -0400 Subject: [PATCH 10/72] fix env --- .env => .env.dev | 2 +- .gitignore | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) rename .env => .env.dev (73%) diff --git a/.env b/.env.dev similarity index 73% rename from .env rename to .env.dev index 2555cc0..8a9a15e 100644 --- a/.env +++ b/.env.dev @@ -8,4 +8,4 @@ NODE_LOCAL_PORT=2003 NODE_DOCKER_PORT=2003 ENV=DEV -WCA_CLIENT_SECRET='aXRLtrjdi-jMX2R1jPXUgR32fPyCgsGBDS6OWyEAQes' \ No newline at end of file +WCA_CLIENT_SECRET='example-secret' \ No newline at end of file diff --git a/.gitignore b/.gitignore index c7d679e..f0be66d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .fuse_hidden* +.env \ No newline at end of file From b1e207ed8abef7236351cfa6f47f18a84777db96 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 24 May 2023 02:19:10 -0400 Subject: [PATCH 11/72] start db connection --- app/src/db/connect.ts | 28 ++++++++++++++++++++++++++++ app/src/db/db.config.ts | 14 ++++++++++++++ app/src/models/user.model.ts | 15 +++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 app/src/db/connect.ts create mode 100644 app/src/db/db.config.ts create mode 100644 app/src/models/user.model.ts diff --git a/app/src/db/connect.ts b/app/src/db/connect.ts new file mode 100644 index 0000000..8b15779 --- /dev/null +++ b/app/src/db/connect.ts @@ -0,0 +1,28 @@ +// Desc: This file is used to connect to the database and export the connection +import{dbConfig} from "./db.config.js"; + +const Sequelize = require("sequelize");//TODO fix this import +import { User } from "../models/user.model.js"; + +const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, { + host: dbConfig.HOST, + dialect: dbConfig.dialect, + port: dbConfig.port, + operatorsAliases: false, + + pool: { + max: dbConfig.pool.max, + min: dbConfig.pool.min, + acquire: dbConfig.pool.acquire, + idle: dbConfig.pool.idle + } +}); + +const db:any = {}; + +db.Sequelize = Sequelize; +db.sequelize = sequelize; + +db.user = User(sequelize, Sequelize); + +module.exports = db; \ No newline at end of file diff --git a/app/src/db/db.config.ts b/app/src/db/db.config.ts new file mode 100644 index 0000000..a77c82b --- /dev/null +++ b/app/src/db/db.config.ts @@ -0,0 +1,14 @@ +export const dbConfig = { + HOST: process.env.DB_HOST, + USER: process.env.DB_USER, + PASSWORD: process.env.DB_PASSWORD, + DB: process.env.DB_NAME, + port: process.env.DB_PORT, + dialect: "mysql", + pool: { + max: 5, + min: 0, + acquire: 30000, + idle: 10000 + } +}; \ No newline at end of file diff --git a/app/src/models/user.model.ts b/app/src/models/user.model.ts new file mode 100644 index 0000000..b52a494 --- /dev/null +++ b/app/src/models/user.model.ts @@ -0,0 +1,15 @@ +export const User = (sequelize:any, Sequelize:any) => { + const User = sequelize.define("user", { + wcaid: { + type: Sequelize.STRING + }, + province: { + type: Sequelize.STRING + }, + dob: { + type: Sequelize.STRING + } + }); + + return User; + }; \ No newline at end of file From bb6a2341cb1d1dcce8b88339647598d39200b341 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 24 May 2023 16:03:48 -0400 Subject: [PATCH 12/72] from wcaid to id to match everyone --- app/src/logic/auth.ts | 2 +- app/src/models/user.model.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/logic/auth.ts b/app/src/logic/auth.ts index db5b6be..8d873bb 100644 --- a/app/src/logic/auth.ts +++ b/app/src/logic/auth.ts @@ -20,7 +20,7 @@ export const signIn = () => { client_id: WCA_OAUTH_CLIENT_ID, response_type: 'token', redirect_uri: oauthRedirectUri(), - scope: 'public manage_competitions', + scope: 'public dob', }); const win: Window = window; win.location = `${WCA_ORIGIN}/oauth/authorize?${params.toString()}`; diff --git a/app/src/models/user.model.ts b/app/src/models/user.model.ts index b52a494..9c90d15 100644 --- a/app/src/models/user.model.ts +++ b/app/src/models/user.model.ts @@ -1,5 +1,8 @@ export const User = (sequelize:any, Sequelize:any) => { const User = sequelize.define("user", { + id: { + type: Sequelize.STRING + }, wcaid: { type: Sequelize.STRING }, From b185ed27eb877e6b56a7eef8a44f1ac5f682d964 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Fri, 23 Jun 2023 18:54:42 -0400 Subject: [PATCH 13/72] update in how environment variable are dealt with --- .env.dev | 3 ++- .gitignore | 3 ++- app/src/logic/auth.ts | 6 ++++-- app/src/logic/wca-env.ts | 10 +++++++--- docker-compose.yaml | 18 +++++++++--------- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/.env.dev b/.env.dev index 8a9a15e..e638ffa 100644 --- a/.env.dev +++ b/.env.dev @@ -8,4 +8,5 @@ NODE_LOCAL_PORT=2003 NODE_DOCKER_PORT=2003 ENV=DEV -WCA_CLIENT_SECRET='example-secret' \ No newline at end of file +WCA_OAUTH_CLIENT_ID='example-id' +WCA_OAUTH_CLIENT_SECRET='example-secret' \ No newline at end of file diff --git a/.gitignore b/.gitignore index f0be66d..5d4d50d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .fuse_hidden* -.env \ No newline at end of file +.env +.idea \ No newline at end of file diff --git a/app/src/logic/auth.ts b/app/src/logic/auth.ts index 8d873bb..b35a455 100644 --- a/app/src/logic/auth.ts +++ b/app/src/logic/auth.ts @@ -1,4 +1,4 @@ -import { WCA_ORIGIN, WCA_OAUTH_CLIENT_ID } from './wca-env'; +import { WCA_ORIGIN, WCA_OAUTH_CLIENT_ID, WCA_OAUTH_CLIENT_SECRET } from './wca-env'; /** * Checks the URL hash for presence of OAuth access token @@ -18,7 +18,9 @@ export const getOauthTokenIfAny = () => { export const signIn = () => { const params = new URLSearchParams({ client_id: WCA_OAUTH_CLIENT_ID, - response_type: 'token', + client_secret: WCA_OAUTH_CLIENT_SECRET, + response_type: 'code', + grant_type: 'authorization_code', redirect_uri: oauthRedirectUri(), scope: 'public dob', }); diff --git a/app/src/logic/wca-env.ts b/app/src/logic/wca-env.ts index a35cecf..b3cb29f 100644 --- a/app/src/logic/wca-env.ts +++ b/app/src/logic/wca-env.ts @@ -6,6 +6,10 @@ export const WCA_ORIGIN = PRODUCTION ? 'https://www.worldcubeassociation.org' : 'https://staging.worldcubeassociation.org'; -export const WCA_OAUTH_CLIENT_ID = PRODUCTION - ? 'Vl63_0nuaxjlnaGVmS2XUkpHxfrwz1i78vI3iXu72Gs' - : 'example-application-id'; \ No newline at end of file +export const WCA_OAUTH_CLIENT_ID : string = PRODUCTION + ? process.env.WCA_OAUTH_CLIENT_ID ?? 'example-application-id' //to handle the undefined case + : 'example-application-id'; + +export const WCA_OAUTH_CLIENT_SECRET : string = PRODUCTION + ? process.env.WCA_OAUTH_CLIENT_SECRET ?? 'example-application-secret' //to handle the undefined case + : 'example-application-secret'; \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 350c90a..7099445 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -7,16 +7,16 @@ services: context: . target: development volumes: - - ./app/src:/app/src + - ./app:/app env_file: ./.env ports: - - $NODE_LOCAL_PORT:$NODE_DOCKER_PORT + - ${NODE_LOCAL_PORT}:${NODE_DOCKER_PORT} environment: - DB_HOST=db - - DB_USER=$MYSQLDB_USER - - DB_PASSWORD=$MYSQLDB_ROOT_PASSWORD - - DB_NAME=$MYSQLDB_DATABASE - - DB_PORT=$MYSQLDB_DOCKER_PORT + - DB_USER=${MYSQLDB_USER} + - DB_PASSWORD=${MYSQLDB_ROOT_PASSWORD} + - DB_NAME=${MYSQLDB_DATABASE} + - DB_PORT=${MYSQLDB_DOCKER_PORT} networks: - frontend - backend @@ -41,10 +41,10 @@ services: retries: 5 start_period: 30s environment: - - MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD - - MYSQL_DATABASE=$MYSQLDB_DATABASE + - MYSQL_ROOT_PASSWORD=${MYSQLDB_ROOT_PASSWORD} + - MYSQL_DATABASE=${MYSQLDB_DATABASE} ports: - - $MYSQLDB_LOCAL_PORT:$MYSQLDB_DOCKER_PORT + - ${MYSQLDB_LOCAL_PORT}:${MYSQLDB_DOCKER_PORT} volumes: - mysql-data:/var/lib/mysql networks: From cbea314848a6768b93f0e9b33c6fe4c39cd0b935 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 25 Jun 2023 19:47:04 -0400 Subject: [PATCH 14/72] oauth does not nork and I don't kown why --- .env.dev | 2 +- app/src/App.tsx | 4 ++- app/src/logic/auth.ts | 67 ++++++++++++++++++++++++++++++++--- app/src/pages/WcaCallback.tsx | 16 +++++++++ 4 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 app/src/pages/WcaCallback.tsx diff --git a/.env.dev b/.env.dev index e638ffa..69ca815 100644 --- a/.env.dev +++ b/.env.dev @@ -7,6 +7,6 @@ MYSQLDB_DOCKER_PORT=3306 NODE_LOCAL_PORT=2003 NODE_DOCKER_PORT=2003 -ENV=DEV +NODE_ENV=DEV WCA_OAUTH_CLIENT_ID='example-id' WCA_OAUTH_CLIENT_SECRET='example-secret' \ No newline at end of file diff --git a/app/src/App.tsx b/app/src/App.tsx index 76a1cef..3f7a526 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -11,6 +11,7 @@ import { Organization } from "./pages/Organization"; import { FAQ } from "./pages/FAQ"; import { Rankings } from "./pages/Rankings"; import { Account } from "./pages/Account"; +import { WcaCallback } from "./pages/WcaCallback"; i18n.use(initReactI18next).init({ @@ -48,8 +49,9 @@ const App = () => { } /> } /> } /> + } /> - {["about", "organization", "faq", "rankins", "account"].map((route) => ( + {["about", "organization", "faq", "rankings", "account","wca_callback"].map((route) => ( { + if (res.ok) { // res.status >= 200 && res.status < 300 + return res; + } + throw await res.json(); +}; /** * Checks the URL hash for presence of OAuth access token * and return it if it's found. @@ -16,22 +26,69 @@ export const getOauthTokenIfAny = () => { }; export const signIn = () => { - const params = new URLSearchParams({ + /* First we get the code */ + const paramsCode = new URLSearchParams({ client_id: WCA_OAUTH_CLIENT_ID, - client_secret: WCA_OAUTH_CLIENT_SECRET, response_type: 'code', - grant_type: 'authorization_code', redirect_uri: oauthRedirectUri(), scope: 'public dob', }); const win: Window = window; - win.location = `${WCA_ORIGIN}/oauth/authorize?${params.toString()}`; + win.location = `${WCA_ORIGIN}/oauth/authorize?${paramsCode.toString()}`; }; +export const getToken = async () => { + /* Then we get the token */ + const code = new URLSearchParams(window.location.search).get('code') ??''; + if (code === '') { + throw new Error( + JSON.stringify({ + error: 'Code is not defined', + })); + } + console.log(code); + const paramsToken = new URLSearchParams({ + client_id: WCA_OAUTH_CLIENT_ID, + client_secret: WCA_OAUTH_CLIENT_SECRET, + grant_type: 'authorization_code', + redirect_uri: oauthRedirectUri(), + code: code, + }); + + try { + const tokenRes = await fetch(tokenURL, { + method: 'POST', + body: paramsToken, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + }).then(checkStatus).then((data) => data.json()); + + const meRes = await fetch(userProfileURL, { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: `Bearer ${tokenRes.access_token}`, + }, + }).then(checkStatus).then((data) => data.json()); + + if (!meRes) { + throw new Error( + JSON.stringify({ + error: 'Profile is not defined', + })); + } + + const profile = meRes.me; + console.log(profile); + } catch (err) { + throw new Error(JSON.stringify(err)); + } +} + const oauthRedirectUri = () => { const { origin, pathname, search } = window.location; const searchParams = new URLSearchParams(search); const staging = searchParams.get('staging'); - const appUri = `${origin}${pathname}`.replace(/\/$/, ''); + const appUri = `${origin}${'/wca_callback'}`.replace(/\/$/, ''); return staging ? `${appUri}?staging=true` : appUri; }; \ No newline at end of file diff --git a/app/src/pages/WcaCallback.tsx b/app/src/pages/WcaCallback.tsx new file mode 100644 index 0000000..4264d88 --- /dev/null +++ b/app/src/pages/WcaCallback.tsx @@ -0,0 +1,16 @@ +import { useTranslation } from "react-i18next"; +import { + Container, +} from "@mui/material"; +import { getToken } from '../logic/auth'; + +export const WcaCallback = () => { + const { t } = useTranslation(); + getToken(); + return ( + +
Logging you in
+ +
+ ); +}; \ No newline at end of file From 3e5881cb059e4abe7dbb0aa22694b0b624bf625a Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 27 Jun 2023 02:36:53 -0400 Subject: [PATCH 15/72] start backend python (merci cubingUSA :D) --- .env.dev | 10 +- .gitignore | 4 +- app/src/db/connect.ts | 28 --- app/src/db/db.config.ts | 14 -- app/src/logic/auth.ts | 94 ---------- app/src/logic/wca-env.ts | 15 -- app/src/models/user.model.ts | 18 -- app/src/pages/WcaCallback.tsx | 16 -- backend/Dockerfile | 19 +++ backend/README.md | 3 + backend/__init__.py | 63 +++++++ backend/handlers/admin/__init__.py | 8 + backend/handlers/admin/edit_championships.py | 96 +++++++++++ backend/handlers/admin/edit_users.py | 38 +++++ backend/handlers/admin/provinces.py | 82 +++++++++ backend/handlers/auth.py | 97 +++++++++++ backend/handlers/champions_table.py | 56 ++++++ backend/handlers/province_rankings.py | 44 +++++ backend/handlers/regional.py | 76 +++++++++ backend/handlers/user.py | 113 ++++++++++++ backend/lib/auth.py | 15 ++ backend/lib/common.py | 134 +++++++++++++++ backend/lib/formatters.py | 112 ++++++++++++ backend/lib/permissions.py | 33 ++++ backend/lib/secrets.py | 12 ++ backend/load_db/README.md | 23 +++ backend/load_db/cleanup.py | 23 +++ backend/load_db/delete_old_exports.py | 27 +++ backend/load_db/get_latest_export.py | 10 ++ backend/load_db/load_db.py | 161 ++++++++++++++++++ backend/load_db/load_db.sh | 43 +++++ backend/load_db/startup.sh | 9 + backend/load_db/update_champions.py | 150 ++++++++++++++++ backend/load_db/vm_setup.sh | 36 ++++ backend/models/champion.py | 19 +++ backend/models/championship.py | 38 +++++ backend/models/eligibility.py | 14 ++ backend/models/province.py | 25 +++ backend/models/region.py | 9 + backend/models/user.py | 66 +++++++ backend/models/wca/base.py | 23 +++ backend/models/wca/competition.py | 68 ++++++++ backend/models/wca/continent.py | 15 ++ backend/models/wca/country.py | 18 ++ backend/models/wca/event.py | 18 ++ backend/models/wca/export.py | 15 ++ backend/models/wca/format.py | 17 ++ backend/models/wca/person.py | 31 ++++ backend/models/wca/rank.py | 40 +++++ backend/models/wca/result.py | 55 ++++++ backend/models/wca/round.py | 17 ++ backend/requirements.txt | 8 + docker-compose.yaml | 23 ++- {app => frontend}/.gitignore | 0 {app => frontend}/package-lock.json | 0 {app => frontend}/package.json | 0 .../public/android-chrome-192x192.png | Bin .../public/android-chrome-512x512.png | Bin {app => frontend}/public/apple-touch-icon.png | Bin {app => frontend}/public/browserconfig.xml | 0 .../annual-members-meeting-jan-29-2023.pdf | Bin .../public/documents/by-laws-v1.0.pdf | Bin .../public/documents/by-laws-v1.1.pdf | Bin .../public/documents/by-laws-v1.2.pdf | Bin .../public/documents/by-laws-v1.3.pdf | Bin .../public/documents/by-laws-v1.4.pdf | Bin .../public/documents/by-laws.pdf | Bin .../certificate-of-incorporation.pdf | Bin .../directors-meeting-apr-19-2023.pdf | Bin .../directors-meeting-apr-9-2022.pdf | Bin .../directors-meeting-aug-12-2022.pdf | Bin .../directors-meeting-may-25-2022.pdf | Bin .../first-directors-meeting-feb-26-2022.pdf | Bin .../first-members-meeting-may-7-2022.pdf | Bin .../documents/reimbursement-policy-v1.0.pdf | Bin .../documents/reimbursement-policy-v1.1.pdf | Bin .../public/documents/reimbursement-policy.pdf | Bin .../supported-events-policy-v1.0.pdf | Bin .../documents/supported-events-policy.pdf | Bin {app => frontend}/public/favicon-16x16.png | Bin {app => frontend}/public/favicon-32x32.png | Bin {app => frontend}/public/favicon.ico | Bin {app => frontend}/public/index.html | 0 {app => frontend}/public/logo.svg | 0 {app => frontend}/public/mstile-150x150.png | Bin {app => frontend}/public/robots.txt | 0 .../public/safari-pinned-tab.svg | 0 {app => frontend}/public/site.webmanifest | 0 {app => frontend}/src/App.tsx | 4 +- {app => frontend}/src/components/Base.tsx | 0 {app => frontend}/src/components/Link.tsx | 0 {app => frontend}/src/index.css | 0 {app => frontend}/src/index.tsx | 2 +- {app => frontend}/src/locale.ts | 0 {app => frontend}/src/pages/About.tsx | 0 {app => frontend}/src/pages/Account.tsx | 0 {app => frontend}/src/pages/FAQ.tsx | 0 {app => frontend}/src/pages/Home.tsx | 0 {app => frontend}/src/pages/Organization.tsx | 0 {app => frontend}/src/pages/Rankings.tsx | 0 {app => frontend}/src/pages/documents.ts | 0 {app => frontend}/src/pages/links.ts | 0 {app => frontend}/src/react-app-env.d.ts | 0 {app => frontend}/src/reportWebVitals.ts | 0 {app => frontend}/src/setupTests.ts | 0 {app => frontend}/tsconfig.json | 0 106 files changed, 2011 insertions(+), 196 deletions(-) delete mode 100644 app/src/db/connect.ts delete mode 100644 app/src/db/db.config.ts delete mode 100644 app/src/logic/auth.ts delete mode 100644 app/src/logic/wca-env.ts delete mode 100644 app/src/models/user.model.ts delete mode 100644 app/src/pages/WcaCallback.tsx create mode 100644 backend/Dockerfile create mode 100644 backend/README.md create mode 100644 backend/__init__.py create mode 100644 backend/handlers/admin/__init__.py create mode 100644 backend/handlers/admin/edit_championships.py create mode 100644 backend/handlers/admin/edit_users.py create mode 100644 backend/handlers/admin/provinces.py create mode 100644 backend/handlers/auth.py create mode 100644 backend/handlers/champions_table.py create mode 100644 backend/handlers/province_rankings.py create mode 100644 backend/handlers/regional.py create mode 100644 backend/handlers/user.py create mode 100644 backend/lib/auth.py create mode 100644 backend/lib/common.py create mode 100644 backend/lib/formatters.py create mode 100644 backend/lib/permissions.py create mode 100644 backend/lib/secrets.py create mode 100644 backend/load_db/README.md create mode 100644 backend/load_db/cleanup.py create mode 100644 backend/load_db/delete_old_exports.py create mode 100644 backend/load_db/get_latest_export.py create mode 100644 backend/load_db/load_db.py create mode 100644 backend/load_db/load_db.sh create mode 100644 backend/load_db/startup.sh create mode 100644 backend/load_db/update_champions.py create mode 100644 backend/load_db/vm_setup.sh create mode 100644 backend/models/champion.py create mode 100644 backend/models/championship.py create mode 100644 backend/models/eligibility.py create mode 100644 backend/models/province.py create mode 100644 backend/models/region.py create mode 100644 backend/models/user.py create mode 100644 backend/models/wca/base.py create mode 100644 backend/models/wca/competition.py create mode 100644 backend/models/wca/continent.py create mode 100644 backend/models/wca/country.py create mode 100644 backend/models/wca/event.py create mode 100644 backend/models/wca/export.py create mode 100644 backend/models/wca/format.py create mode 100644 backend/models/wca/person.py create mode 100644 backend/models/wca/rank.py create mode 100644 backend/models/wca/result.py create mode 100644 backend/models/wca/round.py create mode 100644 backend/requirements.txt rename {app => frontend}/.gitignore (100%) rename {app => frontend}/package-lock.json (100%) rename {app => frontend}/package.json (100%) rename {app => frontend}/public/android-chrome-192x192.png (100%) rename {app => frontend}/public/android-chrome-512x512.png (100%) rename {app => frontend}/public/apple-touch-icon.png (100%) rename {app => frontend}/public/browserconfig.xml (100%) rename {app => frontend}/public/documents/annual-members-meeting-jan-29-2023.pdf (100%) rename {app => frontend}/public/documents/by-laws-v1.0.pdf (100%) rename {app => frontend}/public/documents/by-laws-v1.1.pdf (100%) rename {app => frontend}/public/documents/by-laws-v1.2.pdf (100%) rename {app => frontend}/public/documents/by-laws-v1.3.pdf (100%) rename {app => frontend}/public/documents/by-laws-v1.4.pdf (100%) rename {app => frontend}/public/documents/by-laws.pdf (100%) rename {app => frontend}/public/documents/certificate-of-incorporation.pdf (100%) rename {app => frontend}/public/documents/directors-meeting-apr-19-2023.pdf (100%) rename {app => frontend}/public/documents/directors-meeting-apr-9-2022.pdf (100%) rename {app => frontend}/public/documents/directors-meeting-aug-12-2022.pdf (100%) rename {app => frontend}/public/documents/directors-meeting-may-25-2022.pdf (100%) rename {app => frontend}/public/documents/first-directors-meeting-feb-26-2022.pdf (100%) rename {app => frontend}/public/documents/first-members-meeting-may-7-2022.pdf (100%) rename {app => frontend}/public/documents/reimbursement-policy-v1.0.pdf (100%) rename {app => frontend}/public/documents/reimbursement-policy-v1.1.pdf (100%) rename {app => frontend}/public/documents/reimbursement-policy.pdf (100%) rename {app => frontend}/public/documents/supported-events-policy-v1.0.pdf (100%) rename {app => frontend}/public/documents/supported-events-policy.pdf (100%) rename {app => frontend}/public/favicon-16x16.png (100%) rename {app => frontend}/public/favicon-32x32.png (100%) rename {app => frontend}/public/favicon.ico (100%) rename {app => frontend}/public/index.html (100%) rename {app => frontend}/public/logo.svg (100%) rename {app => frontend}/public/mstile-150x150.png (100%) rename {app => frontend}/public/robots.txt (100%) rename {app => frontend}/public/safari-pinned-tab.svg (100%) rename {app => frontend}/public/site.webmanifest (100%) rename {app => frontend}/src/App.tsx (92%) rename {app => frontend}/src/components/Base.tsx (100%) rename {app => frontend}/src/components/Link.tsx (100%) rename {app => frontend}/src/index.css (100%) rename {app => frontend}/src/index.tsx (84%) rename {app => frontend}/src/locale.ts (100%) rename {app => frontend}/src/pages/About.tsx (100%) rename {app => frontend}/src/pages/Account.tsx (100%) rename {app => frontend}/src/pages/FAQ.tsx (100%) rename {app => frontend}/src/pages/Home.tsx (100%) rename {app => frontend}/src/pages/Organization.tsx (100%) rename {app => frontend}/src/pages/Rankings.tsx (100%) rename {app => frontend}/src/pages/documents.ts (100%) rename {app => frontend}/src/pages/links.ts (100%) rename {app => frontend}/src/react-app-env.d.ts (100%) rename {app => frontend}/src/reportWebVitals.ts (100%) rename {app => frontend}/src/setupTests.ts (100%) rename {app => frontend}/tsconfig.json (100%) diff --git a/.env.dev b/.env.dev index 69ca815..b83d8e9 100644 --- a/.env.dev +++ b/.env.dev @@ -7,6 +7,14 @@ MYSQLDB_DOCKER_PORT=3306 NODE_LOCAL_PORT=2003 NODE_DOCKER_PORT=2003 +FLASK_LOCAL_PORT=8000 +FLASK_DOCKER_PORT=8000 +FLASK_IP='http://localhost:8000' + NODE_ENV=DEV +ENV=DEV + WCA_OAUTH_CLIENT_ID='example-id' -WCA_OAUTH_CLIENT_SECRET='example-secret' \ No newline at end of file +WCA_OAUTH_CLIENT_SECRET='example-secret' +WCA_HOST='https://staging.worldcubeassociation.org' +SESSION_SECRET_KEY='12340987' \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5d4d50d..d8ae469 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .fuse_hidden* .env -.idea \ No newline at end of file +.idea +*.pyc +venv \ No newline at end of file diff --git a/app/src/db/connect.ts b/app/src/db/connect.ts deleted file mode 100644 index 8b15779..0000000 --- a/app/src/db/connect.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Desc: This file is used to connect to the database and export the connection -import{dbConfig} from "./db.config.js"; - -const Sequelize = require("sequelize");//TODO fix this import -import { User } from "../models/user.model.js"; - -const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, { - host: dbConfig.HOST, - dialect: dbConfig.dialect, - port: dbConfig.port, - operatorsAliases: false, - - pool: { - max: dbConfig.pool.max, - min: dbConfig.pool.min, - acquire: dbConfig.pool.acquire, - idle: dbConfig.pool.idle - } -}); - -const db:any = {}; - -db.Sequelize = Sequelize; -db.sequelize = sequelize; - -db.user = User(sequelize, Sequelize); - -module.exports = db; \ No newline at end of file diff --git a/app/src/db/db.config.ts b/app/src/db/db.config.ts deleted file mode 100644 index a77c82b..0000000 --- a/app/src/db/db.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -export const dbConfig = { - HOST: process.env.DB_HOST, - USER: process.env.DB_USER, - PASSWORD: process.env.DB_PASSWORD, - DB: process.env.DB_NAME, - port: process.env.DB_PORT, - dialect: "mysql", - pool: { - max: 5, - min: 0, - acquire: 30000, - idle: 10000 - } -}; \ No newline at end of file diff --git a/app/src/logic/auth.ts b/app/src/logic/auth.ts deleted file mode 100644 index 3070ff3..0000000 --- a/app/src/logic/auth.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { WCA_ORIGIN, WCA_OAUTH_CLIENT_ID, WCA_OAUTH_CLIENT_SECRET } from './wca-env'; -import { User} from '../models/user.model'; - -const tokenURL = `${WCA_ORIGIN}/oauth/token`; -const userProfileURL = `${WCA_ORIGIN}/api/v0/me`; - -const checkStatus = async (res: any) => { - if (res.ok) { // res.status >= 200 && res.status < 300 - return res; - } - throw await res.json(); -}; -/** - * Checks the URL hash for presence of OAuth access token - * and return it if it's found. - * Should be called on application initialization (before any kind of router takes over the location). - */ -export const getOauthTokenIfAny = () => { - const hash = window.location.hash.replace(/^#/, ''); - const hashParams = new URLSearchParams(hash); - if (hashParams.has('access_token')) { - window.location.hash = ''; - return hashParams.get('access_token'); - } - return null; -}; - -export const signIn = () => { - /* First we get the code */ - const paramsCode = new URLSearchParams({ - client_id: WCA_OAUTH_CLIENT_ID, - response_type: 'code', - redirect_uri: oauthRedirectUri(), - scope: 'public dob', - }); - const win: Window = window; - win.location = `${WCA_ORIGIN}/oauth/authorize?${paramsCode.toString()}`; -}; - -export const getToken = async () => { - /* Then we get the token */ - const code = new URLSearchParams(window.location.search).get('code') ??''; - if (code === '') { - throw new Error( - JSON.stringify({ - error: 'Code is not defined', - })); - } - console.log(code); - const paramsToken = new URLSearchParams({ - client_id: WCA_OAUTH_CLIENT_ID, - client_secret: WCA_OAUTH_CLIENT_SECRET, - grant_type: 'authorization_code', - redirect_uri: oauthRedirectUri(), - code: code, - }); - - try { - const tokenRes = await fetch(tokenURL, { - method: 'POST', - body: paramsToken, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - }).then(checkStatus).then((data) => data.json()); - - const meRes = await fetch(userProfileURL, { - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - Authorization: `Bearer ${tokenRes.access_token}`, - }, - }).then(checkStatus).then((data) => data.json()); - - if (!meRes) { - throw new Error( - JSON.stringify({ - error: 'Profile is not defined', - })); - } - - const profile = meRes.me; - console.log(profile); - } catch (err) { - throw new Error(JSON.stringify(err)); - } -} - -const oauthRedirectUri = () => { - const { origin, pathname, search } = window.location; - const searchParams = new URLSearchParams(search); - const staging = searchParams.get('staging'); - const appUri = `${origin}${'/wca_callback'}`.replace(/\/$/, ''); - return staging ? `${appUri}?staging=true` : appUri; -}; \ No newline at end of file diff --git a/app/src/logic/wca-env.ts b/app/src/logic/wca-env.ts deleted file mode 100644 index b3cb29f..0000000 --- a/app/src/logic/wca-env.ts +++ /dev/null @@ -1,15 +0,0 @@ -const searchParams = new URLSearchParams(window.location.search); -export const PRODUCTION = - process.env.NODE_ENV === 'production' && !searchParams.has('staging'); - -export const WCA_ORIGIN = PRODUCTION - ? 'https://www.worldcubeassociation.org' - : 'https://staging.worldcubeassociation.org'; - -export const WCA_OAUTH_CLIENT_ID : string = PRODUCTION - ? process.env.WCA_OAUTH_CLIENT_ID ?? 'example-application-id' //to handle the undefined case - : 'example-application-id'; - -export const WCA_OAUTH_CLIENT_SECRET : string = PRODUCTION - ? process.env.WCA_OAUTH_CLIENT_SECRET ?? 'example-application-secret' //to handle the undefined case - : 'example-application-secret'; \ No newline at end of file diff --git a/app/src/models/user.model.ts b/app/src/models/user.model.ts deleted file mode 100644 index 9c90d15..0000000 --- a/app/src/models/user.model.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const User = (sequelize:any, Sequelize:any) => { - const User = sequelize.define("user", { - id: { - type: Sequelize.STRING - }, - wcaid: { - type: Sequelize.STRING - }, - province: { - type: Sequelize.STRING - }, - dob: { - type: Sequelize.STRING - } - }); - - return User; - }; \ No newline at end of file diff --git a/app/src/pages/WcaCallback.tsx b/app/src/pages/WcaCallback.tsx deleted file mode 100644 index 4264d88..0000000 --- a/app/src/pages/WcaCallback.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { useTranslation } from "react-i18next"; -import { - Container, -} from "@mui/material"; -import { getToken } from '../logic/auth'; - -export const WcaCallback = () => { - const { t } = useTranslation(); - getToken(); - return ( - -
Logging you in
- -
- ); -}; \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..425d57b --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3.11-alpine AS builder + +ENV FLASK_APP biblio +ENV FLASK_DEBUG 1 +ENV FLASK_RUN_PORT 8000 +ENV FLASK_RUN_HOST 0.0.0.0 + +WORKDIR /workdir + +COPY requirements.txt /workdir + +RUN pip3 install --upgrade pip +RUN pip3 install -r requirements.txt + +COPY . . + +EXPOSE 8000 + +CMD ["flask", "run"] \ No newline at end of file diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..ae815c4 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,3 @@ +# Speedcubing Canada's Website Backend +This is the backend for the Speedcubing Canada website. +It is heavily based on what CubingUSA does, but converted into an API. \ No newline at end of file diff --git a/backend/__init__.py b/backend/__init__.py new file mode 100644 index 0000000..4aaf807 --- /dev/null +++ b/backend/__init__.py @@ -0,0 +1,63 @@ +import datetime +import logging +import os +import sys + +from authlib.integrations.flask_client import OAuth +from dotenv import load_dotenv +from flask import Flask, redirect, request +import google.cloud.logging + +from backend.lib.secrets import get_secret + +if os.path.exists('.env.dev'): + load_dotenv('.env.dev') + +if os.environ.get('ENV') == 'PROD': + client = google.cloud.logging.Client() + client.setup_logging() +elif os.environ.get('ENV') == 'DEV' and 'gunicorn' in sys.argv[0]: + logger = logging.getLogger() + logger.setLevel(logging.DEBUG) + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s') + handler.setFormatter(formatter) + logger.addHandler(handler) + + +app = Flask(__name__) +app.secret_key = get_secret('SESSION_SECRET_KEY') +app.permanent_session_lifetime = datetime.timedelta(days=7) + +@app.before_request +def before_request(): + if os.environ.get('ENV') == 'PROD' and not request.is_secure: + url = request.url.replace('http://', 'https://', 1) + code = 301 + return redirect(url, code=code) + +wca_host = os.environ.get('WCA_HOST') +oauth = OAuth(app) +oauth.register( + name='wca', + client_id=get_secret('WCA_CLIENT_ID'), + client_secret=get_secret('WCA_CLIENT_SECRET'), + access_token_url=wca_host + '/oauth/token', + access_token_params=None, + authorize_url=wca_host + '/oauth/authorize', + authorize_params=None, + api_base_url=wca_host + '/api/v0/', + client_kwargs={'scope': 'public email'}, +) + +from backend.handlers.admin import bp as admin_bp +from backend.handlers.auth import create_bp as create_auth_bp +from backend.handlers.champions_table import bp as champions_table_bp +from backend.handlers.regional import bp as regional_bp +from backend.handlers.user import bp as user_bp + +app.register_blueprint(admin_bp) +app.register_blueprint(create_auth_bp(oauth)) +app.register_blueprint(champions_table_bp) +app.register_blueprint(regional_bp) +app.register_blueprint(user_bp) \ No newline at end of file diff --git a/backend/handlers/admin/__init__.py b/backend/handlers/admin/__init__.py new file mode 100644 index 0000000..1e87308 --- /dev/null +++ b/backend/handlers/admin/__init__.py @@ -0,0 +1,8 @@ +from flask import Blueprint + +from backend.handlers.admin.edit_users import bp as edit_users_bp +from backend.handlers.admin.provinces import bp as provinces_bp + +bp = Blueprint('admin', __name__, url_prefix='/admin') +bp.register_blueprint(edit_users_bp) +bp.register_blueprint(provinces_bp) diff --git a/backend/handlers/admin/edit_championships.py b/backend/handlers/admin/edit_championships.py new file mode 100644 index 0000000..d0d3a77 --- /dev/null +++ b/backend/handlers/admin/edit_championships.py @@ -0,0 +1,96 @@ +from flask import abort, Blueprint, redirect, render_template +from google.cloud import ndb + +from backend.lib import auth +from backend.lib import common +from backend.models.championship import Championship +from backend.models.region import Region +from backend.models.province import Province +from backend.models.user import Roles +from backend.models.wca.competition import Competition +from backend.models.wca.country import Country + +bp = Blueprint('edit_championships', __name__) +client = ndb.Client() + + +@bp.route('/add_championship//') +def add_championship(competition_id, championship_type): + with client.context(): + me = auth.user() + if not me or not me.HasAnyRole(Roles.AdminRoles()): + abort(403) + competition = Competition.get_by_id(competition_id) + if championship_type == 'national': + championship_id = Championship.NationalsId(competition.year) + elif championship_type == 'regional': + championship_id = Championship.RegionalsId(competition.year, + competition.province.get().region.get()) + elif championship_type == 'province': + championship_id = Championship.ProvinceChampionshipId(competition.year, + competition.province.get()) + championship = (Championship.get_by_id(championship_id) or + Championship(id=championship_id)) + + if championship_type == 'national': + championship.national_championship = True + elif championship_type == 'regional': + championship.region = competition.province.get().region + elif championship_type == 'province': + championship.province = competition.province + championship.competition = competition.key + championship.put() + # TODO: if we changed a championship we should update champions and eligibilities. + return redirect('/admin/edit_championships') + + +@bp.route('/delete_championship/') +def delete_championship(championship_id): + with client.context(): + me = auth.user() + if not me or not me.HasAnyRole(Roles.AdminRoles()): + abort(403) + championship = Championship.get_by_id(championship_id) + championship.key.delete() + # TODO: if we changed a championship we should update champions and eligibilities. + return redirect('/admin/edit_championships') + + +@bp.route('/edit_championships') +def edit_championships(): + with client.context(): + me = auth.user() + if not me or not me.HasAnyRole(Roles.AdminRoles()): + abort(403) + + all_us_competitions = ( + Competition.query(Competition.country == ndb.Key(Country, 'Canada')) + .order(Competition.name) + .fetch()) + + national_championships = ( + Championship.query(Championship.national_championship == True) + .order(-Championship.year) + .fetch()) + regional_championships = ( + Championship.query(Championship.region != None) + .order(Championship.region) + .order(-Championship.year) + .fetch()) + province_championships = ( + Championship.query(Championship.province != None) + .order(Championship.province) + .order(-Championship.year) + .fetch()) + + provinces = Province.query().fetch() + regions = Region.query().fetch() + + return render_template('admin/edit_championships.html', + c=common.Common(), + all_us_competitions=all_us_competitions, + national_championships=national_championships, + regional_championships=regional_championships, + province_championships=province_championships, + provinces=provinces, + regions=regions) \ No newline at end of file diff --git a/backend/handlers/admin/edit_users.py b/backend/handlers/admin/edit_users.py new file mode 100644 index 0000000..344013f --- /dev/null +++ b/backend/handlers/admin/edit_users.py @@ -0,0 +1,38 @@ +from flask import abort, Blueprint, render_template +from google.cloud import ndb + +from backend.lib import auth +from backend.lib.common import Common +from backend.models.user import Roles, User +from backend.models.wca.person import Person + +bp = Blueprint('edit_users', __name__) +client = ndb.Client() + +@bp.route('/edit_users') +def edit_users(): + with client.context(): + me = auth.user() + if not me or not me.HasAnyRole(Roles.AdminRoles()): + abort(403) + return render_template('admin/edit_users.html', + c=Common()) + +@bp.route('/async/get_users/') +@bp.route('/async/get_users/') +def edit_users_table(filter_text=''): + with client.context(): + me = auth.user() + if not me or not me.HasAnyRole(Roles.AdminRoles()): + abort(403) + + if filter_text: + users_to_show = User.query(ndb.OR(User.name == filter_text, + User.city == filter_text, + User.wca_person == ndb.Key(Person, filter_text)), + order_by=[User.name]).fetch(30) + else: + users_to_show = User.query(order_by=[User.name]).fetch(30) + + return render_template('admin/edit_users_table.html', + c=Common(), users=users_to_show) diff --git a/backend/handlers/admin/provinces.py b/backend/handlers/admin/provinces.py new file mode 100644 index 0000000..57662fb --- /dev/null +++ b/backend/handlers/admin/provinces.py @@ -0,0 +1,82 @@ +from flask import abort, Blueprint +from google.cloud import ndb + +from backend.lib import auth +from backend.models.region import Region +from backend.models.province import Province +from backend.models.user import Roles + +bp = Blueprint('provinces', __name__) +client = ndb.Client() + +def MakeRegion(region_id, region_name, championship_name, all_regions, futures): + region = Region.get_by_id(region_id) or Region(id=region_id) + region.name = region_name + region.championship_name = championship_name + futures.append(region.put_async()) + all_regions[region_id] = region + return region + +def MakeProvince(province_id, province_name, region, is_province, all_provinces, futures): + province = Province.get_by_id(province_id) or Province(id=province_id) + province.name = province_name + province.region = region.key + province.is_province = is_province + futures.append(province.put_async()) + all_provinces[province_id] = province + return province + +# Provinces and regions standards come from the following source: +# https://www12.statcan.gc.ca/census-recensement/2021/ref/dict/tab/index-eng.cfm?ID=t1_8 +@bp.route('/update_provinces') +def update_provinces(): + with client.context(): + me = auth.user() + if not me or not me.HasAnyRole([Roles.GLOBAL_ADMIN, Roles.WEBMASTER]): + abort(403) + + futures = [] + all_regions = {} + ATLANTIC = MakeRegion('at', 'Atlantic', 'Atlantic',all_regions, futures) + QUEBEC = MakeRegion('qc', 'Quebec', 'Quebec', all_regions, futures) + ONTARIO = MakeRegion('on', 'Ontario', 'Ontario', all_regions, futures) + PRAIRIES = MakeRegion('pr', 'Prairies', 'Prairies', all_regions, futures) + BRITISH_COLUMBIA = MakeRegion('bc', 'British Columbia', 'British Columbia', all_regions, futures) + TERRITORIES = MakeRegion('nw', 'Territories', 'Territories', all_regions, futures) + + + for future in futures: + future.wait() + del futures[:] + + all_provinces = {} + for province_id, province_name, region in ( + ('nl', 'Newfoundland and Labrador', ATLANTIC), + ('pe', 'Prince Edward Island', ATLANTIC), + ('ns', 'Nova Scotia', ATLANTIC), + ('nb', 'New Brunswick', ATLANTIC), + ('qc', 'Quebec', QUEBEC), + ('on', 'Ontario', ONTARIO), + ('mb', 'Manitoba', PRAIRIES), + ('sk', 'Saskatchewan', PRAIRIES), + ('ab', 'Alberta', PRAIRIES), + ('bc', 'British Columbia', BRITISH_COLUMBIA)): + MakeProvince(province_id, province_name, region, True, all_provinces, futures) + + for territory_id, territory_name, region in ( + ('yt', 'Yukon', TERRITORIES), + ('nt', 'Northwest Territories', TERRITORIES), + ('nu', 'Nunavut', TERRITORIES)): + MakeProvince(territory_id, territory_name, region, False, all_provinces, futures) + + for future in futures: + future.wait() + del futures[:] + + for region in Region.query().iter(): + if region.key.id() not in all_regions: + region.delete() + for province in Province.query().iter(): + if province.key.id() not in all_provinces: + province.delete() + return 'ok' diff --git a/backend/handlers/auth.py b/backend/handlers/auth.py new file mode 100644 index 0000000..157542b --- /dev/null +++ b/backend/handlers/auth.py @@ -0,0 +1,97 @@ +import datetime +import os + +from flask import Blueprint, url_for, redirect, request, session +from google.cloud import ndb + +from backend.models.user import User, Roles +from backend.models.wca.person import Person +from backend.models.wca.rank import RankSingle, RankAverage + +client = ndb.Client() + +def create_bp(oauth): + bp = Blueprint('auth', __name__) + + @bp.route('/login') + def login(): + redirect_uri = url_for('auth.oauth_callback', _external=True) + session['referrer'] = request.referrer + return oauth.wca.authorize_redirect(redirect_uri) + + @bp.route('/oauth_callback') + def oauth_callback(): + with client.context(): + token = oauth.wca.authorize_access_token() + resp = oauth.wca.get('me') + resp.raise_for_status() + + wca_info = resp.json()['me'] + session['wca_account_number'] = str(wca_info['id']) + session.permanent = True + + user = User.get_by_id(str(wca_info['id'])) or User(id=str(wca_info['id'])) + if 'wca_id' in wca_info and wca_info['wca_id']: + user.wca_person = ndb.Key(Person, wca_info['wca_id']) + # If the user has a province on their account, we should update this on the + # Person and Ranks as well. + if user.province: + person = user.wca_person.get() + if person: + person.province = user.province + person.put() + for rank_class in (RankSingle, RankAverage): + ndb.put_multi(rank_class.query(rank_class.person == person.key).fetch()) + else: + del user.wca_person + + if 'name' in wca_info: + user.name = wca_info['name'] + else: + del user.name + + if 'email' in wca_info: + user.email = wca_info['email'] + else: + del user.email + + user.roles = [role for role in user.roles if role not in Roles.DelegateRoles()] + if 'delegate_status' in wca_info: + if wca_info['delegate_status'] == 'senior_delegate': + user.roles.append(Roles.SENIOR_DELEGATE) + elif wca_info['delegate_status'] in ('delegate', 'candidate_delegate'): + user.roles.append(Roles.DELEGATE) + + # For local development, make it easier to make a user a global admin. + if os.environ.get('ADMIN_WCA_ID'): + user.roles = [role for role in user.roles if role != Roles.GLOBAL_ADMIN] + if wca_info['wca_id'] and wca_info['wca_id'] in os.environ.get('ADMIN_WCA_ID'): + user.roles.append(Roles.GLOBAL_ADMIN) + + if wca_info['wca_id']: + wca_id_user = User.get_by_id(wca_info['wca_id']) + else: + wca_id_user = None + if wca_id_user: + if wca_id_user.city and not user.city: + user.city = wca_id_user.city + if wca_id_user.province and not user.province: + user.province = wca_id_user.province + if wca_id_user.latitude and not user.latitude: + user.latitude = wca_id_user.latitude + if wca_id_user.longitude and not user.longitude: + user.longitude = wca_id_user.longitude + wca_id_user.key.delete() + + user.last_login = datetime.datetime.now() + + user.put() + + return redirect(session.pop('referrer', None) or '/') + + @bp.route('/logout') + def logout(): + session.pop('wca_account_number', None) + return redirect(request.referrer or '/') + + return bp \ No newline at end of file diff --git a/backend/handlers/champions_table.py b/backend/handlers/champions_table.py new file mode 100644 index 0000000..7749096 --- /dev/null +++ b/backend/handlers/champions_table.py @@ -0,0 +1,56 @@ +from flask import Blueprint, render_template +from google.cloud import ndb + +from backend.lib import common +from backend.models.champion import Champion +from backend.models.championship import Championship +from backend.models.region import Region +from backend.models.province import Province +from backend.models.wca.event import Event + +bp = Blueprint('champions_table', __name__) +client = ndb.Client() + + +@bp.route('/async/champions_by_year///') +@bp.route('/async/champions_by_region///') +def champions_table(event_id, championship_type, championship_region='', year=0): + with client.context(): + is_national = championship_type == 'national' + is_regional = championship_type == 'regional' + is_state = championship_type == 'province' + + all_champions = [] + filters = [] + + if is_national: + filters.append(Champion.national_champion == True) + elif year: + filters.append(Champion.year == int(year)) + if is_regional: + filters.append(Champion.region != None) + elif is_state: + filters.append(Champion.province != None) + elif is_regional: + filters.append(Champion.region == ndb.Key(Region, championship_region)) + elif is_state: + filters.append(Champion.province == ndb.Key(Province, championship_region)) + + filters.append(Champion.event == ndb.Key(Event, str(event_id))) + all_champions = Champion.query(ndb.AND(*filters)).fetch() + if year and is_regional: + all_champions.sort(key = lambda c: c.region.id()) + championship_formatter = lambda c: c.region.get().name + all_regions = Region.query().fetch() + elif year and is_state: + all_champions.sort(key = lambda c: c.province.id()) + championship_formatter = lambda c: c.province.get().name + all_states = Province.query().fetch() + else: + all_champions.sort(key = lambda c: c.championship.id(), reverse = True) + championship_formatter = lambda c: c.year + + return render_template('champions_table.html', + c=common.Common(), + champions=all_champions, + championship_formatter=championship_formatter) diff --git a/backend/handlers/province_rankings.py b/backend/handlers/province_rankings.py new file mode 100644 index 0000000..7bbd14f --- /dev/null +++ b/backend/handlers/province_rankings.py @@ -0,0 +1,44 @@ +from flask import Blueprint, render_template +from google.cloud import ndb + +from backend.lib import common +from backend.models.province import Province +from backend.models.wca.event import Event +from backend.models.wca.rank import RankAverage +from backend.models.wca.rank import RankSingle + +bp = Blueprint('province_rankings', __name__) +client = ndb.Client() + +@bp.route('/province_rankings') +def province_rankings(): + with client.context(): + return render_template('province_rankings.html', + c=common.Common(wca_disclaimer=True)) + +@bp.route('/async/province_rankings///') +def province_rankings_table(event_id, province_id, use_average): + with client.context(): + ranking_class = RankAverage if use_average == '1' else RankSingle + province = Province.get_by_id(province_id) + if not province: + self.response.write('Unrecognized province %s' % province_id) + return + event = Event.get_by_id(event_id) + if not event: + self.response.write('Unrecognized event %s' % event_id) + return + rankings = (ranking_class.query( + ndb.AND(ranking_class.event == event.key, + ranking_class.province == province.key)) + .order(ranking_class.best) + .fetch(100)) + + people = ndb.get_multi([ranking.person for ranking in rankings]) + people_by_id = {person.key.id() : person for person in people} + + return render_template('province_rankings_table.html', + c=common.Common(), + is_average=(use_average == '1'), + rankings=rankings, + people_by_id=people_by_id) diff --git a/backend/handlers/regional.py b/backend/handlers/regional.py new file mode 100644 index 0000000..964528e --- /dev/null +++ b/backend/handlers/regional.py @@ -0,0 +1,76 @@ +import datetime +import os +import logging +import requests + +from flask import Blueprint, render_template, abort +from google.cloud import ndb + +from backend.lib import common +from backend.models.championship import Championship +from backend.models.region import Region +from backend.models.province import Province +from backend.models.user import User + +bp = Blueprint('regional', __name__) +client = ndb.Client() + +@bp.route('/regional') +def regional(): + with client.context(): + year = datetime.date.today().year + + championships = Championship.query(ndb.AND(Championship.year == year, + Championship.region != None)).fetch() + competitions = ndb.get_multi([c.competition for c in championships]) + + states = Province.query().fetch() + regions = Region.query().order(Region.name).fetch() + + championships.sort(key=lambda championship: championship.competition.get().start_date) + championship_regions = [championship.region for championship in championships] + regions_missing_championships = [ + region for region in regions if region.key not in championship_regions and not region.obsolete] + + return render_template('regional.html', + c=common.Common(wca_disclaimer=True), + year=year, + championships=championships, + regions_missing_championships=regions_missing_championships) + +@bp.route('/regional/title_policy') +def title_policy(): + with client.context(): + return render_template('regional_title.html', c=common.Common()) + +@bp.route('/regional/eligibility//') +def regional_eligibility(region, year): + with client.context(): + championship = Championship.get_by_id('%s_%d' % (region, int(year))) + if not championship: + abort(404) + competition_id = championship.competition.id() + wca_host = os.environ.get('WCA_HOST') + data = requests.get(wca_host + '/api/v0/competitions/' + competition_id + '/wcif/public') + if data.status_code != 200: + abort(data.status_code) + competition = data.json() + person_keys = [ndb.Key(User, str(person['wcaUserId'])) for person in competition['persons']] + users = ndb.get_multi(person_keys) + if championship.region: + region = championship.region.get() + eligible_states = [key.id() for key in Province.query(Province.region == region.key).fetch(keys_only=True)] + elif championship.province: + eligible_states = [championship.province.id()] + logging.info(eligible_states) + logging.info(person_keys) + logging.info(users) + eligible_users = [user for user in users if user and user.province and (user.province.id() in eligible_states)] + ineligible_users = [user for user in users if user and user.province and (user.province.id() not in eligible_states)] + logging.info(eligible_users) + logging.info(ineligible_users) + return render_template('regional_eligibility.html', + c=common.Common(), + eligible_users=eligible_users, + ineligible_users=ineligible_users, + competition=competition) diff --git a/backend/handlers/user.py b/backend/handlers/user.py new file mode 100644 index 0000000..2b5d4b1 --- /dev/null +++ b/backend/handlers/user.py @@ -0,0 +1,113 @@ +import datetime + +from flask import Blueprint, render_template, redirect, request +from google.cloud import ndb + +from backend.lib import auth +from backend.lib import permissions +from backend.lib.common import Common +from backend.models.province import Province +from backend.models.user import User, Roles, UserLocationUpdate +from backend.models.wca.rank import RankAverage, RankSingle + +bp = Blueprint('user', __name__) +client = ndb.Client() + +# After updating the user's province, write the RankSingle and RankAverage to the +# datastore again to update their provinces. +def RewriteRanks(wca_person): + if not wca_person: + return + for rank_class in (RankSingle, RankAverage): + ndb.put_multi(rank_class.query(rank_class.person == wca_person.key).fetch()) + +def error(msg): + return render_template('error.html', c=Common(), error=msg) + +@bp.route('/edit', methods=['GET', 'POST']) +@bp.route('/edit/', methods=['GET', 'POST']) +def edit_user(user_id=-1): + with client.context(): + me = auth.user() + if not me: + return redirect('/') + if user_id == -1: + user = me + else: + user = User.get_by_id(user_id) + if not user: + return error('Unrecognized user ID %d' % user_id) + if not permissions.CanViewUser(user, me): + return error('You\'re not authorized to view this user.') + + if request.method == 'GET': + return render_template('edit_user.html', + c=Common(), + user=user, + all_roles=Roles.AllRoles(), + editing_location_enabled=permissions.CanEditLocation(user, me), + can_view_roles=permissions.CanViewRoles(user, me), + editable_roles=permissions.EditableRoles(user, me), + successful=request.args.get('successful', 0)) + + city = request.form['city'] + province_id = request.form['province'] + if province_id == 'empty': + province_id = '' + + if request.form['lat'] and request.form['lng']: + lat = int(request.form['lat']) + lng = int(request.form['lng']) + else: + lat = 0 + lng = 0 + template_dict = {} + + old_province_id = user.province.id() if user.province else '' + changed_location = user.city != city or old_province_id != province_id + user_modified = False + if permissions.CanEditLocation(user, me) and changed_location: + if city: + user.city = city + else: + del user.city + if province_id: + user.province = ndb.Key(Province, province_id) + else: + del user.province + if user.wca_person and old_province_id != province_id: + wca_person = user.wca_person.get() + if wca_person: + wca_person.province = user.province + wca_person.put() + RewriteRanks(wca_person) + user.latitude = lat + user.longitude = lng + user_modified = True + + if changed_location: + # Also save the Update. + update = UserLocationUpdate() + update.updater = me.key + if city: + update.city = city + update.update_time = datetime.datetime.now() + if province_id: + update.province = ndb.Key(Province, province_id) + user.updates.append(update) + + elif changed_location: + return error('You\'re not authorized to edit user locations.') + + for role in permissions.EditableRoles(user, me): + if role in request.form and role not in user.roles: + user.roles.append(role) + user_modified = True + elif role not in request.form and role in user.roles: + user.roles.remove(role) + user_modified = True + + if user_modified: + user.put() + + return redirect(request.path + '?successful=1') \ No newline at end of file diff --git a/backend/lib/auth.py b/backend/lib/auth.py new file mode 100644 index 0000000..19dc808 --- /dev/null +++ b/backend/lib/auth.py @@ -0,0 +1,15 @@ +from flask import session + +from backend.models.user import User + +def logged_in(): + return 'wca_account_number' in session + +def user(): + if not logged_in(): + return False + + wca_account_number = session['wca_account_number'] + + user = User.get_by_id(wca_account_number) + return user diff --git a/backend/lib/common.py b/backend/lib/common.py new file mode 100644 index 0000000..343190a --- /dev/null +++ b/backend/lib/common.py @@ -0,0 +1,134 @@ +import datetime +import os + +from flask import request +from google.cloud import ndb + +from backend.lib import auth +from backend.lib import formatters +from backend.lib import secrets +from backend.models.region import Region +from backend.models.province import Province +from backend.models.user import Roles +from backend.models.wca.event import Event +from backend.models.wca.export import get_latest_export + + +class Common(object): + current_date = datetime.datetime.now() + + def __init__(self, wca_disclaimer=False): + self.uri = request.path + self.len = len + self.formatters = formatters + self.year = datetime.date.today().year + self.user = auth.user() + self.wca_disclaimer = wca_disclaimer + + if self.user: + time_since_login = datetime.datetime.now() - self.user.last_login + if time_since_login < datetime.timedelta(seconds=1): + self.just_logged_in = True + + def uri_matches(self, path): + return self.uri.endswith(path) + + def uri_matches_any(self, path_list): + for text, path in path_list: + if self.uri_matches(path): + return True + return False + + def wca_profile(self, wca_id): + return 'https://www.worldcubeassociation.org/persons/%s' % wca_id + + def format_date_range(self, start_date, end_date, include_year=True, full_months=False): + year_chunk = ', %d' % start_date.year if include_year else '' + month_format = lambda date: date.strftime('%B' if full_months else '%b') + if start_date == end_date: + return '%s %d%s' % (month_format(start_date), start_date.day, year_chunk) + elif start_date.month == end_date.month: + return '%s %d – %d%s' % (month_format(start_date), start_date.day, + end_date.day, year_chunk) + else: + return '%s %d – %s %d%s' % (month_format(start_date), start_date.day, + month_format(end_date), end_date.day, + year_chunk) + + def sort_events(self, events): + return sorted(events, key=lambda evt: evt.get().rank) + + def all_provinces(self): + return [province for province in Province.query().order(Province.name).iter()] + + def regions(self): + return [r for r in Region.query().order(Region.name).iter()] + + def events(self, include_magic, include_mbo): + return [e for e in Event.query().order(Event.rank).iter() + if (include_magic or e.key.id() not in ['magic', 'mmagic']) and + (include_mbo or e.key.id() != '333mbo')] + + def years(self): + return reversed(range(2004, datetime.date.today().year + 2)) + + def format_date(self, date): + return '%s %d, %d' % (date.strftime('%B'), date.day, date.year) + + def is_string(self, h): + return type(h) is str + + def is_none(self, h): + return h is None + + def get_nav_items(self): + items = [('Home', '/'), + ('Competitions', [ + ('Nationals', '/nationals'), + ('Regional Championships', '/regional'), + ]), + ('Competitors', [ + ('Province Rankings', '/province_rankings'), + ('WCA Competitor Tutorial', + 'https://www.worldcubeassociation.org/edudoc/competitor-tutorial/tutorial.pdf'), + ]), + ('Organizers', [ + ('CubingUSA Supported Competitions', '/supported'), + ('WCA Organizer Guidelines', 'https://www.worldcubeassociation.org/organizer-guidelines'), + ]), + ('About', [ + ('About CubingUSA', '/about'), + ('Who we are', '/about/who'), + ('Donations', '/about/donations'), + ('Contact Us', '/about/contact'), + ('Logo', '/about/logo'), + ('Public Documents', '/about/documents'), + ]), + ] + if self.user and self.user.HasAnyRole(Roles.AdminRoles()): + items += [('Admin', [ + ('Edit Users', '/admin/edit_users'), + ('Edit Championships', '/admin/edit_championships'), + ])] + return items + + def get_right_nav_items(self): + if self.user: + return [('My Settings', '/edit'), + ('Log out', '/logout')] + else: + return [('Log in', '/login')] + + def is_prod(self): + return os.environ['ENV'] == 'PROD' + + def IconUrl(self, event_id): + return '/static/img/events/%s.svg' % event_id + + def get_secret(self, name): + return secrets.get_secret(name) + + def get_wca_export(self): + val = get_latest_export() + date_part = val.split('_')[-1][:8] + return datetime.datetime.strptime(date_part, '%Y%m%d').strftime('%B %d, %Y').replace(' 0', ' ') diff --git a/backend/lib/formatters.py b/backend/lib/formatters.py new file mode 100644 index 0000000..cba32df --- /dev/null +++ b/backend/lib/formatters.py @@ -0,0 +1,112 @@ +def parse_time(time): + centiseconds = time % 100 + res = time // 100 + seconds = res % 60 + res = res // 60 + minutes = res % 60 + hours = res // 60 + return (hours, minutes, seconds, centiseconds) + +def FormatStandard(time, trim_zeros): + hours, minutes, seconds, centiseconds = parse_time(time) + centiseconds_section = '' if trim_zeros and not centiseconds else '.%02d' % centiseconds + if hours > 0: + return '%d:%02d:%02d' % (hours, minutes, seconds) + elif minutes >= 10: + return '%d:%02d' % (minutes, seconds) + elif minutes > 0: + return '%d:%02d%s' % (minutes, seconds, centiseconds_section) + else: + return '%01d%s' % (seconds, centiseconds_section) + +def FormatVerbose(time, trim_zeros, short_units): + if time >= 6000: + return FormatStandard(time, trim_zeros) + else: + if short_units: + unit = 'sec' + elif time == 100: + unit = 'second' + else: + unit = 'seconds' + return '%s %s' % (FormatStandard(time, trim_zeros), unit) + +def FormatMultiBlindOld(time, verbose, trim_zeros, short_units): + time_in_seconds = time % 100000 + res = time // 100000 + attempted = res % 100 + solved = 199 - res // 100 + + if verbose: + return '%d out of %d cubes in %s' % ( + solved, attempted, + FormatStandard(time_in_seconds * 100, trim_zeros)) + else: + return '%d/%d %s' % (solved, attempted, + FormatStandard(time_in_seconds * 100, trim_zeros)) + +def FormatMultiBlind(time, verbose, trim_zeros, short_units): + missed = time % 100 + res = time // 100 + time_in_seconds = res % 100000 + delta = 99 - res // 100000 + solved = missed + delta + attempted = solved + missed + + if verbose: + return '%d out of %d cubes in %s' % ( + solved, attempted, + FormatStandard(time_in_seconds * 100, trim_zeros)) + else: + return '%d/%d %s' % (solved, attempted, + FormatStandard(time_in_seconds * 100, trim_zeros)) + +def FormatFewestMoves(time, is_average, verbose, short_units): + result = str(time) + if is_average: + result = '%d.%02d' % (time // 100, time % 100) + if short_units: + return result + if verbose: + return '%s moves%s' % (result, ' (average)' if is_average else '') + else: + return result + +def FormatTime(time, event_key, is_average, verbose=False, + trim_zeros=False, short_units=False): + if time == -1: + return 'DNF' + elif time == -2: + return 'DNS' + elif event_key.id() == '333fm': + return FormatFewestMoves(time, is_average, verbose, short_units) + elif event_key.id() in ('333mbf', '333mbo'): + if time > 1000000000: + return FormatMultiBlindOld(time, verbose, trim_zeros, short_units) + else: + return FormatMultiBlind(time, verbose, trim_zeros, short_units) + elif verbose: + return FormatVerbose(time, trim_zeros, short_units) + else: + return FormatStandard(time, trim_zeros) + +def FormatQualifying(time, event_key, is_average, short_units=False): + if event_key.id() == '333fm': + return FormatFewestMoves(time, is_average, verbose=False, short_units=short_units) + elif event_key.id() == '333mbf': + return '%d %s' % (99 - time // 10000000, 'pts' if short_units else 'points') + else: + return FormatVerbose(time, trim_zeros=True, short_units=short_units) + +def FormatResult(result, verbose=False): + is_average = result.fmt.id() in ('a', 'm') + if is_average: + return FormatTime(result.average, result.event, True, verbose) + else: + return FormatTime(result.best, result.event, False, verbose) + +def FormatDate(date): + return '%s, %s %d' % (date.strftime('%A'), date.strftime('%B'), date.day) + +def FormatClockTime(time): + return time.strftime('%I:%M %p').lstrip('0') diff --git a/backend/lib/permissions.py b/backend/lib/permissions.py new file mode 100644 index 0000000..a8d9666 --- /dev/null +++ b/backend/lib/permissions.py @@ -0,0 +1,33 @@ +import datetime + +from backend.models.user import Roles + +def CanEditLocation(user, editor): + if not editor: + return False + if editor.HasAnyRole(Roles.AdminRoles()): + return True + return user == editor + +def CanViewUser(user, viewer): + if not viewer: + return False + return (user == viewer or + viewer.HasAnyRole(Roles.DelegateRoles()) or + viewer.HasAnyRole(Roles.AdminRoles())) + +def CanViewRoles(user, viewer): + if not viewer: + return False + return (viewer.HasAnyRole(Roles.DelegateRoles()) or + viewer.HasAnyRole(Roles.AdminRoles())) + +def EditableRoles(user, editor): + if not editor: + return [] + if editor.HasAnyRole([Roles.GLOBAL_ADMIN]): + return Roles.AllRoles() + elif editor.HasAnyRole([Roles.WEBMASTER, Roles.DIRECTOR]): + return [Roles.WEBMASTER, Roles.DIRECTOR] + else: + return [] diff --git a/backend/lib/secrets.py b/backend/lib/secrets.py new file mode 100644 index 0000000..e1e9d23 --- /dev/null +++ b/backend/lib/secrets.py @@ -0,0 +1,12 @@ +import os + +from google.cloud import secretmanager + +def get_secret(name): + if os.environ.get('ENV') == 'DEV': + return os.environ.get(name) + client = secretmanager.SecretManagerServiceClient() + project_id = os.environ.get('GOOGLE_CLOUD_PROJECT') + name = f"projects/{project_id}/secrets/{name}/versions/latest" + response = client.access_secret_version(request={'name': name}) + return response.payload.data.decode('UTF-8') diff --git a/backend/load_db/README.md b/backend/load_db/README.md new file mode 100644 index 0000000..0ecdf91 --- /dev/null +++ b/backend/load_db/README.md @@ -0,0 +1,23 @@ +# WCA Database Download + +Downloading the WCA database uses enough memory that it's difficult to do from App Engine. So we use a Compute Engine VM instead. + +## Creating a new VM + +You can create a new VM at https://console.cloud.google.com/compute/instancesAdd?project=staging-cubingusa-org. Most of the settings can use the defaults. + +* **Machine configuration**: We're currently using e2-medium. +* **Identity and API access**: Use the Compute Engine default service account. +* **Identity and API access**: Allow full access to all Cloud APIs. +* **Management**: Use the following Startup script: + +```sh +apt upgrade +cd cubingusa +git pull +app/load_db/startup.sh +``` + +Next, SSH into the instance and follow the instructions in `vm_setup.sh`. + +Finally, switch to the Instance Schedule tab, and either create a new schedule or attach it to an existing one. The schedule should both start and stop the instance. diff --git a/backend/load_db/cleanup.py b/backend/load_db/cleanup.py new file mode 100644 index 0000000..1de77d8 --- /dev/null +++ b/backend/load_db/cleanup.py @@ -0,0 +1,23 @@ +from google.cloud import ndb + +from backend.models.wca.export import get_latest_export + +client = ndb.Client() + +# Delete classes we don't use anymore. +with client.context(): + for clsname in ['AppSettings', + 'Document', + 'Schedule', + 'ScheduleCompetition', + 'SchedulePerson', + 'ScheduleRound', + 'ScheduleStaff', + 'ScheduleStage', + 'ScheduleTimeBlock', + 'WcaExport']: + class MyModel(ndb.Model): + pass + + MyModel.__name__ = clsname + ndb.delete_multi(MyModel.query().fetch(keys_only=True)) diff --git a/backend/load_db/delete_old_exports.py b/backend/load_db/delete_old_exports.py new file mode 100644 index 0000000..eb9ac54 --- /dev/null +++ b/backend/load_db/delete_old_exports.py @@ -0,0 +1,27 @@ +import shutil +import os + +from absl import app +from absl import flags +from google.cloud import ndb + +from backend.models.wca.export import get_latest_export + +FLAGS = flags.FLAGS + +flags.DEFINE_string('export_base', '', 'Base directory of exports.') + +client = ndb.Client() + +def main(argv): + with client.context(): + latest_export = get_latest_export() + exports = sorted([f for f in os.listdir(FLAGS.export_base) + if not os.path.isfile(os.path.join(FLAGS.export_base, f)) + and f != latest_export]) + + for export in exports[:-5]: + shutil.rmtree(os.path.join(FLAGS.export_base, export)) + +if __name__ == '__main__': + app.run(main) diff --git a/backend/load_db/get_latest_export.py b/backend/load_db/get_latest_export.py new file mode 100644 index 0000000..a0bbcd5 --- /dev/null +++ b/backend/load_db/get_latest_export.py @@ -0,0 +1,10 @@ +from google.cloud import ndb + +from backend.models.wca.export import get_latest_export + +client = ndb.Client() + +with client.context(): + export = get_latest_export() + if export: + print(export) diff --git a/backend/load_db/load_db.py b/backend/load_db/load_db.py new file mode 100644 index 0000000..951896d --- /dev/null +++ b/backend/load_db/load_db.py @@ -0,0 +1,161 @@ +import csv + +from absl import app +from absl import flags +from absl import logging +from google.cloud import ndb + +from backend.load_db.update_champions import UpdateChampions +from backend.models.user import User +from backend.models.wca.competition import Competition +from backend.models.wca.continent import Continent +from backend.models.wca.country import Country +from backend.models.wca.event import Event +from backend.models.wca.export import set_latest_export +from backend.models.wca.format import Format +from backend.models.wca.person import Person +from backend.models.wca.rank import RankAverage +from backend.models.wca.rank import RankSingle +from backend.models.wca.result import Result +from backend.models.wca.round import RoundType + + +FLAGS = flags.FLAGS + +flags.DEFINE_string('old_export_id', '', 'ID of the old export.') +flags.DEFINE_string('new_export_id', '', 'ID of the new export.') +flags.DEFINE_string('export_base', '', 'Base directory of exports.') + +def get_tables(): + return [('Continents', Continent), + ('Countries', Country), + ('Events', Event), + ('Formats', Format), + ('RoundTypes', RoundType), + ('Persons', Person), + ('RanksSingle', RankSingle), + ('RanksAverage', RankAverage), + ('Competitions', Competition), + ('Results', Result), + ] + + +# Ideally this would live in person.py, but that would be a circular dependency +# between Person and User. +def get_modifier(table): + if table == 'Persons': + id_to_province = {} + for user in User.query(User.province != None): + if user.wca_person: + id_to_province[user.wca_person.id()] = user.province + + def modify(person): + if person.key.id() in id_to_province: + person.province = id_to_province[person.key.id()] + return modify + return None + + +def read_table(path, cls, apply_filter): + filter_fn = lambda row: True + if apply_filter: + filter_fn = cls.Filter() + out = {} + try: + with open(path) as csvfile: + reader = csv.DictReader(csvfile, dialect='excel-tab') + for row in reader: + if filter_fn(row): + fields_to_write = cls.ColumnsUsed() + if 'id' in row: + fields_to_write += ['id'] + to_write = {} + for field in fields_to_write: + if field in row: + to_write[field] = row[field] + out[cls.GetId(row)] = to_write + except: + # This is fine, the file might just not exist. + pass + return out + + +def write_table(path, rows, cls): + use_id = False + with open(path, 'r') as csvfile: + reader = csv.DictReader(csvfile, dialect='excel-tab') + use_id = 'id' in reader.fieldnames + with open(path, 'w') as csvfile: + fields_to_write = cls.ColumnsUsed() + if use_id: + fields_to_write += ['id'] + writer = csv.DictWriter(csvfile, dialect='excel-tab', fieldnames=fields_to_write) + writer.writeheader() + for row in rows.items(): + writer.writerow({k: v for k, v in row[1].items() if k in fields_to_write}) + + +def process_export(old_export_path, new_export_path): + client = ndb.Client() + for table, cls in get_tables(): + logging.info('Processing ' + table) + table_suffix = '/WCA_export_' + table + '.tsv' + with client.context(): + old_rows = read_table(old_export_path + table_suffix, cls, False) + new_rows = read_table(new_export_path + table_suffix, cls, True) + logging.info('Old: %d' % len(old_rows)) + logging.info('New: %d' % len(new_rows)) + write_table(new_export_path + table_suffix, new_rows, cls) + + objects_to_put = [] + keys_to_delete = [] + + modifier = get_modifier(table) + for key in new_rows: + row = new_rows[key] + if key in old_rows and old_rows[key] == row: + continue + else: + obj = cls(id=key) + obj.ParseFromDict(row) + if modifier: + modifier(obj) + objects_to_put += [obj] + for key, row in old_rows.items(): + if key in new_rows: + continue + else: + keys_to_delete += [ndb.Key(cls, key)] + + logging.info('Putting %d objects' % len(objects_to_put)) + while objects_to_put: + batch_size = 5000 + logging.info('%d left' % len(objects_to_put)) + subslice = objects_to_put[:batch_size] + objects_to_put = objects_to_put[batch_size:] + with client.context(): + ndb.put_multi(subslice) + + logging.info('Deleting %d objects' % len(keys_to_delete)) + client = ndb.Client() + with client.context(): + ndb.delete_multi(keys_to_delete) + + +def main(argv): + old_export_path = FLAGS.export_base + FLAGS.old_export_id + new_export_path = FLAGS.export_base + FLAGS.new_export_id + + logging.info(old_export_path) + logging.info(new_export_path) + + # A new client context is created for each write here, to avoid a memory leak. + process_export(old_export_path, new_export_path) + + client = ndb.Client() + with client.context(): + set_latest_export(FLAGS.new_export_id) + UpdateChampions() + +if __name__ == '__main__': + app.run(main) diff --git a/backend/load_db/load_db.sh b/backend/load_db/load_db.sh new file mode 100644 index 0000000..58b683f --- /dev/null +++ b/backend/load_db/load_db.sh @@ -0,0 +1,43 @@ +set -e + +export PYTHONPATH=$(pwd) + +if [ "$CUBINGUSA_ENV" != "COMPUTE_ENGINE" ] +then + echo "Emulating datastore." + $(gcloud beta emulators datastore env-init) +fi + +echo "Deleting old exports" +python3 app/load_db/delete_old_exports.py \ + --export_base=exports/ + +SAVED_EXPORT=$(python3 app/load_db/get_latest_export.py) +LATEST_EXPORT=$(curl https://www.worldcubeassociation.org/export/results \ +| grep TSV:.*WCA_export \ +| sed -s 's/.*\(WCA_export[0-9A-Za-z_]*\).tsv.zip.*/\1/') + +if [ "$SAVED_EXPORT" == "$LATEST_EXPORT" ] +then + echo "Already have latest export $LATEST_EXPORT; returning." +fi + +if [ "$SAVED_EXPORT" != "$LATEST_EXPORT" ] +then + echo "Downloading $LATEST_EXPORT" + URL_TO_FETCH="https://www.worldcubeassociation.org/export/results/$LATEST_EXPORT.tsv.zip" + EXPORT_DIR="exports/$LATEST_EXPORT" + mkdir -p exports/ + rm -rf ./$EXPORT_DIR + mkdir $EXPORT_DIR + ZIP_FILE="$EXPORT_DIR/$LATEST_EXPORT.sql.zip" + + curl $URL_TO_FETCH > $ZIP_FILE + unzip $ZIP_FILE -d $EXPORT_DIR + rm $ZIP_FILE + + python3 app/load_db/load_db.py \ + --old_export_id="$SAVED_EXPORT" \ + --new_export_id="$LATEST_EXPORT" \ + --export_base=exports/ +fi diff --git a/backend/load_db/startup.sh b/backend/load_db/startup.sh new file mode 100644 index 0000000..5726fde --- /dev/null +++ b/backend/load_db/startup.sh @@ -0,0 +1,9 @@ +# Script run on VM startup. +# This is a wrapper for load_db.sh; most of the logic should be in there. +# This is not recommended for running locally, since it sets the environment +# to COMPUTE_ENGINE. + +source env/bin/activate +pip3 install -r requirements.txt + +CUBINGUSA_ENV=COMPUTE_ENGINE ./app/load_db/load_db.sh diff --git a/backend/load_db/update_champions.py b/backend/load_db/update_champions.py new file mode 100644 index 0000000..15e15d9 --- /dev/null +++ b/backend/load_db/update_champions.py @@ -0,0 +1,150 @@ +import collections +import datetime +import logging +import os + +from google.cloud import ndb + +from backend.models.champion import Champion +from backend.models.championship import Championship +from backend.models.eligibility import RegionalChampionshipEligibility +from backend.models.eligibility import ProvinceChampionshipEligibility +from backend.models.province import Province +from backend.models.user import User +from backend.models.wca.country import Country +from backend.models.wca.event import Event +from backend.models.wca.result import Result +from backend.models.wca.result import RoundType + + +def ComputeEligibleCompetitors(championship, competition, results): + if championship.national_championship: + # We don't save this in the datastore because it's easy enough to compute. + return set([r.person.id() for r in results + if r.person_country == ndb.Key(Country, 'Canada')]) + competitors = set([r.person for r in results]) + users = User.query(User.wca_person.IN(competitors)).fetch() + user_keys = [user.key for user in users] + + # Load the saved eligibilities, so that one person can't be eligible for two + # championships of the same type. + if championship.region: + eligibility_class = RegionalChampionshipEligibility + def eligibility_field(user): + if not user.regional_eligibilities: + user.regional_eligibilities = [] + return user.regional_eligibilities + else: + eligibility_class = ProvinceChampionshipEligibility + def eligibility_field(user): + if not user.province_eligibilities: + user.province_eligibilities = [] + return user.province_eligibilities + + valid_province_keys = championship.GetEligibleProvinceKeys() + residency_deadline = (championship.residency_deadline or + datetime.datetime.combine(competition.start_date, datetime.time(0, 0, 0))) + + eligible_competitors = set() + competitors_to_put = [] + + class Resolution: + ELIGIBLE = 0 + INELIGIBLE = 1 + UNRESOLVED = 2 + + for user in users: + resolution = Resolution.UNRESOLVED + for eligibility in eligibility_field(user): + if eligibility.year != championship.year: + continue + if eligibility.championship == championship.key: + resolution = Resolution.ELIGIBLE + else: + resolution = Resolution.INELIGIBLE + # If the competitor hasn't already used their eligibility, check their province. + if resolution == Resolution.UNRESOLVED: + province = None + for update in user.updates or []: + if update.update_time < residency_deadline: + province = update.province + if province and province in valid_province_keys: + # This competitor is eligible, so save this on their User. + resolution = Resolution.ELIGIBLE + eligibility = eligibility_class() + eligibility.championship = championship.key + eligibility_field(user).append(eligibility) + competitors_to_put.append(user) + else: + resolution = Resolution.INELIGIBLE + if resolution == Resolution.ELIGIBLE: + eligible_competitors.add(user.wca_person.id()) + ndb.put_multi(competitors_to_put) + return eligible_competitors + + +def UpdateChampions(): + champions_to_write = [] + champions_to_delete = [] + final_round_keys = set(r.key for r in RoundType.query(RoundType.final == True).iter()) + all_event_keys = set(e.key for e in Event.query().iter()) + championships_already_computed = set() + for champion in Champion.query().iter(): + championships_already_computed.add(champion.championship.id()) + for championship in Championship.query().iter(): + if not championship.national_championship and os.environ.get('ENV') == 'DEV': + # Don't try to compute regional champions on dev, since we don't have + # location data. + continue + competition = championship.competition.get() + # Only recompute champions from the last 2 weeks, in case there are result updates. + if (championship.key.id() in championships_already_computed and + datetime.date.today() - competition.end_date > datetime.timedelta(days=14)): + continue + if competition.end_date > datetime.date.today(): + continue + competition_id = championship.competition.id() + logging.info('Computing champions for %s' % competition_id) + results = (Result.query(Result.competition == championship.competition) + .order(Result.pos).fetch()) + if not results: + logging.info('Results are not uploaded yet. Not computing champions yet.') + continue + eligible_competitors = ComputeEligibleCompetitors(championship, competition, results) + champions = collections.defaultdict(list) + events_held_with_successes = set() + for result in results: + if result.best < 0: + continue + if result.round_type not in final_round_keys: + continue + this_event = result.event + # For multi blind, we only recognize pre-2009 champions in 333mbo, since + # that was the multi-blind event held those years. For clarity in the + # champions listings, we list those champions as the 333mbf champions for + # those years. + if championship.competition.get().year < 2009: + if result.event.id() == '333mbo': + this_event = ndb.Key(Event, '333mbf') + elif result.event.id() == '333mbf': + continue + events_held_with_successes.add(this_event) + if this_event in champions and champions[this_event][0].pos < result.pos: + continue + if result.person.id() not in eligible_competitors: + continue + champions[this_event].append(result) + if result.pos > 1 and len(champions) >= len(events_held_with_successes): + break + for event_key in all_event_keys: + champion_id = Champion.Id(championship.key.id(), event_key.id()) + if event_key in champions: + champion = Champion.get_by_id(champion_id) or Champion(id=champion_id) + champion.championship = championship.key + champion.event = event_key + champion.champions = [c.key for c in champions[event_key]] + champions_to_write.append(champion) + else: + champions_to_delete.append(ndb.Key(Champion, champion_id)) + ndb.put_multi(champions_to_write) + ndb.delete_multi(champions_to_delete) \ No newline at end of file diff --git a/backend/load_db/vm_setup.sh b/backend/load_db/vm_setup.sh new file mode 100644 index 0000000..5f323e9 --- /dev/null +++ b/backend/load_db/vm_setup.sh @@ -0,0 +1,36 @@ +set -e + +# Commands that should be run to set up a new Compute Engine VM. +# First, switch to root. You'll need to set up a root password, use the one +# from the Tech Secrets doc ("Compute Engine VMs"). +# +# sudo passwd +# su +# +# (in general, if you're using the VM, you'll likely want to be root). +# +# Next, clone the cubingusa repository: +# +# cd / +# apt install git +# git clone https://github.com/cubingusa/org cubingusa +# +# Then cd into the cubingusa directory and run this script (without sudo). +# Finally, run app/load_db/startup.sh to download the WCA database and +# initialize the datastore. The first run can take >1 hour; subsequent runs are +# faster since they only need to load entities that have changed. +# +# These commands can also be used to get a local development server working. + +# Install dependencies. +apt install unzip python3-distutils python3-venv build-essential python3-dev libffi-dev libssl-dev python3-pip + +# Set up the virtualenv. +pip3 install virtualenv +python3 -m venv env +source env/bin/activate +pip3 install --upgrade pip +pip3 install -r requirements.txt + +# Set up the production environment. +echo CUBINGUSA_ENV=COMPUTE_ENGINE | tee /etc/environment diff --git a/backend/models/champion.py b/backend/models/champion.py new file mode 100644 index 0000000..0cf3e54 --- /dev/null +++ b/backend/models/champion.py @@ -0,0 +1,19 @@ +from google.cloud import ndb + +from backend.models.championship import Championship +from backend.models.wca.event import Event +from backend.models.wca.result import Result + +class Champion(ndb.Model): + championship = ndb.KeyProperty(kind=Championship) + event = ndb.KeyProperty(kind=Event) + champions = ndb.KeyProperty(kind=Result, repeated=True) + + national_champion = ndb.ComputedProperty(lambda e: e.championship.get().national_championship) + region = ndb.ComputedProperty(lambda e: e.championship.get().region) + province = ndb.ComputedProperty(lambda e: e.championship.get().province) + year = ndb.ComputedProperty(lambda e: e.championship.get().year) + + @staticmethod + def Id(championship_id, event_id): + return '%s_%s' % (championship_id, event_id) diff --git a/backend/models/championship.py b/backend/models/championship.py new file mode 100644 index 0000000..3d03284 --- /dev/null +++ b/backend/models/championship.py @@ -0,0 +1,38 @@ +from google.cloud import ndb + +from backend.models.region import Region +from backend.models.province import Province +from backend.models.wca.competition import Competition + +class Championship(ndb.Model): + national_championship = ndb.BooleanProperty() + region = ndb.KeyProperty(kind=Region) + province = ndb.KeyProperty(kind=Province) + + competition = ndb.KeyProperty(kind=Competition) + + year = ndb.ComputedProperty(lambda self: self.competition.get().year) + + residency_deadline = ndb.DateTimeProperty() + residency_timezone = ndb.StringProperty() + + @staticmethod + def NationalsId(year): + return str(year) + + @staticmethod + def RegionalsId(year, region): + return '%s_%d' % (region.key.id(), year) + + @staticmethod + def ProvinceChampionshipId(year, province): + return '%s_%d' % (province.key.id(), year) + + def GetEligibleProvinceKeys(self): + if self.province: + return [self.province] + if self.region: + return Province.query(Province.region == self.region).fetch(keys_only=True) + # National championships are not based on residence, they're based on + # citizenship. + return None diff --git a/backend/models/eligibility.py b/backend/models/eligibility.py new file mode 100644 index 0000000..5741843 --- /dev/null +++ b/backend/models/eligibility.py @@ -0,0 +1,14 @@ +from google.cloud import ndb + +from backend.models.championship import Championship + +class RegionalChampionshipEligibility(ndb.Model): + championship = ndb.KeyProperty(kind=Championship) + year = ndb.ComputedProperty(lambda self: self.championship.get().year) + region = ndb.ComputedProperty(lambda self: self.championship.get().region) + + +class ProvinceChampionshipEligibility(ndb.Model): + championship = ndb.KeyProperty(kind=Championship) + year = ndb.ComputedProperty(lambda self: self.championship.get().year) + province = ndb.ComputedProperty(lambda self: self.championship.get().province) diff --git a/backend/models/province.py b/backend/models/province.py new file mode 100644 index 0000000..2ec89a0 --- /dev/null +++ b/backend/models/province.py @@ -0,0 +1,25 @@ +from google.cloud import ndb + +from backend.models.region import Region + +# Cache mapping of province names. +provinces_by_name = {} + +class Province(ndb.Model): + name = ndb.StringProperty() + region = ndb.KeyProperty(kind=Region) + is_province = ndb.BooleanProperty() + + @staticmethod + def get_province(province_name): + global provinces_by_name + if province_name in provinces_by_name: + return provinces_by_name[province_name] + # Check if this is the province ID (two-letter abbreviation) + maybe_province = Province.get_by_id(province_name.replace('.', '').replace(' ', '').lower()) + if not maybe_province: + # Or maybe it's the name. + maybe_province = Province.query(Province.name == province_name).get() + if maybe_province: + provinces_by_name[province_name] = maybe_province + return maybe_province \ No newline at end of file diff --git a/backend/models/region.py b/backend/models/region.py new file mode 100644 index 0000000..7343da3 --- /dev/null +++ b/backend/models/region.py @@ -0,0 +1,9 @@ +from google.cloud import ndb + +class Region(ndb.Model): + name = ndb.StringProperty() + championship_name = ndb.StringProperty() + obsolete = ndb.BooleanProperty() + + def CssClass(self): + return 'region-%s' % self.key.id() diff --git a/backend/models/user.py b/backend/models/user.py new file mode 100644 index 0000000..5c5dffa --- /dev/null +++ b/backend/models/user.py @@ -0,0 +1,66 @@ +from google.cloud import ndb + +from backend.models.eligibility import RegionalChampionshipEligibility +from backend.models.eligibility import ProvinceChampionshipEligibility +from backend.models.province import Province +from backend.models.wca.person import Person + + +class Roles: + GLOBAL_ADMIN = 'GLOBAL_ADMIN' + DIRECTOR = 'DIRECTOR' + WEBMASTER = 'WEBMASTER' + SENIOR_DELEGATE = 'SENIOR_DELEGATE' + DELEGATE = 'DELEGATE' + CANDIDATE_DELEGATE = 'CANDIDATE_DELEGATE' + + @staticmethod + def AllRoles(): + return [Roles.GLOBAL_ADMIN, Roles.DIRECTOR, Roles.WEBMASTER, + Roles.SENIOR_DELEGATE, Roles.DELEGATE, Roles.CANDIDATE_DELEGATE] + + @staticmethod + def DelegateRoles(): + return [Roles.SENIOR_DELEGATE, Roles.DELEGATE, Roles.CANDIDATE_DELEGATE] + + @staticmethod + def AdminRoles(): + return [Roles.GLOBAL_ADMIN, Roles.DIRECTOR, Roles.WEBMASTER] + + +class UserLocationUpdate(ndb.Model): + city = ndb.StringProperty() + province = ndb.KeyProperty(kind=Province) + + update_time = ndb.DateTimeProperty() + # Defined at end of file (it's a circular reference so we can't define here) + # updater = ndb.KeyProperty(kind=User) + + +class User(ndb.Model): + wca_person = ndb.KeyProperty(kind=Person) + name = ndb.StringProperty() + email = ndb.StringProperty() + roles = ndb.StringProperty(repeated=True) + + city = ndb.StringProperty() + province = ndb.KeyProperty(kind=Province) + + latitude = ndb.IntegerProperty() + longitude = ndb.IntegerProperty() + + last_login = ndb.DateTimeProperty() + + updates = ndb.StructuredProperty(UserLocationUpdate, repeated=True) + regional_eligibilities = ndb.StructuredProperty(RegionalChampionshipEligibility, repeated=True) + province_eligibilities = ndb.StructuredProperty(ProvinceChampionshipEligibility, repeated=True) + + def HasAnyRole(self, roles): + for role in self.roles: + if role in roles: + return True + return False + + +UserLocationUpdate.updater = ndb.KeyProperty(kind=User) +UserLocationUpdate._fix_up_properties() \ No newline at end of file diff --git a/backend/models/wca/base.py b/backend/models/wca/base.py new file mode 100644 index 0000000..641fa71 --- /dev/null +++ b/backend/models/wca/base.py @@ -0,0 +1,23 @@ +from google.cloud import ndb + +class BaseModel(ndb.Model): + @staticmethod + def GetId(row): + return row['id'] + + def ParseFromDict(self, row): + raise Exception('ParseFromDict is unimplemented.') + + @staticmethod + def ColumnsUsed(): + raise Exception('ColumnsUsed is unimplemented.') + + @staticmethod + def Filter(): + return lambda row: True + + # If any entities need to be fetched from the datastore before writing, + # this method should return their keys. This is used when we have a + # ComputedProperty. + def ObjectsToGet(self): + return [] diff --git a/backend/models/wca/competition.py b/backend/models/wca/competition.py new file mode 100644 index 0000000..c6afc1a --- /dev/null +++ b/backend/models/wca/competition.py @@ -0,0 +1,68 @@ +import datetime + +from google.cloud import ndb + +from backend.models.province import Province +from backend.models.wca.base import BaseModel +from backend.models.wca.country import Country +from backend.models.wca.event import Event + +class Competition(BaseModel): + start_date = ndb.DateProperty() + end_date = ndb.DateProperty() + year = ndb.IntegerProperty() + + name = ndb.StringProperty() + short_name = ndb.StringProperty() + + events = ndb.KeyProperty(kind=Event, repeated=True) + + latitude = ndb.IntegerProperty() + longitude = ndb.IntegerProperty() + + country = ndb.KeyProperty(kind=Country) + city_name = ndb.StringProperty() + province = ndb.KeyProperty(kind=Province) + + def ParseFromDict(self, row): + self.start_date = datetime.date(int(row['year']), int(row['month']), int(row['day'])) + self.end_date = datetime.date(int(row['year']), int(row['endMonth']), int(row['endDay'])) + self.year = int(row['year']) + + self.name = row['name'] + self.short_name = row['cellName'] + + self.events = [ndb.Key(Event, event_id) for event_id in row['eventSpecs'].split(' ')] + + self.latitude = int(row['latitude']) + self.longitude = int(row['longitude']) + + province = None + if ',' in row['cityName']: + city_split = row['cityName'].split(',') + province_name = city_split[-1].strip() + province = Province.get_province(province_name) + self.city_name = ','.join(city_split[:-1]) + if province: + self.province = province.key + else: + self.city_name = row['cityName'] + self.country = ndb.Key(Country, row['countryId']) + + @staticmethod + def Filter(): + # Only load US competitions that haven't been cancelled. + def filter_row(row): + return row['countryId'] == 'USA' and int(row['cancelled']) != 1 + return filter_row + + @staticmethod + def ColumnsUsed(): + return ['year', 'month', 'day', 'endMonth', 'endDay', 'cellName', 'eventSpecs', + 'latitude', 'longitude', 'cityName', 'countryId', 'name'] + + def GetWCALink(self): + return 'https://worldcubeassociation.org/competitions/%s' % self.key.id() + + def GetEventsString(self): + return ','.join([e.id() for e in self.events]) diff --git a/backend/models/wca/continent.py b/backend/models/wca/continent.py new file mode 100644 index 0000000..da2690a --- /dev/null +++ b/backend/models/wca/continent.py @@ -0,0 +1,15 @@ +from google.cloud import ndb + +from backend.models.wca.base import BaseModel + +class Continent(BaseModel): + name = ndb.StringProperty() + recordName = ndb.StringProperty() + + def ParseFromDict(self, row): + self.name = row['name'] + self.recordName = row['recordName'] + + @staticmethod + def ColumnsUsed(): + return ['name', 'recordName'] diff --git a/backend/models/wca/country.py b/backend/models/wca/country.py new file mode 100644 index 0000000..361eabb --- /dev/null +++ b/backend/models/wca/country.py @@ -0,0 +1,18 @@ +from google.cloud import ndb + +from backend.models.wca.base import BaseModel +from backend.models.wca.continent import Continent + +class Country(BaseModel): + name = ndb.StringProperty() + continent = ndb.KeyProperty(kind=Continent) + iso2 = ndb.StringProperty() + + def ParseFromDict(self, row): + self.name = row['name'] + self.continent = ndb.Key(Continent, row['continentId']) + self.iso2 = row['iso2'] + + @staticmethod + def ColumnsUsed(): + return ['name', 'continentId', 'iso2'] diff --git a/backend/models/wca/event.py b/backend/models/wca/event.py new file mode 100644 index 0000000..c207aea --- /dev/null +++ b/backend/models/wca/event.py @@ -0,0 +1,18 @@ +from google.cloud import ndb + +from backend.models.wca.base import BaseModel + +class Event(BaseModel): + name = ndb.StringProperty() + rank = ndb.IntegerProperty() + + def ParseFromDict(self, row): + self.name = row['name'] + self.rank = int(row['rank']) + + @staticmethod + def ColumnsUsed(): + return ['name', 'rank'] + + def IconURL(self): + return '/static/img/events/%s.svg' % self.key.id() diff --git a/backend/models/wca/export.py b/backend/models/wca/export.py new file mode 100644 index 0000000..fea30ef --- /dev/null +++ b/backend/models/wca/export.py @@ -0,0 +1,15 @@ +from google.cloud import ndb + +class LatestWcaExport(ndb.Model): + export_id = ndb.StringProperty() + +def get_latest_export(): + latest = LatestWcaExport.get_by_id('1') + if latest: + return latest.export_id + return None + +def set_latest_export(export_id): + latest = LatestWcaExport.get_by_id('1') or LatestWcaExport(id='1') + latest.export_id = export_id + latest.put() diff --git a/backend/models/wca/format.py b/backend/models/wca/format.py new file mode 100644 index 0000000..0ffd8e1 --- /dev/null +++ b/backend/models/wca/format.py @@ -0,0 +1,17 @@ +from google.cloud import ndb + +from backend.models.wca.base import BaseModel + +class Format(BaseModel): + name = ndb.StringProperty() + + def ParseFromDict(self, row): + self.name = row['name'] + + @staticmethod + def ColumnsUsed(): + return ['name'] + + def GetShortName(self): + # Average of 5 -> Ao5 + return self.name[0] + 'o' + self.name[-1] diff --git a/backend/models/wca/person.py b/backend/models/wca/person.py new file mode 100644 index 0000000..12d36a1 --- /dev/null +++ b/backend/models/wca/person.py @@ -0,0 +1,31 @@ +from google.cloud import ndb + +from backend.models.province import Province +from backend.models.wca.country import BaseModel +from backend.models.wca.country import Country + +class Person(BaseModel): + # Details from row with subid 1 (i.e. most recent updates) + name = ndb.StringProperty() + country = ndb.KeyProperty(kind=Country) + gender = ndb.StringProperty() + + # The person's province, if they're a Canadian resident. This isn't computed during + # the database import. + province = ndb.KeyProperty(kind=Province) + + def ParseFromDict(self, row): + self.name = row['name'] + self.country = ndb.Key(Country, row['countryId']) + self.gender = row['gender'] + + @staticmethod + def Filter(): + return lambda row: int(row['subid']) == 1 + + @staticmethod + def ColumnsUsed(): + return ['name', 'countryId', 'gender'] + + def GetWCALink(self): + return 'https://worldcubeassociation.org/persons/%s' % self.key.id() diff --git a/backend/models/wca/rank.py b/backend/models/wca/rank.py new file mode 100644 index 0000000..78b08e2 --- /dev/null +++ b/backend/models/wca/rank.py @@ -0,0 +1,40 @@ +from google.cloud import ndb + +from backend.models.user import User +from backend.models.wca.base import BaseModel +from backend.models.wca.event import Event +from backend.models.wca.person import Person + +class RankBase(BaseModel): + person = ndb.KeyProperty(kind=Person) + event = ndb.KeyProperty(kind=Event) + best = ndb.IntegerProperty() + state = ndb.ComputedProperty(lambda self: self.GetState()) + + def GetState(self): + if not self.person or not self.person.get(): + return None + return self.person.get().state + + @staticmethod + def GetId(row): + return '%s_%s' % (row['personId'], row['eventId']) + + def ParseFromDict(self, row): + self.person = ndb.Key(Person, row['personId']) + self.event = ndb.Key(Event, row['eventId']) + self.best = int(row['best']) + + @staticmethod + def ColumnsUsed(): + return ['personId', 'eventId', 'best'] + + def ObjectsToGet(self): + return [self.person] + + +class RankAverage(RankBase): + pass + +class RankSingle(RankBase): + pass diff --git a/backend/models/wca/result.py b/backend/models/wca/result.py new file mode 100644 index 0000000..4bc4f57 --- /dev/null +++ b/backend/models/wca/result.py @@ -0,0 +1,55 @@ +from google.cloud import ndb + +from backend.models.wca.base import BaseModel +from backend.models.wca.competition import Competition +from backend.models.wca.country import Country +from backend.models.wca.event import Event +from backend.models.wca.format import Format +from backend.models.wca.person import Person +from backend.models.wca.round import RoundType + +class Result(BaseModel): + competition = ndb.KeyProperty(kind=Competition) + event = ndb.KeyProperty(kind=Event) + round_type = ndb.KeyProperty(kind=RoundType) + person = ndb.KeyProperty(kind=Person) + fmt = ndb.KeyProperty(kind=Format) + + person_name = ndb.StringProperty() + person_country = ndb.KeyProperty(kind=Country) + + pos = ndb.IntegerProperty() + best = ndb.IntegerProperty() + average = ndb.IntegerProperty() + values = ndb.IntegerProperty(repeated=True) + + regional_single_record = ndb.StringProperty() + regional_average_record = ndb.StringProperty() + + def ParseFromDict(self, row): + self.competition = ndb.Key(Competition, row['competitionId']) + self.event = ndb.Key(Event, row['eventId']) + self.round_type = ndb.Key(RoundType, row['roundTypeId']) + self.person = ndb.Key(Person, row['personId']) + self.fmt = ndb.Key(Format, row['formatId']) + + self.person_name = row['personName'] + self.person_country = ndb.Key(Country, row['personCountryId']) + + self.pos = int(row['pos']) + self.best = int(row['best']) + self.average = int(row['average']) + self.values = [v for v in [int(row['value%d' % n]) for n in (1, 2, 3, 4, 5)] if v != 0] + + self.regional_single_record = row['regionalSingleRecord'] + self.regional_average_record = row['regionalAverageRecord'] + + @staticmethod + def GetId(row): + return '%s_%s_%s_%s' % (row['competitionId'], row['eventId'], row['roundTypeId'], row['personId']) + + @staticmethod + def ColumnsUsed(): + return ['competitionId', 'eventId', 'roundTypeId', 'personId', 'formatId', 'personName', + 'personCountryId', 'pos', 'best', 'average', 'value1', 'value2', 'value3', 'value4', + 'value5', 'regionalSingleRecord', 'regionalAverageRecord'] diff --git a/backend/models/wca/round.py b/backend/models/wca/round.py new file mode 100644 index 0000000..7646a9e --- /dev/null +++ b/backend/models/wca/round.py @@ -0,0 +1,17 @@ +from google.cloud import ndb + +from backend.models.wca.base import BaseModel + +class RoundType(BaseModel): + rank = ndb.IntegerProperty() + name = ndb.StringProperty() + final = ndb.BooleanProperty() + + def ParseFromDict(self, row): + self.rank = int(row['rank']) + self.name = row['cellName'] + self.final = int(row['final']) == 1 + + @staticmethod + def ColumnsUsed(): + return ['rank', 'cellName', 'final'] diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..6cd31e3 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,8 @@ +Flask==2.3.2 +python-dotenv==0.19.2 +Authlib==0.15.5 +google-cloud-logging +google-cloud-ndb +google-cloud-recaptcha-enterprise +google-cloud-secret-manager +absl-py \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 7099445..5e2ef8b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,15 +2,28 @@ version: '3.8' services: app: - container_name: app-dev + container_name: frontend-dev build: context: . target: development volumes: - - ./app:/app + - ./frontend:/frontend env_file: ./.env ports: - ${NODE_LOCAL_PORT}:${NODE_DOCKER_PORT} + networks: + - frontend + - backend + depends_on: + db: + condition: service_healthy + + flask: + build: + context: backend + target: builder + restart: always + env_file: ./.env environment: - DB_HOST=db - DB_USER=${MYSQLDB_USER} @@ -18,12 +31,12 @@ services: - DB_NAME=${MYSQLDB_DATABASE} - DB_PORT=${MYSQLDB_DOCKER_PORT} networks: - - frontend - - backend + - backnet depends_on: db: condition: service_healthy - + ports: + - ${FLASK_LOCAL_PORT}:${FLASK_DOCKER_PORT} db: container_name: mysql-db diff --git a/app/.gitignore b/frontend/.gitignore similarity index 100% rename from app/.gitignore rename to frontend/.gitignore diff --git a/app/package-lock.json b/frontend/package-lock.json similarity index 100% rename from app/package-lock.json rename to frontend/package-lock.json diff --git a/app/package.json b/frontend/package.json similarity index 100% rename from app/package.json rename to frontend/package.json diff --git a/app/public/android-chrome-192x192.png b/frontend/public/android-chrome-192x192.png similarity index 100% rename from app/public/android-chrome-192x192.png rename to frontend/public/android-chrome-192x192.png diff --git a/app/public/android-chrome-512x512.png b/frontend/public/android-chrome-512x512.png similarity index 100% rename from app/public/android-chrome-512x512.png rename to frontend/public/android-chrome-512x512.png diff --git a/app/public/apple-touch-icon.png b/frontend/public/apple-touch-icon.png similarity index 100% rename from app/public/apple-touch-icon.png rename to frontend/public/apple-touch-icon.png diff --git a/app/public/browserconfig.xml b/frontend/public/browserconfig.xml similarity index 100% rename from app/public/browserconfig.xml rename to frontend/public/browserconfig.xml diff --git a/app/public/documents/annual-members-meeting-jan-29-2023.pdf b/frontend/public/documents/annual-members-meeting-jan-29-2023.pdf similarity index 100% rename from app/public/documents/annual-members-meeting-jan-29-2023.pdf rename to frontend/public/documents/annual-members-meeting-jan-29-2023.pdf diff --git a/app/public/documents/by-laws-v1.0.pdf b/frontend/public/documents/by-laws-v1.0.pdf similarity index 100% rename from app/public/documents/by-laws-v1.0.pdf rename to frontend/public/documents/by-laws-v1.0.pdf diff --git a/app/public/documents/by-laws-v1.1.pdf b/frontend/public/documents/by-laws-v1.1.pdf similarity index 100% rename from app/public/documents/by-laws-v1.1.pdf rename to frontend/public/documents/by-laws-v1.1.pdf diff --git a/app/public/documents/by-laws-v1.2.pdf b/frontend/public/documents/by-laws-v1.2.pdf similarity index 100% rename from app/public/documents/by-laws-v1.2.pdf rename to frontend/public/documents/by-laws-v1.2.pdf diff --git a/app/public/documents/by-laws-v1.3.pdf b/frontend/public/documents/by-laws-v1.3.pdf similarity index 100% rename from app/public/documents/by-laws-v1.3.pdf rename to frontend/public/documents/by-laws-v1.3.pdf diff --git a/app/public/documents/by-laws-v1.4.pdf b/frontend/public/documents/by-laws-v1.4.pdf similarity index 100% rename from app/public/documents/by-laws-v1.4.pdf rename to frontend/public/documents/by-laws-v1.4.pdf diff --git a/app/public/documents/by-laws.pdf b/frontend/public/documents/by-laws.pdf similarity index 100% rename from app/public/documents/by-laws.pdf rename to frontend/public/documents/by-laws.pdf diff --git a/app/public/documents/certificate-of-incorporation.pdf b/frontend/public/documents/certificate-of-incorporation.pdf similarity index 100% rename from app/public/documents/certificate-of-incorporation.pdf rename to frontend/public/documents/certificate-of-incorporation.pdf diff --git a/app/public/documents/directors-meeting-apr-19-2023.pdf b/frontend/public/documents/directors-meeting-apr-19-2023.pdf similarity index 100% rename from app/public/documents/directors-meeting-apr-19-2023.pdf rename to frontend/public/documents/directors-meeting-apr-19-2023.pdf diff --git a/app/public/documents/directors-meeting-apr-9-2022.pdf b/frontend/public/documents/directors-meeting-apr-9-2022.pdf similarity index 100% rename from app/public/documents/directors-meeting-apr-9-2022.pdf rename to frontend/public/documents/directors-meeting-apr-9-2022.pdf diff --git a/app/public/documents/directors-meeting-aug-12-2022.pdf b/frontend/public/documents/directors-meeting-aug-12-2022.pdf similarity index 100% rename from app/public/documents/directors-meeting-aug-12-2022.pdf rename to frontend/public/documents/directors-meeting-aug-12-2022.pdf diff --git a/app/public/documents/directors-meeting-may-25-2022.pdf b/frontend/public/documents/directors-meeting-may-25-2022.pdf similarity index 100% rename from app/public/documents/directors-meeting-may-25-2022.pdf rename to frontend/public/documents/directors-meeting-may-25-2022.pdf diff --git a/app/public/documents/first-directors-meeting-feb-26-2022.pdf b/frontend/public/documents/first-directors-meeting-feb-26-2022.pdf similarity index 100% rename from app/public/documents/first-directors-meeting-feb-26-2022.pdf rename to frontend/public/documents/first-directors-meeting-feb-26-2022.pdf diff --git a/app/public/documents/first-members-meeting-may-7-2022.pdf b/frontend/public/documents/first-members-meeting-may-7-2022.pdf similarity index 100% rename from app/public/documents/first-members-meeting-may-7-2022.pdf rename to frontend/public/documents/first-members-meeting-may-7-2022.pdf diff --git a/app/public/documents/reimbursement-policy-v1.0.pdf b/frontend/public/documents/reimbursement-policy-v1.0.pdf similarity index 100% rename from app/public/documents/reimbursement-policy-v1.0.pdf rename to frontend/public/documents/reimbursement-policy-v1.0.pdf diff --git a/app/public/documents/reimbursement-policy-v1.1.pdf b/frontend/public/documents/reimbursement-policy-v1.1.pdf similarity index 100% rename from app/public/documents/reimbursement-policy-v1.1.pdf rename to frontend/public/documents/reimbursement-policy-v1.1.pdf diff --git a/app/public/documents/reimbursement-policy.pdf b/frontend/public/documents/reimbursement-policy.pdf similarity index 100% rename from app/public/documents/reimbursement-policy.pdf rename to frontend/public/documents/reimbursement-policy.pdf diff --git a/app/public/documents/supported-events-policy-v1.0.pdf b/frontend/public/documents/supported-events-policy-v1.0.pdf similarity index 100% rename from app/public/documents/supported-events-policy-v1.0.pdf rename to frontend/public/documents/supported-events-policy-v1.0.pdf diff --git a/app/public/documents/supported-events-policy.pdf b/frontend/public/documents/supported-events-policy.pdf similarity index 100% rename from app/public/documents/supported-events-policy.pdf rename to frontend/public/documents/supported-events-policy.pdf diff --git a/app/public/favicon-16x16.png b/frontend/public/favicon-16x16.png similarity index 100% rename from app/public/favicon-16x16.png rename to frontend/public/favicon-16x16.png diff --git a/app/public/favicon-32x32.png b/frontend/public/favicon-32x32.png similarity index 100% rename from app/public/favicon-32x32.png rename to frontend/public/favicon-32x32.png diff --git a/app/public/favicon.ico b/frontend/public/favicon.ico similarity index 100% rename from app/public/favicon.ico rename to frontend/public/favicon.ico diff --git a/app/public/index.html b/frontend/public/index.html similarity index 100% rename from app/public/index.html rename to frontend/public/index.html diff --git a/app/public/logo.svg b/frontend/public/logo.svg similarity index 100% rename from app/public/logo.svg rename to frontend/public/logo.svg diff --git a/app/public/mstile-150x150.png b/frontend/public/mstile-150x150.png similarity index 100% rename from app/public/mstile-150x150.png rename to frontend/public/mstile-150x150.png diff --git a/app/public/robots.txt b/frontend/public/robots.txt similarity index 100% rename from app/public/robots.txt rename to frontend/public/robots.txt diff --git a/app/public/safari-pinned-tab.svg b/frontend/public/safari-pinned-tab.svg similarity index 100% rename from app/public/safari-pinned-tab.svg rename to frontend/public/safari-pinned-tab.svg diff --git a/app/public/site.webmanifest b/frontend/public/site.webmanifest similarity index 100% rename from app/public/site.webmanifest rename to frontend/public/site.webmanifest diff --git a/app/src/App.tsx b/frontend/src/App.tsx similarity index 92% rename from app/src/App.tsx rename to frontend/src/App.tsx index 3f7a526..1651157 100644 --- a/app/src/App.tsx +++ b/frontend/src/App.tsx @@ -11,7 +11,6 @@ import { Organization } from "./pages/Organization"; import { FAQ } from "./pages/FAQ"; import { Rankings } from "./pages/Rankings"; import { Account } from "./pages/Account"; -import { WcaCallback } from "./pages/WcaCallback"; i18n.use(initReactI18next).init({ @@ -49,9 +48,8 @@ const App = () => { } /> } /> } /> - } /> - {["about", "organization", "faq", "rankings", "account","wca_callback"].map((route) => ( + {["about", "organization", "faq", "rankings", "account"].map((route) => ( Date: Wed, 28 Jun 2023 02:12:44 -0400 Subject: [PATCH 16/72] the backend is running --- .env.dev | 4 +++- backend/requirements.txt | 1 + frontend/src/components/Api.tsx | 5 +++++ frontend/src/pages/Account.tsx | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 frontend/src/components/Api.tsx diff --git a/.env.dev b/.env.dev index b83d8e9..b72aba8 100644 --- a/.env.dev +++ b/.env.dev @@ -17,4 +17,6 @@ ENV=DEV WCA_OAUTH_CLIENT_ID='example-id' WCA_OAUTH_CLIENT_SECRET='example-secret' WCA_HOST='https://staging.worldcubeassociation.org' -SESSION_SECRET_KEY='12340987' \ No newline at end of file +SESSION_SECRET_KEY='12340987' +DATASTORE_EMULATOR_HOST=localhost:8081 +GCLOUD_PROJECT=scc-staging-391105 \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt index 6cd31e3..56a7fb4 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,4 +1,5 @@ Flask==2.3.2 +gunicorn==20.1.0 python-dotenv==0.19.2 Authlib==0.15.5 google-cloud-logging diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx new file mode 100644 index 0000000..9f13f61 --- /dev/null +++ b/frontend/src/components/Api.tsx @@ -0,0 +1,5 @@ +const API_BASE_URL = "http://localhost:8080" + +export const signIn = () => { + window.location.assign( API_BASE_URL+ "/login"); +} \ No newline at end of file diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 1dada51..dc5f25b 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -3,7 +3,7 @@ import { Container, } from "@mui/material"; import Button from '@mui/material/Button'; -import { signIn } from '../logic/auth'; +import { signIn } from '../components/Api'; export const Account = () => { const { t } = useTranslation(); From bef4eeda11c98cd6bc306b624aa82214113f1c5d Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 28 Jun 2023 16:31:58 -0400 Subject: [PATCH 17/72] the start of the login works but it crashes during callback --- .env.dev | 10 ++-------- backend/__init__.py | 4 ++-- docker-compose.yaml | 40 ---------------------------------------- 3 files changed, 4 insertions(+), 50 deletions(-) diff --git a/.env.dev b/.env.dev index b72aba8..f8aaadf 100644 --- a/.env.dev +++ b/.env.dev @@ -1,9 +1,3 @@ -MYSQLDB_USER=root -MYSQLDB_ROOT_PASSWORD=123456 -MYSQLDB_DATABASE=scc-web -MYSQLDB_LOCAL_PORT=3307 -MYSQLDB_DOCKER_PORT=3306 - NODE_LOCAL_PORT=2003 NODE_DOCKER_PORT=2003 @@ -14,8 +8,8 @@ FLASK_IP='http://localhost:8000' NODE_ENV=DEV ENV=DEV -WCA_OAUTH_CLIENT_ID='example-id' -WCA_OAUTH_CLIENT_SECRET='example-secret' +WCA_CLIENT_ID='example-id' +WCA_CLIENT_SECRET='example-secret' WCA_HOST='https://staging.worldcubeassociation.org' SESSION_SECRET_KEY='12340987' DATASTORE_EMULATOR_HOST=localhost:8081 diff --git a/backend/__init__.py b/backend/__init__.py index 4aaf807..c336ab0 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -11,7 +11,7 @@ from backend.lib.secrets import get_secret if os.path.exists('.env.dev'): - load_dotenv('.env.dev') + load_dotenv('.env') if os.environ.get('ENV') == 'PROD': client = google.cloud.logging.Client() @@ -47,7 +47,7 @@ def before_request(): authorize_url=wca_host + '/oauth/authorize', authorize_params=None, api_base_url=wca_host + '/api/v0/', - client_kwargs={'scope': 'public email'}, + client_kwargs={'scope': 'public email dob'}, ) from backend.handlers.admin import bp as admin_bp diff --git a/docker-compose.yaml b/docker-compose.yaml index 5e2ef8b..ac1f5fe 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -14,9 +14,6 @@ services: networks: - frontend - backend - depends_on: - db: - condition: service_healthy flask: build: @@ -24,45 +21,11 @@ services: target: builder restart: always env_file: ./.env - environment: - - DB_HOST=db - - DB_USER=${MYSQLDB_USER} - - DB_PASSWORD=${MYSQLDB_ROOT_PASSWORD} - - DB_NAME=${MYSQLDB_DATABASE} - - DB_PORT=${MYSQLDB_DOCKER_PORT} networks: - backnet - depends_on: - db: - condition: service_healthy ports: - ${FLASK_LOCAL_PORT}:${FLASK_DOCKER_PORT} - db: - container_name: mysql-db - image: mysql:8.0 - command: --default-authentication-plugin=mysql_native_password - restart: always - env_file: ./.env - healthcheck: - test: - [ - "CMD-SHELL", - 'mysqladmin ping -h 127.0.0.1 --password="$MYSQLDB_ROOT_PASSWORD" --silent', - ] - interval: 3s - retries: 5 - start_period: 30s - environment: - - MYSQL_ROOT_PASSWORD=${MYSQLDB_ROOT_PASSWORD} - - MYSQL_DATABASE=${MYSQLDB_DATABASE} - ports: - - ${MYSQLDB_LOCAL_PORT}:${MYSQLDB_DOCKER_PORT} - volumes: - - mysql-data:/var/lib/mysql - networks: - - backend - nginx: container_name: nginx-server image: nginx:latest @@ -79,6 +42,3 @@ services: networks: frontend: backend: - -volumes: - mysql-data: From 8a5cc5cc5779ead1fa554e84cd16875db4a7be1d Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 2 Jul 2023 15:54:24 -0400 Subject: [PATCH 18/72] oauth is working :) --- .env.dev | 14 ++++++++------ Dockerfile | 2 +- backend/Dockerfile | 2 +- backend/__init__.py | 1 + backend/handlers/auth.py | 5 +++-- docker-compose.yaml | 20 ++++++++++---------- frontend/src/components/Api.tsx | 2 +- 7 files changed, 25 insertions(+), 21 deletions(-) diff --git a/.env.dev b/.env.dev index f8aaadf..8faed6f 100644 --- a/.env.dev +++ b/.env.dev @@ -3,14 +3,16 @@ NODE_DOCKER_PORT=2003 FLASK_LOCAL_PORT=8000 FLASK_DOCKER_PORT=8000 -FLASK_IP='http://localhost:8000' +FLASK_ADDRESS=http://localhost:8000 NODE_ENV=DEV ENV=DEV -WCA_CLIENT_ID='example-id' -WCA_CLIENT_SECRET='example-secret' -WCA_HOST='https://staging.worldcubeassociation.org' -SESSION_SECRET_KEY='12340987' +WCA_CLIENT_ID=example-id +WCA_CLIENT_SECRET=example-secret +WCA_HOST=https://www.worldcubeassociation.org +SESSION_SECRET_KEY=12340987 DATASTORE_EMULATOR_HOST=localhost:8081 -GCLOUD_PROJECT=scc-staging-391105 \ No newline at end of file +GCLOUD_PROJECT=scc-staging-391105 + +ADMIN_WCA_ID=2017ONDE01 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 5538160..967fa4c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM node:14-alpine AS development ENV NODE_ENV development -WORKDIR /app +WORKDIR /frontend COPY package*.json ./ RUN npm install diff --git a/backend/Dockerfile b/backend/Dockerfile index 425d57b..f48813e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,6 +1,6 @@ FROM python:3.11-alpine AS builder -ENV FLASK_APP biblio +ENV FLASK_APP scc ENV FLASK_DEBUG 1 ENV FLASK_RUN_PORT 8000 ENV FLASK_RUN_HOST 0.0.0.0 diff --git a/backend/__init__.py b/backend/__init__.py index c336ab0..572bdcb 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -47,6 +47,7 @@ def before_request(): authorize_url=wca_host + '/oauth/authorize', authorize_params=None, api_base_url=wca_host + '/api/v0/', + token_endpoint_auth_method='client_secret_post', client_kwargs={'scope': 'public email dob'}, ) diff --git a/backend/handlers/auth.py b/backend/handlers/auth.py index 157542b..43d6ac6 100644 --- a/backend/handlers/auth.py +++ b/backend/handlers/auth.py @@ -4,6 +4,7 @@ from flask import Blueprint, url_for, redirect, request, session from google.cloud import ndb +from backend.lib.secrets import get_secret from backend.models.user import User, Roles from backend.models.wca.person import Person from backend.models.wca.rank import RankSingle, RankAverage @@ -86,8 +87,8 @@ def oauth_callback(): user.last_login = datetime.datetime.now() user.put() - - return redirect(session.pop('referrer', None) or '/') + address = get_secret('FLASK_ADDRESS') + return redirect(address or '/') @bp.route('/logout') def logout(): diff --git a/docker-compose.yaml b/docker-compose.yaml index ac1f5fe..cdf2e03 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -15,16 +15,16 @@ services: - frontend - backend - flask: - build: - context: backend - target: builder - restart: always - env_file: ./.env - networks: - - backnet - ports: - - ${FLASK_LOCAL_PORT}:${FLASK_DOCKER_PORT} +# flask: +# build: +# context: backend +# target: builder +# restart: always +# env_file: ./.env +# networks: +# - backend +# ports: +# - ${FLASK_LOCAL_PORT}:${FLASK_DOCKER_PORT} nginx: container_name: nginx-server diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 9f13f61..5db4597 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -1,4 +1,4 @@ -const API_BASE_URL = "http://localhost:8080" +const API_BASE_URL = "http://localhost:8083" export const signIn = () => { window.location.assign( API_BASE_URL+ "/login"); From 8bffbb9214ecba4c92d1c8ed840fe426187a1e54 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Mon, 3 Jul 2023 02:50:22 -0400 Subject: [PATCH 19/72] Can log in and out from the frontend --- backend/__init__.py | 2 + backend/handlers/auth.py | 2 +- backend/handlers/user.py | 18 ++++++++- backend/requirements.txt | 3 +- frontend/package-lock.json | 68 +++++++++++++++++++++++++++++--- frontend/package.json | 1 + frontend/src/components/Api.tsx | 31 ++++++++++++++- frontend/src/components/Types.ts | 8 ++++ frontend/src/httpClient.tsx | 5 +++ frontend/src/pages/Account.tsx | 37 ++++++++++++----- 10 files changed, 155 insertions(+), 20 deletions(-) create mode 100644 frontend/src/components/Types.ts create mode 100644 frontend/src/httpClient.tsx diff --git a/backend/__init__.py b/backend/__init__.py index 572bdcb..622f823 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -6,6 +6,7 @@ from authlib.integrations.flask_client import OAuth from dotenv import load_dotenv from flask import Flask, redirect, request +from flask_cors import CORS, cross_origin import google.cloud.logging from backend.lib.secrets import get_secret @@ -28,6 +29,7 @@ app = Flask(__name__) app.secret_key = get_secret('SESSION_SECRET_KEY') app.permanent_session_lifetime = datetime.timedelta(days=7) +CORS(app, supports_credentials=True) @app.before_request def before_request(): diff --git a/backend/handlers/auth.py b/backend/handlers/auth.py index 43d6ac6..ebd94c0 100644 --- a/backend/handlers/auth.py +++ b/backend/handlers/auth.py @@ -88,7 +88,7 @@ def oauth_callback(): user.put() address = get_secret('FLASK_ADDRESS') - return redirect(address or '/') + return redirect(address+'/account' or '/') @bp.route('/logout') def logout(): diff --git a/backend/handlers/user.py b/backend/handlers/user.py index 2b5d4b1..915258f 100644 --- a/backend/handlers/user.py +++ b/backend/handlers/user.py @@ -1,6 +1,6 @@ import datetime -from flask import Blueprint, render_template, redirect, request +from flask import Blueprint, render_template, redirect, request, jsonify from google.cloud import ndb from backend.lib import auth @@ -24,6 +24,22 @@ def RewriteRanks(wca_person): def error(msg): return render_template('error.html', c=Common(), error=msg) +@bp.route('/me') +def me(): + with client.context(): + me = auth.user() + if not me: + return jsonify({"error": "Unauthorized"}), 401 + return jsonify({ + "id": me.key.id(), + "name": me.name, + "roles": me.roles, + "city": me.city, + "province": me.province.id() if me.province else None, + "wca_person": me.wca_person.id() if me.wca_person else None + }) + + @bp.route('/edit', methods=['GET', 'POST']) @bp.route('/edit/', methods=['GET', 'POST']) def edit_user(user_id=-1): diff --git a/backend/requirements.txt b/backend/requirements.txt index 56a7fb4..89a87ea 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -6,4 +6,5 @@ google-cloud-logging google-cloud-ndb google-cloud-recaptcha-enterprise google-cloud-secret-manager -absl-py \ No newline at end of file +absl-py +flask-cors \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 49e2e71..0d6032c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -20,6 +20,7 @@ "@types/node": "^16.11.22", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.11", + "axios": "^1.4.0", "i18next": "^21.6.16", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -4871,6 +4872,29 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -7918,9 +7942,9 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" }, "node_modules/follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "funding": [ { "type": "individual", @@ -13475,6 +13499,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -20087,6 +20116,28 @@ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==" }, + "axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -22358,9 +22409,9 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" }, "follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "fork-ts-checker-webpack-plugin": { "version": "6.5.0", @@ -26243,6 +26294,11 @@ } } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 39fd3f1..07bbfc0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,6 +15,7 @@ "@types/node": "^16.11.22", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.11", + "axios": "^1.4.0", "i18next": "^21.6.16", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 5db4597..682d9f1 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -1,5 +1,34 @@ -const API_BASE_URL = "http://localhost:8083" +import {useEffect, useState} from "react"; +import {User} from "./Types"; +import httpClient from "../httpClient"; + +export const PRODUCTION = + process.env.NODE_ENV === 'production'; +export const API_BASE_URL = PRODUCTION + ? "https://api.speedcubingcanada.org" + : "http://localhost:8083"; + export const signIn = () => { window.location.assign( API_BASE_URL+ "/login"); +} + +export const GetUser = () => { + const [user, setUser] = useState(null); + + useEffect(() => { + (async () => { + try { + const resp = await httpClient.get(API_BASE_URL + "/me"); + setUser(resp.data); + } catch (error) { + console.log("Not authenticated"); + } + })(); + }, []); + return user; +} + +export const signOut = () => { + window.location.assign(API_BASE_URL + "/logout"); } \ No newline at end of file diff --git a/frontend/src/components/Types.ts b/frontend/src/components/Types.ts new file mode 100644 index 0000000..458966b --- /dev/null +++ b/frontend/src/components/Types.ts @@ -0,0 +1,8 @@ +export interface User { + id: number; + name: string; + roles: string[]; + city: string; + province: string; + wca_person: string; +} \ No newline at end of file diff --git a/frontend/src/httpClient.tsx b/frontend/src/httpClient.tsx new file mode 100644 index 0000000..040cd3b --- /dev/null +++ b/frontend/src/httpClient.tsx @@ -0,0 +1,5 @@ +import axios from "axios"; + +export default axios.create({ + withCredentials: true, +}); \ No newline at end of file diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index dc5f25b..0ab0544 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -3,22 +3,39 @@ import { Container, } from "@mui/material"; import Button from '@mui/material/Button'; -import { signIn } from '../components/Api'; +import {GetUser, signIn, signOut} from '../components/Api'; export const Account = () => { const { t } = useTranslation(); + const user = GetUser(); + return ( -
Account
- + {user != null ? ( +
+
Logged in as {user.name}
+ +
+ ) : ( +
+
Welcome to the account page
+ +
+ )} +
); }; \ No newline at end of file From d03fcbdee8349af112fbbdf8c006f4add98f5772 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Mon, 3 Jul 2023 21:17:00 -0400 Subject: [PATCH 20/72] province storing is working --- backend/__init__.py | 38 ++-- backend/handlers/auth.py | 5 + backend/handlers/user.py | 287 +++++++++++++++++++------------ backend/models/user.py | 5 +- frontend/src/components/Api.tsx | 8 +- frontend/src/components/Types.ts | 10 +- frontend/src/pages/Account.tsx | 73 +++++++- 7 files changed, 290 insertions(+), 136 deletions(-) diff --git a/backend/__init__.py b/backend/__init__.py index 622f823..bd3df3b 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -12,31 +12,39 @@ from backend.lib.secrets import get_secret if os.path.exists('.env.dev'): - load_dotenv('.env') + load_dotenv('.env') if os.environ.get('ENV') == 'PROD': - client = google.cloud.logging.Client() - client.setup_logging() + client = google.cloud.logging.Client() + client.setup_logging() elif os.environ.get('ENV') == 'DEV' and 'gunicorn' in sys.argv[0]: - logger = logging.getLogger() - logger.setLevel(logging.DEBUG) - handler = logging.StreamHandler(sys.stdout) - formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s') - handler.setFormatter(formatter) - logger.addHandler(handler) - + logger = logging.getLogger() + logger.setLevel(logging.DEBUG) + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s') + handler.setFormatter(formatter) + logger.addHandler(handler) app = Flask(__name__) app.secret_key = get_secret('SESSION_SECRET_KEY') app.permanent_session_lifetime = datetime.timedelta(days=7) +address = get_secret('FLASK_ADDRESS') CORS(app, supports_credentials=True) + @app.before_request def before_request(): - if os.environ.get('ENV') == 'PROD' and not request.is_secure: - url = request.url.replace('http://', 'https://', 1) - code = 301 - return redirect(url, code=code) + is_changed = False + if request.url.endswith('/'): + url = request.url[:-1] + is_changed = True + if os.environ.get('ENV') == 'PROD' and not request.is_secure: + url = request.url.replace('http://', 'https://', 1) + is_changed = True + if is_changed: + code = 301 + return redirect(url, code=code) + wca_host = os.environ.get('WCA_HOST') oauth = OAuth(app) @@ -63,4 +71,4 @@ def before_request(): app.register_blueprint(create_auth_bp(oauth)) app.register_blueprint(champions_table_bp) app.register_blueprint(regional_bp) -app.register_blueprint(user_bp) \ No newline at end of file +app.register_blueprint(user_bp) diff --git a/backend/handlers/auth.py b/backend/handlers/auth.py index ebd94c0..39fdd72 100644 --- a/backend/handlers/auth.py +++ b/backend/handlers/auth.py @@ -56,6 +56,11 @@ def oauth_callback(): else: del user.email + if 'dob' in wca_info: + user.dob = datetime.datetime.strptime(wca_info['dob'], '%Y-%m-%d').date() + else: + del user.dob + user.roles = [role for role in user.roles if role not in Roles.DelegateRoles()] if 'delegate_status' in wca_info: if wca_info['delegate_status'] == 'senior_delegate': diff --git a/backend/handlers/user.py b/backend/handlers/user.py index 915258f..22744be 100644 --- a/backend/handlers/user.py +++ b/backend/handlers/user.py @@ -13,117 +13,188 @@ bp = Blueprint('user', __name__) client = ndb.Client() + # After updating the user's province, write the RankSingle and RankAverage to the # datastore again to update their provinces. def RewriteRanks(wca_person): - if not wca_person: - return - for rank_class in (RankSingle, RankAverage): - ndb.put_multi(rank_class.query(rank_class.person == wca_person.key).fetch()) - -def error(msg): - return render_template('error.html', c=Common(), error=msg) - -@bp.route('/me') -def me(): - with client.context(): - me = auth.user() - if not me: - return jsonify({"error": "Unauthorized"}), 401 - return jsonify({ - "id": me.key.id(), - "name": me.name, - "roles": me.roles, - "city": me.city, - "province": me.province.id() if me.province else None, - "wca_person": me.wca_person.id() if me.wca_person else None - }) - - + if not wca_person: + return + for rank_class in (RankSingle, RankAverage): + ndb.put_multi(rank_class.query(rank_class.person == wca_person.key).fetch()) + + +@bp.route('/user_info', methods=['GET']) +@bp.route('/user_info/', methods=['GET']) +def user_info(user_id=-1): + with client.context(): + me = auth.user() + if not me: + return jsonify({"error": "Unauthorized"}), 401 + if user_id == -1: + user = me + else: + user = User.get_by_id(user_id) + if not user: + return jsonify({"error": "Unrecognized user ID %s" % user_id}), 404 + if not permissions.CanViewUser(user, me): + return jsonify({"error": "You're not authorized to view this user."}), 403 + return jsonify({ + "id": user.key.id(), + "name": user.name, + "roles": user.roles, + "dob": user.dob, + "province": user.province.id() if user.province else None, + "wca_person": user.wca_person.id() if user.wca_person else None + }) + + +@bp.route('/edit', methods=['POST']) +@bp.route('/edit/', methods=['POST']) +def edit(user_id=-1): + with client.context(): + me = auth.user() + if not me: + return jsonify({"error": "Unauthorized"}), 401 + if user_id == -1: + user = me + else: + user = User.get_by_id(user_id) + if not user: + return jsonify({"error": "Unrecognized user ID %s" % user_id}), 404 + if not permissions.CanViewUser(user, me): + return jsonify({"error": "You're not authorized to view this user. So you can't edit their location either."}), 403 + + province_id = request.json['province'] + if province_id == 'na': + province_id = '' + + old_province_id = user.province.id() if user.province else '' + changed_location = old_province_id != province_id + user_modified = False + if permissions.CanEditLocation(user, me) and changed_location: + if province_id: + user.province = ndb.Key(Province, province_id) + else: + del user.province + if user.wca_person and old_province_id != province_id: + wca_person = user.wca_person.get() + if wca_person: + wca_person.province = user.province + wca_person.put() + RewriteRanks(wca_person) + user_modified = True + + if changed_location: + # Also save the Update. + update = UserLocationUpdate() + update.updater = me.key + update.update_time = datetime.datetime.now() + if province_id: + update.province = ndb.Key(Province, province_id) + user.updates.append(update) + + elif changed_location: + return jsonify({"error": "You're not authorized to edit this user's location."}), 403 + + for role in permissions.EditableRoles(user, me): + if role in request.json and role not in user.roles: + user.roles.append(role) + user_modified = True + elif role not in request.json and role in user.roles: + user.roles.remove(role) + user_modified = True + + if user_modified: + user.put() + + return jsonify({"success": True}) + + +""" @bp.route('/edit', methods=['GET', 'POST']) @bp.route('/edit/', methods=['GET', 'POST']) def edit_user(user_id=-1): - with client.context(): - me = auth.user() - if not me: - return redirect('/') - if user_id == -1: - user = me - else: - user = User.get_by_id(user_id) - if not user: - return error('Unrecognized user ID %d' % user_id) - if not permissions.CanViewUser(user, me): - return error('You\'re not authorized to view this user.') - - if request.method == 'GET': - return render_template('edit_user.html', - c=Common(), - user=user, - all_roles=Roles.AllRoles(), - editing_location_enabled=permissions.CanEditLocation(user, me), - can_view_roles=permissions.CanViewRoles(user, me), - editable_roles=permissions.EditableRoles(user, me), - successful=request.args.get('successful', 0)) - - city = request.form['city'] - province_id = request.form['province'] - if province_id == 'empty': - province_id = '' - - if request.form['lat'] and request.form['lng']: - lat = int(request.form['lat']) - lng = int(request.form['lng']) - else: - lat = 0 - lng = 0 - template_dict = {} - - old_province_id = user.province.id() if user.province else '' - changed_location = user.city != city or old_province_id != province_id - user_modified = False - if permissions.CanEditLocation(user, me) and changed_location: - if city: - user.city = city - else: - del user.city - if province_id: - user.province = ndb.Key(Province, province_id) - else: - del user.province - if user.wca_person and old_province_id != province_id: - wca_person = user.wca_person.get() - if wca_person: - wca_person.province = user.province - wca_person.put() - RewriteRanks(wca_person) - user.latitude = lat - user.longitude = lng - user_modified = True - - if changed_location: - # Also save the Update. - update = UserLocationUpdate() - update.updater = me.key - if city: - update.city = city - update.update_time = datetime.datetime.now() - if province_id: - update.province = ndb.Key(Province, province_id) - user.updates.append(update) - - elif changed_location: - return error('You\'re not authorized to edit user locations.') - - for role in permissions.EditableRoles(user, me): - if role in request.form and role not in user.roles: - user.roles.append(role) - user_modified = True - elif role not in request.form and role in user.roles: - user.roles.remove(role) - user_modified = True - - if user_modified: - user.put() - - return redirect(request.path + '?successful=1') \ No newline at end of file + with client.context(): + me = auth.user() + if not me: + return redirect('/') + if user_id == -1: + user = me + else: + user = User.get_by_id(user_id) + if not user: + return error('Unrecognized user ID %d' % user_id) + if not permissions.CanViewUser(user, me): + return error('You\'re not authorized to view this user.') + + if request.method == 'GET': + return render_template('edit_user.html', + c=Common(), + user=user, + all_roles=Roles.AllRoles(), + editing_location_enabled=permissions.CanEditLocation(user, me), + can_view_roles=permissions.CanViewRoles(user, me), + editable_roles=permissions.EditableRoles(user, me), + successful=request.args.get('successful', 0)) + + city = request.form['city'] + province_id = request.form['province'] + if province_id == 'empty': + province_id = '' + + if request.form['lat'] and request.form['lng']: + lat = int(request.form['lat']) + lng = int(request.form['lng']) + else: + lat = 0 + lng = 0 + template_dict = {} + + old_province_id = user.province.id() if user.province else '' + changed_location = user.city != city or old_province_id != province_id + user_modified = False + if permissions.CanEditLocation(user, me) and changed_location: + if city: + user.city = city + else: + del user.city + if province_id: + user.province = ndb.Key(Province, province_id) + else: + del user.province + if user.wca_person and old_province_id != province_id: + wca_person = user.wca_person.get() + if wca_person: + wca_person.province = user.province + wca_person.put() + RewriteRanks(wca_person) + user.latitude = lat + user.longitude = lng + user_modified = True + + if changed_location: + # Also save the Update. + update = UserLocationUpdate() + update.updater = me.key + if city: + update.city = city + update.update_time = datetime.datetime.now() + if province_id: + update.province = ndb.Key(Province, province_id) + user.updates.append(update) + + elif changed_location: + return error('You\'re not authorized to edit user locations.') + + for role in permissions.EditableRoles(user, me): + if role in request.form and role not in user.roles: + user.roles.append(role) + user_modified = True + elif role not in request.form and role in user.roles: + user.roles.remove(role) + user_modified = True + + if user_modified: + user.put() + + return redirect(request.path + '?successful=1')""" diff --git a/backend/models/user.py b/backend/models/user.py index 5c5dffa..bcb08c4 100644 --- a/backend/models/user.py +++ b/backend/models/user.py @@ -41,14 +41,11 @@ class User(ndb.Model): wca_person = ndb.KeyProperty(kind=Person) name = ndb.StringProperty() email = ndb.StringProperty() + dob = ndb.DateProperty() roles = ndb.StringProperty(repeated=True) - city = ndb.StringProperty() province = ndb.KeyProperty(kind=Province) - latitude = ndb.IntegerProperty() - longitude = ndb.IntegerProperty() - last_login = ndb.DateTimeProperty() updates = ndb.StructuredProperty(UserLocationUpdate, repeated=True) diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 682d9f1..c40eff3 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -1,5 +1,5 @@ -import {useEffect, useState} from "react"; -import {User} from "./Types"; +import React, {useEffect, useState} from "react"; +import {ProfileEditData, User} from "./Types"; import httpClient from "../httpClient"; export const PRODUCTION = @@ -19,7 +19,7 @@ export const GetUser = () => { useEffect(() => { (async () => { try { - const resp = await httpClient.get(API_BASE_URL + "/me"); + const resp = await httpClient.get(API_BASE_URL + "/user_info"); setUser(resp.data); } catch (error) { console.log("Not authenticated"); @@ -31,4 +31,4 @@ export const GetUser = () => { export const signOut = () => { window.location.assign(API_BASE_URL + "/logout"); -} \ No newline at end of file +} diff --git a/frontend/src/components/Types.ts b/frontend/src/components/Types.ts index 458966b..85c8ea3 100644 --- a/frontend/src/components/Types.ts +++ b/frontend/src/components/Types.ts @@ -2,7 +2,15 @@ export interface User { id: number; name: string; roles: string[]; - city: string; province: string; wca_person: string; +} + +export interface Province { + id: string; + label: string; +} + +export interface ProfileEditData { + province: string; } \ No newline at end of file diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 0ab0544..059a8c4 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -3,14 +3,54 @@ import { Container, } from "@mui/material"; import Button from '@mui/material/Button'; -import {GetUser, signIn, signOut} from '../components/Api'; +import TextField from '@mui/material/TextField'; +import Autocomplete from '@mui/material/Autocomplete'; +import {API_BASE_URL, GetUser, signIn, signOut} from '../components/Api'; +import {useState} from "react"; +import {Province} from "../components/Types"; +import httpClient from "../httpClient"; export const Account = () => { const { t } = useTranslation(); - const user = GetUser(); - - return ( + const [province, setProvince] = useState(null); + + const user = GetUser();//TODO: display something else while loading + if (user != null && user.province != null) { + //TODO: set province in the combo box + } + + const provinces : Province[] = [ + { label: 'Alberta', id:'ab' }, + { label: 'British Columbia', id:'bc' }, + { label: 'Manitoba', id:'mb' }, + { label: 'New Brunswick', id:'nb' }, + { label: 'Newfoundland and Labrador', id:'nl' }, + { label: 'Northwest Territories', id:'nt' }, + { label: 'Nova Scotia', id:'ns' }, + { label: 'Nunavut', id:'nu' }, + { label: 'Ontario', id:'on' }, + { label: 'Prince Edward Island', id:'pe' }, + { label: 'Quebec', id:'qc' }, + { label: 'Saskatchewan', id:'sk' }, + { label: 'Yukon', id:'yt' }, + { label: 'N/A', id:'na' }, + ]; + + + const handleSaveProfile = async () => { + try { + const resp = await httpClient.post(API_BASE_URL + "/edit", { + province: province ? province.id : 'na', + }); + const saved = resp.data; + // Handle the saved data as needed + } catch (error) { + console.log("Not authenticated"); + } + }; + + return ( {user != null ? (
@@ -22,6 +62,31 @@ export const Account = () => { onClick={signOut}> Sign out + + { + setProvince(newValue); + if(newValue == null) {} + else if(newValue.id === "qc") { + console.log("Vive le Québec libre!"); + } + }} + renderInput={(params) => } + /> + +
Province determine your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select "N/A".
+
) : (
From 13863472965ec2885b40bd3c416a762b411c5818 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 4 Jul 2023 01:11:27 -0400 Subject: [PATCH 21/72] some frontend, it's not much but it's honest work --- frontend/package-lock.json | 9487 ++++++++++++++++++------------- frontend/src/components/Api.tsx | 4 +- frontend/src/locale.ts | 13 + frontend/src/pages/Account.tsx | 196 +- frontend/src/pages/Rankings.tsx | 68 +- 5 files changed, 5622 insertions(+), 4146 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 0d6032c..42da628 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -31,55 +31,64 @@ "web-vitals": "^2.1.4" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", - "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", - "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", - "dependencies": { - "@ampproject/remapping": "^2.0.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.0", - "@babel/parser": "^7.17.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -99,11 +108,11 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz", - "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.5.tgz", + "integrity": "sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==", "dependencies": { - "eslint-scope": "^5.1.1", + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.0" }, @@ -115,18 +124,6 @@ "eslint": "^7.5.0 || ^8.0.0" } }, - "node_modules/@babel/eslint-parser/node_modules/eslint-scope": { - "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" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", @@ -135,14 +132,6 @@ "node": ">=10" } }, - "node_modules/@babel/eslint-parser/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/@babel/eslint-parser/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -152,49 +141,50 @@ } }, "node_modules/@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -204,6 +194,14 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -212,18 +210,25 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -232,13 +237,22 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -247,15 +261,21 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -274,231 +294,218 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "dependencies": { - "@babel/types": "^7.16.7" - }, + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", - "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -507,9 +514,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", "bin": { "parser": "bin/babel-parser.js" }, @@ -518,11 +525,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -532,13 +539,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -547,29 +554,13 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -578,92 +569,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.0.tgz", - "integrity": "sha512-JR8HTf3T1CsdMqfENrZ9pqncwsH4sPcvsyDLpvmv8iIbpDmeyBD7HPfGAIqkQph2j5d3B84hTm+m3qHPAedaPw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.0", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/plugin-syntax-decorators": "^7.17.0", - "charcodes": "^0.2.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.5.tgz", + "integrity": "sha512-h8hlezQ4dl6ixodgXkH8lUfcD7x+WAuIqPUjwGoItynrXOAv4a4Tci1zA/qjzQjjcl0v3QpLdc2LM6ZACQuY7A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/plugin-syntax-decorators": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -702,39 +617,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", @@ -752,12 +634,12 @@ } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -767,15 +649,9 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "engines": { "node": ">=6.9.0" }, @@ -784,12 +660,12 @@ } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=4" @@ -846,11 +722,11 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", - "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz", + "integrity": "sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -895,6 +771,34 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -918,11 +822,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1026,11 +930,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1039,12 +943,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" @@ -1054,13 +990,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1070,11 +1006,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1084,11 +1020,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1097,18 +1033,50 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", "globals": "^11.1.0" }, "engines": { @@ -1119,11 +1087,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1133,11 +1102,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1147,12 +1116,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1162,11 +1131,26 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1176,12 +1160,27 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1206,11 +1205,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1220,13 +1219,28 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1236,11 +1250,26 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1250,11 +1279,118 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1263,14 +1399,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1279,15 +1414,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1296,16 +1432,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1314,13 +1447,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1329,26 +1462,28 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1357,13 +1492,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1372,12 +1507,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1387,11 +1525,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1476,11 +1614,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", "dependencies": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" }, "engines": { "node": ">=6.9.0" @@ -1490,11 +1629,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1504,15 +1643,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", "semver": "^6.3.0" }, "engines": { @@ -1531,11 +1670,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1545,12 +1684,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1560,11 +1699,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1574,11 +1713,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1588,11 +1727,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1602,13 +1741,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", - "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", + "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1618,11 +1758,26 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1632,12 +1787,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1646,37 +1801,41 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", - "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", "dependencies": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1686,44 +1845,61 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", "semver": "^6.3.0" }, "engines": { @@ -1776,13 +1952,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", - "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", + "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1791,12 +1969,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "node_modules/@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" @@ -1815,31 +1998,31 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.0", - "@babel/types": "^7.17.0", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1848,11 +2031,12 @@ } }, "node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1926,50 +2110,21 @@ } }, "node_modules/@emotion/babel-plugin": { - "version": "11.9.2", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz", - "integrity": "sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==", - "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/runtime": "^7.13.10", - "@emotion/hash": "^0.8.0", - "@emotion/memoize": "^0.7.5", - "@emotion/serialize": "^1.0.2", - "babel-plugin-macros": "^2.6.1", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.0.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@emotion/babel-plugin/node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "node_modules/@emotion/babel-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" + "stylis": "4.2.0" } }, "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { @@ -1984,117 +2139,119 @@ } }, "node_modules/@emotion/cache": { - "version": "11.7.1", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", - "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", "dependencies": { - "@emotion/memoize": "^0.7.4", - "@emotion/sheet": "^1.1.0", - "@emotion/utils": "^1.0.0", - "@emotion/weak-memoize": "^0.2.5", - "stylis": "4.0.13" + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" } }, "node_modules/@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.2.tgz", - "integrity": "sha512-3QnhqeL+WW88YjYbQL5gUIkthuMw7a0NGbZ7wfFVk2kg/CK5w8w5FFa0RzWjyY1+sujN0NWbtSHH6OJmWHtJpQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", "dependencies": { - "@emotion/memoize": "^0.7.4" + "@emotion/memoize": "^0.8.1" } }, "node_modules/@emotion/memoize": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", - "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.9.0.tgz", - "integrity": "sha512-lBVSF5d0ceKtfKCDQJveNAtkC7ayxpVlgOohLgXqRwqWr9bOf4TZAFFyIcNngnV6xK6X4x2ZeXq7vliHkoVkxQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@emotion/babel-plugin": "^11.7.1", - "@emotion/cache": "^11.7.1", - "@emotion/serialize": "^1.0.3", - "@emotion/utils": "^1.1.0", - "@emotion/weak-memoize": "^0.2.5", + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "@types/react": { "optional": true } } }, "node_modules/@emotion/serialize": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.3.tgz", - "integrity": "sha512-2mSSvgLfyV3q+iVh3YWgNlUc2a9ZlDU7DjuP5MjK3AXRR0dYigCrP99aeFtaB2L/hjfEZdSThn5dsZ0ufqbvsA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", "dependencies": { - "@emotion/hash": "^0.8.0", - "@emotion/memoize": "^0.7.4", - "@emotion/unitless": "^0.7.5", - "@emotion/utils": "^1.0.0", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", "csstype": "^3.0.2" } }, "node_modules/@emotion/sheet": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", - "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "node_modules/@emotion/styled": { - "version": "11.8.1", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.8.1.tgz", - "integrity": "sha512-OghEVAYBZMpEquHZwuelXcRjRJQOVayvbmNR0zr174NHdmMgrNkLC6TljKC5h9lZLkN5WGrdUcrKlOJ4phhoTQ==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@emotion/babel-plugin": "^11.7.1", - "@emotion/is-prop-valid": "^1.1.2", - "@emotion/serialize": "^1.0.2", - "@emotion/utils": "^1.1.0" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" }, "peerDependencies": { - "@babel/core": "^7.0.0", "@emotion/react": "^11.0.0-rc.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "@types/react": { "optional": true } } }, "node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } }, "node_modules/@emotion/utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", - "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" }, "node_modules/@emotion/weak-memoize": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, "node_modules/@eslint/eslintrc": { "version": "1.0.5", @@ -2262,15 +2419,15 @@ } }, "node_modules/@jest/console": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.0.tgz", - "integrity": "sha512-WUzX5neFb0IOQOy/7A2VhiGdxJKk85Xns2Oq29JaHmtnSel+BsjwyQZxzAs2Xxfd2i452fwdDG9ox/IWi81bdQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", "dependencies": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.0", - "jest-util": "^27.5.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0" }, "engines": { @@ -2342,34 +2499,34 @@ } }, "node_modules/@jest/core": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.0.tgz", - "integrity": "sha512-DcUTkZyon+dRozTEjy38Bgt3PIU51GdUJuz3uHKg5maGtmCaYqPUGiM3Xddqi7eIMC7E3fTGIlHqH9i0pTOy6Q==", - "dependencies": { - "@jest/console": "^27.5.0", - "@jest/reporters": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.0", - "jest-config": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-resolve-dependencies": "^27.5.0", - "jest-runner": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", - "jest-watcher": "^27.5.0", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", "micromatch": "^4.0.4", "rimraf": "^3.0.0", "slash": "^3.0.0", @@ -2452,58 +2609,58 @@ } }, "node_modules/@jest/environment": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.0.tgz", - "integrity": "sha512-lg0JFsMaLKgpwzs0knOg21Z4OQwaJoBLutnmYzip4tyLTXP21VYWtYGpLXgx42fw/Mw05m1WDXWKgwR6WnsiTw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dependencies": { - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.5.0" + "jest-mock": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.0.tgz", - "integrity": "sha512-e3WrlpqSHq3HAQ03JFjTn8YCrsyg640/sr1rjkM2rNv8z1ufjudpv4xq6DvvTJYB6FuUrfg0g+7bSKPet5QfCQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "dependencies": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", - "jest-message-util": "^27.5.0", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0" + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.0.tgz", - "integrity": "sha512-wWpMnTiR65Q4JD7fr2BqN+ZDbi99mmILnEM6u7AaX4geASEIVvQsiB4RCvwZrIX5YZCsAjviJQVq9CYddLABkg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/types": "^27.5.0", - "expect": "^27.5.0" + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.0.tgz", - "integrity": "sha512-DG+BmVSx2uaJSTKz5z1eScgHTQ6/cZ5CCKSpmpr4sXQPwV2V5aUMOBDwXX1MnqNRhH7/Rq9K97ynnocvho5aMA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -2515,10 +2672,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -2609,10 +2766,21 @@ "node": ">=8" } }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/source-map": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.0.tgz", - "integrity": "sha512-0xr7VZ+JNCRrlCyRMYhquUm8eU3kNdGDaIW4s3L625bNjk273v9ZhAm3YczIuzJzYH0pnjT+QSCiZQegWKjeow==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "dependencies": { "callsites": "^3.0.0", "graceful-fs": "^4.2.9", @@ -2631,12 +2799,12 @@ } }, "node_modules/@jest/test-result": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.0.tgz", - "integrity": "sha512-Lxecvx5mN6WIeynIyW0dWDQm8UPGMHvTwxUPK+OsZaqBDMGaNDSZtw53VoVk7HyT6AcRblMR/pfa0XucmH4hGw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "dependencies": { - "@jest/console": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -2645,34 +2813,34 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.0.tgz", - "integrity": "sha512-WzjcDflqbpWe+SnJPCvB2gB6haGfrkzAgzY6Pb1aq+EPoVAj2mwBaKN0ROWI4H87aSslCjq2M+BUQFNJ8VpnDA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", "dependencies": { - "@jest/test-result": "^27.5.0", + "@jest/test-result": "^27.5.1", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-runtime": "^27.5.0" + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.0.tgz", - "integrity": "sha512-yXUy/iO3TH1itxJ9BF7LLjuXt8TtgtjAl0PBQbUaCvRa+L0yYBob6uayW9dFRX/CDQweouLhvmXh44zRiaB+yA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dependencies": { "@babel/core": "^7.1.0", - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-util": "^27.5.0", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -2756,9 +2924,9 @@ } }, "node_modules/@jest/types": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.0.tgz", - "integrity": "sha512-oDHEp7gwSgA82RZ6pzUL3ugM2njP/lVB1MsxRZNOBk+CoNvh9SpH1lQixPFc/kDlV50v59csiW4HLixWmhmgPQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -2834,41 +3002,76 @@ "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", - "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "engines": { "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", - "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", - "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, "node_modules/@mui/base": { - "version": "5.0.0-alpha.77", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.77.tgz", - "integrity": "sha512-Zqm3qlczGViD3lJSYo8ZnQLHJ3PwGYftbDfVuh2Rq5OD88F7H6oDILlqknzty59NDkeSVO2qlymYmHOY1nLodg==", - "dependencies": { - "@babel/runtime": "^7.17.2", - "@emotion/is-prop-valid": "^1.1.2", - "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", - "@popperjs/core": "^2.11.5", - "clsx": "^1.1.1", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" + "version": "5.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.5.tgz", + "integrity": "sha512-vy3TWLQYdGNecTaufR4wDNQFV2WEg6wRPi6BVbx6q1vP3K1mbxIn1+XOqOzfYBXjFHvMx0gZAo2TgWbaqfgvAA==", + "dependencies": { + "@babel/runtime": "^7.22.5", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.6", + "@popperjs/core": "^2.11.8", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" }, "engines": { "node": ">=12.0.0" @@ -2888,12 +3091,26 @@ } } }, + "node_modules/@mui/base/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", + "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, "node_modules/@mui/icons-material": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.6.2.tgz", - "integrity": "sha512-9QdI7axKuBAyaGz4mtdi7Uy1j73/thqFmEuxpJHxNC7O8ADEK1Da3t2veK2tgmsXsUlAHcAG63gg+GvWWeQNqQ==", + "version": "5.11.16", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", + "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", "dependencies": { - "@babel/runtime": "^7.17.2" + "@babel/runtime": "^7.21.0" }, "engines": { "node": ">=12.0.0" @@ -2914,22 +3131,22 @@ } }, "node_modules/@mui/material": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.6.2.tgz", - "integrity": "sha512-bwMvroBrMgUTwUh/BcjhtcJwEw9uH4chV3+ZSj6RckOJtMj8U4yEeD7S4NgHE8Ioj5eObKFzHpih/cTD1sDRpg==", - "dependencies": { - "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.77", - "@mui/system": "^5.6.2", - "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", - "@types/react-transition-group": "^4.4.4", - "clsx": "^1.1.1", - "csstype": "^3.0.11", - "hoist-non-react-statics": "^3.3.2", - "prop-types": "^15.7.2", - "react-is": "^17.0.2", - "react-transition-group": "^4.4.2" + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.6.tgz", + "integrity": "sha512-/c2ZApeQm2sTYdQXjqEnldaBMBcUEiyu2VRS6bS39ZeNaAcCLBQbYocLR46R+f0S5dgpBzB0T4AsOABPOFYZ5Q==", + "dependencies": { + "@babel/runtime": "^7.22.5", + "@mui/base": "5.0.0-beta.5", + "@mui/core-downloads-tracker": "^5.13.4", + "@mui/system": "^5.13.6", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.6", + "@types/react-transition-group": "^4.4.6", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" }, "engines": { "node": ">=12.0.0" @@ -2957,13 +3174,18 @@ } } }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/@mui/private-theming": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.8.4.tgz", - "integrity": "sha512-3Lp0VAEjtQygJ70MWEyHkKvg327O6YoBH6ZNEy6fIsrK6gmRIj+YrlvJ7LQCbowY+qDGnbdMrTBd1hfThlI8lg==", + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", + "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", "dependencies": { - "@babel/runtime": "^7.17.2", - "@mui/utils": "^5.8.4", + "@babel/runtime": "^7.21.0", + "@mui/utils": "^5.13.1", "prop-types": "^15.8.1" }, "engines": { @@ -2984,13 +3206,14 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.6.1.tgz", - "integrity": "sha512-jEhH6TBY8jc9S8yVncXmoTYTbATjEu44RMFXj6sIYfKr5NArVwTwRo3JexLL0t3BOAiYM4xsFLgfKEIvB9SAeQ==", + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", + "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", "dependencies": { - "@babel/runtime": "^7.17.2", - "@emotion/cache": "^11.7.1", - "prop-types": "^15.7.2" + "@babel/runtime": "^7.21.0", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" @@ -3014,26 +3237,26 @@ } }, "node_modules/@mui/styles": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.8.4.tgz", - "integrity": "sha512-Td7dafJDgpdzObT0z5CH/ihOh22MG2vZ7p2tpnrKaq3We50f8l3T69XeTNcy2OH0TWnXJJuASZS/0uMJmVPfag==", - "dependencies": { - "@babel/runtime": "^7.17.2", - "@emotion/hash": "^0.8.0", - "@mui/private-theming": "^5.8.4", - "@mui/types": "^7.1.4", - "@mui/utils": "^5.8.4", - "clsx": "^1.1.1", - "csstype": "^3.1.0", + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.13.2.tgz", + "integrity": "sha512-gKNkVyk6azQ8wfCamh3yU/wLv1JscYrsQX9huQBwfwtE7kUTq2rgggdfJjRADjbcmT6IPX+oCHYjGfqqFgDIQQ==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@emotion/hash": "^0.9.1", + "@mui/private-theming": "^5.13.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "clsx": "^1.2.1", + "csstype": "^3.1.2", "hoist-non-react-statics": "^3.3.2", - "jss": "^10.8.2", - "jss-plugin-camel-case": "^10.8.2", - "jss-plugin-default-unit": "^10.8.2", - "jss-plugin-global": "^10.8.2", - "jss-plugin-nested": "^10.8.2", - "jss-plugin-props-sort": "^10.8.2", - "jss-plugin-rule-value-function": "^10.8.2", - "jss-plugin-vendor-prefixer": "^10.8.2", + "jss": "^10.10.0", + "jss-plugin-camel-case": "^10.10.0", + "jss-plugin-default-unit": "^10.10.0", + "jss-plugin-global": "^10.10.0", + "jss-plugin-nested": "^10.10.0", + "jss-plugin-props-sort": "^10.10.0", + "jss-plugin-rule-value-function": "^10.10.0", + "jss-plugin-vendor-prefixer": "^10.10.0", "prop-types": "^15.8.1" }, "engines": { @@ -3044,7 +3267,7 @@ "url": "https://opencollective.com/mui" }, "peerDependencies": { - "@types/react": "^17.0.0", + "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0" }, "peerDependenciesMeta": { @@ -3054,18 +3277,18 @@ } }, "node_modules/@mui/system": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.6.2.tgz", - "integrity": "sha512-Wg9TRbvavSwEYk6UdpnoDx+CqJfaAN7AzlmwEx7DtGmx0snFVBST8FVb1Ev1vXosxEnq6/fe7ZDRobFVewvEPQ==", - "dependencies": { - "@babel/runtime": "^7.17.2", - "@mui/private-theming": "^5.6.2", - "@mui/styled-engine": "^5.6.1", - "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", - "clsx": "^1.1.1", - "csstype": "^3.0.11", - "prop-types": "^15.7.2" + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", + "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", + "dependencies": { + "@babel/runtime": "^7.22.5", + "@mui/private-theming": "^5.13.1", + "@mui/styled-engine": "^5.13.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.6", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" @@ -3093,9 +3316,9 @@ } }, "node_modules/@mui/types": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.4.tgz", - "integrity": "sha512-uveM3byMbthO+6tXZ1n2zm0W3uJCQYtwt/v5zV5I77v2v18u0ITkb8xwhsDD2i3V2Kye7SaNR6FFJ6lMuY/WqQ==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", "peerDependencies": { "@types/react": "*" }, @@ -3106,15 +3329,15 @@ } }, "node_modules/@mui/utils": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.8.4.tgz", - "integrity": "sha512-BHYErfrjqqh76KaDAm8wZlhEip1Uj7Cmco65NcsF3BWrAl3FWngACpaPZeEbTgmaEwyWAQEE6LZhsmy43hfyqQ==", + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", + "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", "dependencies": { - "@babel/runtime": "^7.17.2", + "@babel/runtime": "^7.22.5", "@types/prop-types": "^15.7.5", - "@types/react-is": "^16.7.1 || ^17.0.0", + "@types/react-is": "^18.2.0", "prop-types": "^15.8.1", - "react-is": "^17.0.2" + "react-is": "^18.2.0" }, "engines": { "node": ">=12.0.0" @@ -3127,6 +3350,39 @@ "react": "^17.0.0 || ^18.0.0" } }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "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", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3217,18 +3473,18 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.5", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", - "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/@rollup/plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", - "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" @@ -3304,10 +3560,15 @@ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==" }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dependencies": { "type-detect": "4.0.8" } @@ -3860,9 +4121,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" }, "node_modules/@types/express": { "version": "4.17.13", @@ -4005,17 +4266,17 @@ } }, "node_modules/@types/react-is": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", - "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-transition-group": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", - "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", "dependencies": { "@types/react": "*" } @@ -4077,9 +4338,9 @@ } }, "node_modules/@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, "node_modules/@types/ws": { "version": "8.2.2", @@ -4317,133 +4578,133 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -4475,9 +4736,9 @@ } }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "bin": { "acorn": "bin/acorn" }, @@ -4506,9 +4767,9 @@ } }, "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peerDependencies": { "acorn": "^8" } @@ -4733,20 +4994,32 @@ "node": ">=6.0" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { @@ -4781,13 +5054,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4796,6 +5070,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -4807,9 +5093,9 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dependencies": { "lodash": "^4.17.14" } @@ -4864,6 +5150,17 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axe-core": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", @@ -4901,15 +5198,15 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" }, "node_modules/babel-jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.0.tgz", - "integrity": "sha512-puhCyvBTNLevhbd1oyw6t3gWBicWoUARQYKCBB/B1moif17NbyhxbsfadqZIw8zfJJD+W7Vw0Nb20pEjLxkXqQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", "dependencies": { - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.0", + "babel-preset-jest": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -4986,45 +5283,21 @@ } }, "node_modules/babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dependencies": { "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, "engines": { - "node": ">=4.0.0" + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, "node_modules/babel-loader/node_modules/schema-utils": { @@ -5044,14 +5317,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -5068,9 +5333,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.0.tgz", - "integrity": "sha512-ztwNkHl+g1GaoQcb8f2BER4C3LMvSXuF7KVqtUioXQgScSEnkl6lLgCILUYIR+CPTwL8H3F/PNLze64HPWF9JA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -5104,12 +5369,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", "semver": "^6.1.1" }, "peerDependencies": { @@ -5125,23 +5390,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.4.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -5175,11 +5440,11 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.0.tgz", - "integrity": "sha512-7bfu1cJBlgK/nKfTvMlElzA3jpi6GzDWX3fntnyP2cQSzoi/KUz6ewGlcb3PSRYZGyv+uPnVHY0Im3JbsViqgA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", "dependencies": { - "babel-plugin-jest-hoist": "^27.5.0", + "babel-plugin-jest-hoist": "^27.5.1", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -5258,29 +5523,32 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -5293,6 +5561,14 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5307,7 +5583,7 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/bonjour": { "version": "3.5.0", @@ -5353,25 +5629,34 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/bser": { @@ -5393,9 +5678,9 @@ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" }, "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "engines": { "node": ">=6" }, @@ -5471,13 +5756,23 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001307", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001307.tgz", - "integrity": "sha512-+MXEMczJ4FuxJAUp0jvAl6Df0NI/OfW1RWEE61eSmzS7hw6lz4IKutbhbXendwq8BljfFuHtu26VWsg4afQ7Ng==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "version": "1.0.30001512", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, "node_modules/case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -5508,14 +5803,6 @@ "node": ">=10" } }, - "node_modules/charcodes": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", - "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -5614,9 +5901,9 @@ } }, "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "engines": { "node": ">=6" } @@ -5624,7 +5911,7 @@ "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -5798,9 +6085,9 @@ ] }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } @@ -5814,9 +6101,9 @@ } }, "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } @@ -5837,26 +6124,17 @@ } }, "node_modules/core-js-compat": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", - "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", "dependencies": { - "browserslist": "^4.19.1", - "semver": "7.0.0" + "browserslist": "^4.21.5" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/core-js-pure": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.0.tgz", @@ -6319,9 +6597,9 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -6358,14 +6636,14 @@ } }, "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "engines": { "node": ">=0.10" } @@ -6373,7 +6651,7 @@ "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "node_modules/deep-equal": { "version": "1.1.1", @@ -6424,14 +6702,18 @@ } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/defined": { @@ -6477,9 +6759,13 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detect-newline": { "version": "3.1.0", @@ -6545,9 +6831,9 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "node_modules/diff-sequences": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", - "integrity": "sha512-ZsOBWnhXiH+Zn0DcBNX/tiQsqrREHs/6oQsEVy2VJJjrTblykPima11pyHMSA/7PGmD+fwclTnKVKL/qtNREDQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } @@ -6723,14 +7009,14 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dependencies": { - "jake": "^10.6.1" + "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" @@ -6740,9 +7026,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.65", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", - "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==" + "version": "1.4.449", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", + "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==" }, "node_modules/emittery": { "version": "0.8.1", @@ -6771,15 +7057,15 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } }, "node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -6813,30 +7099,44 @@ } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -6846,9 +7146,30 @@ } }, "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } }, "node_modules/es-to-primitive": { "version": "1.2.1", @@ -6888,14 +7209,13 @@ } }, "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", @@ -6908,42 +7228,6 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6953,17 +7237,6 @@ "node": ">=0.10.0" } }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", @@ -7016,9 +7289,9 @@ } }, "node_modules/eslint-config-react-app": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.0.tgz", - "integrity": "sha512-xyymoxtIt1EOsSaGag+/jmcywRuieQoA2JbPCjnw9HukFj9/97aGPoZVFioaotzk1K5Qt9sHO5EutZbkrAXS0g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", "dependencies": { "@babel/core": "^7.16.0", "@babel/eslint-parser": "^7.16.3", @@ -7256,24 +7529,25 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", - "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" + "string.prototype.matchall": "^4.0.8" }, "engines": { "node": ">=4" @@ -7305,12 +7579,16 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7594,7 +7872,7 @@ "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } @@ -7643,51 +7921,52 @@ } }, "node_modules/expect": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.0.tgz", - "integrity": "sha512-z73GZ132cBqrapO0X6BeRjyBXqOt9YeRtnDteHJIQqp5s2pZ41Hz23VUbsVFMfkrsFLU9GwoIRS0ZzLuFK8M5w==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dependencies": { - "@jest/types": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0" + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.1", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.1", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.6", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -7709,6 +7988,14 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7733,6 +8020,14 @@ } ] }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -7832,11 +8127,30 @@ } }, "node_modules/filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/filesize": { @@ -7859,16 +8173,16 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -7886,7 +8200,15 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } }, "node_modules/find-cache-dir": { "version": "3.3.2", @@ -7960,6 +8282,14 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", @@ -8152,7 +8482,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -8198,11 +8528,36 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -8220,13 +8575,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8349,6 +8705,20 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -8368,6 +8738,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", @@ -8409,9 +8790,9 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8424,10 +8805,32 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -8614,18 +9017,34 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" } }, "node_modules/http-parser-js": { @@ -8678,9 +9097,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { "agent-base": "6", "debug": "4" @@ -8747,9 +9166,9 @@ } }, "node_modules/idb": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", - "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" }, "node_modules/identity-obj-proxy": { "version": "3.0.0", @@ -8856,11 +9275,11 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -8896,6 +9315,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -8939,9 +9371,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -8950,9 +9382,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dependencies": { "has": "^1.0.3" }, @@ -9031,7 +9463,7 @@ "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, "node_modules/is-negative-zero": { "version": "2.0.2", @@ -9053,9 +9485,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9069,7 +9501,7 @@ "node_modules/is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "engines": { "node": ">=0.10.0" } @@ -9124,7 +9556,7 @@ "node_modules/is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "engines": { "node": ">=0.10.0" } @@ -9138,9 +9570,12 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9184,6 +9619,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -9230,9 +9683,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -9306,9 +9759,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -9318,35 +9771,99 @@ } }, "node_modules/jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dependencies": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" }, "bin": { "jake": "bin/cli.js" }, "engines": { - "node": "*" + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jake/node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/jake/node_modules/chalk": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.0.tgz", - "integrity": "sha512-sCMZhL9zy0fiFc4H0cKlXq7BcghMSxm5ZnEyaPWTteArU5ix6JjOKyOXSUBGLTQCmt5kuX9zEvQ9BSshHOPB3A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "dependencies": { - "@jest/core": "^27.5.0", + "@jest/core": "^27.5.1", "import-local": "^3.0.2", - "jest-cli": "^27.5.0" + "jest-cli": "^27.5.1" }, "bin": { "jest": "bin/jest.js" @@ -9364,11 +9881,11 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.0.tgz", - "integrity": "sha512-BGWKI7E6ORqbF5usF1oA4ftbkhVZVrXr8jB0/BrU6TAn3kfOVwX2Zx6pKIXYutJ+qNEjT8Da/gGak0ajya/StA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", "dependencies": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "execa": "^5.0.0", "throat": "^6.0.1" }, @@ -9377,26 +9894,26 @@ } }, "node_modules/jest-circus": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.0.tgz", - "integrity": "sha512-+NPd1OxpAHYKjbW8dgL0huFgmtZRKSUKee/UtRgZJEfAxCeA12d7sp0coh5EGDBpW4fCk1Pcia/2dG+j6BQvdw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.0", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" @@ -9470,20 +9987,20 @@ } }, "node_modules/jest-cli": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.0.tgz", - "integrity": "sha512-9ANs79Goz1ULKtG7HDm/F//4E69v8EFOLXRIHmeC/eK1xTUeQGlU6XP0Zwst386sKaKB4O60qhWY/UaTBS2MLA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", "dependencies": { - "@jest/core": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "prompts": "^2.0.1", "yargs": "^16.2.0" }, @@ -9567,32 +10084,34 @@ } }, "node_modules/jest-config": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.0.tgz", - "integrity": "sha512-eOIpvpXFz5WHuIYZN1QmvBLEjsSk3w+IAC/2jBpZClbprF53Bj9meBMgAbE15DSkaaJBDFmhXXd1L2eCLaWxQw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", "dependencies": { "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.0", - "@jest/types": "^27.5.0", - "babel-jest": "^27.5.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.0", - "jest-environment-jsdom": "^27.5.0", - "jest-environment-node": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-jasmine2": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-runner": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "micromatch": "^4.0.4", - "pretty-format": "^27.5.0", - "slash": "^3.0.0" + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -9671,14 +10190,14 @@ } }, "node_modules/jest-diff": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.0.tgz", - "integrity": "sha512-zztvHDCq/QcAVv+o6rts0reupSOxyrX+KLQEOMWCW2trZgcBFgp/oTK7hJCGpXvEIqKrQzyQlaPKn9W04+IMQg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.0", - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -9749,9 +10268,9 @@ } }, "node_modules/jest-docblock": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.0.tgz", - "integrity": "sha512-U4MtJgdZn2x+jpPzd7NAYvDmgJAA5h9QxVAwsyuH7IymGzY8VGHhAkHcIGOmtmdC61ORLxCbEhj6fCJsaCWzXA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", "dependencies": { "detect-newline": "^3.0.0" }, @@ -9760,15 +10279,15 @@ } }, "node_modules/jest-each": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.0.tgz", - "integrity": "sha512-2vpajSdDMZmAxjSP1f4BG9KKduwHtuaI0w66oqLUkfaGUU7Ix/W+d8BW0h3/QEJiew7hR0GSblqdFwTEEbhBdw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "dependencies": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "jest-get-type": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0" + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -9839,16 +10358,16 @@ } }, "node_modules/jest-environment-jsdom": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.0.tgz", - "integrity": "sha512-sX49N8rjp6HSHeGpNgLk6mtHRd1IPAnE/u7wLQkb6Tz/1E08Q++Y8Zk/IbpVdcFywbzH1icFqEuDuHJ6o+uXXg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", "jsdom": "^16.6.0" }, "engines": { @@ -9856,44 +10375,44 @@ } }, "node_modules/jest-environment-node": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.0.tgz", - "integrity": "sha512-7UzisMMfGyrURhS/eUa7p7mgaqN3ajHylsjOgfcn0caNeYRZq4LHKZLfAxrPM34DWLnBZcRupEJlpQsizdSUsw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0" + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-get-type": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.0.tgz", - "integrity": "sha512-Vp6O8a52M/dahXRG/E0EJuWQROps2mDQ0sJYPgO8HskhdLwj9ajgngy2OAqZgV6e/RcU67WUHq6TgfvJb8flbA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.0.tgz", - "integrity": "sha512-0KfckSBEKV+D6e0toXmIj4zzp72EiBnvkC0L+xYxenkLhAdkp2/8tye4AgMzz7Fqb1r8SWtz7+s1UQLrxMBang==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dependencies": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.0", - "jest-serializer": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "micromatch": "^4.0.4", "walker": "^1.0.7" }, @@ -9905,26 +10424,26 @@ } }, "node_modules/jest-jasmine2": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.0.tgz", - "integrity": "sha512-X7sT3HLNjjrBEepilxzPyNhNdyunaFBepo1L3T/fvYb9tb8Wb8qY576gwIa+SZcqYUqAA7/bT3EpZI4lAp0Qew==", - "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/source-map": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.5.0", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "throat": "^6.0.1" }, "engines": { @@ -9996,26 +10515,26 @@ } }, "node_modules/jest-leak-detector": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.0.tgz", - "integrity": "sha512-Ak3k+DD3ao5d4/zzJrxAQ5UV5wiCrp47jH94ZD4/vXSzQgE6WBVDfg83VtculLILO7Y6/Q/7yzKSrtN9Na8luA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", "dependencies": { - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.0.tgz", - "integrity": "sha512-5ruyzWMGb1ilCWD6ECwNdOhQBeIXAjHmHd5c3uO6quR7RIMHPRP2ucOaejz2j+0R0Ko4GanWM6SqXAeF8nYN5g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.0", - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -10086,17 +10605,17 @@ } }, "node_modules/jest-message-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.0.tgz", - "integrity": "sha512-lfbWRhTtmZMEHPAtl0SrvNzK1F4UnVNMHOliRQT2BJ4sBFzIb0gBCHA4ebWD4o6l1fUyvDPxM01K9OIMQTAdQw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.0", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -10169,11 +10688,11 @@ } }, "node_modules/jest-mock": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.0.tgz", - "integrity": "sha512-PHluG6MJGng82/sxh8OiB9fnxzNn3cazceSHCAmAKs4g5rMhc3EZCrJXv+4w61rA2WGagMUj7QLLrA1SRlFpzQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dependencies": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/node": "*" }, "engines": { @@ -10197,25 +10716,25 @@ } }, "node_modules/jest-regex-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.0.tgz", - "integrity": "sha512-e9LqSd6HsDsqd7KS3rNyYwmQAaG9jq4U3LbnwVxN/y3nNlDzm2OFs596uo9zrUY+AV1opXq6ome78tRDUCRWfA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.0.tgz", - "integrity": "sha512-PkDpYEGV/nFqThnIrlPtj8oTxyAV3iuuS6or7dZYyUWaHr/tyyVb5qfBmZS6FEr7ozBHgjrF1bgcgIefnlicbw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", "dependencies": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", + "jest-haste-map": "^27.5.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" @@ -10225,13 +10744,13 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.0.tgz", - "integrity": "sha512-xQsy7CmrT4CJxdNUEdzZU2M/v6YmtQ/pkJM+sx7TA1siG1zfsZuo78PZvzglwRMQFr88f3Su4Om8OEBAic+SMw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", "dependencies": { - "@jest/types": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-snapshot": "^27.5.0" + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -10302,29 +10821,29 @@ } }, "node_modules/jest-runner": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.0.tgz", - "integrity": "sha512-RMzXhkJLLOKKgUPY2trpyVBijaFmswMtgoCCBk2PQVRHC6yo1vLd1/jmFP39s5OXXnt7rntuzKSYvxl+QUibqQ==", - "dependencies": { - "@jest/console": "^27.5.0", - "@jest/environment": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.0", - "jest-environment-jsdom": "^27.5.0", - "jest-environment-node": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-leak-detector": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, @@ -10397,30 +10916,30 @@ } }, "node_modules/jest-runtime": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.0.tgz", - "integrity": "sha512-T7APxCPjN3p3ePcLuypbWtD0UZHyAdvIADZ9ABI/sFZ9t/Rf2xIUd6D7RzZIX+unewJRooVGWrgDIgeUuj0OUA==", - "dependencies": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/globals": "^27.5.0", - "@jest/source-map": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-mock": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -10493,9 +11012,9 @@ } }, "node_modules/jest-serializer": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.0.tgz", - "integrity": "sha512-aSDFqQlVXtBH+Zb5dl9mCvTSFkabixk/9P9cpngL4yJKpmEi9USxfDhONFMzJrtftPvZw3PcltUVmtFZTB93rg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dependencies": { "@types/node": "*", "graceful-fs": "^4.2.9" @@ -10505,31 +11024,31 @@ } }, "node_modules/jest-snapshot": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.0.tgz", - "integrity": "sha512-cAJj15uqWGkro0bfcv/EgusBnqNgCpRruFQZghsMYTq4Fm2lk/VhAf8DgRr8wvhR6Ue1hkeL8tn70Cw4t8x/5A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", "dependencies": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.0", + "expect": "^27.5.1", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-util": "^27.5.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.0", + "pretty-format": "^27.5.1", "semver": "^7.3.2" }, "engines": { @@ -10601,11 +11120,11 @@ } }, "node_modules/jest-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.0.tgz", - "integrity": "sha512-FUUqOx0gAzJy3ytatT1Ss372M1kmhczn8x7aE0++11oPGW1FyD/5NjYBI8w1KOXFm6IVjtaZm2szfJJL+CHs0g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dependencies": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -10681,16 +11200,16 @@ } }, "node_modules/jest-validate": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.0.tgz", - "integrity": "sha512-2XZzQWNrY9Ypo11mm4ZeVjvr++CQG/45XnmA2aWwx155lTwy1JGFI8LpQ2dBCSAeO21ooqg/FCIvv9WwfnPClA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "dependencies": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.0", + "jest-get-type": "^27.5.1", "leven": "^3.1.0", - "pretty-format": "^27.5.0" + "pretty-format": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -10754,104 +11273,323 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/char-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.0.tgz", + "integrity": "sha512-oGu2QekBMXgyQNWPDRQ001bjvDnZe4/zBTz37TMbiKz1NbNiyiH5hRkobe7npRN6GfbGbxMYFck/vQ1r9c1VMA==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-watch-typeahead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.0.0.tgz", - "integrity": "sha512-jxoszalAb394WElmiJTFBMzie/RDCF+W7Q29n5LzOPtcoQoHWfdUtHFkbhgf5NwWe8uMOxvKb/g7ea7CshfkTw==", + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", "dependencies": { - "ansi-escapes": "^4.3.1", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-regex-util": "^27.0.0", - "jest-watcher": "^27.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-watch-typeahead/node_modules/char-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.0.tgz", - "integrity": "sha512-oGu2QekBMXgyQNWPDRQ001bjvDnZe4/zBTz37TMbiKz1NbNiyiH5hRkobe7npRN6GfbGbxMYFck/vQ1r9c1VMA==", + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=12.20" + "node": ">=8" } }, - "node_modules/jest-watch-typeahead/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dependencies": { - "color-name": "~1.1.4" + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=7.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-watch-typeahead/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-watch-typeahead/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/jest-watch-typeahead/node_modules/slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", @@ -10904,16 +11642,16 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.0.tgz", - "integrity": "sha512-MhIeIvEd6dnnspE0OfYrqHOAfZZdyFqx/k8U2nvVFSkLYf22qAFfyNWPVQYcwqKVNobcOhJoT0kV/nRHGbqK8A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", "dependencies": { - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.0", + "jest-util": "^27.5.1", "string-length": "^4.0.1" }, "engines": { @@ -10985,9 +11723,9 @@ } }, "node_modules/jest-worker": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", - "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11092,11 +11830,6 @@ "node": ">=4" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -11118,12 +11851,9 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "bin": { "json5": "lib/cli.js" }, @@ -11143,17 +11873,17 @@ } }, "node_modules/jsonpointer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", - "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/jss": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.0.tgz", - "integrity": "sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", + "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", "dependencies": { "@babel/runtime": "^7.3.1", "csstype": "^3.0.2", @@ -11166,70 +11896,70 @@ } }, "node_modules/jss-plugin-camel-case": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz", - "integrity": "sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", + "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", "dependencies": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jss-plugin-default-unit": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz", - "integrity": "sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", + "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jss-plugin-global": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz", - "integrity": "sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", + "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jss-plugin-nested": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz", - "integrity": "sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", + "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0", + "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "node_modules/jss-plugin-props-sort": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz", - "integrity": "sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", + "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jss-plugin-rule-value-function": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz", - "integrity": "sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", + "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0", + "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "node_modules/jss-plugin-vendor-prefixer": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz", - "integrity": "sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", + "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", "dependencies": { "@babel/runtime": "^7.3.1", "css-vendor": "^2.0.8", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jsx-ast-utils": { @@ -11323,9 +12053,9 @@ } }, "node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -11357,7 +12087,7 @@ "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -11372,7 +12102,7 @@ "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" }, "node_modules/lodash.uniq": { "version": "4.5.0", @@ -11418,11 +12148,11 @@ } }, "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dependencies": { - "sourcemap-codec": "^1.4.4" + "sourcemap-codec": "^1.4.8" } }, "node_modules/make-dir": { @@ -11463,7 +12193,7 @@ "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } @@ -11636,9 +12366,9 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11647,9 +12377,12 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mkdirp": { "version": "0.5.5", @@ -11723,9 +12456,9 @@ } }, "node_modules/node-forge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", - "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "engines": { "node": ">= 6.13.0" } @@ -11736,9 +12469,9 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -11790,9 +12523,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.6.tgz", + "integrity": "sha512-vSZ4miHQ4FojLjmz2+ux4B0/XA16jfwt/LBzIUftDpRd8tujHFkXjMyLwjS08fIZCzesj2z7gJukOKJwqebJAQ==" }, "node_modules/object-assign": { "version": "4.1.1", @@ -11811,9 +12544,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11842,13 +12575,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -11859,26 +12592,26 @@ } }, "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -11904,25 +12637,25 @@ } }, "node_modules/object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -11937,9 +12670,9 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -11994,16 +12727,16 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -13416,9 +14149,9 @@ } }, "node_modules/pretty-format": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.0.tgz", - "integrity": "sha512-xEi6BRPZ+J1AIS4BAtFC/+rh5jXlXObGZjx5+OSpM95vR/PGla78bFVHMy5GdZjP9wk3AHAMHROXq/r69zXltw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -13505,9 +14238,9 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/punycode": { "version": "2.1.1", @@ -13527,9 +14260,12 @@ } }, "node_modules/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -13537,6 +14273,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -13592,12 +14333,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { - "bytes": "3.1.1", - "http-errors": "1.8.1", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -13606,9 +14347,9 @@ } }, "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -13751,9 +14492,9 @@ } }, "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", "engines": { "node": ">= 12.13.0" } @@ -13919,9 +14660,9 @@ } }, "node_modules/react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -13958,25 +14699,14 @@ } }, "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dependencies": { - "brace-expansion": "^1.1.7" + "minimatch": "^3.0.5" }, "engines": { - "node": "*" + "node": ">=6.0.0" } }, "node_modules/redent": { @@ -13997,9 +14727,9 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dependencies": { "regenerate": "^1.4.2" }, @@ -14008,14 +14738,14 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dependencies": { "@babel/runtime": "^7.8.4" } @@ -14026,12 +14756,13 @@ "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" }, "node_modules/regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -14052,30 +14783,25 @@ } }, "node_modules/regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dependencies": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" } }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": "~0.5.0" }, @@ -14086,7 +14812,7 @@ "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "bin": { "jsesc": "bin/jsesc" } @@ -14263,9 +14989,9 @@ } }, "node_modules/rollup": { - "version": "2.67.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.0.tgz", - "integrity": "sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "bin": { "rollup": "dist/bin/rollup" }, @@ -14280,6 +15006,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", @@ -14357,6 +15084,19 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -14426,9 +15166,9 @@ } }, "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -14459,9 +15199,9 @@ } }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -14473,23 +15213,23 @@ } }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -14506,17 +15246,33 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.1", + "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" } @@ -14576,14 +15332,14 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -14667,7 +15423,7 @@ "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { "node": ">=0.10.0" } @@ -14727,16 +15483,11 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, "node_modules/spdy": { "version": "4.0.2", @@ -14871,42 +15622,60 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string.prototype.matchall": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", - "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", + "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15013,9 +15782,9 @@ } }, "node_modules/stylis": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "node_modules/supports-color": { "version": "5.5.0", @@ -15322,12 +16091,13 @@ } }, "node_modules/terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", - "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, "bin": { @@ -15335,26 +16105,18 @@ }, "engines": { "node": ">=10" - }, - "peerDependencies": { - "acorn": "^8.5.0" - }, - "peerDependenciesMeta": { - "acorn": { - "optional": true - } } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" }, "engines": { "node": ">= 10.13.0" @@ -15378,27 +16140,11 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/terser/node_modules/commander": { "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==" }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -15470,22 +16216,23 @@ } }, "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { "node": ">=6" } }, "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "engines": { "node": ">= 4.0.0" } @@ -15518,9 +16265,9 @@ } }, "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dependencies": { "minimist": "^1.2.0" }, @@ -15602,6 +16349,19 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -15623,13 +16383,13 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -15657,17 +16417,17 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "engines": { "node": ">=4" } @@ -15694,7 +16454,7 @@ "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } @@ -15713,6 +16473,35 @@ "yarn": "*" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -15721,6 +16510,15 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -15807,6 +16605,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dependencies": { "browser-process-hrtime": "^1.0.0" } @@ -15831,9 +16630,9 @@ } }, "node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -15864,33 +16663,33 @@ } }, "node_modules/webpack": { - "version": "5.68.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.68.0.tgz", - "integrity": "sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==", - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "bin": { @@ -16168,11 +16967,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -16285,35 +17079,46 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/workbox-background-sync": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz", - "integrity": "sha512-P7c8uG5X2k+DMICH9xeSA9eUlCOjHHYoB42Rq+RtUpuwBxUOflAXR1zdsMWj81LopE4gjKXlTw7BFd1BDAHo7g==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", "dependencies": { - "idb": "^6.1.4", - "workbox-core": "6.4.2" + "idb": "^7.0.1", + "workbox-core": "6.6.0" } }, "node_modules/workbox-broadcast-update": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.4.2.tgz", - "integrity": "sha512-qnBwQyE0+PWFFc/n4ISXINE49m44gbEreJUYt2ldGH3+CNrLmJ1egJOOyUqqu9R4Eb7QrXcmB34ClXG7S37LbA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", "dependencies": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "node_modules/workbox-build": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.4.2.tgz", - "integrity": "sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", "dependencies": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.11.1", @@ -16333,35 +17138,34 @@ "rollup": "^2.43.1", "rollup-plugin-terser": "^7.0.0", "source-map": "^0.8.0-beta.0", - "source-map-url": "^0.4.0", "stringify-object": "^3.3.0", "strip-comments": "^2.0.1", "tempy": "^0.6.0", "upath": "^1.2.0", - "workbox-background-sync": "6.4.2", - "workbox-broadcast-update": "6.4.2", - "workbox-cacheable-response": "6.4.2", - "workbox-core": "6.4.2", - "workbox-expiration": "6.4.2", - "workbox-google-analytics": "6.4.2", - "workbox-navigation-preload": "6.4.2", - "workbox-precaching": "6.4.2", - "workbox-range-requests": "6.4.2", - "workbox-recipes": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2", - "workbox-streams": "6.4.2", - "workbox-sw": "6.4.2", - "workbox-window": "6.4.2" + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.2.tgz", - "integrity": "sha512-JdEazx7qiVqTBzzBl5rolRwl5cmhihjfIcpqRzIZjtT6b18liVmDn/VlWpqW4C/qP2hrFFMLRV1wlex8ZVBPTg==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", "dependencies": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", @@ -16375,9 +17179,9 @@ } }, "node_modules/workbox-build/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -16422,7 +17226,7 @@ "node_modules/workbox-build/node_modules/tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dependencies": { "punycode": "^2.1.0" } @@ -16443,118 +17247,118 @@ } }, "node_modules/workbox-cacheable-response": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.4.2.tgz", - "integrity": "sha512-9FE1W/cKffk1AJzImxgEN0ceWpyz1tqNjZVtA3/LAvYL3AC5SbIkhc7ZCO82WmO9IjTfu8Vut2X/C7ViMSF7TA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", "dependencies": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "node_modules/workbox-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.4.2.tgz", - "integrity": "sha512-1U6cdEYPcajRXiboSlpJx6U7TvhIKbxRRerfepAJu2hniKwJ3DHILjpU/zx3yvzSBCWcNJDoFalf7Vgd7ey/rw==" + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" }, "node_modules/workbox-expiration": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.4.2.tgz", - "integrity": "sha512-0hbpBj0tDnW+DZOUmwZqntB/8xrXOgO34i7s00Si/VlFJvvpRKg1leXdHHU8ykoSBd6+F2KDcMP3swoCi5guLw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", "dependencies": { - "idb": "^6.1.4", - "workbox-core": "6.4.2" + "idb": "^7.0.1", + "workbox-core": "6.6.0" } }, "node_modules/workbox-google-analytics": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.4.2.tgz", - "integrity": "sha512-u+gxs3jXovPb1oul4CTBOb+T9fS1oZG+ZE6AzS7l40vnyfJV79DaLBvlpEZfXGv3CjMdV1sT/ltdOrKzo7HcGw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", "dependencies": { - "workbox-background-sync": "6.4.2", - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" } }, "node_modules/workbox-navigation-preload": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.4.2.tgz", - "integrity": "sha512-viyejlCtlKsbJCBHwhSBbWc57MwPXvUrc8P7d+87AxBGPU+JuWkT6nvBANgVgFz6FUhCvRC8aYt+B1helo166g==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", "dependencies": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "node_modules/workbox-precaching": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.4.2.tgz", - "integrity": "sha512-CZ6uwFN/2wb4noHVlALL7UqPFbLfez/9S2GAzGAb0Sk876ul9ukRKPJJ6gtsxfE2HSTwqwuyNVa6xWyeyJ1XSA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", "dependencies": { - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" } }, "node_modules/workbox-range-requests": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.4.2.tgz", - "integrity": "sha512-SowF3z69hr3Po/w7+xarWfzxJX/3Fo0uSG72Zg4g5FWWnHpq2zPvgbWerBZIa81zpJVUdYpMa3akJJsv+LaO1Q==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", "dependencies": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "node_modules/workbox-recipes": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.4.2.tgz", - "integrity": "sha512-/oVxlZFpAjFVbY+3PoGEXe8qyvtmqMrTdWhbOfbwokNFtUZ/JCtanDKgwDv9x3AebqGAoJRvQNSru0F4nG+gWA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", "dependencies": { - "workbox-cacheable-response": "6.4.2", - "workbox-core": "6.4.2", - "workbox-expiration": "6.4.2", - "workbox-precaching": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" } }, "node_modules/workbox-routing": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.4.2.tgz", - "integrity": "sha512-0ss/n9PAcHjTy4Ad7l2puuod4WtsnRYu9BrmHcu6Dk4PgWeJo1t5VnGufPxNtcuyPGQ3OdnMdlmhMJ57sSrrSw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", "dependencies": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "node_modules/workbox-strategies": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.4.2.tgz", - "integrity": "sha512-YXh9E9dZGEO1EiPC3jPe2CbztO5WT8Ruj8wiYZM56XqEJp5YlGTtqRjghV+JovWOqkWdR+amJpV31KPWQUvn1Q==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", "dependencies": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "node_modules/workbox-streams": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.4.2.tgz", - "integrity": "sha512-ROEGlZHGVEgpa5bOZefiJEVsi5PsFjJG9Xd+wnDbApsCO9xq9rYFopF+IRq9tChyYzhBnyk2hJxbQVWphz3sog==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", "dependencies": { - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2" + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" } }, "node_modules/workbox-sw": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.4.2.tgz", - "integrity": "sha512-A2qdu9TLktfIM5NE/8+yYwfWu+JgDaCkbo5ikrky2c7r9v2X6DcJ+zSLphNHHLwM/0eVk5XVf1mC5HGhYpMhhg==" + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" }, "node_modules/workbox-webpack-plugin": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.4.2.tgz", - "integrity": "sha512-CiEwM6kaJRkx1cP5xHksn13abTzUqMHiMMlp5Eh/v4wRcedgDTyv6Uo8+Hg9MurRbHDosO5suaPyF9uwVr4/CQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", "dependencies": { "fast-json-stable-stringify": "^2.1.0", "pretty-bytes": "^5.4.1", - "source-map-url": "^0.4.0", "upath": "^1.2.0", "webpack-sources": "^1.4.3", - "workbox-build": "6.4.2" + "workbox-build": "6.6.0" }, "engines": { "node": ">=10.0.0" @@ -16581,12 +17385,12 @@ } }, "node_modules/workbox-window": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.4.2.tgz", - "integrity": "sha512-KVyRKmrJg7iB+uym/B/CnEUEFG9CvnTU1Bq5xpXHbtgD9l+ShDekSl1wYpqw/O0JfeeQVOFb8CiNfvnwWwqnWQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", "dependencies": { "@types/trusted-types": "^2.0.2", - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "node_modules/wrap-ansi": { @@ -16652,9 +17456,9 @@ } }, "node_modules/ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { "node": ">=8.3.0" }, @@ -16748,46 +17552,52 @@ } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" + }, "@ampproject/remapping": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", - "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.22.5" } }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==" }, "@babel/core": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", - "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", - "requires": { - "@ampproject/remapping": "^2.0.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.0", - "@babel/parser": "^7.17.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.2", "semver": "^6.3.0" }, "dependencies": { @@ -16799,34 +17609,20 @@ } }, "@babel/eslint-parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz", - "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.5.tgz", + "integrity": "sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==", "requires": { - "eslint-scope": "^5.1.1", + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.0" }, "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, "eslint-visitor-keys": { "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==" }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -16835,82 +17631,111 @@ } }, "@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -16925,276 +17750,207 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "requires": { - "@babel/types": "^7.16.7" - } + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==" }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "requires": { - "@babel/types": "^7.16.7" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.22.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==" }, "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/helpers": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", - "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-decorators": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.0.tgz", - "integrity": "sha512-JR8HTf3T1CsdMqfENrZ9pqncwsH4sPcvsyDLpvmv8iIbpDmeyBD7HPfGAIqkQph2j5d3B84hTm+m3qHPAedaPw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.0", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/plugin-syntax-decorators": "^7.17.0", - "charcodes": "^0.2.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.5.tgz", + "integrity": "sha512-h8hlezQ4dl6ixodgXkH8lUfcD7x+WAuIqPUjwGoItynrXOAv4a4Tci1zA/qjzQjjcl0v3QpLdc2LM6ZACQuY7A==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/plugin-syntax-decorators": "^7.22.5" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { @@ -17215,27 +17971,6 @@ "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, "@babel/plugin-proposal-optional-chaining": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", @@ -17247,32 +17982,27 @@ } }, "@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "requires": {} }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-async-generators": { @@ -17308,11 +18038,11 @@ } }, "@babel/plugin-syntax-decorators": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", - "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz", + "integrity": "sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-dynamic-import": { @@ -17339,6 +18069,22 @@ "@babel/helper-plugin-utils": "^7.16.7" } }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -17356,11 +18102,11 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -17424,106 +18170,165 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" } }, "@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-transform-flow-strip-types": { @@ -17536,120 +18341,205 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" } }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-react-constant-elements": { @@ -17698,31 +18588,32 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", "requires": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", "semver": "^6.3.0" }, "dependencies": { @@ -17734,104 +18625,112 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-typescript": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", - "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", + "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" } }, - "@babel/preset-env": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", - "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", "requires": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -17841,44 +18740,61 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", "semver": "^6.3.0" }, "dependencies": { @@ -17915,21 +18831,28 @@ } }, "@babel/preset-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", - "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", + "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-typescript": "^7.22.5" } }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" } }, "@babel/runtime-corejs3": { @@ -17942,38 +18865,39 @@ } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" } }, "@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.0", - "@babel/types": "^7.17.0", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" } }, @@ -18020,46 +18944,23 @@ } }, "@emotion/babel-plugin": { - "version": "11.9.2", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz", - "integrity": "sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==", - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/runtime": "^7.13.10", - "@emotion/hash": "^0.8.0", - "@emotion/memoize": "^0.7.5", - "@emotion/serialize": "^1.0.2", - "babel-plugin-macros": "^2.6.1", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.0.13" + "stylis": "4.2.0" }, "dependencies": { - "babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -18068,92 +18969,100 @@ } }, "@emotion/cache": { - "version": "11.7.1", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", - "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", "requires": { - "@emotion/memoize": "^0.7.4", - "@emotion/sheet": "^1.1.0", - "@emotion/utils": "^1.0.0", - "@emotion/weak-memoize": "^0.2.5", - "stylis": "4.0.13" + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" } }, "@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "@emotion/is-prop-valid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.2.tgz", - "integrity": "sha512-3QnhqeL+WW88YjYbQL5gUIkthuMw7a0NGbZ7wfFVk2kg/CK5w8w5FFa0RzWjyY1+sujN0NWbtSHH6OJmWHtJpQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", "requires": { - "@emotion/memoize": "^0.7.4" + "@emotion/memoize": "^0.8.1" } }, "@emotion/memoize": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", - "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "@emotion/react": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.9.0.tgz", - "integrity": "sha512-lBVSF5d0ceKtfKCDQJveNAtkC7ayxpVlgOohLgXqRwqWr9bOf4TZAFFyIcNngnV6xK6X4x2ZeXq7vliHkoVkxQ==", - "requires": { - "@babel/runtime": "^7.13.10", - "@emotion/babel-plugin": "^11.7.1", - "@emotion/cache": "^11.7.1", - "@emotion/serialize": "^1.0.3", - "@emotion/utils": "^1.1.0", - "@emotion/weak-memoize": "^0.2.5", + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", "hoist-non-react-statics": "^3.3.1" } }, "@emotion/serialize": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.3.tgz", - "integrity": "sha512-2mSSvgLfyV3q+iVh3YWgNlUc2a9ZlDU7DjuP5MjK3AXRR0dYigCrP99aeFtaB2L/hjfEZdSThn5dsZ0ufqbvsA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", "requires": { - "@emotion/hash": "^0.8.0", - "@emotion/memoize": "^0.7.4", - "@emotion/unitless": "^0.7.5", - "@emotion/utils": "^1.0.0", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", "csstype": "^3.0.2" } }, "@emotion/sheet": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", - "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "@emotion/styled": { - "version": "11.8.1", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.8.1.tgz", - "integrity": "sha512-OghEVAYBZMpEquHZwuelXcRjRJQOVayvbmNR0zr174NHdmMgrNkLC6TljKC5h9lZLkN5WGrdUcrKlOJ4phhoTQ==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", "requires": { - "@babel/runtime": "^7.13.10", - "@emotion/babel-plugin": "^11.7.1", - "@emotion/is-prop-valid": "^1.1.2", - "@emotion/serialize": "^1.0.2", - "@emotion/utils": "^1.1.0" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" } }, "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "requires": {} }, "@emotion/utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", - "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" }, "@emotion/weak-memoize": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, "@eslint/eslintrc": { "version": "1.0.5", @@ -18277,15 +19186,15 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, "@jest/console": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.0.tgz", - "integrity": "sha512-WUzX5neFb0IOQOy/7A2VhiGdxJKk85Xns2Oq29JaHmtnSel+BsjwyQZxzAs2Xxfd2i452fwdDG9ox/IWi81bdQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", "requires": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.0", - "jest-util": "^27.5.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0" }, "dependencies": { @@ -18335,34 +19244,34 @@ } }, "@jest/core": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.0.tgz", - "integrity": "sha512-DcUTkZyon+dRozTEjy38Bgt3PIU51GdUJuz3uHKg5maGtmCaYqPUGiM3Xddqi7eIMC7E3fTGIlHqH9i0pTOy6Q==", - "requires": { - "@jest/console": "^27.5.0", - "@jest/reporters": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.0", - "jest-config": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-resolve-dependencies": "^27.5.0", - "jest-runner": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", - "jest-watcher": "^27.5.0", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", "micromatch": "^4.0.4", "rimraf": "^3.0.0", "slash": "^3.0.0", @@ -18415,49 +19324,49 @@ } }, "@jest/environment": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.0.tgz", - "integrity": "sha512-lg0JFsMaLKgpwzs0knOg21Z4OQwaJoBLutnmYzip4tyLTXP21VYWtYGpLXgx42fw/Mw05m1WDXWKgwR6WnsiTw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "requires": { - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.5.0" + "jest-mock": "^27.5.1" } }, "@jest/fake-timers": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.0.tgz", - "integrity": "sha512-e3WrlpqSHq3HAQ03JFjTn8YCrsyg640/sr1rjkM2rNv8z1ufjudpv4xq6DvvTJYB6FuUrfg0g+7bSKPet5QfCQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "requires": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", - "jest-message-util": "^27.5.0", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0" + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" } }, "@jest/globals": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.0.tgz", - "integrity": "sha512-wWpMnTiR65Q4JD7fr2BqN+ZDbi99mmILnEM6u7AaX4geASEIVvQsiB4RCvwZrIX5YZCsAjviJQVq9CYddLABkg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "requires": { - "@jest/environment": "^27.5.0", - "@jest/types": "^27.5.0", - "expect": "^27.5.0" + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" } }, "@jest/reporters": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.0.tgz", - "integrity": "sha512-DG+BmVSx2uaJSTKz5z1eScgHTQ6/cZ5CCKSpmpr4sXQPwV2V5aUMOBDwXX1MnqNRhH7/Rq9K97ynnocvho5aMA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -18469,10 +19378,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -18530,10 +19439,18 @@ } } }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, "@jest/source-map": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.0.tgz", - "integrity": "sha512-0xr7VZ+JNCRrlCyRMYhquUm8eU3kNdGDaIW4s3L625bNjk273v9ZhAm3YczIuzJzYH0pnjT+QSCiZQegWKjeow==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.2.9", @@ -18548,42 +19465,42 @@ } }, "@jest/test-result": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.0.tgz", - "integrity": "sha512-Lxecvx5mN6WIeynIyW0dWDQm8UPGMHvTwxUPK+OsZaqBDMGaNDSZtw53VoVk7HyT6AcRblMR/pfa0XucmH4hGw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "requires": { - "@jest/console": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.0.tgz", - "integrity": "sha512-WzjcDflqbpWe+SnJPCvB2gB6haGfrkzAgzY6Pb1aq+EPoVAj2mwBaKN0ROWI4H87aSslCjq2M+BUQFNJ8VpnDA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", "requires": { - "@jest/test-result": "^27.5.0", + "@jest/test-result": "^27.5.1", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-runtime": "^27.5.0" + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" } }, "@jest/transform": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.0.tgz", - "integrity": "sha512-yXUy/iO3TH1itxJ9BF7LLjuXt8TtgtjAl0PBQbUaCvRa+L0yYBob6uayW9dFRX/CDQweouLhvmXh44zRiaB+yA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-util": "^27.5.0", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -18642,9 +19559,9 @@ } }, "@jest/types": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.0.tgz", - "integrity": "sha512-oDHEp7gwSgA82RZ6pzUL3ugM2njP/lVB1MsxRZNOBk+CoNvh9SpH1lQixPFc/kDlV50v59csiW4HLixWmhmgPQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -18698,142 +19615,224 @@ } } }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@jridgewell/resolve-uri": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", - "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", - "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", - "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + } } }, "@mui/base": { - "version": "5.0.0-alpha.77", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.77.tgz", - "integrity": "sha512-Zqm3qlczGViD3lJSYo8ZnQLHJ3PwGYftbDfVuh2Rq5OD88F7H6oDILlqknzty59NDkeSVO2qlymYmHOY1nLodg==", - "requires": { - "@babel/runtime": "^7.17.2", - "@emotion/is-prop-valid": "^1.1.2", - "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", - "@popperjs/core": "^2.11.5", - "clsx": "^1.1.1", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" + "version": "5.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.5.tgz", + "integrity": "sha512-vy3TWLQYdGNecTaufR4wDNQFV2WEg6wRPi6BVbx6q1vP3K1mbxIn1+XOqOzfYBXjFHvMx0gZAo2TgWbaqfgvAA==", + "requires": { + "@babel/runtime": "^7.22.5", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.6", + "@popperjs/core": "^2.11.8", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } } }, + "@mui/core-downloads-tracker": { + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", + "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==" + }, "@mui/icons-material": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.6.2.tgz", - "integrity": "sha512-9QdI7axKuBAyaGz4mtdi7Uy1j73/thqFmEuxpJHxNC7O8ADEK1Da3t2veK2tgmsXsUlAHcAG63gg+GvWWeQNqQ==", + "version": "5.11.16", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", + "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", "requires": { - "@babel/runtime": "^7.17.2" + "@babel/runtime": "^7.21.0" } }, "@mui/material": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.6.2.tgz", - "integrity": "sha512-bwMvroBrMgUTwUh/BcjhtcJwEw9uH4chV3+ZSj6RckOJtMj8U4yEeD7S4NgHE8Ioj5eObKFzHpih/cTD1sDRpg==", - "requires": { - "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.77", - "@mui/system": "^5.6.2", - "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", - "@types/react-transition-group": "^4.4.4", - "clsx": "^1.1.1", - "csstype": "^3.0.11", - "hoist-non-react-statics": "^3.3.2", - "prop-types": "^15.7.2", - "react-is": "^17.0.2", - "react-transition-group": "^4.4.2" + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.6.tgz", + "integrity": "sha512-/c2ZApeQm2sTYdQXjqEnldaBMBcUEiyu2VRS6bS39ZeNaAcCLBQbYocLR46R+f0S5dgpBzB0T4AsOABPOFYZ5Q==", + "requires": { + "@babel/runtime": "^7.22.5", + "@mui/base": "5.0.0-beta.5", + "@mui/core-downloads-tracker": "^5.13.4", + "@mui/system": "^5.13.6", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.6", + "@types/react-transition-group": "^4.4.6", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } } }, "@mui/private-theming": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.8.4.tgz", - "integrity": "sha512-3Lp0VAEjtQygJ70MWEyHkKvg327O6YoBH6ZNEy6fIsrK6gmRIj+YrlvJ7LQCbowY+qDGnbdMrTBd1hfThlI8lg==", + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", + "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", "requires": { - "@babel/runtime": "^7.17.2", - "@mui/utils": "^5.8.4", + "@babel/runtime": "^7.21.0", + "@mui/utils": "^5.13.1", "prop-types": "^15.8.1" } }, "@mui/styled-engine": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.6.1.tgz", - "integrity": "sha512-jEhH6TBY8jc9S8yVncXmoTYTbATjEu44RMFXj6sIYfKr5NArVwTwRo3JexLL0t3BOAiYM4xsFLgfKEIvB9SAeQ==", + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", + "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", "requires": { - "@babel/runtime": "^7.17.2", - "@emotion/cache": "^11.7.1", - "prop-types": "^15.7.2" + "@babel/runtime": "^7.21.0", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" } }, "@mui/styles": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.8.4.tgz", - "integrity": "sha512-Td7dafJDgpdzObT0z5CH/ihOh22MG2vZ7p2tpnrKaq3We50f8l3T69XeTNcy2OH0TWnXJJuASZS/0uMJmVPfag==", - "requires": { - "@babel/runtime": "^7.17.2", - "@emotion/hash": "^0.8.0", - "@mui/private-theming": "^5.8.4", - "@mui/types": "^7.1.4", - "@mui/utils": "^5.8.4", - "clsx": "^1.1.1", - "csstype": "^3.1.0", + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.13.2.tgz", + "integrity": "sha512-gKNkVyk6azQ8wfCamh3yU/wLv1JscYrsQX9huQBwfwtE7kUTq2rgggdfJjRADjbcmT6IPX+oCHYjGfqqFgDIQQ==", + "requires": { + "@babel/runtime": "^7.21.0", + "@emotion/hash": "^0.9.1", + "@mui/private-theming": "^5.13.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "clsx": "^1.2.1", + "csstype": "^3.1.2", "hoist-non-react-statics": "^3.3.2", - "jss": "^10.8.2", - "jss-plugin-camel-case": "^10.8.2", - "jss-plugin-default-unit": "^10.8.2", - "jss-plugin-global": "^10.8.2", - "jss-plugin-nested": "^10.8.2", - "jss-plugin-props-sort": "^10.8.2", - "jss-plugin-rule-value-function": "^10.8.2", - "jss-plugin-vendor-prefixer": "^10.8.2", + "jss": "^10.10.0", + "jss-plugin-camel-case": "^10.10.0", + "jss-plugin-default-unit": "^10.10.0", + "jss-plugin-global": "^10.10.0", + "jss-plugin-nested": "^10.10.0", + "jss-plugin-props-sort": "^10.10.0", + "jss-plugin-rule-value-function": "^10.10.0", + "jss-plugin-vendor-prefixer": "^10.10.0", "prop-types": "^15.8.1" } }, "@mui/system": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.6.2.tgz", - "integrity": "sha512-Wg9TRbvavSwEYk6UdpnoDx+CqJfaAN7AzlmwEx7DtGmx0snFVBST8FVb1Ev1vXosxEnq6/fe7ZDRobFVewvEPQ==", - "requires": { - "@babel/runtime": "^7.17.2", - "@mui/private-theming": "^5.6.2", - "@mui/styled-engine": "^5.6.1", - "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.1", - "clsx": "^1.1.1", - "csstype": "^3.0.11", - "prop-types": "^15.7.2" + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", + "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", + "requires": { + "@babel/runtime": "^7.22.5", + "@mui/private-theming": "^5.13.1", + "@mui/styled-engine": "^5.13.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.6", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" } }, "@mui/types": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.4.tgz", - "integrity": "sha512-uveM3byMbthO+6tXZ1n2zm0W3uJCQYtwt/v5zV5I77v2v18u0ITkb8xwhsDD2i3V2Kye7SaNR6FFJ6lMuY/WqQ==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", "requires": {} }, "@mui/utils": { - "version": "5.8.4", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.8.4.tgz", - "integrity": "sha512-BHYErfrjqqh76KaDAm8wZlhEip1Uj7Cmco65NcsF3BWrAl3FWngACpaPZeEbTgmaEwyWAQEE6LZhsmy43hfyqQ==", + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", + "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", "requires": { - "@babel/runtime": "^7.17.2", + "@babel/runtime": "^7.22.5", "@types/prop-types": "^15.7.5", - "@types/react-is": "^16.7.1 || ^17.0.0", + "@types/react-is": "^18.2.0", "prop-types": "^15.8.1", - "react-is": "^17.0.2" + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@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", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "requires": { + "eslint-scope": "5.1.1" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } } }, "@nodelib/fs.scandir": { @@ -18883,14 +19882,14 @@ } }, "@popperjs/core": { - "version": "2.11.5", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", - "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" }, "@rollup/plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", - "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", "requires": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" @@ -18940,10 +19939,15 @@ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==" }, + "@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "requires": { "type-detect": "4.0.8" } @@ -19329,9 +20333,9 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" }, "@types/express": { "version": "4.17.13", @@ -19474,17 +20478,17 @@ } }, "@types/react-is": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", - "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", "requires": { "@types/react": "*" } }, "@types/react-transition-group": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", - "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", "requires": { "@types/react": "*" } @@ -19546,9 +20550,9 @@ } }, "@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, "@types/ws": { "version": "8.2.2", @@ -19683,133 +20687,133 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" }, "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "requires": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -19838,9 +20842,9 @@ } }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==" }, "acorn-globals": { "version": "6.0.0", @@ -19859,9 +20863,9 @@ } }, "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "requires": {} }, "acorn-jsx": { @@ -20023,20 +21027,29 @@ "@babel/runtime-corejs3": "^7.10.2" } }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" } }, @@ -20055,14 +21068,27 @@ "es-abstract": "^1.19.0" } }, - "array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" } }, "asap": { @@ -20076,9 +21102,9 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { "lodash": "^4.17.14" } @@ -20111,6 +21137,11 @@ "postcss-value-parser": "^4.2.0" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, "axe-core": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", @@ -20144,15 +21175,15 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" }, "babel-jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.0.tgz", - "integrity": "sha512-puhCyvBTNLevhbd1oyw6t3gWBicWoUARQYKCBB/B1moif17NbyhxbsfadqZIw8zfJJD+W7Vw0Nb20pEjLxkXqQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", "requires": { - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.0", + "babel-preset-jest": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -20204,34 +21235,16 @@ } }, "babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "requires": { "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", + "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, "schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -20244,14 +21257,6 @@ } } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, "babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -20265,9 +21270,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.0.tgz", - "integrity": "sha512-ztwNkHl+g1GaoQcb8f2BER4C3LMvSXuF7KVqtUioXQgScSEnkl6lLgCILUYIR+CPTwL8H3F/PNLze64HPWF9JA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -20292,12 +21297,12 @@ "requires": {} }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", "semver": "^6.1.1" }, "dependencies": { @@ -20309,20 +21314,20 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.4.0" } }, "babel-plugin-transform-react-remove-prop-types": { @@ -20350,11 +21355,11 @@ } }, "babel-preset-jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.0.tgz", - "integrity": "sha512-7bfu1cJBlgK/nKfTvMlElzA3jpi6GzDWX3fntnyP2cQSzoi/KUz6ewGlcb3PSRYZGyv+uPnVHY0Im3JbsViqgA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", "requires": { - "babel-plugin-jest-hoist": "^27.5.0", + "babel-plugin-jest-hoist": "^27.5.1", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -20418,26 +21423,28 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "debug": { "version": "2.6.9", @@ -20447,6 +21454,11 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -20458,7 +21470,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -20503,15 +21515,14 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" } }, "bser": { @@ -20533,9 +21544,9 @@ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" }, "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" }, "bytes": { "version": "3.0.0", @@ -20587,9 +21598,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001307", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001307.tgz", - "integrity": "sha512-+MXEMczJ4FuxJAUp0jvAl6Df0NI/OfW1RWEE61eSmzS7hw6lz4IKutbhbXendwq8BljfFuHtu26VWsg4afQ7Ng==" + "version": "1.0.30001512", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==" }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -20611,11 +21622,6 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, - "charcodes": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", - "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==" - }, "check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -20692,14 +21698,14 @@ } }, "clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" }, "coa": { "version": "2.0.2", @@ -20835,9 +21841,9 @@ } }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "convert-source-map": { "version": "1.8.0", @@ -20848,9 +21854,9 @@ } }, "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "cookie-signature": { "version": "1.0.6", @@ -20863,19 +21869,11 @@ "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==" }, "core-js-compat": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", - "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", "requires": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } + "browserslist": "^4.21.5" } }, "core-js-pure": { @@ -21196,9 +22194,9 @@ } }, "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "damerau-levenshtein": { "version": "1.0.8", @@ -21224,19 +22222,19 @@ } }, "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "deep-equal": { "version": "1.1.1", @@ -21275,11 +22273,12 @@ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "defined": { @@ -21313,9 +22312,9 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detect-newline": { "version": "3.1.0", @@ -21367,9 +22366,9 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "diff-sequences": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", - "integrity": "sha512-ZsOBWnhXiH+Zn0DcBNX/tiQsqrREHs/6oQsEVy2VJJjrTblykPima11pyHMSA/7PGmD+fwclTnKVKL/qtNREDQ==" + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" }, "dir-glob": { "version": "3.0.1", @@ -21511,20 +22510,20 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "requires": { - "jake": "^10.6.1" + "jake": "^10.8.5" } }, "electron-to-chromium": { - "version": "1.4.65", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", - "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==" + "version": "1.4.449", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", + "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==" }, "emittery": { "version": "0.8.1", @@ -21544,12 +22543,12 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -21577,36 +22576,68 @@ } }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "requires": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" } }, "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "requires": { + "has": "^1.0.3" + } }, "es-to-primitive": { "version": "1.2.1", @@ -21634,57 +22665,21 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } } } }, @@ -21807,9 +22802,9 @@ } }, "eslint-config-react-app": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.0.tgz", - "integrity": "sha512-xyymoxtIt1EOsSaGag+/jmcywRuieQoA2JbPCjnw9HukFj9/97aGPoZVFioaotzk1K5Qt9sHO5EutZbkrAXS0g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", "requires": { "@babel/core": "^7.16.0", "@babel/eslint-parser": "^7.16.3", @@ -21988,24 +22983,25 @@ } }, "eslint-plugin-react": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", - "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "requires": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" + "string.prototype.matchall": "^4.0.8" }, "dependencies": { "doctrine": { @@ -22017,12 +23013,13 @@ } }, "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "semver": { @@ -22136,7 +23133,7 @@ "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "eventemitter3": { "version": "4.0.7", @@ -22170,48 +23167,49 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, "expect": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.0.tgz", - "integrity": "sha512-z73GZ132cBqrapO0X6BeRjyBXqOt9YeRtnDteHJIQqp5s2pZ41Hz23VUbsVFMfkrsFLU9GwoIRS0ZzLuFK8M5w==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "requires": { - "@jest/types": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0" + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" } }, "express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.1", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.1", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.6", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -22230,6 +23228,11 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -22239,6 +23242,11 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -22321,11 +23329,29 @@ } }, "filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "requires": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "filesize": { @@ -22342,16 +23368,16 @@ } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "dependencies": { @@ -22366,7 +23392,12 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -22413,6 +23444,14 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "fork-ts-checker-webpack-plugin": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", @@ -22539,7 +23578,7 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "fs-extra": { "version": "10.0.0", @@ -22572,11 +23611,27 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -22588,13 +23643,14 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" } }, "get-own-enumerable-property-symbols": { @@ -22680,6 +23736,14 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "requires": { + "define-properties": "^1.1.3" + } + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -22693,6 +23757,14 @@ "slash": "^3.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", @@ -22725,19 +23797,32 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", @@ -22884,15 +23969,27 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "http-parser-js": { @@ -22933,9 +24030,9 @@ } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "requires": { "agent-base": "6", "debug": "4" @@ -22974,9 +24071,9 @@ "requires": {} }, "idb": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", - "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" }, "identity-obj-proxy": { "version": "3.0.0", @@ -23051,11 +24148,11 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -23079,6 +24176,16 @@ "has-tostringtag": "^1.0.0" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -23110,14 +24217,14 @@ } }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "requires": { "has": "^1.0.3" } @@ -23166,7 +24273,7 @@ "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, "is-negative-zero": { "version": "2.0.2", @@ -23179,9 +24286,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "requires": { "has-tostringtag": "^1.0.0" } @@ -23189,7 +24296,7 @@ "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" }, "is-path-cwd": { "version": "2.2.0", @@ -23223,7 +24330,7 @@ "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" }, "is-root": { "version": "2.1.0", @@ -23231,9 +24338,12 @@ "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "2.0.1", @@ -23256,6 +24366,18 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -23293,9 +24415,9 @@ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" }, "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -23336,91 +24458,134 @@ } } }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", - "requires": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - } - } - }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jest": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.0.tgz", - "integrity": "sha512-sCMZhL9zy0fiFc4H0cKlXq7BcghMSxm5ZnEyaPWTteArU5ix6JjOKyOXSUBGLTQCmt5kuX9zEvQ9BSshHOPB3A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "requires": { - "@jest/core": "^27.5.0", + "@jest/core": "^27.5.1", "import-local": "^3.0.2", - "jest-cli": "^27.5.0" + "jest-cli": "^27.5.1" } }, "jest-changed-files": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.0.tgz", - "integrity": "sha512-BGWKI7E6ORqbF5usF1oA4ftbkhVZVrXr8jB0/BrU6TAn3kfOVwX2Zx6pKIXYutJ+qNEjT8Da/gGak0ajya/StA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", "requires": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.0.tgz", - "integrity": "sha512-+NPd1OxpAHYKjbW8dgL0huFgmtZRKSUKee/UtRgZJEfAxCeA12d7sp0coh5EGDBpW4fCk1Pcia/2dG+j6BQvdw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", "requires": { - "@jest/environment": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.0", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" @@ -23472,20 +24637,20 @@ } }, "jest-cli": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.0.tgz", - "integrity": "sha512-9ANs79Goz1ULKtG7HDm/F//4E69v8EFOLXRIHmeC/eK1xTUeQGlU6XP0Zwst386sKaKB4O60qhWY/UaTBS2MLA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", "requires": { - "@jest/core": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "prompts": "^2.0.1", "yargs": "^16.2.0" }, @@ -23536,32 +24701,34 @@ } }, "jest-config": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.0.tgz", - "integrity": "sha512-eOIpvpXFz5WHuIYZN1QmvBLEjsSk3w+IAC/2jBpZClbprF53Bj9meBMgAbE15DSkaaJBDFmhXXd1L2eCLaWxQw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", "requires": { "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.0", - "@jest/types": "^27.5.0", - "babel-jest": "^27.5.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.0", - "jest-environment-jsdom": "^27.5.0", - "jest-environment-node": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-jasmine2": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-runner": "^27.5.0", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "micromatch": "^4.0.4", - "pretty-format": "^27.5.0", - "slash": "^3.0.0" + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "dependencies": { "ansi-styles": { @@ -23610,14 +24777,14 @@ } }, "jest-diff": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.0.tgz", - "integrity": "sha512-zztvHDCq/QcAVv+o6rts0reupSOxyrX+KLQEOMWCW2trZgcBFgp/oTK7hJCGpXvEIqKrQzyQlaPKn9W04+IMQg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.0", - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "dependencies": { "ansi-styles": { @@ -23666,23 +24833,23 @@ } }, "jest-docblock": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.0.tgz", - "integrity": "sha512-U4MtJgdZn2x+jpPzd7NAYvDmgJAA5h9QxVAwsyuH7IymGzY8VGHhAkHcIGOmtmdC61ORLxCbEhj6fCJsaCWzXA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.0.tgz", - "integrity": "sha512-2vpajSdDMZmAxjSP1f4BG9KKduwHtuaI0w66oqLUkfaGUU7Ix/W+d8BW0h3/QEJiew7hR0GSblqdFwTEEbhBdw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "requires": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "jest-get-type": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0" + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" }, "dependencies": { "ansi-styles": { @@ -23731,78 +24898,78 @@ } }, "jest-environment-jsdom": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.0.tgz", - "integrity": "sha512-sX49N8rjp6HSHeGpNgLk6mtHRd1IPAnE/u7wLQkb6Tz/1E08Q++Y8Zk/IbpVdcFywbzH1icFqEuDuHJ6o+uXXg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", "requires": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.0.tgz", - "integrity": "sha512-7UzisMMfGyrURhS/eUa7p7mgaqN3ajHylsjOgfcn0caNeYRZq4LHKZLfAxrPM34DWLnBZcRupEJlpQsizdSUsw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", "requires": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.5.0", - "jest-util": "^27.5.0" + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" } }, "jest-get-type": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.0.tgz", - "integrity": "sha512-Vp6O8a52M/dahXRG/E0EJuWQROps2mDQ0sJYPgO8HskhdLwj9ajgngy2OAqZgV6e/RcU67WUHq6TgfvJb8flbA==" + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" }, "jest-haste-map": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.0.tgz", - "integrity": "sha512-0KfckSBEKV+D6e0toXmIj4zzp72EiBnvkC0L+xYxenkLhAdkp2/8tye4AgMzz7Fqb1r8SWtz7+s1UQLrxMBang==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "requires": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.0", - "jest-serializer": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.0.tgz", - "integrity": "sha512-X7sT3HLNjjrBEepilxzPyNhNdyunaFBepo1L3T/fvYb9tb8Wb8qY576gwIa+SZcqYUqAA7/bT3EpZI4lAp0Qew==", - "requires": { - "@jest/environment": "^27.5.0", - "@jest/source-map": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.5.0", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", - "pretty-format": "^27.5.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "throat": "^6.0.1" }, "dependencies": { @@ -23852,23 +25019,23 @@ } }, "jest-leak-detector": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.0.tgz", - "integrity": "sha512-Ak3k+DD3ao5d4/zzJrxAQ5UV5wiCrp47jH94ZD4/vXSzQgE6WBVDfg83VtculLILO7Y6/Q/7yzKSrtN9Na8luA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", "requires": { - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-matcher-utils": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.0.tgz", - "integrity": "sha512-5ruyzWMGb1ilCWD6ECwNdOhQBeIXAjHmHd5c3uO6quR7RIMHPRP2ucOaejz2j+0R0Ko4GanWM6SqXAeF8nYN5g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.5.0", - "jest-get-type": "^27.5.0", - "pretty-format": "^27.5.0" + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "dependencies": { "ansi-styles": { @@ -23917,17 +25084,17 @@ } }, "jest-message-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.0.tgz", - "integrity": "sha512-lfbWRhTtmZMEHPAtl0SrvNzK1F4UnVNMHOliRQT2BJ4sBFzIb0gBCHA4ebWD4o6l1fUyvDPxM01K9OIMQTAdQw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.0", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -23978,11 +25145,11 @@ } }, "jest-mock": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.0.tgz", - "integrity": "sha512-PHluG6MJGng82/sxh8OiB9fnxzNn3cazceSHCAmAKs4g5rMhc3EZCrJXv+4w61rA2WGagMUj7QLLrA1SRlFpzQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "requires": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/node": "*" } }, @@ -23993,22 +25160,22 @@ "requires": {} }, "jest-regex-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.0.tgz", - "integrity": "sha512-e9LqSd6HsDsqd7KS3rNyYwmQAaG9jq4U3LbnwVxN/y3nNlDzm2OFs596uo9zrUY+AV1opXq6ome78tRDUCRWfA==" + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" }, "jest-resolve": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.0.tgz", - "integrity": "sha512-PkDpYEGV/nFqThnIrlPtj8oTxyAV3iuuS6or7dZYyUWaHr/tyyVb5qfBmZS6FEr7ozBHgjrF1bgcgIefnlicbw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", "requires": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", + "jest-haste-map": "^27.5.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.0", - "jest-validate": "^27.5.0", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" @@ -24060,39 +25227,39 @@ } }, "jest-resolve-dependencies": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.0.tgz", - "integrity": "sha512-xQsy7CmrT4CJxdNUEdzZU2M/v6YmtQ/pkJM+sx7TA1siG1zfsZuo78PZvzglwRMQFr88f3Su4Om8OEBAic+SMw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", "requires": { - "@jest/types": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-snapshot": "^27.5.0" + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" } }, "jest-runner": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.0.tgz", - "integrity": "sha512-RMzXhkJLLOKKgUPY2trpyVBijaFmswMtgoCCBk2PQVRHC6yo1vLd1/jmFP39s5OXXnt7rntuzKSYvxl+QUibqQ==", - "requires": { - "@jest/console": "^27.5.0", - "@jest/environment": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.0", - "jest-environment-jsdom": "^27.5.0", - "jest-environment-node": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-leak-detector": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-runtime": "^27.5.0", - "jest-util": "^27.5.0", - "jest-worker": "^27.5.0", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, @@ -24143,30 +25310,30 @@ } }, "jest-runtime": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.0.tgz", - "integrity": "sha512-T7APxCPjN3p3ePcLuypbWtD0UZHyAdvIADZ9ABI/sFZ9t/Rf2xIUd6D7RzZIX+unewJRooVGWrgDIgeUuj0OUA==", - "requires": { - "@jest/environment": "^27.5.0", - "@jest/fake-timers": "^27.5.0", - "@jest/globals": "^27.5.0", - "@jest/source-map": "^27.5.0", - "@jest/test-result": "^27.5.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-mock": "^27.5.0", - "jest-regex-util": "^27.5.0", - "jest-resolve": "^27.5.0", - "jest-snapshot": "^27.5.0", - "jest-util": "^27.5.0", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -24217,40 +25384,40 @@ } }, "jest-serializer": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.0.tgz", - "integrity": "sha512-aSDFqQlVXtBH+Zb5dl9mCvTSFkabixk/9P9cpngL4yJKpmEi9USxfDhONFMzJrtftPvZw3PcltUVmtFZTB93rg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "requires": { "@types/node": "*", "graceful-fs": "^4.2.9" } }, "jest-snapshot": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.0.tgz", - "integrity": "sha512-cAJj15uqWGkro0bfcv/EgusBnqNgCpRruFQZghsMYTq4Fm2lk/VhAf8DgRr8wvhR6Ue1hkeL8tn70Cw4t8x/5A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", "requires": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.0", + "expect": "^27.5.1", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.0", - "jest-get-type": "^27.5.0", - "jest-haste-map": "^27.5.0", - "jest-matcher-utils": "^27.5.0", - "jest-message-util": "^27.5.0", - "jest-util": "^27.5.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.0", + "pretty-format": "^27.5.1", "semver": "^7.3.2" }, "dependencies": { @@ -24300,11 +25467,11 @@ } }, "jest-util": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.0.tgz", - "integrity": "sha512-FUUqOx0gAzJy3ytatT1Ss372M1kmhczn8x7aE0++11oPGW1FyD/5NjYBI8w1KOXFm6IVjtaZm2szfJJL+CHs0g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "requires": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -24358,16 +25525,16 @@ } }, "jest-validate": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.0.tgz", - "integrity": "sha512-2XZzQWNrY9Ypo11mm4ZeVjvr++CQG/45XnmA2aWwx155lTwy1JGFI8LpQ2dBCSAeO21ooqg/FCIvv9WwfnPClA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "requires": { - "@jest/types": "^27.5.0", + "@jest/types": "^27.5.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.0", + "jest-get-type": "^27.5.1", "leven": "^3.1.0", - "pretty-format": "^27.5.0" + "pretty-format": "^27.5.1" }, "dependencies": { "ansi-styles": { @@ -24416,19 +25583,71 @@ } }, "jest-watch-typeahead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.0.0.tgz", - "integrity": "sha512-jxoszalAb394WElmiJTFBMzie/RDCF+W7Q29n5LzOPtcoQoHWfdUtHFkbhgf5NwWe8uMOxvKb/g7ea7CshfkTw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", "requires": { "ansi-escapes": "^4.3.1", "chalk": "^4.0.0", - "jest-regex-util": "^27.0.0", - "jest-watcher": "^27.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", "slash": "^4.0.0", "string-length": "^5.0.1", "strip-ansi": "^7.0.1" }, "dependencies": { + "@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "requires": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -24469,11 +25688,129 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "requires": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", @@ -24507,16 +25844,16 @@ } }, "jest-watcher": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.0.tgz", - "integrity": "sha512-MhIeIvEd6dnnspE0OfYrqHOAfZZdyFqx/k8U2nvVFSkLYf22qAFfyNWPVQYcwqKVNobcOhJoT0kV/nRHGbqK8A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", "requires": { - "@jest/test-result": "^27.5.0", - "@jest/types": "^27.5.0", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.0", + "jest-util": "^27.5.1", "string-length": "^4.0.1" }, "dependencies": { @@ -24566,9 +25903,9 @@ } }, "jest-worker": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", - "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -24643,11 +25980,6 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -24669,12 +26001,9 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonfile": { "version": "6.1.0", @@ -24686,14 +26015,14 @@ } }, "jsonpointer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", - "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" }, "jss": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.0.tgz", - "integrity": "sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", + "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", "requires": { "@babel/runtime": "^7.3.1", "csstype": "^3.0.2", @@ -24702,70 +26031,70 @@ } }, "jss-plugin-camel-case": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz", - "integrity": "sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", + "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", "requires": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jss-plugin-default-unit": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz", - "integrity": "sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", + "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jss-plugin-global": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz", - "integrity": "sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", + "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jss-plugin-nested": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz", - "integrity": "sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", + "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0", + "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "jss-plugin-props-sort": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz", - "integrity": "sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", + "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jss-plugin-rule-value-function": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz", - "integrity": "sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", + "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0", + "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "jss-plugin-vendor-prefixer": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz", - "integrity": "sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", + "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", "requires": { "@babel/runtime": "^7.3.1", "css-vendor": "^2.0.8", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jsx-ast-utils": { @@ -24835,9 +26164,9 @@ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" }, "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -24860,7 +26189,7 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.memoize": { "version": "4.1.2", @@ -24875,7 +26204,7 @@ "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" }, "lodash.uniq": { "version": "4.5.0", @@ -24912,11 +26241,11 @@ "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=" }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "requires": { - "sourcemap-codec": "^1.4.4" + "sourcemap-codec": "^1.4.8" } }, "make-dir": { @@ -24950,7 +26279,7 @@ "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "memfs": { "version": "3.4.1", @@ -25068,17 +26397,17 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "mkdirp": { "version": "0.5.5", @@ -25137,9 +26466,9 @@ } }, "node-forge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", - "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-int64": { "version": "0.4.0", @@ -25147,9 +26476,9 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" }, "normalize-path": { "version": "3.0.0", @@ -25183,9 +26512,9 @@ } }, "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.6.tgz", + "integrity": "sha512-vSZ4miHQ4FojLjmz2+ux4B0/XA16jfwt/LBzIUftDpRd8tujHFkXjMyLwjS08fIZCzesj2z7gJukOKJwqebJAQ==" }, "object-assign": { "version": "4.1.1", @@ -25198,9 +26527,9 @@ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" }, "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "object-is": { "version": "1.1.5", @@ -25217,34 +26546,34 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "object.getownpropertydescriptors": { @@ -25258,22 +26587,22 @@ } }, "object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "obuf": { @@ -25282,9 +26611,9 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -25321,16 +26650,16 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" } }, "p-limit": { @@ -26223,9 +27552,9 @@ } }, "pretty-format": { - "version": "27.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.0.tgz", - "integrity": "sha512-xEi6BRPZ+J1AIS4BAtFC/+rh5jXlXObGZjx5+OSpM95vR/PGla78bFVHMy5GdZjP9wk3AHAMHROXq/r69zXltw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "requires": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -26300,9 +27629,9 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "punycode": { "version": "2.1.1", @@ -26315,9 +27644,17 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "queue-microtask": { "version": "1.2.3", @@ -26351,20 +27688,20 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "bytes": "3.1.1", - "http-errors": "1.8.1", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "dependencies": { "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "iconv-lite": { "version": "0.4.24", @@ -26470,9 +27807,9 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" }, "supports-color": { "version": "7.2.0", @@ -26592,9 +27929,9 @@ } }, "react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "requires": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -26621,21 +27958,11 @@ } }, "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "requires": { - "minimatch": "3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - } + "minimatch": "^3.0.5" } }, "redent": { @@ -26653,22 +27980,22 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "requires": { "@babel/runtime": "^7.8.4" } @@ -26679,12 +28006,13 @@ "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" }, "regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" } }, "regexpp": { @@ -26693,27 +28021,22 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "requires": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "unicode-match-property-value-ecmascript": "^2.1.0" } }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "requires": { "jsesc": "~0.5.0" }, @@ -26721,7 +28044,7 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, @@ -26837,9 +28160,9 @@ } }, "rollup": { - "version": "2.67.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.0.tgz", - "integrity": "sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "requires": { "fsevents": "~2.3.2" } @@ -26901,6 +28224,16 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -26943,9 +28276,9 @@ } }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -26966,31 +28299,31 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "requires": { "lru-cache": "^6.0.0" } }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "debug": { @@ -27004,21 +28337,31 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "requires": { "randombytes": "^2.1.0" } @@ -27074,14 +28417,14 @@ } }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" } }, "setprototypeof": { @@ -27150,7 +28493,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" }, "source-map-js": { "version": "1.0.2", @@ -27192,11 +28535,6 @@ } } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -27309,36 +28647,48 @@ } }, "string.prototype.matchall": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", - "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", + "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" } }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "stringify-object": { @@ -27403,9 +28753,9 @@ } }, "stylis": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "supports-color": { "version": "5.5.0", @@ -27635,12 +28985,13 @@ } }, "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", - "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, "dependencies": { @@ -27648,31 +28999,19 @@ "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==" - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" } } }, "terser-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "requires": { + "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" } }, "test-exclude": { @@ -27734,19 +29073,20 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "dependencies": { "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" } } }, @@ -27775,9 +29115,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "requires": { "minimist": "^1.2.0" } @@ -27836,6 +29176,16 @@ "mime-types": "~2.1.24" } }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -27850,13 +29200,13 @@ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, @@ -27875,14 +29225,14 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, "unique-string": { "version": "2.0.0", @@ -27900,7 +29250,7 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "unquote": { "version": "1.1.1", @@ -27912,6 +29262,15 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -27920,6 +29279,15 @@ "punycode": "^2.1.0" } }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -28008,9 +29376,9 @@ } }, "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -28035,41 +29403,36 @@ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" }, "webpack": { - "version": "5.68.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.68.0.tgz", - "integrity": "sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "dependencies": { - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -28331,32 +29694,40 @@ "is-symbol": "^1.0.3" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } }, "workbox-background-sync": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz", - "integrity": "sha512-P7c8uG5X2k+DMICH9xeSA9eUlCOjHHYoB42Rq+RtUpuwBxUOflAXR1zdsMWj81LopE4gjKXlTw7BFd1BDAHo7g==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", "requires": { - "idb": "^6.1.4", - "workbox-core": "6.4.2" + "idb": "^7.0.1", + "workbox-core": "6.6.0" } }, "workbox-broadcast-update": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.4.2.tgz", - "integrity": "sha512-qnBwQyE0+PWFFc/n4ISXINE49m44gbEreJUYt2ldGH3+CNrLmJ1egJOOyUqqu9R4Eb7QrXcmB34ClXG7S37LbA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", "requires": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "workbox-build": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.4.2.tgz", - "integrity": "sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", "requires": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.11.1", @@ -28376,32 +29747,31 @@ "rollup": "^2.43.1", "rollup-plugin-terser": "^7.0.0", "source-map": "^0.8.0-beta.0", - "source-map-url": "^0.4.0", "stringify-object": "^3.3.0", "strip-comments": "^2.0.1", "tempy": "^0.6.0", "upath": "^1.2.0", - "workbox-background-sync": "6.4.2", - "workbox-broadcast-update": "6.4.2", - "workbox-cacheable-response": "6.4.2", - "workbox-core": "6.4.2", - "workbox-expiration": "6.4.2", - "workbox-google-analytics": "6.4.2", - "workbox-navigation-preload": "6.4.2", - "workbox-precaching": "6.4.2", - "workbox-range-requests": "6.4.2", - "workbox-recipes": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2", - "workbox-streams": "6.4.2", - "workbox-sw": "6.4.2", - "workbox-window": "6.4.2" + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" }, "dependencies": { "@apideck/better-ajv-errors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.2.tgz", - "integrity": "sha512-JdEazx7qiVqTBzzBl5rolRwl5cmhihjfIcpqRzIZjtT6b18liVmDn/VlWpqW4C/qP2hrFFMLRV1wlex8ZVBPTg==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", "requires": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", @@ -28409,9 +29779,9 @@ } }, "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -28446,7 +29816,7 @@ "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "requires": { "punycode": "^2.1.0" } @@ -28469,118 +29839,117 @@ } }, "workbox-cacheable-response": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.4.2.tgz", - "integrity": "sha512-9FE1W/cKffk1AJzImxgEN0ceWpyz1tqNjZVtA3/LAvYL3AC5SbIkhc7ZCO82WmO9IjTfu8Vut2X/C7ViMSF7TA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", "requires": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "workbox-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.4.2.tgz", - "integrity": "sha512-1U6cdEYPcajRXiboSlpJx6U7TvhIKbxRRerfepAJu2hniKwJ3DHILjpU/zx3yvzSBCWcNJDoFalf7Vgd7ey/rw==" + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" }, "workbox-expiration": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.4.2.tgz", - "integrity": "sha512-0hbpBj0tDnW+DZOUmwZqntB/8xrXOgO34i7s00Si/VlFJvvpRKg1leXdHHU8ykoSBd6+F2KDcMP3swoCi5guLw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", "requires": { - "idb": "^6.1.4", - "workbox-core": "6.4.2" + "idb": "^7.0.1", + "workbox-core": "6.6.0" } }, "workbox-google-analytics": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.4.2.tgz", - "integrity": "sha512-u+gxs3jXovPb1oul4CTBOb+T9fS1oZG+ZE6AzS7l40vnyfJV79DaLBvlpEZfXGv3CjMdV1sT/ltdOrKzo7HcGw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", "requires": { - "workbox-background-sync": "6.4.2", - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" } }, "workbox-navigation-preload": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.4.2.tgz", - "integrity": "sha512-viyejlCtlKsbJCBHwhSBbWc57MwPXvUrc8P7d+87AxBGPU+JuWkT6nvBANgVgFz6FUhCvRC8aYt+B1helo166g==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", "requires": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "workbox-precaching": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.4.2.tgz", - "integrity": "sha512-CZ6uwFN/2wb4noHVlALL7UqPFbLfez/9S2GAzGAb0Sk876ul9ukRKPJJ6gtsxfE2HSTwqwuyNVa6xWyeyJ1XSA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", "requires": { - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" } }, "workbox-range-requests": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.4.2.tgz", - "integrity": "sha512-SowF3z69hr3Po/w7+xarWfzxJX/3Fo0uSG72Zg4g5FWWnHpq2zPvgbWerBZIa81zpJVUdYpMa3akJJsv+LaO1Q==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", "requires": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "workbox-recipes": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.4.2.tgz", - "integrity": "sha512-/oVxlZFpAjFVbY+3PoGEXe8qyvtmqMrTdWhbOfbwokNFtUZ/JCtanDKgwDv9x3AebqGAoJRvQNSru0F4nG+gWA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", "requires": { - "workbox-cacheable-response": "6.4.2", - "workbox-core": "6.4.2", - "workbox-expiration": "6.4.2", - "workbox-precaching": "6.4.2", - "workbox-routing": "6.4.2", - "workbox-strategies": "6.4.2" + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" } }, "workbox-routing": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.4.2.tgz", - "integrity": "sha512-0ss/n9PAcHjTy4Ad7l2puuod4WtsnRYu9BrmHcu6Dk4PgWeJo1t5VnGufPxNtcuyPGQ3OdnMdlmhMJ57sSrrSw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", "requires": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "workbox-strategies": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.4.2.tgz", - "integrity": "sha512-YXh9E9dZGEO1EiPC3jPe2CbztO5WT8Ruj8wiYZM56XqEJp5YlGTtqRjghV+JovWOqkWdR+amJpV31KPWQUvn1Q==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", "requires": { - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "workbox-streams": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.4.2.tgz", - "integrity": "sha512-ROEGlZHGVEgpa5bOZefiJEVsi5PsFjJG9Xd+wnDbApsCO9xq9rYFopF+IRq9tChyYzhBnyk2hJxbQVWphz3sog==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", "requires": { - "workbox-core": "6.4.2", - "workbox-routing": "6.4.2" + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" } }, "workbox-sw": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.4.2.tgz", - "integrity": "sha512-A2qdu9TLktfIM5NE/8+yYwfWu+JgDaCkbo5ikrky2c7r9v2X6DcJ+zSLphNHHLwM/0eVk5XVf1mC5HGhYpMhhg==" + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" }, "workbox-webpack-plugin": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.4.2.tgz", - "integrity": "sha512-CiEwM6kaJRkx1cP5xHksn13abTzUqMHiMMlp5Eh/v4wRcedgDTyv6Uo8+Hg9MurRbHDosO5suaPyF9uwVr4/CQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", "requires": { "fast-json-stable-stringify": "^2.1.0", "pretty-bytes": "^5.4.1", - "source-map-url": "^0.4.0", "upath": "^1.2.0", "webpack-sources": "^1.4.3", - "workbox-build": "6.4.2" + "workbox-build": "6.6.0" }, "dependencies": { "source-map": { @@ -28600,12 +29969,12 @@ } }, "workbox-window": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.4.2.tgz", - "integrity": "sha512-KVyRKmrJg7iB+uym/B/CnEUEFG9CvnTU1Bq5xpXHbtgD9l+ShDekSl1wYpqw/O0JfeeQVOFb8CiNfvnwWwqnWQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", "requires": { "@types/trusted-types": "^2.0.2", - "workbox-core": "6.4.2" + "workbox-core": "6.6.0" } }, "wrap-ansi": { @@ -28658,9 +30027,9 @@ } }, "ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "requires": {} }, "xml-name-validator": { diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index c40eff3..d7f766e 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -1,5 +1,5 @@ -import React, {useEffect, useState} from "react"; -import {ProfileEditData, User} from "./Types"; +import {useEffect, useState} from "react"; +import {User} from "./Types"; import httpClient from "../httpClient"; export const PRODUCTION = diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index 5198258..545ff51 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -97,6 +97,19 @@ export const resources = { a: "Speedcubing Canada operates independently of the World Cube Association, with a separate Board of Directors. Speedcubing Canada is recognized as Canada’s official WCA regional organization.", }, }, + account: { + title: "Account", + hi: "Hi, ", + policy: "Province determine your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select \"N/A\".", + save: "Save", + signout: "Sign Out", + welcome: "Welcome to Speedcubing Canada account page. \n\n" + + "To access it, please sign in with your WCA account.", + }, + rankings: { + title: "Rankings", + soon: "Rankings Coming Soon", + } }, }, [LOCALES.fr]: { diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 059a8c4..ceea04b 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -1,8 +1,10 @@ -import { useTranslation } from "react-i18next"; +import {Trans, useTranslation} from "react-i18next"; import { - Container, + Box, + Container, Typography, } from "@mui/material"; import Button from '@mui/material/Button'; +import Grid from '@mui/material/Unstable_Grid2'; import TextField from '@mui/material/TextField'; import Autocomplete from '@mui/material/Autocomplete'; import {API_BASE_URL, GetUser, signIn, signOut} from '../components/Api'; @@ -11,96 +13,136 @@ import {Province} from "../components/Types"; import httpClient from "../httpClient"; export const Account = () => { - const { t } = useTranslation(); + const {t} = useTranslation(); const [province, setProvince] = useState(null); + const provinces: Province[] = [ + {label: 'Alberta', id: 'ab'}, + {label: 'British Columbia', id: 'bc'}, + {label: 'Manitoba', id: 'mb'}, + {label: 'New Brunswick', id: 'nb'}, + {label: 'Newfoundland and Labrador', id: 'nl'}, + {label: 'Northwest Territories', id: 'nt'}, + {label: 'Nova Scotia', id: 'ns'}, + {label: 'Nunavut', id: 'nu'}, + {label: 'Ontario', id: 'on'}, + {label: 'Prince Edward Island', id: 'pe'}, + {label: 'Quebec', id: 'qc'}, + {label: 'Saskatchewan', id: 'sk'}, + {label: 'Yukon', id: 'yt'}, + {label: 'N/A', id: 'na'}, + ]; + const user = GetUser();//TODO: display something else while loading + let default_province = {label: 'N/A', id: 'na'}; if (user != null && user.province != null) { - //TODO: set province in the combo box + //set province in the combo box + for (let i = 0; i < provinces.length; i++) { + if (provinces[i].id === user.province) { + default_province = provinces[i]; + } + } } - const provinces : Province[] = [ - { label: 'Alberta', id:'ab' }, - { label: 'British Columbia', id:'bc' }, - { label: 'Manitoba', id:'mb' }, - { label: 'New Brunswick', id:'nb' }, - { label: 'Newfoundland and Labrador', id:'nl' }, - { label: 'Northwest Territories', id:'nt' }, - { label: 'Nova Scotia', id:'ns' }, - { label: 'Nunavut', id:'nu' }, - { label: 'Ontario', id:'on' }, - { label: 'Prince Edward Island', id:'pe' }, - { label: 'Quebec', id:'qc' }, - { label: 'Saskatchewan', id:'sk' }, - { label: 'Yukon', id:'yt' }, - { label: 'N/A', id:'na' }, - ]; - const handleSaveProfile = async () => { - try { - const resp = await httpClient.post(API_BASE_URL + "/edit", { - province: province ? province.id : 'na', - }); - const saved = resp.data; - // Handle the saved data as needed - } catch (error) { - console.log("Not authenticated"); - } + try { + const resp = await httpClient.post(API_BASE_URL + "/edit", { + province: province ? province.id : 'na', + }); + } catch (error: any) { + if (error.response.status === 401) { + console.log("Invalid credentials" + error.response.status); + } else if (error.response.status === 403) { + console.log("Forbidden" + error.response.status); + } else if (error.response.status === 404) { + console.log("Not found" + error.response.status); + } + } }; return ( - - {user != null ? ( -
-
Logged in as {user.name}
- + + + + onClick={signOut}> + {t("account.signout")} + + + - { - setProvince(newValue); - if(newValue == null) {} - else if(newValue.id === "qc") { - console.log("Vive le Québec libre!"); - } - }} - renderInput={(params) => } - /> - -
Province determine your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select "N/A".
- -
- ) : ( -
-
Welcome to the account page
- -
- )} + onClick={signIn}> + Sign in with the WCA + + +
+ )} -
- ); + + ); }; \ No newline at end of file diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 5816a7a..843d81e 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx @@ -1,14 +1,66 @@ -import { useTranslation } from "react-i18next"; +import {useTranslation} from "react-i18next"; import { - Container, + Box, + Container, Typography, } from "@mui/material"; +import * as React from 'react'; +import LinearProgress from '@mui/material/LinearProgress'; export const Rankings = () => { - const { t } = useTranslation(); + const {t} = useTranslation(); - return ( - -
Rankings
-
- ); + const [progress, setProgress] = React.useState(0); + const [buffer, setBuffer] = React.useState(10); + + const progressRef = React.useRef(() => { + }); + React.useEffect(() => { + progressRef.current = () => { + if (progress > 100) { + setProgress(0); + setBuffer(10); + } else { + const diff = Math.random() * 10; + const diff2 = Math.random() * 10; + setProgress(progress + diff); + setBuffer(progress + diff + diff2); + } + }; + }); + + React.useEffect(() => { + const timer = setInterval(() => { + progressRef.current(); + }, 500); + + return () => { + clearInterval(timer); + }; + }, []); + + + return ( + + + + + + + + + + {t("rankings.soon")} + + + + + + + ); }; \ No newline at end of file From bf4866407d8401f9155af5fb3fb42d02d8c2b9a6 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 4 Jul 2023 01:34:08 -0400 Subject: [PATCH 22/72] frenchc translations for the new pages --- frontend/src/locale.ts | 15 +++++++++++++++ frontend/src/pages/Account.tsx | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index 545ff51..1c8477f 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -102,6 +102,7 @@ export const resources = { hi: "Hi, ", policy: "Province determine your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select \"N/A\".", save: "Save", + signin: "Sign in with the WCA", signout: "Sign Out", welcome: "Welcome to Speedcubing Canada account page. \n\n" + "To access it, please sign in with your WCA account.", @@ -196,6 +197,20 @@ export const resources = { a: "Speedcubing Canada fonctionne indépendamment de la World Cube Association, avec un conseil d'administration distinct. Speedcubing Canada est reconnue comme l'organisation régionale officielle du Canada par la WCA.", }, }, + account: { + title: "Compte", + hi: "Salut, ", + policy: "Votre province détermine votre admissibilité aux championnats régionaux. Vous ne pouvez représenter qu'une province où vous résidez au moins 50 % de l'année. Nous nous réservons le droit de demander une preuve de résidence. Si vous n'êtes pas résident canadien ou si vous préférez ne pas indiquer votre province de résidence, veuillez sélectionner \"N/A\".", + save: "Sauvegarder", + signin : "Se connecter avec la WCA", + signout: "Déconnexion", + welcome: "Bienvenue sur la page du compte de Speedcubing Canada. \n" + + "Pour y accéder, veuillez vous connecter avec votre compte WCA.", + }, + rankings: { + title: "Rankings", + soon: "Rankings Coming Soon", + } }, }, }; diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index ceea04b..23c446a 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -32,7 +32,7 @@ export const Account = () => { {label: 'Saskatchewan', id: 'sk'}, {label: 'Yukon', id: 'yt'}, {label: 'N/A', id: 'na'}, - ]; + ];// TODO: have translations for provinces const user = GetUser();//TODO: display something else while loading let default_province = {label: 'N/A', id: 'na'}; @@ -137,7 +137,7 @@ export const Account = () => { component="span" onClick={signIn}> - Sign in with the WCA + {t("account.signin")} From 06e79b1f576aecf3baaa950b90293c9f49235244 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 4 Jul 2023 19:50:22 -0400 Subject: [PATCH 23/72] db load updated for this project --- backend/load_db/README.md | 6 +++--- backend/load_db/load_db.sh | 2 +- backend/load_db/startup.sh | 2 +- backend/load_db/vm_setup.sh | 10 +++++----- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/backend/load_db/README.md b/backend/load_db/README.md index 0ecdf91..35e4d78 100644 --- a/backend/load_db/README.md +++ b/backend/load_db/README.md @@ -4,7 +4,7 @@ Downloading the WCA database uses enough memory that it's difficult to do from A ## Creating a new VM -You can create a new VM at https://console.cloud.google.com/compute/instancesAdd?project=staging-cubingusa-org. Most of the settings can use the defaults. +You can create a new VM at https://console.cloud.google.com/compute/instancesAdd?project=. Most of the settings can use the defaults. * **Machine configuration**: We're currently using e2-medium. * **Identity and API access**: Use the Compute Engine default service account. @@ -13,9 +13,9 @@ You can create a new VM at https://console.cloud.google.com/compute/instancesAdd ```sh apt upgrade -cd cubingusa +cd speedcubing-canada git pull -app/load_db/startup.sh +backend/load_db/startup.sh ``` Next, SSH into the instance and follow the instructions in `vm_setup.sh`. diff --git a/backend/load_db/load_db.sh b/backend/load_db/load_db.sh index 58b683f..13d83d9 100644 --- a/backend/load_db/load_db.sh +++ b/backend/load_db/load_db.sh @@ -2,7 +2,7 @@ set -e export PYTHONPATH=$(pwd) -if [ "$CUBINGUSA_ENV" != "COMPUTE_ENGINE" ] +if [ "$SCC_ENV" != "COMPUTE_ENGINE" ] then echo "Emulating datastore." $(gcloud beta emulators datastore env-init) diff --git a/backend/load_db/startup.sh b/backend/load_db/startup.sh index 5726fde..7f865ff 100644 --- a/backend/load_db/startup.sh +++ b/backend/load_db/startup.sh @@ -6,4 +6,4 @@ source env/bin/activate pip3 install -r requirements.txt -CUBINGUSA_ENV=COMPUTE_ENGINE ./app/load_db/load_db.sh +SCC_ENV=COMPUTE_ENGINE ./app/load_db/load_db.sh diff --git a/backend/load_db/vm_setup.sh b/backend/load_db/vm_setup.sh index 5f323e9..bad13f8 100644 --- a/backend/load_db/vm_setup.sh +++ b/backend/load_db/vm_setup.sh @@ -9,14 +9,14 @@ set -e # # (in general, if you're using the VM, you'll likely want to be root). # -# Next, clone the cubingusa repository: +# Next, clone the Speedcubing-Canada repository: # # cd / # apt install git -# git clone https://github.com/cubingusa/org cubingusa +# git clone https://github.com/Speedcubing-Canada/speedcubing-canada-web speedcubing-canada # -# Then cd into the cubingusa directory and run this script (without sudo). -# Finally, run app/load_db/startup.sh to download the WCA database and +# Then cd into the Speedcubing-Canada directory and run this script (without sudo). +# Finally, run backend/load_db/startup.sh to download the WCA database and # initialize the datastore. The first run can take >1 hour; subsequent runs are # faster since they only need to load entities that have changed. # @@ -33,4 +33,4 @@ pip3 install --upgrade pip pip3 install -r requirements.txt # Set up the production environment. -echo CUBINGUSA_ENV=COMPUTE_ENGINE | tee /etc/environment +echo SCC_ENV=COMPUTE_ENGINE | tee /etc/environment From 053a6f8428fbaa1f13e03b49fed3cb796e9ac5e0 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 4 Jul 2023 20:13:46 -0400 Subject: [PATCH 24/72] fix path --- backend/load_db/load_db.sh | 6 +++--- backend/load_db/startup.sh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/load_db/load_db.sh b/backend/load_db/load_db.sh index 13d83d9..418d14f 100644 --- a/backend/load_db/load_db.sh +++ b/backend/load_db/load_db.sh @@ -9,10 +9,10 @@ then fi echo "Deleting old exports" -python3 app/load_db/delete_old_exports.py \ +python3 backend/load_db/delete_old_exports.py \ --export_base=exports/ -SAVED_EXPORT=$(python3 app/load_db/get_latest_export.py) +SAVED_EXPORT=$(python3 backend/load_db/get_latest_export.py) LATEST_EXPORT=$(curl https://www.worldcubeassociation.org/export/results \ | grep TSV:.*WCA_export \ | sed -s 's/.*\(WCA_export[0-9A-Za-z_]*\).tsv.zip.*/\1/') @@ -36,7 +36,7 @@ then unzip $ZIP_FILE -d $EXPORT_DIR rm $ZIP_FILE - python3 app/load_db/load_db.py \ + python3 backend/load_db/load_db.py \ --old_export_id="$SAVED_EXPORT" \ --new_export_id="$LATEST_EXPORT" \ --export_base=exports/ diff --git a/backend/load_db/startup.sh b/backend/load_db/startup.sh index 7f865ff..ef0b343 100644 --- a/backend/load_db/startup.sh +++ b/backend/load_db/startup.sh @@ -6,4 +6,4 @@ source env/bin/activate pip3 install -r requirements.txt -SCC_ENV=COMPUTE_ENGINE ./app/load_db/load_db.sh +SCC_ENV=COMPUTE_ENGINE ./backend/load_db/load_db.sh From 68448ab97a6504ef700f051cf1e6844a7c61df63 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Thu, 6 Jul 2023 02:08:42 -0400 Subject: [PATCH 25/72] loi 101 --- frontend/src/locale.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index 1c8477f..8f3feda 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -208,8 +208,8 @@ export const resources = { "Pour y accéder, veuillez vous connecter avec votre compte WCA.", }, rankings: { - title: "Rankings", - soon: "Rankings Coming Soon", + title: "Classements", + soon: "Les classements arrivent", } }, }, From bb142b0063a6bb7c851ac76f6ebe607c6f6a7253 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 18 Jul 2023 13:12:08 -0700 Subject: [PATCH 26/72] fix startup script --- backend/load_db/startup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/load_db/startup.sh b/backend/load_db/startup.sh index ef0b343..72cdf88 100644 --- a/backend/load_db/startup.sh +++ b/backend/load_db/startup.sh @@ -6,4 +6,4 @@ source env/bin/activate pip3 install -r requirements.txt -SCC_ENV=COMPUTE_ENGINE ./backend/load_db/load_db.sh +SCC_ENV=COMPUTE_ENGINE ./load_db/load_db.sh From 68f70cf5b23449b981d3902b0074d9fd473cf4e2 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 18 Jul 2023 13:20:29 -0700 Subject: [PATCH 27/72] update comput vm scripts --- backend/load_db/README.md | 4 ++-- backend/load_db/cleanup.py | 2 +- backend/load_db/delete_old_exports.py | 2 +- backend/load_db/get_latest_export.py | 2 +- backend/load_db/load_db.py | 26 +++++++++++++------------- backend/load_db/load_db.sh | 6 +++--- backend/load_db/update_champions.py | 20 ++++++++++---------- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/backend/load_db/README.md b/backend/load_db/README.md index 35e4d78..014ff3e 100644 --- a/backend/load_db/README.md +++ b/backend/load_db/README.md @@ -13,9 +13,9 @@ You can create a new VM at https://console.cloud.google.com/compute/instancesAdd ```sh apt upgrade -cd speedcubing-canada +cd speedcubing-canada/backend git pull -backend/load_db/startup.sh +load_db/startup.sh ``` Next, SSH into the instance and follow the instructions in `vm_setup.sh`. diff --git a/backend/load_db/cleanup.py b/backend/load_db/cleanup.py index 1de77d8..7615390 100644 --- a/backend/load_db/cleanup.py +++ b/backend/load_db/cleanup.py @@ -1,6 +1,6 @@ from google.cloud import ndb -from backend.models.wca.export import get_latest_export +from models.wca.export import get_latest_export client = ndb.Client() diff --git a/backend/load_db/delete_old_exports.py b/backend/load_db/delete_old_exports.py index eb9ac54..ab4161c 100644 --- a/backend/load_db/delete_old_exports.py +++ b/backend/load_db/delete_old_exports.py @@ -5,7 +5,7 @@ from absl import flags from google.cloud import ndb -from backend.models.wca.export import get_latest_export +from models.wca.export import get_latest_export FLAGS = flags.FLAGS diff --git a/backend/load_db/get_latest_export.py b/backend/load_db/get_latest_export.py index a0bbcd5..67c667c 100644 --- a/backend/load_db/get_latest_export.py +++ b/backend/load_db/get_latest_export.py @@ -1,6 +1,6 @@ from google.cloud import ndb -from backend.models.wca.export import get_latest_export +from models.wca.export import get_latest_export client = ndb.Client() diff --git a/backend/load_db/load_db.py b/backend/load_db/load_db.py index 951896d..5f9291a 100644 --- a/backend/load_db/load_db.py +++ b/backend/load_db/load_db.py @@ -5,19 +5,19 @@ from absl import logging from google.cloud import ndb -from backend.load_db.update_champions import UpdateChampions -from backend.models.user import User -from backend.models.wca.competition import Competition -from backend.models.wca.continent import Continent -from backend.models.wca.country import Country -from backend.models.wca.event import Event -from backend.models.wca.export import set_latest_export -from backend.models.wca.format import Format -from backend.models.wca.person import Person -from backend.models.wca.rank import RankAverage -from backend.models.wca.rank import RankSingle -from backend.models.wca.result import Result -from backend.models.wca.round import RoundType +from load_db.update_champions import UpdateChampions +from models.user import User +from models.wca.competition import Competition +from models.wca.continent import Continent +from models.wca.country import Country +from models.wca.event import Event +from models.wca.export import set_latest_export +from models.wca.format import Format +from models.wca.person import Person +from models.wca.rank import RankAverage +from models.wca.rank import RankSingle +from models.wca.result import Result +from models.wca.round import RoundType FLAGS = flags.FLAGS diff --git a/backend/load_db/load_db.sh b/backend/load_db/load_db.sh index 418d14f..d58418c 100644 --- a/backend/load_db/load_db.sh +++ b/backend/load_db/load_db.sh @@ -9,10 +9,10 @@ then fi echo "Deleting old exports" -python3 backend/load_db/delete_old_exports.py \ +python3 load_db/delete_old_exports.py \ --export_base=exports/ -SAVED_EXPORT=$(python3 backend/load_db/get_latest_export.py) +SAVED_EXPORT=$(python3 load_db/get_latest_export.py) LATEST_EXPORT=$(curl https://www.worldcubeassociation.org/export/results \ | grep TSV:.*WCA_export \ | sed -s 's/.*\(WCA_export[0-9A-Za-z_]*\).tsv.zip.*/\1/') @@ -36,7 +36,7 @@ then unzip $ZIP_FILE -d $EXPORT_DIR rm $ZIP_FILE - python3 backend/load_db/load_db.py \ + python3 load_db/load_db.py \ --old_export_id="$SAVED_EXPORT" \ --new_export_id="$LATEST_EXPORT" \ --export_base=exports/ diff --git a/backend/load_db/update_champions.py b/backend/load_db/update_champions.py index 15e15d9..984206a 100644 --- a/backend/load_db/update_champions.py +++ b/backend/load_db/update_champions.py @@ -5,16 +5,16 @@ from google.cloud import ndb -from backend.models.champion import Champion -from backend.models.championship import Championship -from backend.models.eligibility import RegionalChampionshipEligibility -from backend.models.eligibility import ProvinceChampionshipEligibility -from backend.models.province import Province -from backend.models.user import User -from backend.models.wca.country import Country -from backend.models.wca.event import Event -from backend.models.wca.result import Result -from backend.models.wca.result import RoundType +from models.champion import Champion +from models.championship import Championship +from models.eligibility import RegionalChampionshipEligibility +from models.eligibility import ProvinceChampionshipEligibility +from models.province import Province +from models.user import User +from models.wca.country import Country +from models.wca.event import Event +from models.wca.result import Result +from models.wca.result import RoundType def ComputeEligibleCompetitors(championship, competition, results): From 66425d0aa74b08264de337c58db0ebf98808b97c Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 18 Jul 2023 13:32:03 -0700 Subject: [PATCH 28/72] Revert "update comput vm scripts" This reverts commit 68f70cf5b23449b981d3902b0074d9fd473cf4e2. --- backend/load_db/README.md | 4 ++-- backend/load_db/cleanup.py | 2 +- backend/load_db/delete_old_exports.py | 2 +- backend/load_db/get_latest_export.py | 2 +- backend/load_db/load_db.py | 26 +++++++++++++------------- backend/load_db/load_db.sh | 6 +++--- backend/load_db/update_champions.py | 20 ++++++++++---------- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/backend/load_db/README.md b/backend/load_db/README.md index 014ff3e..35e4d78 100644 --- a/backend/load_db/README.md +++ b/backend/load_db/README.md @@ -13,9 +13,9 @@ You can create a new VM at https://console.cloud.google.com/compute/instancesAdd ```sh apt upgrade -cd speedcubing-canada/backend +cd speedcubing-canada git pull -load_db/startup.sh +backend/load_db/startup.sh ``` Next, SSH into the instance and follow the instructions in `vm_setup.sh`. diff --git a/backend/load_db/cleanup.py b/backend/load_db/cleanup.py index 7615390..1de77d8 100644 --- a/backend/load_db/cleanup.py +++ b/backend/load_db/cleanup.py @@ -1,6 +1,6 @@ from google.cloud import ndb -from models.wca.export import get_latest_export +from backend.models.wca.export import get_latest_export client = ndb.Client() diff --git a/backend/load_db/delete_old_exports.py b/backend/load_db/delete_old_exports.py index ab4161c..eb9ac54 100644 --- a/backend/load_db/delete_old_exports.py +++ b/backend/load_db/delete_old_exports.py @@ -5,7 +5,7 @@ from absl import flags from google.cloud import ndb -from models.wca.export import get_latest_export +from backend.models.wca.export import get_latest_export FLAGS = flags.FLAGS diff --git a/backend/load_db/get_latest_export.py b/backend/load_db/get_latest_export.py index 67c667c..a0bbcd5 100644 --- a/backend/load_db/get_latest_export.py +++ b/backend/load_db/get_latest_export.py @@ -1,6 +1,6 @@ from google.cloud import ndb -from models.wca.export import get_latest_export +from backend.models.wca.export import get_latest_export client = ndb.Client() diff --git a/backend/load_db/load_db.py b/backend/load_db/load_db.py index 5f9291a..951896d 100644 --- a/backend/load_db/load_db.py +++ b/backend/load_db/load_db.py @@ -5,19 +5,19 @@ from absl import logging from google.cloud import ndb -from load_db.update_champions import UpdateChampions -from models.user import User -from models.wca.competition import Competition -from models.wca.continent import Continent -from models.wca.country import Country -from models.wca.event import Event -from models.wca.export import set_latest_export -from models.wca.format import Format -from models.wca.person import Person -from models.wca.rank import RankAverage -from models.wca.rank import RankSingle -from models.wca.result import Result -from models.wca.round import RoundType +from backend.load_db.update_champions import UpdateChampions +from backend.models.user import User +from backend.models.wca.competition import Competition +from backend.models.wca.continent import Continent +from backend.models.wca.country import Country +from backend.models.wca.event import Event +from backend.models.wca.export import set_latest_export +from backend.models.wca.format import Format +from backend.models.wca.person import Person +from backend.models.wca.rank import RankAverage +from backend.models.wca.rank import RankSingle +from backend.models.wca.result import Result +from backend.models.wca.round import RoundType FLAGS = flags.FLAGS diff --git a/backend/load_db/load_db.sh b/backend/load_db/load_db.sh index d58418c..418d14f 100644 --- a/backend/load_db/load_db.sh +++ b/backend/load_db/load_db.sh @@ -9,10 +9,10 @@ then fi echo "Deleting old exports" -python3 load_db/delete_old_exports.py \ +python3 backend/load_db/delete_old_exports.py \ --export_base=exports/ -SAVED_EXPORT=$(python3 load_db/get_latest_export.py) +SAVED_EXPORT=$(python3 backend/load_db/get_latest_export.py) LATEST_EXPORT=$(curl https://www.worldcubeassociation.org/export/results \ | grep TSV:.*WCA_export \ | sed -s 's/.*\(WCA_export[0-9A-Za-z_]*\).tsv.zip.*/\1/') @@ -36,7 +36,7 @@ then unzip $ZIP_FILE -d $EXPORT_DIR rm $ZIP_FILE - python3 load_db/load_db.py \ + python3 backend/load_db/load_db.py \ --old_export_id="$SAVED_EXPORT" \ --new_export_id="$LATEST_EXPORT" \ --export_base=exports/ diff --git a/backend/load_db/update_champions.py b/backend/load_db/update_champions.py index 984206a..15e15d9 100644 --- a/backend/load_db/update_champions.py +++ b/backend/load_db/update_champions.py @@ -5,16 +5,16 @@ from google.cloud import ndb -from models.champion import Champion -from models.championship import Championship -from models.eligibility import RegionalChampionshipEligibility -from models.eligibility import ProvinceChampionshipEligibility -from models.province import Province -from models.user import User -from models.wca.country import Country -from models.wca.event import Event -from models.wca.result import Result -from models.wca.result import RoundType +from backend.models.champion import Champion +from backend.models.championship import Championship +from backend.models.eligibility import RegionalChampionshipEligibility +from backend.models.eligibility import ProvinceChampionshipEligibility +from backend.models.province import Province +from backend.models.user import User +from backend.models.wca.country import Country +from backend.models.wca.event import Event +from backend.models.wca.result import Result +from backend.models.wca.result import RoundType def ComputeEligibleCompetitors(championship, competition, results): From 832b109b374f22f35e6929eb7e81f750df1be95c Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 18 Jul 2023 13:33:43 -0700 Subject: [PATCH 29/72] moved requirements ouside package --- backend/requirements.txt => requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename backend/requirements.txt => requirements.txt (100%) diff --git a/backend/requirements.txt b/requirements.txt similarity index 100% rename from backend/requirements.txt rename to requirements.txt From b7726adc1d2e60b9f093215c683c636b27451dce Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 18 Jul 2023 13:37:44 -0700 Subject: [PATCH 30/72] fix path --- backend/load_db/startup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/load_db/startup.sh b/backend/load_db/startup.sh index 72cdf88..ef0b343 100644 --- a/backend/load_db/startup.sh +++ b/backend/load_db/startup.sh @@ -6,4 +6,4 @@ source env/bin/activate pip3 install -r requirements.txt -SCC_ENV=COMPUTE_ENGINE ./load_db/load_db.sh +SCC_ENV=COMPUTE_ENGINE ./backend/load_db/load_db.sh From 972164fdc97e35777137cb9a1ae77c65c562864d Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 19 Jul 2023 18:39:06 -0400 Subject: [PATCH 31/72] fix legacy env variable name + switch state to province in rank model --- .env.dev | 2 +- backend/models/wca/rank.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.env.dev b/.env.dev index 8faed6f..3d9a30c 100644 --- a/.env.dev +++ b/.env.dev @@ -13,6 +13,6 @@ WCA_CLIENT_SECRET=example-secret WCA_HOST=https://www.worldcubeassociation.org SESSION_SECRET_KEY=12340987 DATASTORE_EMULATOR_HOST=localhost:8081 -GCLOUD_PROJECT=scc-staging-391105 +GOOGLE_CLOUD_PROJECT=scc-staging-391105 ADMIN_WCA_ID=2017ONDE01 \ No newline at end of file diff --git a/backend/models/wca/rank.py b/backend/models/wca/rank.py index 78b08e2..d0e294e 100644 --- a/backend/models/wca/rank.py +++ b/backend/models/wca/rank.py @@ -9,12 +9,12 @@ class RankBase(BaseModel): person = ndb.KeyProperty(kind=Person) event = ndb.KeyProperty(kind=Event) best = ndb.IntegerProperty() - state = ndb.ComputedProperty(lambda self: self.GetState()) + province = ndb.ComputedProperty(lambda self: self.GetProvince()) - def GetState(self): + def GetProvince(self): if not self.person or not self.person.get(): return None - return self.person.get().state + return self.person.get().province @staticmethod def GetId(row): From c4c3537075d8c0bebbb72cb680bafdb1e0645ebc Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 19 Jul 2023 23:05:35 -0400 Subject: [PATCH 32/72] fix env for staging --- .env.dev | 2 +- backend/load_db/startup.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.env.dev b/.env.dev index 3d9a30c..4b94f34 100644 --- a/.env.dev +++ b/.env.dev @@ -10,7 +10,7 @@ ENV=DEV WCA_CLIENT_ID=example-id WCA_CLIENT_SECRET=example-secret -WCA_HOST=https://www.worldcubeassociation.org +WCA_HOST=https://staging.worldcubeassociation.org SESSION_SECRET_KEY=12340987 DATASTORE_EMULATOR_HOST=localhost:8081 GOOGLE_CLOUD_PROJECT=scc-staging-391105 diff --git a/backend/load_db/startup.sh b/backend/load_db/startup.sh index ef0b343..a6d1adb 100644 --- a/backend/load_db/startup.sh +++ b/backend/load_db/startup.sh @@ -4,6 +4,7 @@ # to COMPUTE_ENGINE. source env/bin/activate +source /root/.bashrc pip3 install -r requirements.txt SCC_ENV=COMPUTE_ENGINE ./backend/load_db/load_db.sh From fc0ec7182c2113f4447d29610826e226de4f15c3 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Thu, 20 Jul 2023 00:22:47 -0400 Subject: [PATCH 33/72] fix staging env, again --- backend/load_db/vm_setup.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/load_db/vm_setup.sh b/backend/load_db/vm_setup.sh index bad13f8..088a1d3 100644 --- a/backend/load_db/vm_setup.sh +++ b/backend/load_db/vm_setup.sh @@ -33,4 +33,6 @@ pip3 install --upgrade pip pip3 install -r requirements.txt # Set up the production environment. -echo SCC_ENV=COMPUTE_ENGINE | tee /etc/environment +echo SCC_ENV=COMPUTE_ENGINE >> /root/.bashrc +echo WCA_HOST=https://staging.worldcubeassociation.org >> /root/.bashrc +echo GOOGLE_CLOUD_PROJECT=scc-staging-391105 >> /root/.bashrc From 506a2eff1334fa955db6ae7daa85d46682aa3f4d Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Thu, 20 Jul 2023 00:47:34 -0400 Subject: [PATCH 34/72] logs in db loading --- backend/load_db/load_db.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/load_db/load_db.sh b/backend/load_db/load_db.sh index 418d14f..4564c27 100644 --- a/backend/load_db/load_db.sh +++ b/backend/load_db/load_db.sh @@ -11,6 +11,7 @@ fi echo "Deleting old exports" python3 backend/load_db/delete_old_exports.py \ --export_base=exports/ +echo "Done deleting old exports" SAVED_EXPORT=$(python3 backend/load_db/get_latest_export.py) LATEST_EXPORT=$(curl https://www.worldcubeassociation.org/export/results \ From 9127c76725a35509a40314334a945ab22040dcad Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Thu, 20 Jul 2023 20:53:10 -0400 Subject: [PATCH 35/72] vm setup and start of ranking api --- backend/handlers/champions_table.py | 4 ++-- backend/handlers/province_rankings.py | 22 +++++++++------------- backend/handlers/regional.py | 6 +++--- backend/load_db/load_db.py | 2 +- backend/load_db/vm_setup.sh | 8 ++++---- exports/splitter.py | 12 ++++++++++++ 6 files changed, 31 insertions(+), 23 deletions(-) create mode 100644 exports/splitter.py diff --git a/backend/handlers/champions_table.py b/backend/handlers/champions_table.py index 7749096..b53a485 100644 --- a/backend/handlers/champions_table.py +++ b/backend/handlers/champions_table.py @@ -12,8 +12,8 @@ client = ndb.Client() -@bp.route('/async/champions_by_year///') -@bp.route('/async/champions_by_region///') +#@bp.route('/async/champions_by_year///') +#@bp.route('/async/champions_by_region///') def champions_table(event_id, championship_type, championship_region='', year=0): with client.context(): is_national = championship_type == 'national' diff --git a/backend/handlers/province_rankings.py b/backend/handlers/province_rankings.py index 7bbd14f..ab47144 100644 --- a/backend/handlers/province_rankings.py +++ b/backend/handlers/province_rankings.py @@ -1,4 +1,4 @@ -from flask import Blueprint, render_template +from flask import Blueprint, render_template, jsonify from google.cloud import ndb from backend.lib import common @@ -10,24 +10,16 @@ bp = Blueprint('province_rankings', __name__) client = ndb.Client() -@bp.route('/province_rankings') -def province_rankings(): - with client.context(): - return render_template('province_rankings.html', - c=common.Common(wca_disclaimer=True)) - @bp.route('/async/province_rankings///') def province_rankings_table(event_id, province_id, use_average): with client.context(): ranking_class = RankAverage if use_average == '1' else RankSingle province = Province.get_by_id(province_id) if not province: - self.response.write('Unrecognized province %s' % province_id) - return + return jsonify({"error": "Unrecognized province id %s" % province}), 404 event = Event.get_by_id(event_id) if not event: - self.response.write('Unrecognized event %s' % event_id) - return + return jsonify({"error": "Unrecognized event id %s" % event}), 404 rankings = (ranking_class.query( ndb.AND(ranking_class.event == event.key, ranking_class.province == province.key)) @@ -37,8 +29,12 @@ def province_rankings_table(event_id, province_id, use_average): people = ndb.get_multi([ranking.person for ranking in rankings]) people_by_id = {person.key.id() : person for person in people} - return render_template('province_rankings_table.html', + return jsonify({ + "rankings": rankings, + "people_by_id": people_by_id, + }) + """return render_template('province_rankings_table.html', c=common.Common(), is_average=(use_average == '1'), rankings=rankings, - people_by_id=people_by_id) + people_by_id=people_by_id)""" diff --git a/backend/handlers/regional.py b/backend/handlers/regional.py index 964528e..6706052 100644 --- a/backend/handlers/regional.py +++ b/backend/handlers/regional.py @@ -15,7 +15,7 @@ bp = Blueprint('regional', __name__) client = ndb.Client() -@bp.route('/regional') +#@bp.route('/regional') def regional(): with client.context(): year = datetime.date.today().year @@ -38,12 +38,12 @@ def regional(): championships=championships, regions_missing_championships=regions_missing_championships) -@bp.route('/regional/title_policy') +#@bp.route('/regional/title_policy') def title_policy(): with client.context(): return render_template('regional_title.html', c=common.Common()) -@bp.route('/regional/eligibility//') +#@bp.route('/regional/eligibility//') def regional_eligibility(region, year): with client.context(): championship = Championship.get_by_id('%s_%d' % (region, int(year))) diff --git a/backend/load_db/load_db.py b/backend/load_db/load_db.py index 951896d..c86d3b3 100644 --- a/backend/load_db/load_db.py +++ b/backend/load_db/load_db.py @@ -102,8 +102,8 @@ def process_export(old_export_path, new_export_path): table_suffix = '/WCA_export_' + table + '.tsv' with client.context(): old_rows = read_table(old_export_path + table_suffix, cls, False) - new_rows = read_table(new_export_path + table_suffix, cls, True) logging.info('Old: %d' % len(old_rows)) + new_rows = read_table(new_export_path + table_suffix, cls, True) logging.info('New: %d' % len(new_rows)) write_table(new_export_path + table_suffix, new_rows, cls) diff --git a/backend/load_db/vm_setup.sh b/backend/load_db/vm_setup.sh index 088a1d3..0736ae4 100644 --- a/backend/load_db/vm_setup.sh +++ b/backend/load_db/vm_setup.sh @@ -32,7 +32,7 @@ source env/bin/activate pip3 install --upgrade pip pip3 install -r requirements.txt -# Set up the production environment. -echo SCC_ENV=COMPUTE_ENGINE >> /root/.bashrc -echo WCA_HOST=https://staging.worldcubeassociation.org >> /root/.bashrc -echo GOOGLE_CLOUD_PROJECT=scc-staging-391105 >> /root/.bashrc +# Set up the staging environment. +echo export SCC_ENV=COMPUTE_ENGINE >> /root/.bashrc +echo export WCA_HOST=https://staging.worldcubeassociation.org >> /root/.bashrc +echo export GOOGLE_CLOUD_PROJECT=scc-staging-391105 >> /root/.bashrc diff --git a/exports/splitter.py b/exports/splitter.py new file mode 100644 index 0000000..128b28b --- /dev/null +++ b/exports/splitter.py @@ -0,0 +1,12 @@ +MAXLINES = 1000000 + +csvfile = open('./WCA_export_Results.tsv', mode='r', encoding='utf-8') +# or 'Latin-1' or 'CP-1252' +filename = 0 +for rownum, line in enumerate(csvfile): + if rownum % MAXLINES == 0: + filename += 1 + outfile = open(str(filename) + '.tsv', mode='w', encoding='utf-8') + outfile.write(line) +outfile.close() +csvfile.close() \ No newline at end of file From 6ccfe0baa288aa36c40aecb59e67e8df1f0328d5 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Fri, 28 Jul 2023 20:11:33 -0400 Subject: [PATCH 36/72] staging website is norw working --- .gcloudignore | 29 +++++++++++++++++++ README.md | 11 ++++++- back/.gcloudignore | 17 +++++++++++ {backend => back}/README.md | 0 back/api.yaml | 12 ++++++++ {backend => back/backend}/Dockerfile | 0 {backend => back/backend}/__init__.py | 2 +- .../backend}/handlers/admin/__init__.py | 0 .../handlers/admin/edit_championships.py | 3 +- .../backend}/handlers/admin/edit_users.py | 0 .../backend}/handlers/admin/provinces.py | 0 {backend => back/backend}/handlers/auth.py | 0 .../backend}/handlers/champions_table.py | 1 - .../backend}/handlers/province_rankings.py | 3 +- .../backend}/handlers/regional.py | 0 {backend => back/backend}/handlers/user.py | 8 ++--- {backend => back/backend}/lib/auth.py | 0 {backend => back/backend}/lib/common.py | 5 +--- {backend => back/backend}/lib/formatters.py | 0 {backend => back/backend}/lib/permissions.py | 2 -- {backend => back/backend}/lib/secrets.py | 0 {backend => back/backend}/load_db/README.md | 2 +- {backend => back/backend}/load_db/cleanup.py | 2 -- .../backend}/load_db/delete_old_exports.py | 0 .../backend}/load_db/get_latest_export.py | 0 {backend => back/backend}/load_db/load_db.py | 0 {backend => back/backend}/load_db/load_db.sh | 0 {backend => back/backend}/load_db/startup.sh | 0 .../backend}/load_db/update_champions.py | 1 - {backend => back/backend}/load_db/vm_setup.sh | 3 +- {backend => back/backend}/models/champion.py | 0 .../backend}/models/championship.py | 0 .../backend}/models/eligibility.py | 0 {backend => back/backend}/models/province.py | 0 {backend => back/backend}/models/region.py | 0 {backend => back/backend}/models/user.py | 0 {backend => back/backend}/models/wca/base.py | 0 .../backend}/models/wca/competition.py | 0 .../backend}/models/wca/continent.py | 0 .../backend}/models/wca/country.py | 0 {backend => back/backend}/models/wca/event.py | 0 .../backend}/models/wca/export.py | 0 .../backend}/models/wca/format.py | 0 .../backend}/models/wca/person.py | 0 {backend => back/backend}/models/wca/rank.py | 1 - .../backend}/models/wca/result.py | 0 {backend => back/backend}/models/wca/round.py | 0 {exports => back/exports}/splitter.py | 0 requirements.txt => back/requirements.txt | 0 dispatch.yaml | 8 +++++ frontend/.gcloudignore | 17 +++++++++++ frontend/.gitignore | 1 - frontend/app.yaml | 15 ++++++++++ frontend/src/components/Api.tsx | 5 ++-- 54 files changed, 120 insertions(+), 28 deletions(-) create mode 100644 .gcloudignore create mode 100644 back/.gcloudignore rename {backend => back}/README.md (100%) create mode 100644 back/api.yaml rename {backend => back/backend}/Dockerfile (100%) rename {backend => back/backend}/__init__.py (98%) rename {backend => back/backend}/handlers/admin/__init__.py (100%) rename {backend => back/backend}/handlers/admin/edit_championships.py (98%) rename {backend => back/backend}/handlers/admin/edit_users.py (100%) rename {backend => back/backend}/handlers/admin/provinces.py (100%) rename {backend => back/backend}/handlers/auth.py (100%) rename {backend => back/backend}/handlers/champions_table.py (97%) rename {backend => back/backend}/handlers/province_rankings.py (94%) rename {backend => back/backend}/handlers/regional.py (100%) rename {backend => back/backend}/handlers/user.py (96%) rename {backend => back/backend}/lib/auth.py (100%) rename {backend => back/backend}/lib/common.py (97%) rename {backend => back/backend}/lib/formatters.py (100%) rename {backend => back/backend}/lib/permissions.py (97%) rename {backend => back/backend}/lib/secrets.py (100%) rename {backend => back/backend}/load_db/README.md (97%) rename {backend => back/backend}/load_db/cleanup.py (91%) rename {backend => back/backend}/load_db/delete_old_exports.py (100%) rename {backend => back/backend}/load_db/get_latest_export.py (100%) rename {backend => back/backend}/load_db/load_db.py (100%) rename {backend => back/backend}/load_db/load_db.sh (100%) rename {backend => back/backend}/load_db/startup.sh (100%) rename {backend => back/backend}/load_db/update_champions.py (99%) rename {backend => back/backend}/load_db/vm_setup.sh (92%) rename {backend => back/backend}/models/champion.py (100%) rename {backend => back/backend}/models/championship.py (100%) rename {backend => back/backend}/models/eligibility.py (100%) rename {backend => back/backend}/models/province.py (100%) rename {backend => back/backend}/models/region.py (100%) rename {backend => back/backend}/models/user.py (100%) rename {backend => back/backend}/models/wca/base.py (100%) rename {backend => back/backend}/models/wca/competition.py (100%) rename {backend => back/backend}/models/wca/continent.py (100%) rename {backend => back/backend}/models/wca/country.py (100%) rename {backend => back/backend}/models/wca/event.py (100%) rename {backend => back/backend}/models/wca/export.py (100%) rename {backend => back/backend}/models/wca/format.py (100%) rename {backend => back/backend}/models/wca/person.py (100%) rename {backend => back/backend}/models/wca/rank.py (96%) rename {backend => back/backend}/models/wca/result.py (100%) rename {backend => back/backend}/models/wca/round.py (100%) rename {exports => back/exports}/splitter.py (100%) rename requirements.txt => back/requirements.txt (100%) create mode 100644 dispatch.yaml create mode 100644 frontend/.gcloudignore create mode 100644 frontend/app.yaml diff --git a/.gcloudignore b/.gcloudignore new file mode 100644 index 0000000..3995c7e --- /dev/null +++ b/.gcloudignore @@ -0,0 +1,29 @@ +# This file specifies files that are *not* uploaded to Google Cloud +# using gcloud. It follows the same syntax as .gitignore, with the addition of +# "#!include" directives (which insert the entries of the given .gitignore-style +# file at that point). + +^(.*/)?#.*#$ +^(.*/)?.*~$ +^(.*/)?.*\.py[co]$ +^(.*/)?\..*$ +external/bootstrap +__pycache__/ +/src/ +/lib/ +.git/ +.gitignore +env/ +venv/ +frontend/node_modules/ + +# Ignore other unnecessary files +*.pyc +*.pyo +*.pyd +*.pyc +*.egg-info/ +*.egg +*.bak +*.swp +*.DS_Store \ No newline at end of file diff --git a/README.md b/README.md index cc24694..1be4985 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,13 @@ ## Frontend -First, please move into the `app` directory. +First, please move into the `frontend` directory. In the project directory, you can run: ### `docker-compose up` + Runs de app and a development mysql database and an nginx server. The app is available at [http://localhost/](http://localhost/). ### `npm start` @@ -36,3 +37,11 @@ Your app is ready to be deployed! See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. Currently, this step is handled automatically by an AWS build pipeline. + +## Deployment + +To deploy run the command: + +```sh +gcloud app deploy frontend/app.yaml dispatch.yaml back/api.yaml +``` diff --git a/back/.gcloudignore b/back/.gcloudignore new file mode 100644 index 0000000..4bc7517 --- /dev/null +++ b/back/.gcloudignore @@ -0,0 +1,17 @@ +# This file specifies files that are *not* uploaded to Google Cloud +# using gcloud. It follows the same syntax as .gitignore, with the addition of +# "#!include" directives (which insert the entries of the given .gitignore-style +# file at that point). + +^(.*/)?#.*#$ +^(.*/)?.*~$ +^(.*/)?.*\.py[co]$ +^(.*/)?\..*$ +external/bootstrap +__pycache__/ +/src/ +/lib/ +.git/ +.gitignore +env/ +venv/ \ No newline at end of file diff --git a/backend/README.md b/back/README.md similarity index 100% rename from backend/README.md rename to back/README.md diff --git a/back/api.yaml b/back/api.yaml new file mode 100644 index 0000000..40f936b --- /dev/null +++ b/back/api.yaml @@ -0,0 +1,12 @@ +service: api +runtime: python39 +entrypoint: gunicorn -b :$PORT backend:app + +env_variables: + ENV: "PROD" + WCA_HOST: "https://staging.worldcubeassociation.org" + +handlers: + - url: /.* + script: auto + secure: always diff --git a/backend/Dockerfile b/back/backend/Dockerfile similarity index 100% rename from backend/Dockerfile rename to back/backend/Dockerfile diff --git a/backend/__init__.py b/back/backend/__init__.py similarity index 98% rename from backend/__init__.py rename to back/backend/__init__.py index bd3df3b..d8fe4c4 100644 --- a/backend/__init__.py +++ b/back/backend/__init__.py @@ -6,7 +6,7 @@ from authlib.integrations.flask_client import OAuth from dotenv import load_dotenv from flask import Flask, redirect, request -from flask_cors import CORS, cross_origin +from flask_cors import CORS import google.cloud.logging from backend.lib.secrets import get_secret diff --git a/backend/handlers/admin/__init__.py b/back/backend/handlers/admin/__init__.py similarity index 100% rename from backend/handlers/admin/__init__.py rename to back/backend/handlers/admin/__init__.py diff --git a/backend/handlers/admin/edit_championships.py b/back/backend/handlers/admin/edit_championships.py similarity index 98% rename from backend/handlers/admin/edit_championships.py rename to back/backend/handlers/admin/edit_championships.py index d0d3a77..58a9362 100644 --- a/backend/handlers/admin/edit_championships.py +++ b/back/backend/handlers/admin/edit_championships.py @@ -1,8 +1,7 @@ from flask import abort, Blueprint, redirect, render_template from google.cloud import ndb -from backend.lib import auth -from backend.lib import common +from backend.lib import auth, common from backend.models.championship import Championship from backend.models.region import Region from backend.models.province import Province diff --git a/backend/handlers/admin/edit_users.py b/back/backend/handlers/admin/edit_users.py similarity index 100% rename from backend/handlers/admin/edit_users.py rename to back/backend/handlers/admin/edit_users.py diff --git a/backend/handlers/admin/provinces.py b/back/backend/handlers/admin/provinces.py similarity index 100% rename from backend/handlers/admin/provinces.py rename to back/backend/handlers/admin/provinces.py diff --git a/backend/handlers/auth.py b/back/backend/handlers/auth.py similarity index 100% rename from backend/handlers/auth.py rename to back/backend/handlers/auth.py diff --git a/backend/handlers/champions_table.py b/back/backend/handlers/champions_table.py similarity index 97% rename from backend/handlers/champions_table.py rename to back/backend/handlers/champions_table.py index b53a485..1ec5ebc 100644 --- a/backend/handlers/champions_table.py +++ b/back/backend/handlers/champions_table.py @@ -3,7 +3,6 @@ from backend.lib import common from backend.models.champion import Champion -from backend.models.championship import Championship from backend.models.region import Region from backend.models.province import Province from backend.models.wca.event import Event diff --git a/backend/handlers/province_rankings.py b/back/backend/handlers/province_rankings.py similarity index 94% rename from backend/handlers/province_rankings.py rename to back/backend/handlers/province_rankings.py index ab47144..8e445ab 100644 --- a/backend/handlers/province_rankings.py +++ b/back/backend/handlers/province_rankings.py @@ -1,7 +1,6 @@ -from flask import Blueprint, render_template, jsonify +from flask import Blueprint, jsonify from google.cloud import ndb -from backend.lib import common from backend.models.province import Province from backend.models.wca.event import Event from backend.models.wca.rank import RankAverage diff --git a/backend/handlers/regional.py b/back/backend/handlers/regional.py similarity index 100% rename from backend/handlers/regional.py rename to back/backend/handlers/regional.py diff --git a/backend/handlers/user.py b/back/backend/handlers/user.py similarity index 96% rename from backend/handlers/user.py rename to back/backend/handlers/user.py index 22744be..f1b680e 100644 --- a/backend/handlers/user.py +++ b/back/backend/handlers/user.py @@ -1,13 +1,11 @@ import datetime -from flask import Blueprint, render_template, redirect, request, jsonify +from flask import Blueprint, request, jsonify from google.cloud import ndb -from backend.lib import auth -from backend.lib import permissions -from backend.lib.common import Common +from backend.lib import permissions, auth from backend.models.province import Province -from backend.models.user import User, Roles, UserLocationUpdate +from backend.models.user import User, UserLocationUpdate from backend.models.wca.rank import RankAverage, RankSingle bp = Blueprint('user', __name__) diff --git a/backend/lib/auth.py b/back/backend/lib/auth.py similarity index 100% rename from backend/lib/auth.py rename to back/backend/lib/auth.py diff --git a/backend/lib/common.py b/back/backend/lib/common.py similarity index 97% rename from backend/lib/common.py rename to back/backend/lib/common.py index 343190a..bcda97a 100644 --- a/backend/lib/common.py +++ b/back/backend/lib/common.py @@ -2,11 +2,8 @@ import os from flask import request -from google.cloud import ndb -from backend.lib import auth -from backend.lib import formatters -from backend.lib import secrets +from backend.lib import formatters, auth, secrets from backend.models.region import Region from backend.models.province import Province from backend.models.user import Roles diff --git a/backend/lib/formatters.py b/back/backend/lib/formatters.py similarity index 100% rename from backend/lib/formatters.py rename to back/backend/lib/formatters.py diff --git a/backend/lib/permissions.py b/back/backend/lib/permissions.py similarity index 97% rename from backend/lib/permissions.py rename to back/backend/lib/permissions.py index a8d9666..8bbbb61 100644 --- a/backend/lib/permissions.py +++ b/back/backend/lib/permissions.py @@ -1,5 +1,3 @@ -import datetime - from backend.models.user import Roles def CanEditLocation(user, editor): diff --git a/backend/lib/secrets.py b/back/backend/lib/secrets.py similarity index 100% rename from backend/lib/secrets.py rename to back/backend/lib/secrets.py diff --git a/backend/load_db/README.md b/back/backend/load_db/README.md similarity index 97% rename from backend/load_db/README.md rename to back/backend/load_db/README.md index 35e4d78..ef13d19 100644 --- a/backend/load_db/README.md +++ b/back/backend/load_db/README.md @@ -13,7 +13,7 @@ You can create a new VM at https://console.cloud.google.com/compute/instancesAdd ```sh apt upgrade -cd speedcubing-canada +cd speedcubing-canada/back git pull backend/load_db/startup.sh ``` diff --git a/backend/load_db/cleanup.py b/back/backend/load_db/cleanup.py similarity index 91% rename from backend/load_db/cleanup.py rename to back/backend/load_db/cleanup.py index 1de77d8..3aa0d90 100644 --- a/backend/load_db/cleanup.py +++ b/back/backend/load_db/cleanup.py @@ -1,7 +1,5 @@ from google.cloud import ndb -from backend.models.wca.export import get_latest_export - client = ndb.Client() # Delete classes we don't use anymore. diff --git a/backend/load_db/delete_old_exports.py b/back/backend/load_db/delete_old_exports.py similarity index 100% rename from backend/load_db/delete_old_exports.py rename to back/backend/load_db/delete_old_exports.py diff --git a/backend/load_db/get_latest_export.py b/back/backend/load_db/get_latest_export.py similarity index 100% rename from backend/load_db/get_latest_export.py rename to back/backend/load_db/get_latest_export.py diff --git a/backend/load_db/load_db.py b/back/backend/load_db/load_db.py similarity index 100% rename from backend/load_db/load_db.py rename to back/backend/load_db/load_db.py diff --git a/backend/load_db/load_db.sh b/back/backend/load_db/load_db.sh similarity index 100% rename from backend/load_db/load_db.sh rename to back/backend/load_db/load_db.sh diff --git a/backend/load_db/startup.sh b/back/backend/load_db/startup.sh similarity index 100% rename from backend/load_db/startup.sh rename to back/backend/load_db/startup.sh diff --git a/backend/load_db/update_champions.py b/back/backend/load_db/update_champions.py similarity index 99% rename from backend/load_db/update_champions.py rename to back/backend/load_db/update_champions.py index 15e15d9..69d28a4 100644 --- a/backend/load_db/update_champions.py +++ b/back/backend/load_db/update_champions.py @@ -9,7 +9,6 @@ from backend.models.championship import Championship from backend.models.eligibility import RegionalChampionshipEligibility from backend.models.eligibility import ProvinceChampionshipEligibility -from backend.models.province import Province from backend.models.user import User from backend.models.wca.country import Country from backend.models.wca.event import Event diff --git a/backend/load_db/vm_setup.sh b/back/backend/load_db/vm_setup.sh similarity index 92% rename from backend/load_db/vm_setup.sh rename to back/backend/load_db/vm_setup.sh index 0736ae4..3681a65 100644 --- a/backend/load_db/vm_setup.sh +++ b/back/backend/load_db/vm_setup.sh @@ -15,7 +15,7 @@ set -e # apt install git # git clone https://github.com/Speedcubing-Canada/speedcubing-canada-web speedcubing-canada # -# Then cd into the Speedcubing-Canada directory and run this script (without sudo). +# Then cd into the Speedcubing-Canada directory in the back folder and run this script (without sudo). # Finally, run backend/load_db/startup.sh to download the WCA database and # initialize the datastore. The first run can take >1 hour; subsequent runs are # faster since they only need to load entities that have changed. @@ -26,6 +26,7 @@ set -e apt install unzip python3-distutils python3-venv build-essential python3-dev libffi-dev libssl-dev python3-pip # Set up the virtualenv. +cd back pip3 install virtualenv python3 -m venv env source env/bin/activate diff --git a/backend/models/champion.py b/back/backend/models/champion.py similarity index 100% rename from backend/models/champion.py rename to back/backend/models/champion.py diff --git a/backend/models/championship.py b/back/backend/models/championship.py similarity index 100% rename from backend/models/championship.py rename to back/backend/models/championship.py diff --git a/backend/models/eligibility.py b/back/backend/models/eligibility.py similarity index 100% rename from backend/models/eligibility.py rename to back/backend/models/eligibility.py diff --git a/backend/models/province.py b/back/backend/models/province.py similarity index 100% rename from backend/models/province.py rename to back/backend/models/province.py diff --git a/backend/models/region.py b/back/backend/models/region.py similarity index 100% rename from backend/models/region.py rename to back/backend/models/region.py diff --git a/backend/models/user.py b/back/backend/models/user.py similarity index 100% rename from backend/models/user.py rename to back/backend/models/user.py diff --git a/backend/models/wca/base.py b/back/backend/models/wca/base.py similarity index 100% rename from backend/models/wca/base.py rename to back/backend/models/wca/base.py diff --git a/backend/models/wca/competition.py b/back/backend/models/wca/competition.py similarity index 100% rename from backend/models/wca/competition.py rename to back/backend/models/wca/competition.py diff --git a/backend/models/wca/continent.py b/back/backend/models/wca/continent.py similarity index 100% rename from backend/models/wca/continent.py rename to back/backend/models/wca/continent.py diff --git a/backend/models/wca/country.py b/back/backend/models/wca/country.py similarity index 100% rename from backend/models/wca/country.py rename to back/backend/models/wca/country.py diff --git a/backend/models/wca/event.py b/back/backend/models/wca/event.py similarity index 100% rename from backend/models/wca/event.py rename to back/backend/models/wca/event.py diff --git a/backend/models/wca/export.py b/back/backend/models/wca/export.py similarity index 100% rename from backend/models/wca/export.py rename to back/backend/models/wca/export.py diff --git a/backend/models/wca/format.py b/back/backend/models/wca/format.py similarity index 100% rename from backend/models/wca/format.py rename to back/backend/models/wca/format.py diff --git a/backend/models/wca/person.py b/back/backend/models/wca/person.py similarity index 100% rename from backend/models/wca/person.py rename to back/backend/models/wca/person.py diff --git a/backend/models/wca/rank.py b/back/backend/models/wca/rank.py similarity index 96% rename from backend/models/wca/rank.py rename to back/backend/models/wca/rank.py index d0e294e..0751bcd 100644 --- a/backend/models/wca/rank.py +++ b/back/backend/models/wca/rank.py @@ -1,6 +1,5 @@ from google.cloud import ndb -from backend.models.user import User from backend.models.wca.base import BaseModel from backend.models.wca.event import Event from backend.models.wca.person import Person diff --git a/backend/models/wca/result.py b/back/backend/models/wca/result.py similarity index 100% rename from backend/models/wca/result.py rename to back/backend/models/wca/result.py diff --git a/backend/models/wca/round.py b/back/backend/models/wca/round.py similarity index 100% rename from backend/models/wca/round.py rename to back/backend/models/wca/round.py diff --git a/exports/splitter.py b/back/exports/splitter.py similarity index 100% rename from exports/splitter.py rename to back/exports/splitter.py diff --git a/requirements.txt b/back/requirements.txt similarity index 100% rename from requirements.txt rename to back/requirements.txt diff --git a/dispatch.yaml b/dispatch.yaml new file mode 100644 index 0000000..cc92fef --- /dev/null +++ b/dispatch.yaml @@ -0,0 +1,8 @@ +dispatch: + # Send all api traffic to the backend service. + - url: "api.staging.speedcubingcanada.org/*" + service: api + + # Send all other traffic to the default (frontend). + - url: "*/*" + service: default diff --git a/frontend/.gcloudignore b/frontend/.gcloudignore new file mode 100644 index 0000000..4d7d693 --- /dev/null +++ b/frontend/.gcloudignore @@ -0,0 +1,17 @@ +# This file specifies files that are *not* uploaded to Google Cloud +# using gcloud. It follows the same syntax as .gitignore, with the addition of +# "#!include" directives (which insert the entries of the given .gitignore-style +# file at that point). +# +# For more information, run: +# $ gcloud topic gcloudignore +# +.gcloudignore +# If you would like to upload your .git directory, .gitignore file or files +# from your .gitignore file, remove the corresponding line +# below: +.git +.gitignore + +# Node.js dependencies: +node_modules/ \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore index b7e6a3e..25c716b 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -23,4 +23,3 @@ yarn-debug.log* yarn-error.log* .fuse_hidden* -mysql_password.txt diff --git a/frontend/app.yaml b/frontend/app.yaml new file mode 100644 index 0000000..0c7211d --- /dev/null +++ b/frontend/app.yaml @@ -0,0 +1,15 @@ +runtime: nodejs16 + +handlers: + # Serve all static files with url ending with a file extension + - url: /(.*\..+)$ + static_files: build/\1 + upload: build/(.*\..+)$ + + # Catch all handler to index.html + - url: /.* + static_files: build/index.html + upload: build/index.html + +env_variables: + API_BASE_URL: "https://api.staging.speedcubingcanada.org" \ No newline at end of file diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index d7f766e..fbe030d 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -4,9 +4,8 @@ import httpClient from "../httpClient"; export const PRODUCTION = process.env.NODE_ENV === 'production'; -export const API_BASE_URL = PRODUCTION - ? "https://api.speedcubingcanada.org" - : "http://localhost:8083"; +export const API_BASE_URL = + process.env.API_BASE_URL || "https://api.staging.speedcubingcanada.org"; export const signIn = () => { From 1d37df1ed0fb29db07266b45f764ed45c1e98206 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 2 Aug 2023 03:15:22 -0400 Subject: [PATCH 37/72] more info on the profile --- .dockerignore | 6 +- .gitignore | 3 +- back/backend/__init__.py | 2 + back/backend/handlers/province_rankings.py | 43 ++++---- back/backend/handlers/user.py | 2 +- back/backend/load_db/load_db.sh | 2 +- frontend/package-lock.json | 122 ++++++++++++++++++--- frontend/package.json | 2 + frontend/src/components/Api.tsx | 2 +- frontend/src/components/Types.ts | 2 + frontend/src/pages/Account.tsx | 56 +++++++--- 11 files changed, 183 insertions(+), 59 deletions(-) diff --git a/.dockerignore b/.dockerignore index 38a5c84..1b5deb1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,3 @@ -/node_modules -/npm-debug.log -/build \ No newline at end of file +frontend/node_modules +frontend/npm-debug.log +frontend/build \ No newline at end of file diff --git a/.gitignore b/.gitignore index d8ae469..40e42db 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .env .idea *.pyc -venv \ No newline at end of file +venv +back/exports/WCA_export* \ No newline at end of file diff --git a/back/backend/__init__.py b/back/backend/__init__.py index d8fe4c4..db3ee45 100644 --- a/back/backend/__init__.py +++ b/back/backend/__init__.py @@ -65,10 +65,12 @@ def before_request(): from backend.handlers.auth import create_bp as create_auth_bp from backend.handlers.champions_table import bp as champions_table_bp from backend.handlers.regional import bp as regional_bp +from backend.handlers.province_rankings import bp as province_rankings_bp from backend.handlers.user import bp as user_bp app.register_blueprint(admin_bp) app.register_blueprint(create_auth_bp(oauth)) app.register_blueprint(champions_table_bp) app.register_blueprint(regional_bp) +app.register_blueprint(province_rankings_bp) app.register_blueprint(user_bp) diff --git a/back/backend/handlers/province_rankings.py b/back/backend/handlers/province_rankings.py index 8e445ab..46db5a1 100644 --- a/back/backend/handlers/province_rankings.py +++ b/back/backend/handlers/province_rankings.py @@ -9,30 +9,31 @@ bp = Blueprint('province_rankings', __name__) client = ndb.Client() -@bp.route('/async/province_rankings///') + +@bp.route('/province_rankings///') def province_rankings_table(event_id, province_id, use_average): - with client.context(): - ranking_class = RankAverage if use_average == '1' else RankSingle - province = Province.get_by_id(province_id) - if not province: - return jsonify({"error": "Unrecognized province id %s" % province}), 404 - event = Event.get_by_id(event_id) - if not event: - return jsonify({"error": "Unrecognized event id %s" % event}), 404 - rankings = (ranking_class.query( - ndb.AND(ranking_class.event == event.key, - ranking_class.province == province.key)) - .order(ranking_class.best) - .fetch(100)) + with client.context(): + ranking_class = RankAverage if use_average == '1' else RankSingle + province = Province.get_by_id(province_id) + if not province: + return jsonify({"error": "Unrecognized province id %s" % province}), 404 + event = Event.get_by_id(event_id) + if not event: + return jsonify({"error": "Unrecognized event id %s" % event}), 404 + rankings = (ranking_class.query( + ndb.AND(ranking_class.event == event.key, + ranking_class.province == province.key)) + .order(ranking_class.best) + .fetch(100)) - people = ndb.get_multi([ranking.person for ranking in rankings]) - people_by_id = {person.key.id() : person for person in people} + people = ndb.get_multi([ranking.person for ranking in rankings]) + people_by_id = {person.key.id(): person for person in people} - return jsonify({ - "rankings": rankings, - "people_by_id": people_by_id, - }) - """return render_template('province_rankings_table.html', + return jsonify({ + "rankings": rankings, + "people_by_id": people_by_id, + }) + """return render_template('province_rankings_table.html', c=common.Common(), is_average=(use_average == '1'), rankings=rankings, diff --git a/back/backend/handlers/user.py b/back/backend/handlers/user.py index f1b680e..93ed164 100644 --- a/back/backend/handlers/user.py +++ b/back/backend/handlers/user.py @@ -40,7 +40,7 @@ def user_info(user_id=-1): "id": user.key.id(), "name": user.name, "roles": user.roles, - "dob": user.dob, + "dob": user.dob.isoformat() if user.dob else None, "province": user.province.id() if user.province else None, "wca_person": user.wca_person.id() if user.wca_person else None }) diff --git a/back/backend/load_db/load_db.sh b/back/backend/load_db/load_db.sh index 4564c27..148f49f 100644 --- a/back/backend/load_db/load_db.sh +++ b/back/backend/load_db/load_db.sh @@ -5,7 +5,7 @@ export PYTHONPATH=$(pwd) if [ "$SCC_ENV" != "COMPUTE_ENGINE" ] then echo "Emulating datastore." - $(gcloud beta emulators datastore env-init) + #$(gcloud beta emulators datastore env-init) fi echo "Deleting old exports" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 42da628..6156428 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -13,6 +13,7 @@ "@mui/icons-material": "^5.6.2", "@mui/material": "^5.6.2", "@mui/styles": "^5.8.4", + "@mui/x-date-pickers": "^6.10.2", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^12.1.2", "@testing-library/user-event": "^13.5.0", @@ -21,6 +22,7 @@ "@types/react": "^17.0.39", "@types/react-dom": "^17.0.11", "axios": "^1.4.0", + "dayjs": "^1.11.9", "i18next": "^21.6.16", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -1975,9 +1977,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -3329,13 +3331,13 @@ } }, "node_modules/@mui/utils": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", - "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.3.tgz", + "integrity": "sha512-gZ6Etw+ppO43GYc1HFZSLjwd4DoZoa+RrYTD25wQLfzcSoPjVoC/zZqA2Lkq0zjgwGBQOSxKZI6jfp9uXR+kgw==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.0", + "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -3355,6 +3357,71 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "node_modules/@mui/x-date-pickers": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.10.2.tgz", + "integrity": "sha512-RZHvPj5UYGdV2FoBlTbtAtg1aaJ1sbdD9LM9vSgefQWMW0vFC4fSYtFACS4ptxK/8Q0FHyuVZF5bDO+TUAPxQg==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "@mui/utils": "^5.13.7", + "@types/react-transition-group": "^4.4.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/base": "^5.0.0-alpha.87", + "@mui/material": "^5.8.6", + "@mui/system": "^5.8.0", + "date-fns": "^2.25.0", + "date-fns-jalali": "^2.13.0-0", + "dayjs": "^1.10.7", + "luxon": "^3.0.2", + "moment": "^2.29.4", + "moment-hijri": "^2.1.2", + "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "date-fns": { + "optional": true + }, + "date-fns-jalali": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-hijri": { + "optional": true + }, + "moment-jalaali": { + "optional": true + } + } + }, "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", @@ -6619,6 +6686,11 @@ "node": ">=10" } }, + "node_modules/dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, "node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -18848,9 +18920,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "requires": { "regenerator-runtime": "^0.13.11" } @@ -19793,13 +19865,13 @@ "requires": {} }, "@mui/utils": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", - "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.3.tgz", + "integrity": "sha512-gZ6Etw+ppO43GYc1HFZSLjwd4DoZoa+RrYTD25wQLfzcSoPjVoC/zZqA2Lkq0zjgwGBQOSxKZI6jfp9uXR+kgw==", "requires": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.0", + "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -19811,6 +19883,19 @@ } } }, + "@mui/x-date-pickers": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.10.2.tgz", + "integrity": "sha512-RZHvPj5UYGdV2FoBlTbtAtg1aaJ1sbdD9LM9vSgefQWMW0vFC4fSYtFACS4ptxK/8Q0FHyuVZF5bDO+TUAPxQg==", + "requires": { + "@babel/runtime": "^7.22.6", + "@mui/utils": "^5.13.7", + "@types/react-transition-group": "^4.4.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + } + }, "@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", @@ -22213,6 +22298,11 @@ "whatwg-url": "^8.0.0" } }, + "dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 07bbfc0..e57e7a0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,6 +8,7 @@ "@mui/icons-material": "^5.6.2", "@mui/material": "^5.6.2", "@mui/styles": "^5.8.4", + "@mui/x-date-pickers": "^6.10.2", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^12.1.2", "@testing-library/user-event": "^13.5.0", @@ -16,6 +17,7 @@ "@types/react": "^17.0.39", "@types/react-dom": "^17.0.11", "axios": "^1.4.0", + "dayjs": "^1.11.9", "i18next": "^21.6.16", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index fbe030d..4b546ba 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -5,7 +5,7 @@ import httpClient from "../httpClient"; export const PRODUCTION = process.env.NODE_ENV === 'production'; export const API_BASE_URL = - process.env.API_BASE_URL || "https://api.staging.speedcubingcanada.org"; + process.env.API_BASE_URL || "http://localhost:8083"; export const signIn = () => { diff --git a/frontend/src/components/Types.ts b/frontend/src/components/Types.ts index 85c8ea3..3add835 100644 --- a/frontend/src/components/Types.ts +++ b/frontend/src/components/Types.ts @@ -4,11 +4,13 @@ export interface User { roles: string[]; province: string; wca_person: string; + dob: string; } export interface Province { id: string; label: string; + region: string; } export interface ProfileEditData { diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 23c446a..529cf90 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -7,35 +7,40 @@ import Button from '@mui/material/Button'; import Grid from '@mui/material/Unstable_Grid2'; import TextField from '@mui/material/TextField'; import Autocomplete from '@mui/material/Autocomplete'; +import {DateField} from "@mui/x-date-pickers"; +import {AdapterDayjs} from '@mui/x-date-pickers/AdapterDayjs'; +import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; import {API_BASE_URL, GetUser, signIn, signOut} from '../components/Api'; import {useState} from "react"; import {Province} from "../components/Types"; import httpClient from "../httpClient"; +import dayjs from "dayjs"; export const Account = () => { const {t} = useTranslation(); const [province, setProvince] = useState(null); + const [dob, setDob] = useState<| null>(null); const provinces: Province[] = [ - {label: 'Alberta', id: 'ab'}, - {label: 'British Columbia', id: 'bc'}, - {label: 'Manitoba', id: 'mb'}, - {label: 'New Brunswick', id: 'nb'}, - {label: 'Newfoundland and Labrador', id: 'nl'}, - {label: 'Northwest Territories', id: 'nt'}, - {label: 'Nova Scotia', id: 'ns'}, - {label: 'Nunavut', id: 'nu'}, - {label: 'Ontario', id: 'on'}, - {label: 'Prince Edward Island', id: 'pe'}, - {label: 'Quebec', id: 'qc'}, - {label: 'Saskatchewan', id: 'sk'}, - {label: 'Yukon', id: 'yt'}, - {label: 'N/A', id: 'na'}, + {label: 'Alberta', id: 'ab', region: 'Prairies'}, + {label: 'British Columbia', id: 'bc', region: 'British Columbia'}, + {label: 'Manitoba', id: 'mb', region: 'Prairies'}, + {label: 'New Brunswick', id: 'nb', region: 'Atlantic'}, + {label: 'Newfoundland and Labrador', id: 'nl', region: 'Atlantic'}, + {label: 'Northwest Territories', id: 'nt', region: 'Territories'}, + {label: 'Nova Scotia', id: 'ns', region: 'Atlantic'}, + {label: 'Nunavut', id: 'nu', region: 'Territories'}, + {label: 'Ontario', id: 'on', region: 'Ontario'}, + {label: 'Prince Edward Island', id: 'pe', region: 'Atlantic'}, + {label: 'Quebec', id: 'qc', region: 'Quebec'}, + {label: 'Saskatchewan', id: 'sk', region: 'Prairies'}, + {label: 'Yukon', id: 'yt', region: 'Territories'}, + {label: 'N/A', id: 'na', region: 'N/A'}, ];// TODO: have translations for provinces const user = GetUser();//TODO: display something else while loading - let default_province = {label: 'N/A', id: 'na'}; + let default_province = {label: 'N/A', id: 'na', region: 'N/A'}; if (user != null && user.province != null) { //set province in the combo box for (let i = 0; i < provinces.length; i++) { @@ -44,6 +49,10 @@ export const Account = () => { } } } + let default_dob = dayjs('2022-01-01'); + if (user != null && user.dob != null) { + default_dob = dayjs(user.dob); + } const handleSaveProfile = async () => { @@ -101,6 +110,23 @@ export const Account = () => { {t("account.policy")} + + + + From f9676065526bbe3ecfbac1851b7e7182c2611f4e Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 2 Aug 2023 17:51:46 -0400 Subject: [PATCH 38/72] api for province rankings is now working --- .gitignore | 3 +- .../handlers/admin/edit_championships.py | 6 +- back/backend/handlers/admin/edit_users.py | 6 +- back/backend/handlers/province_rankings.py | 27 ++-- back/backend/handlers/user.py | 92 +------------ back/index.yaml | 122 ++++++++++++++++++ 6 files changed, 146 insertions(+), 110 deletions(-) create mode 100644 back/index.yaml diff --git a/.gitignore b/.gitignore index 40e42db..28ed1fd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ .idea *.pyc venv -back/exports/WCA_export* \ No newline at end of file +back/exports/WCA_export* +back/venv \ No newline at end of file diff --git a/back/backend/handlers/admin/edit_championships.py b/back/backend/handlers/admin/edit_championships.py index 58a9362..8de657a 100644 --- a/back/backend/handlers/admin/edit_championships.py +++ b/back/backend/handlers/admin/edit_championships.py @@ -13,7 +13,7 @@ client = ndb.Client() -@bp.route('/add_championship//') +#@bp.route('/add_championship//') def add_championship(competition_id, championship_type): with client.context(): me = auth.user() @@ -43,7 +43,7 @@ def add_championship(competition_id, championship_type): return redirect('/admin/edit_championships') -@bp.route('/delete_championship/') +#@bp.route('/delete_championship/') def delete_championship(championship_id): with client.context(): me = auth.user() @@ -55,7 +55,7 @@ def delete_championship(championship_id): return redirect('/admin/edit_championships') -@bp.route('/edit_championships') +#@bp.route('/edit_championships') def edit_championships(): with client.context(): me = auth.user() diff --git a/back/backend/handlers/admin/edit_users.py b/back/backend/handlers/admin/edit_users.py index 344013f..3a0c1c7 100644 --- a/back/backend/handlers/admin/edit_users.py +++ b/back/backend/handlers/admin/edit_users.py @@ -9,7 +9,7 @@ bp = Blueprint('edit_users', __name__) client = ndb.Client() -@bp.route('/edit_users') +#@bp.route('/edit_users') def edit_users(): with client.context(): me = auth.user() @@ -18,8 +18,8 @@ def edit_users(): return render_template('admin/edit_users.html', c=Common()) -@bp.route('/async/get_users/') -@bp.route('/async/get_users/') +#@bp.route('/async/get_users/') +#@bp.route('/async/get_users/') def edit_users_table(filter_text=''): with client.context(): me = auth.user() diff --git a/back/backend/handlers/province_rankings.py b/back/backend/handlers/province_rankings.py index 46db5a1..655b028 100644 --- a/back/backend/handlers/province_rankings.py +++ b/back/backend/handlers/province_rankings.py @@ -1,6 +1,7 @@ from flask import Blueprint, jsonify from google.cloud import ndb +from backend.lib import common from backend.models.province import Province from backend.models.wca.event import Event from backend.models.wca.rank import RankAverage @@ -26,15 +27,17 @@ def province_rankings_table(event_id, province_id, use_average): .order(ranking_class.best) .fetch(100)) - people = ndb.get_multi([ranking.person for ranking in rankings]) - people_by_id = {person.key.id(): person for person in people} - - return jsonify({ - "rankings": rankings, - "people_by_id": people_by_id, - }) - """return render_template('province_rankings_table.html', - c=common.Common(), - is_average=(use_average == '1'), - rankings=rankings, - people_by_id=people_by_id)""" + output = [] + last_time = 0 + rank = 0 + for i in range(len(rankings)): + if rankings[i].best != last_time: + rank = i + 1 + last_time = rankings[i].best + output.append({ + "rank": rank, + "name": rankings[i].person.get().name, + "url": rankings[i].person.get().GetWCALink(), + "time": common.Common().formatters.FormatTime(rankings[i].best, rankings[i].event, use_average == '1') + }) + return jsonify(output) diff --git a/back/backend/handlers/user.py b/back/backend/handlers/user.py index 93ed164..185be1a 100644 --- a/back/backend/handlers/user.py +++ b/back/backend/handlers/user.py @@ -105,94 +105,4 @@ def edit(user_id=-1): if user_modified: user.put() - return jsonify({"success": True}) - - -""" -@bp.route('/edit', methods=['GET', 'POST']) -@bp.route('/edit/', methods=['GET', 'POST']) -def edit_user(user_id=-1): - with client.context(): - me = auth.user() - if not me: - return redirect('/') - if user_id == -1: - user = me - else: - user = User.get_by_id(user_id) - if not user: - return error('Unrecognized user ID %d' % user_id) - if not permissions.CanViewUser(user, me): - return error('You\'re not authorized to view this user.') - - if request.method == 'GET': - return render_template('edit_user.html', - c=Common(), - user=user, - all_roles=Roles.AllRoles(), - editing_location_enabled=permissions.CanEditLocation(user, me), - can_view_roles=permissions.CanViewRoles(user, me), - editable_roles=permissions.EditableRoles(user, me), - successful=request.args.get('successful', 0)) - - city = request.form['city'] - province_id = request.form['province'] - if province_id == 'empty': - province_id = '' - - if request.form['lat'] and request.form['lng']: - lat = int(request.form['lat']) - lng = int(request.form['lng']) - else: - lat = 0 - lng = 0 - template_dict = {} - - old_province_id = user.province.id() if user.province else '' - changed_location = user.city != city or old_province_id != province_id - user_modified = False - if permissions.CanEditLocation(user, me) and changed_location: - if city: - user.city = city - else: - del user.city - if province_id: - user.province = ndb.Key(Province, province_id) - else: - del user.province - if user.wca_person and old_province_id != province_id: - wca_person = user.wca_person.get() - if wca_person: - wca_person.province = user.province - wca_person.put() - RewriteRanks(wca_person) - user.latitude = lat - user.longitude = lng - user_modified = True - - if changed_location: - # Also save the Update. - update = UserLocationUpdate() - update.updater = me.key - if city: - update.city = city - update.update_time = datetime.datetime.now() - if province_id: - update.province = ndb.Key(Province, province_id) - user.updates.append(update) - - elif changed_location: - return error('You\'re not authorized to edit user locations.') - - for role in permissions.EditableRoles(user, me): - if role in request.form and role not in user.roles: - user.roles.append(role) - user_modified = True - elif role not in request.form and role in user.roles: - user.roles.remove(role) - user_modified = True - - if user_modified: - user.put() - - return redirect(request.path + '?successful=1')""" + return jsonify({"success": True}) \ No newline at end of file diff --git a/back/index.yaml b/back/index.yaml new file mode 100644 index 0000000..bb632ea --- /dev/null +++ b/back/index.yaml @@ -0,0 +1,122 @@ +indexes: + +- kind: User + properties: + - name: wca_person + - name: name + +- kind: User + properties: + - name: dob + - name: name + +# AUTOGENERATED + +# This index.yaml is automatically updated whenever the dev_appserver +# detects that a new type of query is run. If you want to manage the +# index.yaml file manually, remove the above marker line (the line +# saying "# AUTOGENERATED"). If you want to manage some indexes +# manually, move them above the marker line. The index.yaml file is +# automatically uploaded to the admin console when you next deploy +# your application using appcfg.py. + +- kind: Champion + properties: + - name: event + - name: year + - name: region + +- kind: Championship + properties: + - name: national_championship + - name: region + - name: year + direction: desc + +- kind: Championship + properties: + - name: national_championship + - name: province + - name: year + direction: desc + +- kind: Championship + properties: + - name: national_championship + - name: year + direction: desc + +- kind: Championship + properties: + - name: region + - name: year + direction: desc + +- kind: Championship + properties: + - name: province + - name: year + direction: desc + +- kind: Championship + properties: + - name: year + - name: region + +- kind: Competition + properties: + - name: country + - name: name + +- kind: Competition + properties: + - name: year + - name: end_date + +- kind: Competition + properties: + - name: year + - name: end_date + direction: desc + +- kind: RankAverage + properties: + - name: event + - name: province + - name: best + +- kind: RankSingle + properties: + - name: event + - name: province + - name: best + +- kind: Result + properties: + - name: competition + - name: event + - name: round_type + - name: pos + direction: desc + +- kind: Result + properties: + - name: competition + - name: pos + +- kind: Result + properties: + - name: competition + - name: pos + direction: desc + +- kind: UserLocationUpdate + properties: + - name: user + - name: update_time + +- kind: UserLocationUpdate + properties: + - name: user + - name: update_time + direction: desc \ No newline at end of file From 94c718b4b34bc1cb04fe4950a26f43ed76e3dff7 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 2 Aug 2023 23:46:58 -0400 Subject: [PATCH 39/72] profile with all the info (but still ugly) --- .gcloudignore | 2 +- back/backend/__init__.py | 2 +- back/backend/handlers/auth.py | 12 ++--- frontend/package.json | 2 +- frontend/src/components/Api.tsx | 1 + frontend/src/components/Types.ts | 5 ++ frontend/src/locale.ts | 2 + frontend/src/pages/Account.tsx | 82 +++++++++++++++++++++++++++----- 8 files changed, 85 insertions(+), 23 deletions(-) diff --git a/.gcloudignore b/.gcloudignore index 3995c7e..c8e47d7 100644 --- a/.gcloudignore +++ b/.gcloudignore @@ -14,7 +14,7 @@ __pycache__/ .git/ .gitignore env/ -venv/ +back/venv/ frontend/node_modules/ # Ignore other unnecessary files diff --git a/back/backend/__init__.py b/back/backend/__init__.py index db3ee45..461cd3c 100644 --- a/back/backend/__init__.py +++ b/back/backend/__init__.py @@ -28,7 +28,7 @@ app = Flask(__name__) app.secret_key = get_secret('SESSION_SECRET_KEY') app.permanent_session_lifetime = datetime.timedelta(days=7) -address = get_secret('FLASK_ADDRESS') +address = get_secret('FRONT_ADDRESS') CORS(app, supports_credentials=True) diff --git a/back/backend/handlers/auth.py b/back/backend/handlers/auth.py index 39fdd72..2f32518 100644 --- a/back/backend/handlers/auth.py +++ b/back/backend/handlers/auth.py @@ -79,20 +79,18 @@ def oauth_callback(): else: wca_id_user = None if wca_id_user: - if wca_id_user.city and not user.city: - user.city = wca_id_user.city + if wca_id_user.dob and not user.dob: + user.dob = wca_id_user.dob if wca_id_user.province and not user.province: user.province = wca_id_user.province - if wca_id_user.latitude and not user.latitude: - user.latitude = wca_id_user.latitude - if wca_id_user.longitude and not user.longitude: - user.longitude = wca_id_user.longitude + if wca_id_user.email and not user.email: + user.email = wca_id_user.email wca_id_user.key.delete() user.last_login = datetime.datetime.now() user.put() - address = get_secret('FLASK_ADDRESS') + address = get_secret('FRONT_ADDRESS') return redirect(address+'/account' or '/') @bp.route('/logout') diff --git a/frontend/package.json b/frontend/package.json index e57e7a0..f98e640 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -51,4 +51,4 @@ "last 1 safari version" ] } -} +} \ No newline at end of file diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 4b546ba..06a21e4 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -28,6 +28,7 @@ export const GetUser = () => { return user; } + export const signOut = () => { window.location.assign(API_BASE_URL + "/logout"); } diff --git a/frontend/src/components/Types.ts b/frontend/src/components/Types.ts index 3add835..abeb64f 100644 --- a/frontend/src/components/Types.ts +++ b/frontend/src/components/Types.ts @@ -15,4 +15,9 @@ export interface Province { export interface ProfileEditData { province: string; +} + +export interface ChipData { + key: number; + label: string; } \ No newline at end of file diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index 8f3feda..8358658 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -106,6 +106,7 @@ export const resources = { signout: "Sign Out", welcome: "Welcome to Speedcubing Canada account page. \n\n" + "To access it, please sign in with your WCA account.", + roles: "Roles", }, rankings: { title: "Rankings", @@ -206,6 +207,7 @@ export const resources = { signout: "Déconnexion", welcome: "Bienvenue sur la page du compte de Speedcubing Canada. \n" + "Pour y accéder, veuillez vous connecter avec votre compte WCA.", + roles: "Rôles", }, rankings: { title: "Classements", diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 529cf90..23fad82 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -8,11 +8,14 @@ import Grid from '@mui/material/Unstable_Grid2'; import TextField from '@mui/material/TextField'; import Autocomplete from '@mui/material/Autocomplete'; import {DateField} from "@mui/x-date-pickers"; +import Chip from '@mui/material/Chip'; +import Paper from '@mui/material/Paper'; +import {styled} from '@mui/material/styles'; import {AdapterDayjs} from '@mui/x-date-pickers/AdapterDayjs'; import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; import {API_BASE_URL, GetUser, signIn, signOut} from '../components/Api'; import {useState} from "react"; -import {Province} from "../components/Types"; +import {Province, ChipData} from "../components/Types"; import httpClient from "../httpClient"; import dayjs from "dayjs"; @@ -20,7 +23,7 @@ export const Account = () => { const {t} = useTranslation(); const [province, setProvince] = useState(null); - const [dob, setDob] = useState<| null>(null); + const [chipData, setChipData] = useState([]); const provinces: Province[] = [ {label: 'Alberta', id: 'ab', region: 'Prairies'}, @@ -41,18 +44,35 @@ export const Account = () => { const user = GetUser();//TODO: display something else while loading let default_province = {label: 'N/A', id: 'na', region: 'N/A'}; - if (user != null && user.province != null) { - //set province in the combo box - for (let i = 0; i < provinces.length; i++) { - if (provinces[i].id === user.province) { - default_province = provinces[i]; + let default_dob = dayjs('2022-01-01'); + let default_WCAID = ""; + if (user != null) { + if (user.province != null) { + //set province in the combo box + for (let i = 0; i < provinces.length; i++) { + if (provinces[i].id === user.province) { + default_province = provinces[i]; + } } } + if (user.dob != null) { + default_dob = dayjs(user.dob); + } + if (user.roles != null && user.roles.length > 0 && chipData.length === 0) { + let tmpChipData = []; + for (let i = 0; i < user.roles.length; i++) { + tmpChipData.push({key: i, label: user.roles[i]}); + } + setChipData(tmpChipData); + } + if (user.wca_person != null) { + default_WCAID = user.wca_person; + } } - let default_dob = dayjs('2022-01-01'); - if (user != null && user.dob != null) { - default_dob = dayjs(user.dob); - } + + const ListItem = styled('li')(({theme}) => ({ + margin: theme.spacing(0.5), + })); const handleSaveProfile = async () => { @@ -114,19 +134,55 @@ export const Account = () => { disabled id="region" label="Region" - value={province?.region || default_province.region} defaultValue={default_province.region} variant="outlined" /> + + + {t("account.roles")} + + + {chipData.map((data) => { + let color: "default" | "error" | "primary" | "secondary" | "info" | "success" | "warning" | undefined = "default"; + + if (data.label === 'GLOBAL_ADMIN') { + color = "primary"; + } + + return ( + + + + ); + })} + From 658c87e591568781ec75adee9f68998c43e95fd2 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Thu, 3 Aug 2023 16:34:53 -0400 Subject: [PATCH 40/72] start of the ranking page --- back/backend/handlers/province_rankings.py | 3 + frontend/src/components/Api.tsx | 57 ++++++++++++---- frontend/src/components/Provinces.tsx | 26 ++++++++ frontend/src/components/Types.ts | 12 +++- frontend/src/pages/Account.tsx | 24 ++----- frontend/src/pages/Rankings.tsx | 78 ++++++++++++++-------- 6 files changed, 136 insertions(+), 64 deletions(-) create mode 100644 frontend/src/components/Provinces.tsx diff --git a/back/backend/handlers/province_rankings.py b/back/backend/handlers/province_rankings.py index 655b028..3f23d95 100644 --- a/back/backend/handlers/province_rankings.py +++ b/back/backend/handlers/province_rankings.py @@ -10,6 +10,9 @@ bp = Blueprint('province_rankings', __name__) client = ndb.Client() +@bp.route('/test_rankings') # temporary +def test_rankings(): + return [{"name":"Sarah Strong","rank":1,"time":"9.18","url":"https://worldcubeassociation.org/persons/2007STRO01"},{"name":"Alexandre Ondet","rank":2,"time":"9.84","url":"https://worldcubeassociation.org/persons/2017ONDE01"}] @bp.route('/province_rankings///') def province_rankings_table(event_id, province_id, use_average): diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 06a21e4..6fe8606 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -1,34 +1,63 @@ import {useEffect, useState} from "react"; -import {User} from "./Types"; +import {eventID, provinceID, useAverage, User} from "./Types"; import httpClient from "../httpClient"; export const PRODUCTION = - process.env.NODE_ENV === 'production'; + process.env.NODE_ENV === 'production'; export const API_BASE_URL = - process.env.API_BASE_URL || "http://localhost:8083"; + process.env.API_BASE_URL || "http://localhost:8083"; export const signIn = () => { - window.location.assign( API_BASE_URL+ "/login"); + window.location.assign(API_BASE_URL + "/login"); } export const GetUser = () => { const [user, setUser] = useState(null); useEffect(() => { - (async () => { - try { - const resp = await httpClient.get(API_BASE_URL + "/user_info"); - setUser(resp.data); - } catch (error) { - console.log("Not authenticated"); - } - })(); - }, []); + (async () => { + try { + const resp = await httpClient.get(API_BASE_URL + "/user_info"); + setUser(resp.data); + } catch (error) { + console.log("Not authenticated"); + } + })(); + }, []); return user; } - export const signOut = () => { window.location.assign(API_BASE_URL + "/logout"); } + +export const GetRanking = (eventId: eventID | null, provinceId: provinceID | undefined, use_average: boolean) => { + const [ranking, setRanking] = useState(null); + + let use_average_str = "0"; + if (use_average) { + use_average_str = "1"; + } + + useEffect(() => { + (async () => { + try { + if (eventId === null || provinceId === null || use_average === null) { + return null; + } + //const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + provinceId + "/" + use_average_str); + const resp = await httpClient.get(API_BASE_URL + "/test_rankings/"); + + setRanking(resp.data); + } catch (error: any) { + if (error.response.status === 500) { + console.log("Internal server error" + error.response.data); + } else if (error.response.status === 404) { + console.log("Not found" + error.response.data); + } + } + })(); + }, []); + return ranking; +} diff --git a/frontend/src/components/Provinces.tsx b/frontend/src/components/Provinces.tsx new file mode 100644 index 0000000..b64de1e --- /dev/null +++ b/frontend/src/components/Provinces.tsx @@ -0,0 +1,26 @@ +import {Province} from "./Types"; + +const provinces: Province[] = [ + {label: 'Alberta', id: 'ab', region: 'Prairies'}, + {label: 'British Columbia', id: 'bc', region: 'British Columbia'}, + {label: 'Manitoba', id: 'mb', region: 'Prairies'}, + {label: 'New Brunswick', id: 'nb', region: 'Atlantic'}, + {label: 'Newfoundland and Labrador', id: 'nl', region: 'Atlantic'}, + {label: 'Northwest Territories', id: 'nt', region: 'Territories'}, + {label: 'Nova Scotia', id: 'ns', region: 'Atlantic'}, + {label: 'Nunavut', id: 'nu', region: 'Territories'}, + {label: 'Ontario', id: 'on', region: 'Ontario'}, + {label: 'Prince Edward Island', id: 'pe', region: 'Atlantic'}, + {label: 'Quebec', id: 'qc', region: 'Quebec'}, + {label: 'Saskatchewan', id: 'sk', region: 'Prairies'}, + {label: 'Yukon', id: 'yt', region: 'Territories'}, + + ];// TODO: have translations for provinces + +export const GetProvincesWithNA: () => Province[]= () => { + return provinces.concat({label: 'N/A', id: 'na', region: 'N/A'}); +} + +export const GetProvinces = () => { + return provinces; +} \ No newline at end of file diff --git a/frontend/src/components/Types.ts b/frontend/src/components/Types.ts index abeb64f..f50af45 100644 --- a/frontend/src/components/Types.ts +++ b/frontend/src/components/Types.ts @@ -8,7 +8,7 @@ export interface User { } export interface Province { - id: string; + id: provinceID; label: string; region: string; } @@ -20,4 +20,12 @@ export interface ProfileEditData { export interface ChipData { key: number; label: string; -} \ No newline at end of file +} + +export type eventID = "333" | "222" | "444" | "555" | "666" | "777" | "333bf" | "333fm" | "333oh" | "333ft" | "minx" | "pyram" | "skewb" | "sq1" | "clock" | "444bf" | "555bf" | "333mbf" | "333mbo" | "magic" | "mmagic"; + +export type provinceID = "ab" | "bc" | "mb" | "nb" | "nl" | "ns" | "nt" | "nu" | "on" | "pe" | "qc" | "sk" | "yt" | "na"; + +export type useAverage = "1" | "0"; + +export type chipColor = "default" | "error" | "primary" | "secondary" | "info" | "success" | "warning"; \ No newline at end of file diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 23fad82..09c4e16 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -15,9 +15,10 @@ import {AdapterDayjs} from '@mui/x-date-pickers/AdapterDayjs'; import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; import {API_BASE_URL, GetUser, signIn, signOut} from '../components/Api'; import {useState} from "react"; -import {Province, ChipData} from "../components/Types"; +import {Province, ChipData, chipColor} from "../components/Types"; import httpClient from "../httpClient"; import dayjs from "dayjs"; +import {GetProvincesWithNA} from "../components/Provinces"; export const Account = () => { const {t} = useTranslation(); @@ -25,25 +26,10 @@ export const Account = () => { const [province, setProvince] = useState(null); const [chipData, setChipData] = useState([]); - const provinces: Province[] = [ - {label: 'Alberta', id: 'ab', region: 'Prairies'}, - {label: 'British Columbia', id: 'bc', region: 'British Columbia'}, - {label: 'Manitoba', id: 'mb', region: 'Prairies'}, - {label: 'New Brunswick', id: 'nb', region: 'Atlantic'}, - {label: 'Newfoundland and Labrador', id: 'nl', region: 'Atlantic'}, - {label: 'Northwest Territories', id: 'nt', region: 'Territories'}, - {label: 'Nova Scotia', id: 'ns', region: 'Atlantic'}, - {label: 'Nunavut', id: 'nu', region: 'Territories'}, - {label: 'Ontario', id: 'on', region: 'Ontario'}, - {label: 'Prince Edward Island', id: 'pe', region: 'Atlantic'}, - {label: 'Quebec', id: 'qc', region: 'Quebec'}, - {label: 'Saskatchewan', id: 'sk', region: 'Prairies'}, - {label: 'Yukon', id: 'yt', region: 'Territories'}, - {label: 'N/A', id: 'na', region: 'N/A'}, - ];// TODO: have translations for provinces + const provinces: Province[] = GetProvincesWithNA(); const user = GetUser();//TODO: display something else while loading - let default_province = {label: 'N/A', id: 'na', region: 'N/A'}; + let default_province: Province = {label: 'N/A', id: 'na', region: 'N/A'}; let default_dob = dayjs('2022-01-01'); let default_WCAID = ""; if (user != null) { @@ -167,7 +153,7 @@ export const Account = () => { component="ul" > {chipData.map((data) => { - let color: "default" | "error" | "primary" | "secondary" | "info" | "success" | "warning" | undefined = "default"; + let color: chipColor | undefined = "default"; if (data.label === 'GLOBAL_ADMIN') { color = "primary"; diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 843d81e..494e90e 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx @@ -4,39 +4,43 @@ import { Container, Typography, } from "@mui/material"; import * as React from 'react'; -import LinearProgress from '@mui/material/LinearProgress'; +import TextField from "@mui/material/TextField"; +import Autocomplete from "@mui/material/Autocomplete"; +import Stack from '@mui/material/Stack'; +import Switch from '@mui/material/Switch'; +import {eventID, Province, useAverage} from "../components/Types"; +import {GetProvinces} from "../components/Provinces"; +import {useState} from "react"; +import {GetRanking} from "../components/Api"; export const Rankings = () => { const {t} = useTranslation(); - const [progress, setProgress] = React.useState(0); - const [buffer, setBuffer] = React.useState(10); + const provinces: Province[] = GetProvinces(); + const [province, setProvince] = useState(provinces[0]); + const [eventId, setEventId] = useState("333"); + const [useAverage, setUseAverage] = useState(false); - const progressRef = React.useRef(() => { - }); - React.useEffect(() => { - progressRef.current = () => { - if (progress > 100) { - setProgress(0); - setBuffer(10); - } else { - const diff = Math.random() * 10; - const diff2 = Math.random() * 10; - setProgress(progress + diff); - setBuffer(progress + diff + diff2); - } - }; - }); + const switchHandler = (event: { target: { checked: boolean | ((prevState: boolean) => boolean); }; }) => { + setUseAverage(event.target.checked); + console.log(ranking); + }; + + const ranking = GetRanking(eventId, province?.id, useAverage); - React.useEffect(() => { - const timer = setInterval(() => { - progressRef.current(); - }, 500); + const handleProvinceChange = (event: any, newValue: React.SetStateAction) => { + setProvince(newValue); - return () => { - clearInterval(timer); - }; - }, []); + if (province == null) { + // Handle the case when the province value is null. + } else { + // Do something with the ranking data (it will be updated automatically when the hook fetches new data). + console.log(ranking); + if (province.id === "qc") { + console.log("Vive le Québec libre!"); + } + } + }; return ( @@ -58,9 +62,25 @@ export const Rankings = () => { {t("rankings.soon")} - - - + + } + isOptionEqualToValue={(option, value) => option.id === value.id} + /> + + + Single + + Average + ); }; \ No newline at end of file From a432c652192fa0ccb2cdeb046ad5cd054306caac Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Thu, 3 Aug 2023 17:28:51 -0400 Subject: [PATCH 41/72] alert to confirm update of the profile --- frontend/src/locale.ts | 4 ++++ frontend/src/pages/Account.tsx | 38 ++++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index 8358658..0dc318c 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -107,6 +107,8 @@ export const resources = { welcome: "Welcome to Speedcubing Canada account page. \n\n" + "To access it, please sign in with your WCA account.", roles: "Roles", + success: "Your account has been successfully updated.", + error: "There was an error updating your account.", }, rankings: { title: "Rankings", @@ -208,6 +210,8 @@ export const resources = { welcome: "Bienvenue sur la page du compte de Speedcubing Canada. \n" + "Pour y accéder, veuillez vous connecter avec votre compte WCA.", roles: "Rôles", + success: "Votre compte a été mis à jour avec succès.", + error: "Une erreur s'est produite lors de la mise à jour de votre compte.", }, rankings: { title: "Classements", diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 09c4e16..395ae85 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -1,5 +1,6 @@ import {Trans, useTranslation} from "react-i18next"; import { + AlertColor, Box, Container, Typography, } from "@mui/material"; @@ -11,6 +12,9 @@ import {DateField} from "@mui/x-date-pickers"; import Chip from '@mui/material/Chip'; import Paper from '@mui/material/Paper'; import {styled} from '@mui/material/styles'; +import Alert from '@mui/material/Alert'; +import IconButton from '@mui/material/IconButton'; +import CloseIcon from '@mui/icons-material/Close'; import {AdapterDayjs} from '@mui/x-date-pickers/AdapterDayjs'; import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; import {API_BASE_URL, GetUser, signIn, signOut} from '../components/Api'; @@ -26,6 +30,10 @@ export const Account = () => { const [province, setProvince] = useState(null); const [chipData, setChipData] = useState([]); + const [alert, setAlert] = useState(false); + const [alertType, setAlertType] = useState("error"); + const [alertContent, setAlertContent] = useState(''); + const provinces: Province[] = GetProvincesWithNA(); const user = GetUser();//TODO: display something else while loading @@ -66,6 +74,15 @@ export const Account = () => { const resp = await httpClient.post(API_BASE_URL + "/edit", { province: province ? province.id : 'na', }); + if (resp.data.success === true) { + setAlertContent(t("account.success")); + setAlertType("success"); + setAlert(true); + } else { + setAlertContent(t("account.error")); + setAlertType("error"); + setAlert(true); + } } catch (error: any) { if (error.response.status === 401) { console.log("Invalid credentials" + error.response.status); @@ -120,7 +137,7 @@ export const Account = () => { disabled id="region" label="Region" - defaultValue={default_province.region} + value={province?.region || default_province.region} variant="outlined" /> { - + {alert ? + { + setAlert(false); + }} + > + + + } + variant="outlined" severity={alertType}> + {alertContent} + + : <>} ) : ( From e4dbc4904c3d7240e57461b77e934c5b186bdf08 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Thu, 3 Aug 2023 22:29:48 -0400 Subject: [PATCH 42/72] update readme and .env.dev --- .env.dev | 7 ++++--- README.md | 44 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/.env.dev b/.env.dev index 4b94f34..ed7638d 100644 --- a/.env.dev +++ b/.env.dev @@ -1,9 +1,10 @@ NODE_LOCAL_PORT=2003 NODE_DOCKER_PORT=2003 -FLASK_LOCAL_PORT=8000 -FLASK_DOCKER_PORT=8000 -FLASK_ADDRESS=http://localhost:8000 +FLASK_LOCAL_PORT=8083 +FLASK_DOCKER_PORT=8083 +FRONT_ADDRESS=http://localhost +API_BASE_URL=http://localhost:8003 NODE_ENV=DEV ENV=DEV diff --git a/README.md b/README.md index 1be4985..726766a 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,21 @@ # speedcubingcanada.org +## Running the app locally +In order to run the app locally, you will need three independant services running at the same time: + - The frontend + - The backend + - The datastore emulator + +The quickest way to get all three running is to use docker-compose for the frontend and backend, and the gcloud client for the datastore emulator. +Right now, the python part is commented in the docker-compose file, so you can either uncomment it or run it locally (useful if you want to use a debugger for example). ## Frontend - -First, please move into the `frontend` directory. - -In the project directory, you can run: +First option, in the project root directory, you can run: ### `docker-compose up` +Runs de app and an nginx server. The app is available at [http://localhost/](http://localhost/). - -Runs de app and a development mysql database and an nginx server. The app is available at [http://localhost/](http://localhost/). +Second option: +Move into the `frontend` directory. ### `npm start` @@ -38,10 +44,34 @@ See the section about [deployment](https://facebook.github.io/create-react-app/d Currently, this step is handled automatically by an AWS build pipeline. +## Backend +As mentioned above you can either use docker-compose or run the app locally. + +To run the app locally, you will need to move the `back` folder first and install the dependencies (I recommend using a virtual environment): + +```shell +cd back +pip install -r requirements.txt +``` + +Then you can run the flask app with: +```shell +gunicorn -b :8083 backend:app +``` +If you use pycharm, you can also create a flask configuration and run it from there (keep in mind the target folder is `back/backend`. + +## Datastore emulator + +```shell +gcloud beta emulators datastore start +``` + ## Deployment -To deploy run the command: +To deploy run the command (make sure you built the frontend first): ```sh gcloud app deploy frontend/app.yaml dispatch.yaml back/api.yaml ``` + +You can also deploy the backend and frontend separately, but the first time make sure you either deploy everything at once or the app and then the dispatch and the api together, because the services need to be created first. From 7e7dead68d15a10a5e9a46cba338cabab527cf33 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Thu, 3 Aug 2023 23:32:53 -0400 Subject: [PATCH 43/72] loading screen on profile --- frontend/src/components/Api.tsx | 16 -- frontend/src/pages/Account.tsx | 295 +++++++++++++++++--------------- 2 files changed, 158 insertions(+), 153 deletions(-) diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 6fe8606..47256e2 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -12,22 +12,6 @@ export const signIn = () => { window.location.assign(API_BASE_URL + "/login"); } -export const GetUser = () => { - const [user, setUser] = useState(null); - - useEffect(() => { - (async () => { - try { - const resp = await httpClient.get(API_BASE_URL + "/user_info"); - setUser(resp.data); - } catch (error) { - console.log("Not authenticated"); - } - })(); - }, []); - return user; -} - export const signOut = () => { window.location.assign(API_BASE_URL + "/logout"); } diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 395ae85..a3cca4e 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -15,11 +15,12 @@ import {styled} from '@mui/material/styles'; import Alert from '@mui/material/Alert'; import IconButton from '@mui/material/IconButton'; import CloseIcon from '@mui/icons-material/Close'; +import CircularProgress from '@mui/material/CircularProgress'; import {AdapterDayjs} from '@mui/x-date-pickers/AdapterDayjs'; import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; -import {API_BASE_URL, GetUser, signIn, signOut} from '../components/Api'; -import {useState} from "react"; -import {Province, ChipData, chipColor} from "../components/Types"; +import {API_BASE_URL, signIn, signOut} from '../components/Api'; +import {useEffect, useState} from "react"; +import {Province, ChipData, chipColor, User} from "../components/Types"; import httpClient from "../httpClient"; import dayjs from "dayjs"; import {GetProvincesWithNA} from "../components/Provinces"; @@ -36,7 +37,21 @@ export const Account = () => { const provinces: Province[] = GetProvincesWithNA(); - const user = GetUser();//TODO: display something else while loading + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true) + + useEffect(() => { + (async () => { + try { + const resp = await httpClient.get(API_BASE_URL + "/user_info"); + setUser(resp.data); + } catch (error) { + console.log("Not authenticated"); + } + setLoading(false); + })(); + }, []); + let default_province: Province = {label: 'N/A', id: 'na', region: 'N/A'}; let default_dob = dayjs('2022-01-01'); let default_WCAID = ""; @@ -94,6 +109,11 @@ export const Account = () => { } }; + const handleSignIn = async () => { + setLoading(true); + signIn(); + } + return ( @@ -101,149 +121,150 @@ export const Account = () => { {t("account.title")} - {user != null ? ( -
- - - {t("account.hi")}{user.name}! - - - { - setProvince(newValue); - if (newValue == null) { - } else if (newValue.id === "qc") { - console.log("Vive le Québec libre!"); - } - }} - renderInput={(params) => } - isOptionEqualToValue={(option, value) => option.id === value.id} - /> - - {t("account.policy")} - - - - - + : user != null ? ( +
+ + + {t("account.hi")}{user.name}! + + + { + setProvince(newValue); + if (newValue == null) { + } else if (newValue.id === "qc") { + console.log("Vive le Québec libre!"); + } + }} + renderInput={(params) => } + isOptionEqualToValue={(option, value) => option.id === value.id} + /> + + {t("account.policy")} + + - - - {t("account.roles")} - - - {chipData.map((data) => { - let color: chipColor | undefined = "default"; - - if (data.label === 'GLOBAL_ADMIN') { - color = "primary"; - } - - return ( - - - - ); - })} - - - - - - + if (data.label === 'GLOBAL_ADMIN') { + color = "primary"; + } + + return ( + + + + ); + })} + + + + + + + + + + - + {alert ? + { + setAlert(false); + }} + > + + + } + variant="outlined" severity={alertType}> + {alertContent} + + : <>} + +
+ ) : ( +
+ + + {t("account.welcome")} + - - - {alert ? - { - setAlert(false); - }} - > - - - } - variant="outlined" severity={alertType}> - {alertContent} - - : <>} - -
- ) : ( -
- - - {t("account.welcome")} - - - -
- )} +
+
+ )}
); From 539b002e7a9cd537d515f2586fca4b861b93cc86 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Fri, 4 Aug 2023 02:28:58 -0400 Subject: [PATCH 44/72] translation everywhere, even in Autocomplete :) --- back/backend/handlers/admin/provinces.py | 2 +- frontend/src/components/Api.tsx | 29 -- frontend/src/components/Provinces.tsx | 28 +- frontend/src/components/Types.ts | 3 + frontend/src/locale.ts | 507 +++++++++++++---------- frontend/src/pages/Account.tsx | 11 +- frontend/src/pages/Rankings.tsx | 67 ++- 7 files changed, 371 insertions(+), 276 deletions(-) diff --git a/back/backend/handlers/admin/provinces.py b/back/backend/handlers/admin/provinces.py index 57662fb..6961e25 100644 --- a/back/backend/handlers/admin/provinces.py +++ b/back/backend/handlers/admin/provinces.py @@ -42,7 +42,7 @@ def update_provinces(): ONTARIO = MakeRegion('on', 'Ontario', 'Ontario', all_regions, futures) PRAIRIES = MakeRegion('pr', 'Prairies', 'Prairies', all_regions, futures) BRITISH_COLUMBIA = MakeRegion('bc', 'British Columbia', 'British Columbia', all_regions, futures) - TERRITORIES = MakeRegion('nw', 'Territories', 'Territories', all_regions, futures) + TERRITORIES = MakeRegion('te', 'Territories', 'Territories', all_regions, futures) for future in futures: diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 47256e2..7e5344e 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -16,32 +16,3 @@ export const signOut = () => { window.location.assign(API_BASE_URL + "/logout"); } -export const GetRanking = (eventId: eventID | null, provinceId: provinceID | undefined, use_average: boolean) => { - const [ranking, setRanking] = useState(null); - - let use_average_str = "0"; - if (use_average) { - use_average_str = "1"; - } - - useEffect(() => { - (async () => { - try { - if (eventId === null || provinceId === null || use_average === null) { - return null; - } - //const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + provinceId + "/" + use_average_str); - const resp = await httpClient.get(API_BASE_URL + "/test_rankings/"); - - setRanking(resp.data); - } catch (error: any) { - if (error.response.status === 500) { - console.log("Internal server error" + error.response.data); - } else if (error.response.status === 404) { - console.log("Not found" + error.response.data); - } - } - })(); - }, []); - return ranking; -} diff --git a/frontend/src/components/Provinces.tsx b/frontend/src/components/Provinces.tsx index b64de1e..c79f2bf 100644 --- a/frontend/src/components/Provinces.tsx +++ b/frontend/src/components/Provinces.tsx @@ -1,24 +1,24 @@ import {Province} from "./Types"; const provinces: Province[] = [ - {label: 'Alberta', id: 'ab', region: 'Prairies'}, - {label: 'British Columbia', id: 'bc', region: 'British Columbia'}, - {label: 'Manitoba', id: 'mb', region: 'Prairies'}, - {label: 'New Brunswick', id: 'nb', region: 'Atlantic'}, - {label: 'Newfoundland and Labrador', id: 'nl', region: 'Atlantic'}, - {label: 'Northwest Territories', id: 'nt', region: 'Territories'}, - {label: 'Nova Scotia', id: 'ns', region: 'Atlantic'}, - {label: 'Nunavut', id: 'nu', region: 'Territories'}, - {label: 'Ontario', id: 'on', region: 'Ontario'}, - {label: 'Prince Edward Island', id: 'pe', region: 'Atlantic'}, - {label: 'Quebec', id: 'qc', region: 'Quebec'}, - {label: 'Saskatchewan', id: 'sk', region: 'Prairies'}, - {label: 'Yukon', id: 'yt', region: 'Territories'}, + {label: 'Alberta', id: 'ab', region: 'Prairies', region_id: 'pr'}, + {label: 'British Columbia', id: 'bc', region: 'British Columbia', region_id: 'bc'}, + {label: 'Manitoba', id: 'mb', region: 'Prairies', region_id: 'pr'}, + {label: 'New Brunswick', id: 'nb', region: 'Atlantic', region_id: 'at'}, + {label: 'Newfoundland and Labrador', id: 'nl', region: 'Atlantic', region_id: 'at'}, + {label: 'Northwest Territories', id: 'nt', region: 'Territories', region_id: 'te'}, + {label: 'Nova Scotia', id: 'ns', region: 'Atlantic', region_id: 'at'}, + {label: 'Nunavut', id: 'nu', region: 'Territories', region_id: 'te'}, + {label: 'Ontario', id: 'on', region: 'Ontario', region_id: 'on'}, + {label: 'Prince Edward Island', id: 'pe', region: 'Atlantic', region_id: 'at'}, + {label: 'Quebec', id: 'qc', region: 'Quebec', region_id: 'qc'}, + {label: 'Saskatchewan', id: 'sk', region: 'Prairies', region_id: 'pr'}, + {label: 'Yukon', id: 'yt', region: 'Territories', region_id: 'te'}, ];// TODO: have translations for provinces export const GetProvincesWithNA: () => Province[]= () => { - return provinces.concat({label: 'N/A', id: 'na', region: 'N/A'}); + return provinces.concat({label: 'N/A', id: 'na', region: 'N/A', region_id: 'na'}); } export const GetProvinces = () => { diff --git a/frontend/src/components/Types.ts b/frontend/src/components/Types.ts index f50af45..3a6a641 100644 --- a/frontend/src/components/Types.ts +++ b/frontend/src/components/Types.ts @@ -11,6 +11,7 @@ export interface Province { id: provinceID; label: string; region: string; + region_id: regionID; } export interface ProfileEditData { @@ -26,6 +27,8 @@ export type eventID = "333" | "222" | "444" | "555" | "666" | "777" | "333bf" | export type provinceID = "ab" | "bc" | "mb" | "nb" | "nl" | "ns" | "nt" | "nu" | "on" | "pe" | "qc" | "sk" | "yt" | "na"; +export type regionID = "at" | "qc" | "on" | "pr" | "bc" | "te" | "na"; + export type useAverage = "1" | "0"; export type chipColor = "default" | "error" | "primary" | "secondary" | "info" | "success" | "warning"; \ No newline at end of file diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index 0dc318c..e6b59b5 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -1,222 +1,313 @@ -export const LOCALES = { en: "en", fr: "fr" } as const; -export const INVERTED_LOCALES = { en: "fr", fr: "en" } as const; -export const LOCALE_TO_LANGUAGE = { en: "English", fr: "Français" } as const; +export const LOCALES = {en: "en", fr: "fr"} as const; +export const INVERTED_LOCALES = {en: "fr", fr: "en"} as const; +export const LOCALE_TO_LANGUAGE = {en: "English", fr: "Français"} as const; export const DEFAULT_LOCALE = LOCALES.en; export const SAVED_LOCALE = "savedLocale"; const SUPPORTED_LOCALES = new Set(Object.values(LOCALES)); export function getLocaleOrFallback(givenLocale: string): "en" | "fr" { - return SUPPORTED_LOCALES.has(givenLocale) - ? (givenLocale as "en" | "fr") - : DEFAULT_LOCALE; + return SUPPORTED_LOCALES.has(givenLocale) + ? (givenLocale as "en" | "fr") + : DEFAULT_LOCALE; } export const resources = { - [LOCALES.en]: { - translation: { - main: { - sc: "Speedcubing Canada", - mailingList: "Mailing list", - facebook: "Facebook", - instagram: "Instagram", - twitter: "Twitter", - }, - routes: { - home: "Home", - about: "About", - organization: "Organization", - faq: "FAQ", - account: "Account", - rankings: "Rankings", - }, - about: { - title: "About", - body: - "Speedcubing Canada exists to promote and support the speedcubing community in Canada. Speedcubing is the act of solving twisty puzzles, such as the Rubik's Cube, as quickly as possible.\n\n" + - "Globally, official speedcubing competitions are governed by the World Cube Association (WCA). Speedcubing Canada is Canada’s official WCA regional organization. Since the WCA was founded in 2004, over 100,000 individuals from more than 140 countries have competed in official WCA competitions, including over 4,700 competitors representing the country of Canada. Almost 200 official WCA competitions have been held in Canada across seven provinces.\n\n" + - "Speedcubing Canada contributes to the WCA’s mission to “have more competitions in more countries with more people and more fun, under fair and equal conditions” by running more competitions in Canada that are fun, fair and equitable. Speedcubing Canada also works to promote speedcubing in Canada by raising awareness for the sport and the speedcubing community.\n\n" + - "The speedcubing community is a positive and friendly environment for people of all ages, including youth, students, adults and families. All speedcubing activities globally are run by volunteers. The speedcubing community provides opportunities for competitors (known as “speedcubers”) and other members to engage in a positive, competitive community, build interpersonal and leadership skills, and achieve personal success by setting official national, continental and world records.", - }, - history: { - title: "History", - body1: - "Canada plays an important part in speedcubing history as host to one of the world’s earliest World Championships, World Rubik’s Games Championship 2003, held at the Ontario Science Centre in Toronto, Ontario.\n\n", - quote: - "“In 2003, Ron [van Bruchem] managed to get in touch with Dan Gosbee to organize a speedcubing World Championship in Toronto, Canada. The team managed to secure sponsors and get extensive media coverage for the event. With 89 competitors in total alongside a team of competition staff, the World Rubik’s Games Championship 2003 (WC2003) took place and was a major success, marking an incredible milestone since WC1982 [the world’s first major speedcubing competition].” (World Cube Association)", - body2: - "\nFollowing the success of WC2003 and several subsequent competitions, the World Cube Association was founded in 2004.\n\n" + - "Speedcubing competitions returned to Canada with Canadian Open 2007. Around this time, canadianCUBING was established and would become Canada’s first WCA regional organization. Through the hard work of dedicated volunteers, canadianCUBING led the growth of speedcubing in Canada for many years, holding competitions across the country, including in Vancouver, Calgary, Toronto, Ottawa, Montreal, Halifax and more.\n\n" + - "In 2021, Speedcubing Canada was established as a not-for-profit organization and Canada’s new speedcubing organization, signalling further growth for speedcubing in Canada. Notably, Speedcubing Canada served to host the inaugural Rubik’s WCA North American Championship in Toronto, Ontario in July 2022.", - }, - comps: { - title: "Competitions", - body: "Find all upcoming competitions in Canada on the World Cube Association website.", - cta: "See All", - }, - organization: { - title: "Organization", - }, - directors: { - title: "Directors", - boardMember: "Board Member", - }, - documents: { - title: "Documents", - byLaws: "By-laws", - minutes: "Meeting minutes", - policies: "Policies", - corporate: "Corporate documents", - }, - faq: { - title: "Frequently Asked Questions", - "when-is-the-next-wca-competition-in-my-area": { - q: "When is the next WCA competition in my area?", - a: "You can find a list of all upcoming competitions in Canada on the World Cube Association website. Follow Speedcubing Canada on social media and join our mailing list to be the first to know when competitions are announced!", + [LOCALES.en]: { + translation: { + main: { + sc: "Speedcubing Canada", + mailingList: "Mailing list", + facebook: "Facebook", + instagram: "Instagram", + twitter: "Twitter", + }, + routes: { + home: "Home", + about: "About", + organization: "Organization", + faq: "FAQ", + account: "Account", + rankings: "Rankings", + }, + about: { + title: "About", + body: + "Speedcubing Canada exists to promote and support the speedcubing community in Canada. Speedcubing is the act of solving twisty puzzles, such as the Rubik's Cube, as quickly as possible.\n\n" + + "Globally, official speedcubing competitions are governed by the World Cube Association (WCA). Speedcubing Canada is Canada’s official WCA regional organization. Since the WCA was founded in 2004, over 100,000 individuals from more than 140 countries have competed in official WCA competitions, including over 4,700 competitors representing the country of Canada. Almost 200 official WCA competitions have been held in Canada across seven provinces.\n\n" + + "Speedcubing Canada contributes to the WCA’s mission to “have more competitions in more countries with more people and more fun, under fair and equal conditions” by running more competitions in Canada that are fun, fair and equitable. Speedcubing Canada also works to promote speedcubing in Canada by raising awareness for the sport and the speedcubing community.\n\n" + + "The speedcubing community is a positive and friendly environment for people of all ages, including youth, students, adults and families. All speedcubing activities globally are run by volunteers. The speedcubing community provides opportunities for competitors (known as “speedcubers”) and other members to engage in a positive, competitive community, build interpersonal and leadership skills, and achieve personal success by setting official national, continental and world records.", + }, + history: { + title: "History", + body1: + "Canada plays an important part in speedcubing history as host to one of the world’s earliest World Championships, World Rubik’s Games Championship 2003, held at the Ontario Science Centre in Toronto, Ontario.\n\n", + quote: + "“In 2003, Ron [van Bruchem] managed to get in touch with Dan Gosbee to organize a speedcubing World Championship in Toronto, Canada. The team managed to secure sponsors and get extensive media coverage for the event. With 89 competitors in total alongside a team of competition staff, the World Rubik’s Games Championship 2003 (WC2003) took place and was a major success, marking an incredible milestone since WC1982 [the world’s first major speedcubing competition].” (World Cube Association)", + body2: + "\nFollowing the success of WC2003 and several subsequent competitions, the World Cube Association was founded in 2004.\n\n" + + "Speedcubing competitions returned to Canada with Canadian Open 2007. Around this time, canadianCUBING was established and would become Canada’s first WCA regional organization. Through the hard work of dedicated volunteers, canadianCUBING led the growth of speedcubing in Canada for many years, holding competitions across the country, including in Vancouver, Calgary, Toronto, Ottawa, Montreal, Halifax and more.\n\n" + + "In 2021, Speedcubing Canada was established as a not-for-profit organization and Canada’s new speedcubing organization, signalling further growth for speedcubing in Canada. Notably, Speedcubing Canada served to host the inaugural Rubik’s WCA North American Championship in Toronto, Ontario in July 2022.", + }, + comps: { + title: "Competitions", + body: "Find all upcoming competitions in Canada on the World Cube Association website.", + cta: "See All", + }, + organization: { + title: "Organization", + }, + directors: { + title: "Directors", + boardMember: "Board Member", + }, + documents: { + title: "Documents", + byLaws: "By-laws", + minutes: "Meeting minutes", + policies: "Policies", + corporate: "Corporate documents", + }, + faq: { + title: "Frequently Asked Questions", + "when-is-the-next-wca-competition-in-my-area": { + q: "When is the next WCA competition in my area?", + a: "You can find a list of all upcoming competitions in Canada on the World Cube Association website. Follow Speedcubing Canada on social media and join our mailing list to be the first to know when competitions are announced!", + }, + "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { + q: "I’m going to my first WCA competition! What do I need to know?", + a: "We are so excited for you to experience your first competition! Please familiarize yourself with the WCA Regulations before the competition. We also have two videos that we recommend watching before the competition: What to expect at your first competition and The basics of an official WCA competition.", + }, + "who-are-the-wca-delegates-in-my-area": { + q: "Who are the WCA Delegates in my area?", + a: "You can find a list of all WCA Delegates on the World Cube Association website.", + }, + "how-can-i-volunteer-with-speedcubing-canada": { + q: "How can I volunteer with Speedcubing Canada?", + a: "Speedcubing Canada and the World Cube Association are 100% volunteer-run organizations. We are always looking for volunteers to help our competitions run smoothly and welcome competitors, friends, family and community members to jump in and help. To learn more about volunteering at a competition, contact the organizer or WCA Delegate in advance or at the competition.", + }, + "why-the-change-from-canadiancubing-to-speedcubing-canada": { + q: "Why the change from canadianCUBING to Speedcubing Canada?", + a: + "After many years of running canadianCUBING as a grassroots community organization, the need emerged for a regional speedcubing organization that is officially registered as a not-for-profit, in order to meet the growing needs of the speedcubing community in Canada. Due to busy schedules and other factors, the canadianCUBING team was not structured in a way that enabled the organization to register as a not-for-profit. As a result, Speedcubing Canada was established as a not-for-profit organization and Canada’s new speedcubing organization in 2021, with a new Board of Directors.\n\n" + + "The speedcubing community in Canada owes so much of its growth to canadianCUBING, and we are thankful to the many volunteers who invested into the community through canadianCUBING over many years. We are looking forward to the future of speedcubing in Canada!", + }, + "affiliated-with-the-wca": { + q: "Is Speedcubing Canada affiliated with the World Cube Association?", + a: "Speedcubing Canada operates independently of the World Cube Association, with a separate Board of Directors. Speedcubing Canada is recognized as Canada’s official WCA regional organization.", + }, + }, + provinces: { + ab: "Alberta", + bc: "British Columbia", + mb: "Manitoba", + nb: "New Brunswick", + nl: "Newfoundland and Labrador", + ns: "Nova Scotia", + nt: "Northwest Territories", + nu: "Nunavut", + on: "Ontario", + pe: "Prince Edward Island", + qc: "Quebec", + sk: "Saskatchewan", + yt: "Yukon", + na: "N/A", + }, + province_with_pronouns: { + ab: "Alberta", + bc: "British Columbia", + mb: "Manitoba", + nb: "New Brunswick", + nl: "Newfoundland and Labrador", + ns: "Nova Scotia", + nt: "Northwest Territories", + nu: "Nunavut", + on: "Ontario", + pe: "Prince Edward Island", + qc: "Quebec", + sk: "Saskatchewan", + yt: "Yukon", + na: "N/A", + }, + regions: { + at: "Atlantic", + bc: "British Columbia", + qc: "Quebec", + on: "Ontario", + pr: "Prairies", + te: "Territories", + na: "N/A", + }, + account: { + title: "Account", + hi: "Hi, ", + policy: "Province determine your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select \"N/A\".", + save: "Save", + signin: "Sign in with the WCA", + signout: "Sign Out", + welcome: "Welcome to Speedcubing Canada account page. \n\n" + + "To access it, please sign in with your WCA account.", + roles: "Roles", + success: "Your account has been successfully updated.", + error: "There was an error updating your account.", + dob: "Date of Birth", + region: "Region", + }, + rankings: { + title: "Rankings", + soon: "Rankings Coming Soon", + single: "Single", + average: "Average", + rankfor: "Rankings for", + } }, - "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { - q: "I’m going to my first WCA competition! What do I need to know?", - a: "We are so excited for you to experience your first competition! Please familiarize yourself with the WCA Regulations before the competition. We also have two videos that we recommend watching before the competition: What to expect at your first competition and The basics of an official WCA competition.", - }, - "who-are-the-wca-delegates-in-my-area": { - q: "Who are the WCA Delegates in my area?", - a: "You can find a list of all WCA Delegates on the World Cube Association website.", - }, - "how-can-i-volunteer-with-speedcubing-canada": { - q: "How can I volunteer with Speedcubing Canada?", - a: "Speedcubing Canada and the World Cube Association are 100% volunteer-run organizations. We are always looking for volunteers to help our competitions run smoothly and welcome competitors, friends, family and community members to jump in and help. To learn more about volunteering at a competition, contact the organizer or WCA Delegate in advance or at the competition.", - }, - "why-the-change-from-canadiancubing-to-speedcubing-canada": { - q: "Why the change from canadianCUBING to Speedcubing Canada?", - a: - "After many years of running canadianCUBING as a grassroots community organization, the need emerged for a regional speedcubing organization that is officially registered as a not-for-profit, in order to meet the growing needs of the speedcubing community in Canada. Due to busy schedules and other factors, the canadianCUBING team was not structured in a way that enabled the organization to register as a not-for-profit. As a result, Speedcubing Canada was established as a not-for-profit organization and Canada’s new speedcubing organization in 2021, with a new Board of Directors.\n\n" + - "The speedcubing community in Canada owes so much of its growth to canadianCUBING, and we are thankful to the many volunteers who invested into the community through canadianCUBING over many years. We are looking forward to the future of speedcubing in Canada!", - }, - "affiliated-with-the-wca": { - q: "Is Speedcubing Canada affiliated with the World Cube Association?", - a: "Speedcubing Canada operates independently of the World Cube Association, with a separate Board of Directors. Speedcubing Canada is recognized as Canada’s official WCA regional organization.", - }, - }, - account: { - title: "Account", - hi: "Hi, ", - policy: "Province determine your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select \"N/A\".", - save: "Save", - signin: "Sign in with the WCA", - signout: "Sign Out", - welcome: "Welcome to Speedcubing Canada account page. \n\n" + - "To access it, please sign in with your WCA account.", - roles: "Roles", - success: "Your account has been successfully updated.", - error: "There was an error updating your account.", - }, - rankings: { - title: "Rankings", - soon: "Rankings Coming Soon", - } }, - }, - [LOCALES.fr]: { - translation: { - main: { - sc: "Speedcubing Canada", - mailingList: "Liste de diffusion", - facebook: "Facebook", - instagram: "Instagram", - twitter: "Twitter", - }, - routes: { - home: "Accueil", - about: "À propos", - organization: "Organisation", - faq: "FAQ", - account: "Compte", - rankings: "Classement", - }, - about: { - title: "À propos", - body: - "Speedcubing Canada existe pour promouvoir et aider la communauté du speedcubing au Canada. Le speedcubing consiste à résoudre des casse-tête rotatifs, comme le Rubik's Cube, le plus rapidement possible.\n\n" + - "À l'échelle mondiale, les compétitions officielles de speedcubing sont régies par la World Cube Association (WCA). Speedcubing Canada est l'organisation régionale officielle de la WCA au Canada. Depuis la fondation de la WCA en 2004, plus de 100 000 personnes de plus de 140 pays ont participé aux compétitions officielles de la WCA, dont plus de 4 700 compétiteurs représentant le Canada. Près de 200 compétitions officielles de la WCA ont été organisées au Canada dans sept provinces.\n\n" + - "Speedcubing Canada contribue à la mission de la WCA qui est \"d'avoir plus de compétitions dans plus de pays avec plus de personnes et d'amusement, dans des conditions égales et équitables\" en organisant plus de compétitions au Canada qui sont amusantes, justes et équitables. Speedcubing Canada travaille également à la promotion du speedcubing au Canada en sensibilisant le public à ce sport et à la communauté du speedcubing.\n\n" + - "La communauté du speedcubing est un environnement positif et amical pour les personnes de tout âge, y compris les plus jeunes, les étudiants, les adultes et les familles. Toutes les activités de speedcubing dans le monde sont gérées par des bénévoles. La communauté du speedcubing offre aux compétiteurs (appelés \" speedcubeurs \") et aux autres membres la possibilité de s'engager dans une communauté positive et compétitive, de développer des compétences interpersonnelles et de leadership, et d'atteindre la réussite personnelle en établissant des records officiels nationaux, continentaux et mondiaux.", - }, - history: { - title: "Historique", - body1: - "Le Canada a joué un rôle important dans l'histoire du speedcubing en accueillant l'un des premiers championnats mondiaux, le World Rubik's Games Championship 2003, qui s'est tenu au Centre des Sciences de l'Ontario à Toronto, en Ontario.\n\n", - quote: - "\"En 2003, Ron [van Bruchem] a réussi à entrer en contact avec Dan Gosbee pour organiser un championnat du monde de speedcubing à Toronto, au Canada. L'équipe a réussi à trouver des sponsors et à obtenir une large couverture médiatique pour l'événement. Avec 89 concurrents au total aux côtés d'une équipe en charge d'aider au bon déroulement de la compétition, le Championnat du monde des jeux de Rubik 2003 (WC2003) a eu lieu et a été un succès majeur, marquant une étape incroyable depuis le WC1982 [la première grande compétition de speedcubing au monde].\" (World Cube Association)", - body2: - "\nSuite au succès des Championnats du Monde 2003 et de plusieurs compétitions ultérieures, la World Cube Association a été fondée en 2004.\n\n" + - "Les compétitions de speedcubing sont revenues au Canada avec le Canadian Open 2007. À peu près à la même époque, canadianCUBING a été créé et est devenu la première organisation régionale de la WCA au Canada. Grâce au travail acharné de bénévoles dévoués, canadianCUBING a mené la croissance du speedcubing au Canada pendant de nombreuses années, organisant des compétitions à travers le pays, notamment à Vancouver, Calgary, Toronto, Ottawa, Montréal, Halifax et plus encore.\n\n" + - "En 2021, Speedcubing Canada a été créé en tant qu'organisme à but non lucratif et nouvelle organisation de speedcubing au Canada, signalant une nouvelle croissance pour le speedcubing au Canada. Notamment, Speedcubing Canada a servi à accueillir le premier championnat nord-américain Rubik's WCA à Toronto, en Ontario, en juillet 2022.", - }, - comps: { - title: "Compétitions", - body: "Trouvez toutes les compétitions à venir au Canada sur le site Web de la World Cube Association.", - cta: "Voir tout", - }, - organization: { - title: "Organisation", - }, - directors: { - title: "Directeurs", - boardMember: "Membre du bureau", - }, - documents: { - title: "Documents", - byLaws: "Règlement intérieur", - minutes: "Compte rendu de réunion", - policies: "Politiques", - corporate: "Documents administratifs", - }, - faq: { - title: "Foire Aux Questions", - "when-is-the-next-wca-competition-in-my-area": { - q: "Quand aura lieu la prochaine compétition de la WCA dans ma région ?", - a: "Vous pouvez trouver une liste de toutes les compétitions à venir au Canada sur le site Web de la World Cube Association. Suivez Speedcubing Canada sur les réseaux sociaux et inscrivez-vous sur notre liste de diffusion pour être les premiers à être informés de l'annonce des compétitions !", - }, - "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { - q: "Je vais participer à ma première compétition de la WCA ! Que dois-je savoir ?", - a: "Nous sommes très enthousiastes à l'idée de vous voir participer à votre première compétition ! Familiarisez-vous avec le règlement de la WCA avant la compétition. Nous avons également deux vidéos que nous recommandons de regarder avant la compétition : À quoi s'attendre lors de votre première compétition et Les bases d'une compétition officielle de la WCA.", - }, - "who-are-the-wca-delegates-in-my-area": { - q: "Qui sont les délégués de la WCA dans ma région ?", - a: "Vous pouvez trouver une liste de tous les Délégués de la WCA sur le site de la World Cube Association.", - }, - "how-can-i-volunteer-with-speedcubing-canada": { - q: "Comment puis-je devenir bénévole pour Speedcubing Canada ?", - a: "Speedcubing Canada et la World Cube Association sont des organisations gérées à 100% par des bénévoles. Nous sommes toujours à la recherche de bénévoles pour aider au bon déroulement de nos compétitions et nous invitons les compétiteurs, les amis, les familles et les membres de la communauté à se joindre à nous et à nous aider. Pour en savoir plus sur le bénévolat lors d'une compétition, contactez l'organisateur ou le délégué de la WCA à l'avance ou lors de la compétition.", - }, - "why-the-change-from-canadiancubing-to-speedcubing-canada": { - q: "Pourquoi le changement de canadianCUBING à Speedcubing Canada ?", - a: - "Après de nombreuses années de fonctionnement de canadianCUBING en tant qu'organisation communautaire de proximité, le besoin est apparu d'une organisation régionale de speedcubing officiellement enregistrée en tant qu'organisme à but non lucratif, afin de répondre aux besoins croissants de la communauté du speedcubing au Canada. En raison d'un emploi du temps chargé et d'autres facteurs, l'équipe de canadianCUBING n'était pas structurée de manière à permettre à l'organisation de s'enregistrer en tant qu'organisme à but non lucratif. Par conséquent, Speedcubing Canada a été établi en tant qu'organisation à but non lucratif et nouvelle organisation de speedcubing au Canada en 2021, avec un nouveau conseil d'administration.\n\n" + - "La communauté du speedcubing au Canada doit une grande partie de sa croissance à canadianCUBING, et nous sommes reconnaissants aux nombreux bénévoles qui ont investi dans la communauté à travers canadianCUBING pendant de nombreuses années. Nous nous réjouissons de l'avenir du speedcubing au Canada !", - }, - "affiliated-with-the-wca": { - q: "Speedcubing Canada est-elle affiliée à la World Cube Association ?", - a: "Speedcubing Canada fonctionne indépendamment de la World Cube Association, avec un conseil d'administration distinct. Speedcubing Canada est reconnue comme l'organisation régionale officielle du Canada par la WCA.", + [LOCALES.fr]: { + translation: { + main: { + sc: "Speedcubing Canada", + mailingList: "Liste de diffusion", + facebook: "Facebook", + instagram: "Instagram", + twitter: "Twitter", + }, + routes: { + home: "Accueil", + about: "À propos", + organization: "Organisation", + faq: "FAQ", + account: "Compte", + rankings: "Classement", + }, + about: { + title: "À propos", + body: + "Speedcubing Canada existe pour promouvoir et aider la communauté du speedcubing au Canada. Le speedcubing consiste à résoudre des casse-tête rotatifs, comme le Rubik's Cube, le plus rapidement possible.\n\n" + + "À l'échelle mondiale, les compétitions officielles de speedcubing sont régies par la World Cube Association (WCA). Speedcubing Canada est l'organisation régionale officielle de la WCA au Canada. Depuis la fondation de la WCA en 2004, plus de 100 000 personnes de plus de 140 pays ont participé aux compétitions officielles de la WCA, dont plus de 4 700 compétiteurs représentant le Canada. Près de 200 compétitions officielles de la WCA ont été organisées au Canada dans sept provinces.\n\n" + + "Speedcubing Canada contribue à la mission de la WCA qui est \"d'avoir plus de compétitions dans plus de pays avec plus de personnes et d'amusement, dans des conditions égales et équitables\" en organisant plus de compétitions au Canada qui sont amusantes, justes et équitables. Speedcubing Canada travaille également à la promotion du speedcubing au Canada en sensibilisant le public à ce sport et à la communauté du speedcubing.\n\n" + + "La communauté du speedcubing est un environnement positif et amical pour les personnes de tout âge, y compris les plus jeunes, les étudiants, les adultes et les familles. Toutes les activités de speedcubing dans le monde sont gérées par des bénévoles. La communauté du speedcubing offre aux compétiteurs (appelés \" speedcubeurs \") et aux autres membres la possibilité de s'engager dans une communauté positive et compétitive, de développer des compétences interpersonnelles et de leadership, et d'atteindre la réussite personnelle en établissant des records officiels nationaux, continentaux et mondiaux.", + }, + history: { + title: "Historique", + body1: + "Le Canada a joué un rôle important dans l'histoire du speedcubing en accueillant l'un des premiers championnats mondiaux, le World Rubik's Games Championship 2003, qui s'est tenu au Centre des Sciences de l'Ontario à Toronto, en Ontario.\n\n", + quote: + "\"En 2003, Ron [van Bruchem] a réussi à entrer en contact avec Dan Gosbee pour organiser un championnat du monde de speedcubing à Toronto, au Canada. L'équipe a réussi à trouver des sponsors et à obtenir une large couverture médiatique pour l'événement. Avec 89 concurrents au total aux côtés d'une équipe en charge d'aider au bon déroulement de la compétition, le Championnat du monde des jeux de Rubik 2003 (WC2003) a eu lieu et a été un succès majeur, marquant une étape incroyable depuis le WC1982 [la première grande compétition de speedcubing au monde].\" (World Cube Association)", + body2: + "\nSuite au succès des Championnats du Monde 2003 et de plusieurs compétitions ultérieures, la World Cube Association a été fondée en 2004.\n\n" + + "Les compétitions de speedcubing sont revenues au Canada avec le Canadian Open 2007. À peu près à la même époque, canadianCUBING a été créé et est devenu la première organisation régionale de la WCA au Canada. Grâce au travail acharné de bénévoles dévoués, canadianCUBING a mené la croissance du speedcubing au Canada pendant de nombreuses années, organisant des compétitions à travers le pays, notamment à Vancouver, Calgary, Toronto, Ottawa, Montréal, Halifax et plus encore.\n\n" + + "En 2021, Speedcubing Canada a été créé en tant qu'organisme à but non lucratif et nouvelle organisation de speedcubing au Canada, signalant une nouvelle croissance pour le speedcubing au Canada. Notamment, Speedcubing Canada a servi à accueillir le premier championnat nord-américain Rubik's WCA à Toronto, en Ontario, en juillet 2022.", + }, + comps: { + title: "Compétitions", + body: "Trouvez toutes les compétitions à venir au Canada sur le site Web de la World Cube Association.", + cta: "Voir tout", + }, + organization: { + title: "Organisation", + }, + directors: { + title: "Directeurs", + boardMember: "Membre du bureau", + }, + documents: { + title: "Documents", + byLaws: "Règlement intérieur", + minutes: "Compte rendu de réunion", + policies: "Politiques", + corporate: "Documents administratifs", + }, + faq: { + title: "Foire Aux Questions", + "when-is-the-next-wca-competition-in-my-area": { + q: "Quand aura lieu la prochaine compétition de la WCA dans ma région ?", + a: "Vous pouvez trouver une liste de toutes les compétitions à venir au Canada sur le site Web de la World Cube Association. Suivez Speedcubing Canada sur les réseaux sociaux et inscrivez-vous sur notre liste de diffusion pour être les premiers à être informés de l'annonce des compétitions !", + }, + "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { + q: "Je vais participer à ma première compétition de la WCA ! Que dois-je savoir ?", + a: "Nous sommes très enthousiastes à l'idée de vous voir participer à votre première compétition ! Familiarisez-vous avec le règlement de la WCA avant la compétition. Nous avons également deux vidéos que nous recommandons de regarder avant la compétition : À quoi s'attendre lors de votre première compétition et Les bases d'une compétition officielle de la WCA.", + }, + "who-are-the-wca-delegates-in-my-area": { + q: "Qui sont les délégués de la WCA dans ma région ?", + a: "Vous pouvez trouver une liste de tous les Délégués de la WCA sur le site de la World Cube Association.", + }, + "how-can-i-volunteer-with-speedcubing-canada": { + q: "Comment puis-je devenir bénévole pour Speedcubing Canada ?", + a: "Speedcubing Canada et la World Cube Association sont des organisations gérées à 100% par des bénévoles. Nous sommes toujours à la recherche de bénévoles pour aider au bon déroulement de nos compétitions et nous invitons les compétiteurs, les amis, les familles et les membres de la communauté à se joindre à nous et à nous aider. Pour en savoir plus sur le bénévolat lors d'une compétition, contactez l'organisateur ou le délégué de la WCA à l'avance ou lors de la compétition.", + }, + "why-the-change-from-canadiancubing-to-speedcubing-canada": { + q: "Pourquoi le changement de canadianCUBING à Speedcubing Canada ?", + a: + "Après de nombreuses années de fonctionnement de canadianCUBING en tant qu'organisation communautaire de proximité, le besoin est apparu d'une organisation régionale de speedcubing officiellement enregistrée en tant qu'organisme à but non lucratif, afin de répondre aux besoins croissants de la communauté du speedcubing au Canada. En raison d'un emploi du temps chargé et d'autres facteurs, l'équipe de canadianCUBING n'était pas structurée de manière à permettre à l'organisation de s'enregistrer en tant qu'organisme à but non lucratif. Par conséquent, Speedcubing Canada a été établi en tant qu'organisation à but non lucratif et nouvelle organisation de speedcubing au Canada en 2021, avec un nouveau conseil d'administration.\n\n" + + "La communauté du speedcubing au Canada doit une grande partie de sa croissance à canadianCUBING, et nous sommes reconnaissants aux nombreux bénévoles qui ont investi dans la communauté à travers canadianCUBING pendant de nombreuses années. Nous nous réjouissons de l'avenir du speedcubing au Canada !", + }, + "affiliated-with-the-wca": { + q: "Speedcubing Canada est-elle affiliée à la World Cube Association ?", + a: "Speedcubing Canada fonctionne indépendamment de la World Cube Association, avec un conseil d'administration distinct. Speedcubing Canada est reconnue comme l'organisation régionale officielle du Canada par la WCA.", + }, + }, + provinces: { + ab: "Alberta", + bc: "Colombie-Britannique", + mb: "Manitoba", + nb: "Nouveau-Brunswick", + nl: "Terre-Neuve-et-Labrador", + ns: "Nouvelle-Écosse", + nt: "Territoires du Nord-Ouest", + nu: "Nunavut", + on: "Ontario", + pe: "Île-du-Prince-Édouard", + qc: "Québec", + sk: "Saskatchewan", + yt: "Yukon", + }, + province_with_pronouns: { + ab: "l'Alberta", + bc: "la Colombie-Britannique", + mb: "le Manitoba", + nb: "le Nouveau-Brunswick", + nl: "Terre-Neuve-et-Labrador", + ns: "la Nouvelle-Écosse", + nt: "les Territoires du Nord-Ouest", + nu: "le Nunavut", + on: "l'Ontario", + pe: "l'Île-du-Prince-Édouard", + qc: "le Québec", + sk: "la Saskatchewan", + yt: "le Yukon", + na: "N/A", + }, + regions: { + at: "Atlantique", + bc: "Colombie-Britannique", + qc: "Québec", + on: "Ontario", + pr: "Prairies", + te: "Territoires", + na: "N/A", + }, + account: { + title: "Compte", + hi: "Salut, ", + policy: "Votre province détermine votre admissibilité aux championnats régionaux. Vous ne pouvez représenter qu'une province où vous résidez au moins 50 % de l'année. Nous nous réservons le droit de demander une preuve de résidence. Si vous n'êtes pas résident canadien ou si vous préférez ne pas indiquer votre province de résidence, veuillez sélectionner \"N/A\".", + save: "Sauvegarder", + signin: "Se connecter avec la WCA", + signout: "Déconnexion", + welcome: "Bienvenue sur la page du compte de Speedcubing Canada. \n" + + "Pour y accéder, veuillez vous connecter avec votre compte WCA.", + roles: "Rôles", + success: "Votre compte a été mis à jour avec succès.", + error: "Une erreur s'est produite lors de la mise à jour de votre compte.", + dob: "Date de naissance", + region: "Région", + }, + rankings: { + title: "Classements", + soon: "Les classements arrivent", + single: "Single", + average: "Moyenne", + rankfor: "Classement pour", + } }, - }, - account: { - title: "Compte", - hi: "Salut, ", - policy: "Votre province détermine votre admissibilité aux championnats régionaux. Vous ne pouvez représenter qu'une province où vous résidez au moins 50 % de l'année. Nous nous réservons le droit de demander une preuve de résidence. Si vous n'êtes pas résident canadien ou si vous préférez ne pas indiquer votre province de résidence, veuillez sélectionner \"N/A\".", - save: "Sauvegarder", - signin : "Se connecter avec la WCA", - signout: "Déconnexion", - welcome: "Bienvenue sur la page du compte de Speedcubing Canada. \n" + - "Pour y accéder, veuillez vous connecter avec votre compte WCA.", - roles: "Rôles", - success: "Votre compte a été mis à jour avec succès.", - error: "Une erreur s'est produite lors de la mise à jour de votre compte.", - }, - rankings: { - title: "Classements", - soon: "Les classements arrivent", - } }, - }, }; diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index a3cca4e..1f97fe0 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -38,7 +38,7 @@ export const Account = () => { const provinces: Province[] = GetProvincesWithNA(); const [user, setUser] = useState(null); - const [loading, setLoading] = useState(true) + const [loading, setLoading] = useState(true); useEffect(() => { (async () => { @@ -52,7 +52,7 @@ export const Account = () => { })(); }, []); - let default_province: Province = {label: 'N/A', id: 'na', region: 'N/A'}; + let default_province: Province = {label: 'N/A', id: 'na', region: 'N/A', region_id: 'na'}; let default_dob = dayjs('2022-01-01'); let default_WCAID = ""; if (user != null) { @@ -149,6 +149,7 @@ export const Account = () => { } }} renderInput={(params) => } + getOptionLabel={(option) => t('provinces.'+option.id)} isOptionEqualToValue={(option, value) => option.id === value.id} /> @@ -157,8 +158,8 @@ export const Account = () => { { diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 494e90e..4bd07c8 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx @@ -8,10 +8,13 @@ import TextField from "@mui/material/TextField"; import Autocomplete from "@mui/material/Autocomplete"; import Stack from '@mui/material/Stack'; import Switch from '@mui/material/Switch'; -import {eventID, Province, useAverage} from "../components/Types"; +import CircularProgress from "@mui/material/CircularProgress"; +import {eventID, Province, provinceID, useAverage} from "../components/Types"; import {GetProvinces} from "../components/Provinces"; -import {useState} from "react"; -import {GetRanking} from "../components/Api"; +import {useEffect, useState} from "react"; +import {API_BASE_URL} from "../components/Api"; +import httpClient from "../httpClient"; + export const Rankings = () => { const {t} = useTranslation(); @@ -20,14 +23,13 @@ export const Rankings = () => { const [province, setProvince] = useState(provinces[0]); const [eventId, setEventId] = useState("333"); const [useAverage, setUseAverage] = useState(false); + const [loading, setLoading] = useState(true); const switchHandler = (event: { target: { checked: boolean | ((prevState: boolean) => boolean); }; }) => { setUseAverage(event.target.checked); console.log(ranking); }; - const ranking = GetRanking(eventId, province?.id, useAverage); - const handleProvinceChange = (event: any, newValue: React.SetStateAction) => { setProvince(newValue); @@ -43,23 +45,43 @@ export const Rankings = () => { }; + const [ranking, setRanking] = useState(null); + + useEffect(() => { + setLoading(true); + let use_average_str = "0"; + if (useAverage) { + use_average_str = "1"; + } + + (async () => { + try { + if (eventId === null || province?.id === null || useAverage === null) { + return null; + } + + //const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + provinceId + "/" + use_average_str); + const resp = await httpClient.get(API_BASE_URL + "/test_rankings"); + + setRanking(resp.data); + } catch (error: any) { + if (error.response.status === 500) { + console.log("Internal server error" + error.response.data); + } else if (error.response.status === 404) { + console.log("Not found" + error.response.data); + } + } + setLoading(false); + })(); + }, []); + + return ( - - - - - - {t("rankings.soon")} + {t("rankings.title")} @@ -71,16 +93,23 @@ export const Rankings = () => { value={province} onChange={handleProvinceChange} renderInput={(params) => } + getOptionLabel={(option) => t('provinces.'+option.id)} isOptionEqualToValue={(option, value) => option.id === value.id} /> - Single + {t("rankings.single")} - Average + {t("rankings.average")} + {loading ? + : ranking != null ? ( +
{t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)}
+ ) : ( +
Nothing to show
+ )}
); }; \ No newline at end of file From 631f4cbd02cb168e46559ce051865fbb6b2f8679 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 8 Aug 2023 23:21:15 -0400 Subject: [PATCH 45/72] province rankings without event selection --- back/backend/__init__.py | 2 +- back/backend/handlers/province_rankings.py | 11 +- frontend/package-lock.json | 21846 ++++--------------- frontend/package.json | 5 +- frontend/src/App.tsx | 112 +- frontend/src/components/RankList.tsx | 40 + frontend/src/components/Types.ts | 7 + frontend/src/locale.ts | 14 +- frontend/src/pages/Account.tsx | 52 +- frontend/src/pages/AdminPage.tsx | 19 + frontend/src/pages/Rankings.tsx | 52 +- 11 files changed, 4494 insertions(+), 17666 deletions(-) create mode 100644 frontend/src/components/RankList.tsx create mode 100644 frontend/src/pages/AdminPage.tsx diff --git a/back/backend/__init__.py b/back/backend/__init__.py index 461cd3c..4c61932 100644 --- a/back/backend/__init__.py +++ b/back/backend/__init__.py @@ -29,7 +29,7 @@ app.secret_key = get_secret('SESSION_SECRET_KEY') app.permanent_session_lifetime = datetime.timedelta(days=7) address = get_secret('FRONT_ADDRESS') -CORS(app, supports_credentials=True) +CORS(app, supports_credentials=True, expose_headers='Content-Range') @app.before_request diff --git a/back/backend/handlers/province_rankings.py b/back/backend/handlers/province_rankings.py index 3f23d95..14fe6e9 100644 --- a/back/backend/handlers/province_rankings.py +++ b/back/backend/handlers/province_rankings.py @@ -12,7 +12,16 @@ @bp.route('/test_rankings') # temporary def test_rankings(): - return [{"name":"Sarah Strong","rank":1,"time":"9.18","url":"https://worldcubeassociation.org/persons/2007STRO01"},{"name":"Alexandre Ondet","rank":2,"time":"9.84","url":"https://worldcubeassociation.org/persons/2017ONDE01"}] + + data=[{"name":"Sarah Strong","rank":1,"time":"9.18","url":"https://worldcubeassociation.org/persons/2007STRO01"},{"name":"Alexandre Ondet","rank":2,"time":"9.84","url":"https://worldcubeassociation.org/persons/2017ONDE01"}] + # Calculate the total count of results + total_results = len(data) + + # Set the Content-Range header + headers = { + 'Content-Range': f'items 0-{total_results - 1}/{total_results}' + } + return jsonify(data), 200, headers @bp.route('/province_rankings///') def province_rankings_table(event_id, province_id, use_average): diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6156428..3374c24 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,7 +1,7 @@ { "name": "speedcubing-canada-web", "version": "0.1.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -13,6 +13,7 @@ "@mui/icons-material": "^5.6.2", "@mui/material": "^5.6.2", "@mui/styles": "^5.8.4", + "@mui/x-data-grid": "^6.11.0", "@mui/x-date-pickers": "^6.10.2", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^12.1.2", @@ -24,7 +25,9 @@ "axios": "^1.4.0", "dayjs": "^1.11.9", "i18next": "^21.6.16", + "ra-data-simple-rest": "^4.12.2", "react": "^17.0.2", + "react-admin": "^4.12.3", "react-dom": "^17.0.2", "react-i18next": "^11.16.7", "react-router-dom": "^6.3.0", @@ -41,6 +44,22 @@ "node": ">=0.10.0" } }, + "node_modules/@adobe/css-tools": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.0.tgz", + "integrity": "sha512-+RNNcQvw2V1bmnBTPAtOLfW/9mhH2vC67+rUSi5T8EtEWt6lEnGNY2GuhZ1/YwbgikT1TkhvidCDmN5Q5YCo/w==" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -54,44 +73,109 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.2", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -102,27 +186,27 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/eslint-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.5.tgz", - "integrity": "sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.10.tgz", + "integrity": "sha512-0J8DNPRXQRLeR9rPaUMM3fA+RbixjnVLe/MRMYCkp3hzgsSuxCHQ8NN8xQG1wIHKJ4a1DTROTvFJdW+B5/eOsg==", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || >=14.0.0" }, "peerDependencies": { - "@babel/core": ">=7.11.0", + "@babel/core": "^7.11.0", "eslint": "^7.5.0 || ^8.0.0" } }, @@ -135,19 +219,19 @@ } }, "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.22.10", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -168,69 +252,53 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "dependencies": { - "@babel/compat-data": "^7.22.5", + "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", + "browserslist": "^4.21.9", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", + "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -240,21 +308,21 @@ } }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -264,35 +332,26 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { @@ -349,21 +408,21 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { @@ -386,14 +445,13 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-wrap-function": "^7.22.9" }, "engines": { "node": ">=6.9.0" @@ -403,19 +461,19 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { @@ -441,9 +499,9 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { "@babel/types": "^7.22.5" }, @@ -476,49 +534,112 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", "dependencies": { "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -572,15 +693,15 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.5.tgz", - "integrity": "sha512-h8hlezQ4dl6ixodgXkH8lUfcD7x+WAuIqPUjwGoItynrXOAv4a4Tci1zA/qjzQjjcl0v3QpLdc2LM6ZACQuY7A==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz", + "integrity": "sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/plugin-syntax-decorators": "^7.22.5" + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.22.10" }, "engines": { "node": ">=6.9.0" @@ -590,11 +711,11 @@ } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -605,11 +726,11 @@ } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -620,12 +741,12 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -661,21 +782,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -724,9 +830,9 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz", - "integrity": "sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", + "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -760,11 +866,11 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", - "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -975,13 +1081,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", + "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1022,9 +1128,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1067,18 +1173,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, "engines": { @@ -1104,9 +1210,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1192,12 +1298,12 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", - "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", + "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-flow": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1465,9 +1571,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", + "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -1541,11 +1647,11 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.7.tgz", - "integrity": "sha512-lF+cfsyTgwWkcw715J88JhMYJ5GpysYNLhLP1PkvkhTRN7B3e74R/1KsDxFxhRpSn0UUD3IWM4GvdBR2PEbbQQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz", + "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1555,11 +1661,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1569,15 +1675,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", - "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1587,11 +1693,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.16.7" + "@babel/plugin-transform-react-jsx": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1601,12 +1707,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1616,12 +1722,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1645,16 +1751,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", + "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", "dependencies": { "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1664,9 +1770,9 @@ } }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -1743,12 +1849,12 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", - "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz", + "integrity": "sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.22.5" }, @@ -1760,9 +1866,9 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1819,12 +1925,12 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", + "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", @@ -1849,15 +1955,15 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.10", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", "@babel/plugin-transform-class-properties": "^7.22.5", "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.10", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", "@babel/plugin-transform-dynamic-import": "^7.22.5", @@ -1880,29 +1986,29 @@ "@babel/plugin-transform-object-rest-spread": "^7.22.5", "@babel/plugin-transform-object-super": "^7.22.5", "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.10", "@babel/plugin-transform-parameters": "^7.22.5", "@babel/plugin-transform-private-methods": "^7.22.5", "@babel/plugin-transform-private-property-in-object": "^7.22.5", "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", "@babel/plugin-transform-shorthand-properties": "^7.22.5", "@babel/plugin-transform-spread": "^7.22.5", "@babel/plugin-transform-sticky-regex": "^7.22.5", "@babel/plugin-transform-template-literals": "^7.22.5", "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", "@babel/plugin-transform-unicode-property-regex": "^7.22.5", "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.10", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1912,39 +2018,37 @@ } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", + "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.16.7", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1977,32 +2081,20 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", + "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.0.tgz", - "integrity": "sha512-qeydncU80ravKzovVncW3EYaC1ji3GpntdPgNcJy9g7hHSY6KX+ne1cbV3ov7Zzm4F1z0+QreZPCuw1ynkmYNg==", - "dependencies": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dependencies": { "@babel/code-frame": "^7.22.5", "@babel/parser": "^7.22.5", @@ -2013,18 +2105,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2033,9 +2125,9 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5", @@ -2055,52 +2147,177 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz", - "integrity": "sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.3" + "postcss": "^8.2" } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.0.tgz", - "integrity": "sha512-VSTd7hGjmde4rTj1rR30sokY3ONJph1reCBTUXqeW1fKwETPy1x4t/XIeaaqbMbC5Xg4SM/lyXZ2S8NELT2TaA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.3" + "postcss": "^8.2" } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.0.tgz", - "integrity": "sha512-WnfZlyuh/CW4oS530HBbrKq0G8BKl/bsNr5NMFoubBFzJfvFRGJhplCgIJYWUidLuL3WJ/zhMtDIyNFTqhx63Q==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", "dependencies": { - "postcss-selector-parser": "^6.0.9" + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, - "node_modules/@csstools/postcss-normalize-display-values": { + "node_modules/@csstools/postcss-nested-calc": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz", - "integrity": "sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2111,6 +2328,90 @@ "postcss": "^8.3" } }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", @@ -2129,17 +2430,6 @@ "stylis": "4.2.0" } }, - "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@emotion/cache": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", @@ -2255,23 +2545,48 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", + "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { @@ -2280,9 +2595,9 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dependencies": { "type-fest": "^0.20.2" }, @@ -2293,14 +2608,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "engines": { - "node": ">= 4" - } - }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2323,19 +2630,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", + "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -2412,6 +2739,14 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2436,74 +2771,10 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", "dependencies": { "@jest/console": "^27.5.1", "@jest/reporters": "^27.5.1", @@ -2546,70 +2817,6 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/environment": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", @@ -2696,59 +2903,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/reporters/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2757,17 +2911,6 @@ "node": ">=0.10.0" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/schemas": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", @@ -2853,59 +2996,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/transform/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2914,17 +3004,6 @@ "node": ">=0.10.0" } }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/types": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", @@ -2940,97 +3019,33 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "color-convert": "^2.0.1" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.0.0" } }, - "node_modules/@jest/types/node_modules/chalk": { - "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" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6.0.0" } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" + "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { @@ -3048,30 +3063,30 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "node_modules/@leichtgewicht/ip-codec": { + "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==" }, "node_modules/@mui/base": { - "version": "5.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.5.tgz", - "integrity": "sha512-vy3TWLQYdGNecTaufR4wDNQFV2WEg6wRPi6BVbx6q1vP3K1mbxIn1+XOqOzfYBXjFHvMx0gZAo2TgWbaqfgvAA==", + "version": "5.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.9.tgz", + "integrity": "sha512-gm6gnPnc/lS5Z3neH0iuOrK7IbS02+oh6KsMtXYLhI6bJpHs+PNWFsBmISx7x4FSPVJZvZkb8Bw6pEXpIMFt7Q==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", + "@mui/utils": "^5.14.3", "@popperjs/core": "^2.11.8", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -3093,26 +3108,21 @@ } } }, - "node_modules/@mui/base/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.13.4", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", - "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.3.tgz", + "integrity": "sha512-QxvrcDqphZoXRjsAmCaQylmWjC/8/qKWwIde1MJMna5YIst3R9O0qhKRPu36/OE2d8AeTbCVjRcRvNqhhW8jyg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.11.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", - "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.3.tgz", + "integrity": "sha512-XkxWPhageu1OPUm2LWjo5XqeQ0t2xfGe8EiLkRW9oz2LHMMZmijvCxulhgquUVTF1DnoSh+3KoDLSsoAFtVNVw==", "dependencies": { - "@babel/runtime": "^7.21.0" + "@babel/runtime": "^7.22.6" }, "engines": { "node": ">=12.0.0" @@ -3133,18 +3143,18 @@ } }, "node_modules/@mui/material": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.6.tgz", - "integrity": "sha512-/c2ZApeQm2sTYdQXjqEnldaBMBcUEiyu2VRS6bS39ZeNaAcCLBQbYocLR46R+f0S5dgpBzB0T4AsOABPOFYZ5Q==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.3.tgz", + "integrity": "sha512-dlu4SOcCp9Cy+wkcfZ/ns9ZkP40nr/WPgqxX0HmrE0o+dkE1ropY9BbHsLrTlYJCko8yzcC8bLghrD4xqZG1og==", "dependencies": { - "@babel/runtime": "^7.22.5", - "@mui/base": "5.0.0-beta.5", - "@mui/core-downloads-tracker": "^5.13.4", - "@mui/system": "^5.13.6", + "@babel/runtime": "^7.22.6", + "@mui/base": "5.0.0-beta.9", + "@mui/core-downloads-tracker": "^5.14.3", + "@mui/system": "^5.14.3", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", + "@mui/utils": "^5.14.3", "@types/react-transition-group": "^4.4.6", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1", "react-is": "^18.2.0", @@ -3176,18 +3186,13 @@ } } }, - "node_modules/@mui/material/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "node_modules/@mui/private-theming": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", - "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.7.tgz", + "integrity": "sha512-qbSr+udcij5F9dKhGX7fEdx2drXchq7htLNr2Qg2Ma+WJ6q0ERlEqGSBiPiVDJkptcjeVL4DGmcf1wl5+vD4EA==", "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.13.1", + "@babel/runtime": "^7.22.5", + "@mui/utils": "^5.13.7", "prop-types": "^15.8.1" }, "engines": { @@ -3239,16 +3244,16 @@ } }, "node_modules/@mui/styles": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.13.2.tgz", - "integrity": "sha512-gKNkVyk6azQ8wfCamh3yU/wLv1JscYrsQX9huQBwfwtE7kUTq2rgggdfJjRADjbcmT6IPX+oCHYjGfqqFgDIQQ==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.14.3.tgz", + "integrity": "sha512-6a3znEs0WsHKW5j4458Sc9WqE2MfmPBnAbcyizHsmCKoF196e3uaO6PBXJmIjjNqFMiEmqiFQyGn3zs3jY7AyQ==", "dependencies": { - "@babel/runtime": "^7.21.0", + "@babel/runtime": "^7.22.6", "@emotion/hash": "^0.9.1", - "@mui/private-theming": "^5.13.1", + "@mui/private-theming": "^5.13.7", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "clsx": "^1.2.1", + "@mui/utils": "^5.14.3", + "clsx": "^2.0.0", "csstype": "^3.1.2", "hoist-non-react-statics": "^3.3.2", "jss": "^10.10.0", @@ -3279,16 +3284,16 @@ } }, "node_modules/@mui/system": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", - "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.3.tgz", + "integrity": "sha512-b+C+j9+75+/iIYSa+1S4eCMc9MDNrj9hzWfExJqS2GffuNocRagjBZFyjtMqsLWLxMxQIX8Cg6j0hAioiw+WfQ==", "dependencies": { - "@babel/runtime": "^7.22.5", - "@mui/private-theming": "^5.13.1", + "@babel/runtime": "^7.22.6", + "@mui/private-theming": "^5.13.7", "@mui/styled-engine": "^5.13.2", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", - "clsx": "^1.2.1", + "@mui/utils": "^5.14.3", + "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" }, @@ -3352,18 +3357,46 @@ "react": "^17.0.0 || ^18.0.0" } }, - "node_modules/@mui/utils/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "node_modules/@mui/x-data-grid": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.11.0.tgz", + "integrity": "sha512-ZyOZmr6JmOZPXWq1mbStkYg/uMY7zzQPQElCvdOnJPrCtifZN1UorKhWlfchV/quSydxm1VxvmsfEnJ0wHZY7g==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "@mui/utils": "^5.14.1", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "reselect": "^4.1.8" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@mui/material": "^5.4.1", + "@mui/system": "^5.4.1", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@mui/x-data-grid/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } }, "node_modules/@mui/x-date-pickers": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.10.2.tgz", - "integrity": "sha512-RZHvPj5UYGdV2FoBlTbtAtg1aaJ1sbdD9LM9vSgefQWMW0vFC4fSYtFACS4ptxK/8Q0FHyuVZF5bDO+TUAPxQg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.11.0.tgz", + "integrity": "sha512-yVGfpH3scUauLaHWvzckD0xswboC48YAaJ4568YTkKozXFSPPkvK7VGSQ+qo1u8K2UjYh1iZoff3k0EoDDPnww==", "dependencies": { "@babel/runtime": "^7.22.6", - "@mui/utils": "^5.13.7", + "@mui/utils": "^5.14.1", "@types/react-transition-group": "^4.4.6", "clsx": "^1.2.1", "prop-types": "^15.8.1", @@ -3422,6 +3455,14 @@ } } }, + "node_modules/@mui/x-date-pickers/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, "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", @@ -3483,17 +3524,17 @@ } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz", - "integrity": "sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", + "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", "dependencies": { "ansi-html-community": "^0.0.8", "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.8.1", + "core-js-pure": "^3.23.3", "error-stack-parser": "^2.0.6", "find-up": "^5.0.0", "html-entities": "^2.1.0", - "loader-utils": "^2.0.0", + "loader-utils": "^2.0.4", "schema-utils": "^3.0.0", "source-map": "^0.7.3" }, @@ -3504,7 +3545,7 @@ "@types/webpack": "4.x || 5.x", "react-refresh": ">=0.10.0 <1.0.0", "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <3.0.0", + "type-fest": ">=0.17.0 <4.0.0", "webpack": ">=4.43.0 <6.0.0", "webpack-dev-server": "3.x || 4.x", "webpack-hot-middleware": "2.x", @@ -3532,9 +3573,9 @@ } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "engines": { "node": ">= 8" } @@ -3548,6 +3589,14 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@remix-run/router": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", + "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==", + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -3623,9 +3672,9 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, "node_modules/@rushstack/eslint-patch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", - "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", + "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==" }, "node_modules/@sinclair/typebox": { "version": "0.24.51", @@ -3867,105 +3916,34 @@ } }, "node_modules/@testing-library/dom": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz", - "integrity": "sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.1.tgz", + "integrity": "sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^5.0.0", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", + "lz-string": "^1.5.0", "pretty-format": "^27.0.2" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/aria-query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": ">=14" } }, "node_modules/@testing-library/jest-dom": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz", - "integrity": "sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", "dependencies": { + "@adobe/css-tools": "^4.0.1", "@babel/runtime": "^7.9.2", "@types/testing-library__jest-dom": "^5.9.1", "aria-query": "^5.0.0", "chalk": "^3.0.0", - "css": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.5.6", "lodash": "^4.17.15", @@ -3977,28 +3955,6 @@ "yarn": ">=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/aria-query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "engines": { - "node": ">=6.0" - } - }, "node_modules/@testing-library/jest-dom/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -4011,55 +3967,39 @@ "node": ">=8" } }, - "node_modules/@testing-library/jest-dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@testing-library/react": { + "version": "12.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", + "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", "dependencies": { - "color-name": "~1.1.4" + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0", + "@types/react-dom": "<18.0.0" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" + "node": ">=12" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "<18.0.0", + "react-dom": "<18.0.0" } }, - "node_modules/@testing-library/react": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.2.tgz", - "integrity": "sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==", + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", "dependencies": { + "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.0.0" + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" }, "engines": { "node": ">=12" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" } }, "node_modules/@testing-library/user-event": { @@ -4094,17 +4034,17 @@ } }, "node_modules/@types/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", + "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==" }, "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -4128,11 +4068,11 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { @@ -4161,27 +4101,27 @@ } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, "node_modules/@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "version": "8.44.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -4193,30 +4133,31 @@ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" }, "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dependencies": { "@types/node": "*" } @@ -4226,10 +4167,15 @@ "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" + }, "node_modules/@types/http-proxy": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", "dependencies": { "@types/node": "*" } @@ -4256,23 +4202,23 @@ } }, "node_modules/@types/jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", - "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", "dependencies": { - "jest-diff": "^27.0.0", + "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" } }, "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, "node_modules/@types/mime": { "version": "1.3.2", @@ -4280,9 +4226,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "node_modules/@types/node": { - "version": "16.11.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", - "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -4290,9 +4236,9 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/prettier": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", - "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==" + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" }, "node_modules/@types/prop-types": { "version": "15.7.5", @@ -4315,9 +4261,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "17.0.39", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz", - "integrity": "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==", + "version": "17.0.62", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.62.tgz", + "integrity": "sha512-eANCyz9DG8p/Vdhr0ZKST8JV12PhH2ACCDYlFw6DIO+D+ca+uP4jtEDEpVqXZrh/uZdXQGwk7whJa3ah5DtyLw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4325,11 +4271,11 @@ } }, "node_modules/@types/react-dom": { - "version": "17.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", - "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", + "version": "17.0.20", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz", + "integrity": "sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==", "dependencies": { - "@types/react": "*" + "@types/react": "^17" } }, "node_modules/@types/react-is": { @@ -4357,14 +4303,28 @@ } }, "node_modules/@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==" + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } }, "node_modules/@types/serve-index": { "version": "1.9.1", @@ -4375,11 +4335,12 @@ } }, "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", "dependencies": { - "@types/mime": "^1", + "@types/http-errors": "*", + "@types/mime": "*", "@types/node": "*" } }, @@ -4397,9 +4358,9 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz", - "integrity": "sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==", + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", "dependencies": { "@types/jest": "*" } @@ -4410,39 +4371,40 @@ "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, "node_modules/@types/ws": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", - "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", - "integrity": "sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/type-utils": "5.10.2", - "@typescript-eslint/utils": "5.10.2", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -4463,11 +4425,11 @@ } }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.2.tgz", - "integrity": "sha512-stRnIlxDduzxtaVLtEohESoXI1k7J6jvJHGyIkOT2pvXbg5whPM6f9tzJ51bJJxaJTdmvwgVFDNCopFRb2F5Gw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", "dependencies": { - "@typescript-eslint/utils": "5.10.2" + "@typescript-eslint/utils": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4481,14 +4443,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", - "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dependencies": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", - "debug": "^4.3.2" + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4507,12 +4469,12 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", - "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dependencies": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4523,12 +4485,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz", - "integrity": "sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dependencies": { - "@typescript-eslint/utils": "5.10.2", - "debug": "^4.3.2", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", "tsutils": "^3.21.0" }, "engines": { @@ -4548,9 +4511,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", - "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4560,16 +4523,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", - "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", - "dependencies": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2", - "debug": "^4.3.2", - "globby": "^11.0.4", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -4586,16 +4549,18 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", - "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4629,12 +4594,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", - "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dependencies": { - "@typescript-eslint/types": "5.10.2", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4786,9 +4751,9 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "node_modules/accepts": { "version": "1.3.8", @@ -4803,9 +4768,9 @@ } }, "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "bin": { "acorn": "bin/acorn" }, @@ -4849,27 +4814,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -4879,11 +4823,11 @@ } }, "node_modules/address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "engines": { - "node": ">= 0.12.0" + "node": ">= 10.0.0" } }, "node_modules/adjust-sourcemap-loader": { @@ -4909,18 +4853,6 @@ "node": ">= 6.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -4953,9 +4885,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5014,20 +4946,28 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5037,9 +4977,9 @@ } }, "node_modules/arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "1.0.10", @@ -5050,15 +4990,11 @@ } }, "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" + "deep-equal": "^2.0.5" } }, "node_modules/array-buffer-byte-length": { @@ -5104,14 +5040,33 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -5137,6 +5092,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.foreach": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.foreach/-/array.prototype.foreach-1.0.4.tgz", + "integrity": "sha512-OYqqGR/56CopyheXNwdlJvFtbSvf2Z9RGvL20X6GvAuKePJ76L/D46BqZn3bITd36QA2Ti7Iy0UwVJaD/YwXZA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.tosorted": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", @@ -5149,28 +5141,44 @@ "get-intrinsic": "^1.1.3" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" }, "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -5180,25 +5188,32 @@ "node": ">= 4.0.0" } }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, + "node_modules/attr-accept": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", + "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", "engines": { - "node": ">= 4.5.0" + "node": ">=4" } }, "node_modules/autoprefixer": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", - "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], "dependencies": { - "browserslist": "^4.19.1", - "caniuse-lite": "^1.0.30001297", - "fraction.js": "^4.1.2", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -5209,14 +5224,18 @@ "engines": { "node": "^10 || ^12 || >=14" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": "^8.1.0" } }, + "node_modules/autosuggest-highlight": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/autosuggest-highlight/-/autosuggest-highlight-3.3.4.tgz", + "integrity": "sha512-j6RETBD2xYnrVcoV1S5R4t3WxOlWZKyDQjkwnggDPSjF5L4jV98ZltBpvPvbkM1HtoSe5o+bNrTHyjPbieGeYA==", + "dependencies": { + "remove-accents": "^0.4.2" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -5229,9 +5248,9 @@ } }, "node_modules/axe-core": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", - "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", "engines": { "node": ">=4" } @@ -5246,24 +5265,14 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "dequal": "^2.0.3" } }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, "node_modules/babel-jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", @@ -5285,70 +5294,6 @@ "@babel/core": "^7.8.0" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -5436,47 +5381,47 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0" + "@babel/helper-define-polyfill-provider": "^0.4.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-transform-react-remove-prop-types": { @@ -5552,7 +5497,7 @@ "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "node_modules/bfj": { "version": "7.0.2", @@ -5568,6 +5513,14 @@ "node": ">= 8.0.0" } }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -5628,14 +5581,6 @@ "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5652,23 +5597,21 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", + "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -5690,15 +5633,30 @@ "node": ">=8" } }, + "node_modules/broadcast-channel": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", + "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "detect-node": "^2.1.0", + "js-sha3": "0.8.0", + "microseconds": "0.2.0", + "nano-time": "1.0.0", + "oblivious-set": "1.0.0", + "rimraf": "3.0.2", + "unload": "2.2.0" + } + }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "funding": [ { "type": "opencollective", @@ -5714,9 +5672,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" }, "bin": { @@ -5739,11 +5697,6 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -5758,7 +5711,7 @@ "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "engines": { "node": ">= 0.8" } @@ -5823,9 +5776,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001512", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", - "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", + "version": "1.0.30001519", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", + "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", "funding": [ { "type": "opencollective", @@ -5850,16 +5803,18 @@ } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/char-regex": { @@ -5871,9 +5826,9 @@ } }, "node_modules/check-types": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", - "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==" + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", + "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==" }, "node_modules/chokidar": { "version": "3.5.3", @@ -5921,19 +5876,28 @@ } }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" }, "node_modules/clean-css": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", - "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dependencies": { "source-map": "~0.6.0" }, @@ -5949,14 +5913,6 @@ "node": ">=0.10.0" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -5968,9 +5924,9 @@ } }, "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "engines": { "node": ">=6" } @@ -5997,12 +5953,31 @@ "node": ">= 4.0" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/color-convert": { + "node_modules/coa/node_modules/chalk": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -6010,20 +5985,68 @@ "color-name": "1.1.3" } }, - "node_modules/color-name": { + "node_modules/coa/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -6060,7 +6083,7 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/compressible": { "version": "2.0.18", @@ -6101,12 +6124,17 @@ "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/confusing-browser-globals": { "version": "1.0.11", @@ -6114,9 +6142,9 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" }, "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "engines": { "node": ">=0.8" } @@ -6132,25 +6160,6 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -6160,12 +6169,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.5.0", @@ -6178,12 +6184,12 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-js": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz", - "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.0.tgz", + "integrity": "sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -6191,11 +6197,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.0.tgz", + "integrity": "sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==", "dependencies": { - "browserslist": "^4.21.5" + "browserslist": "^4.21.9" }, "funding": { "type": "opencollective", @@ -6203,9 +6209,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.0.tgz", - "integrity": "sha512-VaJUunCZLnxuDbo1rNOzwbet9E1K9joiXS5+DQMPtgxd24wfsZbJZMMfQLGYMlCUvSxLfsRUUhoOR2x28mFfeg==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.0.tgz", + "integrity": "sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -6218,9 +6224,9 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -6253,16 +6259,6 @@ "node": ">=8" } }, - "node_modules/css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "dependencies": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - } - }, "node_modules/css-blank-pseudo": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", @@ -6281,14 +6277,11 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", - "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", - "dependencies": { - "timsort": "^0.3.0" - }, + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "engines": { - "node": ">= 10" + "node": "^10 || ^12 || >=14" }, "peerDependencies": { "postcss": "^8.0.9" @@ -6312,18 +6305,18 @@ } }, "node_modules/css-loader": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.6.0.tgz", - "integrity": "sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.5", + "postcss": "^8.4.21", "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-local-by-default": "^4.0.3", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" + "semver": "^7.3.8" }, "engines": { "node": ">= 12.13.0" @@ -6336,6 +6329,11 @@ "webpack": "^5.0.0" } }, + "node_modules/css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + }, "node_modules/css-minimizer-webpack-plugin": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", @@ -6374,9 +6372,9 @@ } }, "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -6405,14 +6403,14 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -6445,13 +6443,13 @@ } }, "node_modules/css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" }, @@ -6494,9 +6492,9 @@ } }, "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "engines": { "node": ">= 6" }, @@ -6507,20 +6505,22 @@ "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" - }, - "node_modules/css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" }, "node_modules/cssdb": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.2.0.tgz", - "integrity": "sha512-OP1owHiK7IkCPSmNvWGMOEbfMcPZ8HA1TkzUXzB2SA708Y4pFGXWtLAVxds2QJI/0FA3mCNwRkEA9B4U4fW2Dw==" + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.7.0.tgz", + "integrity": "sha512-1hN+I3r4VqSNQ+OmMXxYexnumbOONkSil0TWMebVXHtzYW4tRRPovUNHPHj2d4nrgOuYJ8Vs3XwvywsuwwXNNA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ] }, "node_modules/cssesc": { "version": "3.0.0", @@ -6534,11 +6534,11 @@ } }, "node_modules/cssnano": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", - "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dependencies": { - "cssnano-preset-default": "^5.1.11", + "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -6554,39 +6554,39 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", - "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", - "dependencies": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.1", - "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.4", - "postcss-convert-values": "^5.0.3", - "postcss-discard-comments": "^5.0.2", - "postcss-discard-duplicates": "^5.0.2", - "postcss-discard-empty": "^5.0.2", - "postcss-discard-overridden": "^5.0.3", - "postcss-merge-longhand": "^5.0.5", - "postcss-merge-rules": "^5.0.5", - "postcss-minify-font-values": "^5.0.3", - "postcss-minify-gradients": "^5.0.5", - "postcss-minify-params": "^5.0.4", - "postcss-minify-selectors": "^5.1.2", - "postcss-normalize-charset": "^5.0.2", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.3", - "postcss-normalize-repeat-style": "^5.0.3", - "postcss-normalize-string": "^5.0.3", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.3", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.3", - "postcss-ordered-values": "^5.0.4", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.3", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.3" + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -6596,9 +6596,9 @@ } }, "node_modules/cssnano-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", - "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -6686,15 +6686,30 @@ "node": ">=10" } }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/dayjs": { "version": "1.11.9", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "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" }, @@ -6726,16 +6741,28 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6747,9 +6774,9 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { "node": ">=0.10.0" } @@ -6788,46 +6815,28 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" } }, "node_modules/destroy": { @@ -6879,23 +6888,7 @@ "node_modules/detect-port-alt/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "dependencies": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -6929,23 +6922,17 @@ "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", "dependencies": { - "buffer-indexof": "^1.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" } }, "node_modules/doctrine": { @@ -6960,9 +6947,9 @@ } }, "node_modules/dom-accessibility-api": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz", - "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==" + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" }, "node_modules/dom-converter": { "version": "0.2.0", @@ -6982,9 +6969,9 @@ } }, "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -6995,9 +6982,9 @@ } }, "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", @@ -7025,9 +7012,9 @@ } }, "node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dependencies": { "domelementtype": "^2.2.0" }, @@ -7038,6 +7025,11 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", + "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==" + }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -7098,9 +7090,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.449", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", - "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==" + "version": "1.4.487", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.487.tgz", + "integrity": "sha512-XbCRs/34l31np/p33m+5tdBrdXu9jJkZxSbNxj5I0H1KtV2ZMSB+i/HYqDiRzHaFx2T5EdytjoBRe8QRJE2vQg==" }, "node_modules/emittery": { "version": "0.8.1", @@ -7163,25 +7155,26 @@ } }, "node_modules/error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dependencies": { - "stackframe": "^1.1.1" + "stackframe": "^1.3.4" } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -7201,14 +7194,18 @@ "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -7217,15 +7214,39 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dependencies": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", @@ -7270,14 +7291,17 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -7310,45 +7334,47 @@ } }, "node_modules/eslint": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", - "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", - "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", + "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.1", + "@eslint/js": "^8.46.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.2", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -7388,12 +7414,13 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.8.tgz", + "integrity": "sha512-tEe+Pok22qIGaK3KoMP+N96GVDS66B/zreoVVmiavLvRUEmGRtvb4B8wO9jwnb8d2lvHtrkhZ7UD73dWBVnf/Q==", "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -7405,15 +7432,19 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { @@ -7424,67 +7455,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-flowtype": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", @@ -7503,23 +7473,28 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", + "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.12.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "resolve": "^1.22.3", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" @@ -7529,11 +7504,11 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -7547,10 +7522,13 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/eslint-plugin-jest": { "version": "25.7.0", @@ -7576,22 +7554,26 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dependencies": { - "@babel/runtime": "^7.16.3", - "aria-query": "^4.2.2", - "array-includes": "^3.1.4", + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", - "language-tags": "^1.0.5", - "minimatch": "^3.0.4" + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" }, "engines": { "node": ">=4.0" @@ -7600,10 +7582,18 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz", + "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -7618,7 +7608,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { @@ -7629,9 +7619,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", - "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "engines": { "node": ">=10" }, @@ -7667,19 +7657,19 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-testing-library": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.5.tgz", - "integrity": "sha512-0j355vJpJCE/2g+aayIgJRUB6jBVqpD5ztMLGcadR1PgrgGPnPxN1HJuOAsAAwiMo27GwRnpJB8KOQzyNuNZrw==", + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", "dependencies": { - "@typescript-eslint/utils": "^5.10.2" + "@typescript-eslint/utils": "^5.58.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0", @@ -7690,60 +7680,41 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "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==", - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", + "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", "dependencies": { - "@types/eslint": "^7.28.2", - "jest-worker": "^27.3.1", - "micromatch": "^4.0.4", + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1" + "schema-utils": "^4.0.0" }, "engines": { "node": ">= 12.13.0" @@ -7757,71 +7728,91 @@ "webpack": "^5.0.0" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { - "color-name": "~1.1.4" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/eslint/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dependencies": { "type-fest": "^0.20.2" }, @@ -7832,14 +7823,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -7851,17 +7834,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -7874,16 +7846,19 @@ } }, "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -7899,9 +7874,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dependencies": { "estraverse": "^5.1.0" }, @@ -7987,7 +7962,7 @@ "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "engines": { "node": ">= 0.8.0" } @@ -8050,7 +8025,7 @@ "node_modules/express/node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/express/node_modules/debug": { "version": "2.6.9", @@ -8060,45 +8035,10 @@ "ms": "2.0.0" } }, - "node_modules/express/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { + "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -8106,9 +8046,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -8139,12 +8079,12 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dependencies": { "reusify": "^1.0.4" } @@ -8161,9 +8101,9 @@ } }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dependencies": { "bser": "2.1.1" } @@ -8198,6 +8138,17 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-selector": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.5.0.tgz", + "integrity": "sha512-s8KNnmIDTBoD0p9uJ9uD0XY38SCeBOtj0UMXyQSLg1Ypfrfj8+dAvwsLjYQkQ2GjhVtp2HrnF5cJzMhBjfD8HA==", + "dependencies": { + "tslib": "^2.0.3" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -8244,6 +8195,14 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -8274,14 +8233,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/finalhandler/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -8331,9 +8282,9 @@ } }, "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "node_modules/follow-redirects": { "version": "1.15.2", @@ -8363,9 +8314,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", - "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", "dependencies": { "@babel/code-frame": "^7.8.3", "@types/json-schema": "^7.0.5", @@ -8400,51 +8351,6 @@ } } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", @@ -8474,14 +8380,6 @@ "node": ">=10" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -8499,17 +8397,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -8519,9 +8406,9 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -8540,9 +8427,9 @@ } }, "node_modules/fraction.js": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", - "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "engines": { "node": "*" }, @@ -8560,9 +8447,9 @@ } }, "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -8573,14 +8460,14 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==" }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -8617,11 +8504,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -8700,14 +8582,14 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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" }, @@ -8822,9 +8704,14 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "node_modules/gzip-size": { "version": "6.0.0", @@ -8870,11 +8757,11 @@ } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { @@ -8961,10 +8848,15 @@ "node": ">= 6.0.0" } }, + "node_modules/hotscript": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/hotscript/-/hotscript-1.0.13.tgz", + "integrity": "sha512-C++tTF1GqkGYecL+2S1wJTfoH6APGAsbb7PAWQ3iVIwgG/EFseAfEVOKFgAFq4yK3+6j1EjUD4UQ9dRJHX/sSQ==" + }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -8972,10 +8864,15 @@ "wbuf": "^1.1.0" } }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8986,6 +8883,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -9006,9 +8908,19 @@ } }, "node_modules/html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] }, "node_modules/html-escaper": { "version": "2.0.2", @@ -9044,9 +8956,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -9086,7 +8998,7 @@ "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "node_modules/http-errors": { "version": "2.0.0", @@ -9103,26 +9015,10 @@ "node": ">= 0.8" } }, - "node_modules/http-errors/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/http-parser-js": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", - "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==" + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "node_modules/http-proxy": { "version": "1.18.1", @@ -9151,9 +9047,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", - "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -9166,6 +9062,11 @@ }, "peerDependencies": { "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, "node_modules/https-proxy-agent": { @@ -9194,9 +9095,9 @@ "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" }, "node_modules/i18next": { - "version": "21.6.16", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.6.16.tgz", - "integrity": "sha512-xJlzrVxG9CyAGsbMP1aKuiNr1Ed2m36KiTB7hjGMG2Zo4idfw3p9THUEu+GjBwIgEZ7F11ZbCzJcfv4uyfKNuw==", + "version": "21.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.10.0.tgz", + "integrity": "sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==", "funding": [ { "type": "individual", @@ -9245,7 +9146,7 @@ "node_modules/identity-obj-proxy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", "dependencies": { "harmony-reflect": "^1.4.6" }, @@ -9254,17 +9155,17 @@ } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "engines": { "node": ">= 4" } }, "node_modules/immer": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz", - "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==", + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -9285,14 +9186,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -9314,7 +9207,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } @@ -9327,10 +9220,18 @@ "node": ">=8" } }, + "node_modules/inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha512-lRy4DxuIFWXlJU7ed8UiTJOSTqStqYdEb4CEbtXfNbkdj3nH1L+reUWiE10VWcJS2yR7tge8Z74pJjtBjNwj0w==", + "engines": [ + "node >= 0.4.0" + ] + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -9359,15 +9260,10 @@ "node": ">= 0.4" } }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "engines": { "node": ">= 10" } @@ -9403,7 +9299,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", @@ -9454,9 +9350,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, @@ -9495,7 +9391,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } @@ -9532,6 +9428,14 @@ "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -9578,14 +9482,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -9641,6 +9537,14 @@ "node": ">=6" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -9692,15 +9596,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -9712,7 +9612,15 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-weakref": { "version": "1.0.2", @@ -9725,6 +9633,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -9737,14 +9657,14 @@ } }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -9770,43 +9690,38 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { + "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dependencies": { - "has-flag": "^4.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/istanbul-lib-source-maps": { @@ -9831,9 +9746,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -9859,75 +9774,6 @@ "node": ">=10" } }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jake/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/jake/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", @@ -9994,70 +9840,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-cli": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", @@ -10091,70 +9873,6 @@ } } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-config": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", @@ -10197,259 +9915,67 @@ } } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", "dependencies": { - "color-convert": "^2.0.1" + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "detect-newline": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "dependencies": { - "color-name": "~1.1.4" + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", "dependencies": { - "has-flag": "^4.0.0" + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-diff": { + "node_modules/jest-environment-node": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", "dependencies": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -10522,70 +10048,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-leak-detector": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", @@ -10612,151 +10074,23 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dependencies": { - "color-convert": "^2.0.1" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-mock": { @@ -10772,9 +10106,9 @@ } }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "engines": { "node": ">=6" }, @@ -10828,70 +10162,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runner": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", @@ -10923,70 +10193,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runtime": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", @@ -11019,80 +10225,16 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dependencies": { - "color-convert": "^2.0.1" + "@types/node": "*", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-snapshot": { @@ -11127,70 +10269,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -11207,70 +10285,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-validate": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", @@ -11287,70 +10301,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-watch-typeahead": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", @@ -11433,87 +10383,26 @@ "@types/yargs-parser": "*" } }, - "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/char-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.0.tgz", - "integrity": "sha512-oGu2QekBMXgyQNWPDRQ001bjvDnZe4/zBTz37TMbiKz1NbNiyiH5hRkobe7npRN6GfbGbxMYFck/vQ1r9c1VMA==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-watch-typeahead/node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { @@ -11585,22 +10474,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "engines": { - "node": ">=10" - } - }, "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -11638,30 +10511,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "node_modules/jest-watch-typeahead/node_modules/slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", @@ -11688,10 +10537,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "engines": { + "node": ">=12.20" + } + }, "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -11702,15 +10559,15 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/jest-watch-typeahead/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/jest-watcher": { @@ -11730,70 +10587,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -11807,14 +10600,6 @@ "node": ">= 10.13.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -11829,6 +10614,19 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", + "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11891,6 +10689,19 @@ } } }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -11920,7 +10731,7 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json5": { "version": "2.2.3", @@ -11933,6 +10744,14 @@ "node": ">=6" } }, + "node_modules/jsonexport": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonexport/-/jsonexport-3.2.0.tgz", + "integrity": "sha512-GbO9ugb0YTZatPd/hqCGR0FSwbr82H6OzG04yzdrG7XOe4QZ0jhQ+kOsB29zqkzoYJLmLxbbrFiuwbQu891XnQ==", + "bin": { + "jsonexport": "bin/jsonexport.js" + } + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -12035,12 +10854,14 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dependencies": { - "array-includes": "^3.1.3", - "object.assign": "^4.1.2" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" @@ -12063,26 +10884,35 @@ } }, "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "engines": { "node": ">= 8" } }, "node_modules/language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==" + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" }, "node_modules/language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dependencies": { "language-subtag-registry": "~0.3.2" } }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -12104,9 +10934,9 @@ } }, "node_modules/lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "engines": { "node": ">=10" } @@ -12117,9 +10947,9 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "engines": { "node": ">=6.11.5" } @@ -12164,7 +10994,7 @@ "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -12179,7 +11009,7 @@ "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, "node_modules/loose-envify": { "version": "1.4.0", @@ -12201,20 +11031,17 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "bin": { "lz-string": "bin/bin.js" } @@ -12242,9 +11069,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -12257,6 +11084,20 @@ "tmpl": "1.0.5" } }, + "node_modules/match-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", + "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "remove-accents": "0.4.2" + } + }, + "node_modules/match-sorter/node_modules/remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, "node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -12271,11 +11112,11 @@ } }, "node_modules/memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dependencies": { - "fs-monkey": "1.0.3" + "fs-monkey": "^1.0.4" }, "engines": { "node": ">= 4.0.0" @@ -12284,7 +11125,7 @@ "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/merge-stream": { "version": "2.0.0", @@ -12302,23 +11143,28 @@ "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/microseconds": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", + "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -12331,19 +11177,19 @@ } }, "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -12366,9 +11212,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz", - "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==", + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", "dependencies": { "schema-utils": "^4.0.0" }, @@ -12384,9 +11230,9 @@ } }, "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -12415,14 +11261,14 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -12457,11 +11303,11 @@ } }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -12473,26 +11319,45 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dependencies": { - "dns-packet": "^1.3.1", + "dns-packet": "^5.2.2", "thunky": "^1.0.2" }, "bin": { "multicast-dns": "cli.js" } }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", + "dependencies": { + "big-integer": "^1.6.16" + } }, "node_modules/nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12503,7 +11368,12 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" }, "node_modules/negotiator": { "version": "0.6.3", @@ -12538,12 +11408,24 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-polyglot": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/node-polyglot/-/node-polyglot-2.5.0.tgz", + "integrity": "sha512-zXVwHNhFsG3mls+LKHxoHF70GQOL3FTDT3jH7ldkb95kG76RdU7F/NbvxV7D2hNIL9VpWXW6y78Fz+3KZkatRg==", + "dependencies": { + "array.prototype.foreach": "^1.0.2", + "has": "^1.0.3", + "object.entries": "^1.1.5", + "string.prototype.trim": "^1.2.6", + "warning": "^4.0.3" + } }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -12556,7 +11438,7 @@ "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "engines": { "node": ">=0.10.0" } @@ -12584,9 +11466,9 @@ } }, "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dependencies": { "boolbase": "^1.0.0" }, @@ -12595,22 +11477,22 @@ } }, "node_modules/nwsapi": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.6.tgz", - "integrity": "sha512-vSZ4miHQ4FojLjmz2+ux4B0/XA16jfwt/LBzIUftDpRd8tujHFkXjMyLwjS08fIZCzesj2z7gJukOKJwqebJAQ==" + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "engines": { "node": ">= 6" } @@ -12693,13 +11575,15 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz", + "integrity": "sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==", "dependencies": { + "array.prototype.reduce": "^1.0.5", "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "safe-array-concat": "^1.0.0" }, "engines": { "node": ">= 0.8" @@ -12708,6 +11592,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.hasown": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", @@ -12736,6 +11631,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/oblivious-set": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", + "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" + }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -12763,7 +11663,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } @@ -12783,9 +11683,9 @@ } }, "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -12842,26 +11742,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dependencies": { - "@types/retry": "^0.12.0", + "@types/retry": "0.12.0", "retry": "^0.13.1" }, "engines": { @@ -12946,7 +11832,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } @@ -12967,7 +11853,7 @@ "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/path-type": { "version": "4.0.0", @@ -12980,7 +11866,7 @@ "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/picocolors": { "version": "1.0.0", @@ -12998,10 +11884,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "engines": { "node": ">= 6" } @@ -13127,58 +12021,54 @@ "node_modules/pkg-up/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "engines": { "node": ">=4" } }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/postcss": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", - "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "version": "8.4.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", + "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "nanoid": "^3.2.0", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, "engines": { "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", - "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", "dependencies": { - "postcss-selector-parser": "^6.0.2" + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.0.2" + "postcss": "^8.2" } }, "node_modules/postcss-browser-comments": { @@ -13206,67 +12096,79 @@ } }, "node_modules/postcss-clamp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-3.0.0.tgz", - "integrity": "sha512-QENQMIF/Grw0qX0RzSPJjw+mAiGPIwG2AnsQDIoR/WJ5Q19zLB0NrZX8cH7CzzdDWEerTPGCdep7ItFaAdtItg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": ">=7.6.0" }, "peerDependencies": { - "postcss": "^8.4.5" + "postcss": "^8.4.6" } }, "node_modules/postcss-color-functional-notation": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", - "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-color-hex-alpha": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz", - "integrity": "sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { "postcss": "^8.4" } }, "node_modules/postcss-color-rebeccapurple": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", - "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.3" + "postcss": "^8.2" } }, "node_modules/postcss-colormin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", - "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" @@ -13279,10 +12181,11 @@ } }, "node_modules/postcss-convert-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", - "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dependencies": { + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -13293,62 +12196,81 @@ } }, "node_modules/postcss-custom-media": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", - "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=10.0.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.1.0" + "postcss": "^8.3" } }, "node_modules/postcss-custom-properties": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.4.tgz", - "integrity": "sha512-i6AytuTCoDLJkWN/MtAIGriJz3j7UX6bV7Z5t+KgFz+dwZS15/mlTJY1S0kRizlk6ba0V8u8hN50Fz5Nm7tdZw==", + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-custom-selectors": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", - "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", "dependencies": { "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=10.0.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.1.2" + "postcss": "^8.3" } }, "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", - "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", "dependencies": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.10" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-discard-comments": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", - "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -13357,9 +12279,9 @@ } }, "node_modules/postcss-discard-duplicates": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", - "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -13368,9 +12290,9 @@ } }, "node_modules/postcss-discard-empty": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", - "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -13379,9 +12301,9 @@ } }, "node_modules/postcss-discard-overridden": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", - "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -13390,23 +12312,28 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.5.tgz", - "integrity": "sha512-XiZzvdxLOWZwtt/1GgHJYGoD9scog/DD/yI5dcvPrXNdNDEv7T53/6tL7ikl+EM3jcerII5/XIQzd1UHOdTi2w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-env-function": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.5.tgz", - "integrity": "sha512-gPUJc71ji9XKyl0WSzAalBeEA/89kU+XpffpPxSaaaZ1c48OL36r1Ep5R6+9XAPkIiDlSvVAwP4io12q/vTcvA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13462,28 +12389,52 @@ } }, "node_modules/postcss-gap-properties": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", - "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-image-set-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", - "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" } }, "node_modules/postcss-initial": { @@ -13495,9 +12446,9 @@ } }, "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -13509,47 +12460,64 @@ "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.21" } }, "node_modules/postcss-lab-function": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.0.4.tgz", - "integrity": "sha512-TAEW8X/ahMYV33mvLFQARtBPAy1VVJsiR9VVx3Pcbu+zlqQj0EIyJ/Ie1/EwxwIt530CWtEDzzTXBDzfdb+qIQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-load-config": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", - "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", "dependencies": { - "lilconfig": "^2.0.4", - "yaml": "^1.10.2" + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" }, "engines": { - "node": ">= 10" + "node": ">= 14" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, "peerDependencies": { + "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "postcss": { + "optional": true + }, "ts-node": { "optional": true } } }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "engines": { + "node": ">= 14" + } + }, "node_modules/postcss-loader": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", @@ -13594,12 +12562,12 @@ } }, "node_modules/postcss-merge-longhand": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", - "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.0.2" + "stylehacks": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -13609,13 +12577,13 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", - "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" }, "engines": { @@ -13626,9 +12594,9 @@ } }, "node_modules/postcss-minify-font-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", - "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13640,12 +12608,12 @@ } }, "node_modules/postcss-minify-gradients": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", - "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dependencies": { "colord": "^2.9.1", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -13656,12 +12624,12 @@ } }, "node_modules/postcss-minify-params": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", - "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.1", + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -13672,9 +12640,9 @@ } }, "node_modules/postcss-minify-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", - "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dependencies": { "postcss-selector-parser": "^6.0.5" }, @@ -13697,9 +12665,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -13741,11 +12709,11 @@ } }, "node_modules/postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "dependencies": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.11" }, "engines": { "node": ">=12.0" @@ -13759,17 +12727,22 @@ } }, "node_modules/postcss-nesting": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.2.tgz", - "integrity": "sha512-dJGmgmsvpzKoVMtDMQQG/T6FSqs6kDtUDirIfl4KnjMCiY9/ETX8jdKyCd20swSRAbUYkaBKV20pxkzxoOXLqQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", "dependencies": { - "postcss-selector-parser": "^6.0.8" + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.3" + "postcss": "^8.2" } }, "node_modules/postcss-normalize": { @@ -13790,9 +12763,9 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", - "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -13801,9 +12774,9 @@ } }, "node_modules/postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13815,9 +12788,9 @@ } }, "node_modules/postcss-normalize-positions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", - "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13829,9 +12802,9 @@ } }, "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", - "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13843,9 +12816,9 @@ } }, "node_modules/postcss-normalize-string": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", - "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13857,9 +12830,9 @@ } }, "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13871,11 +12844,11 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", - "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -13886,9 +12859,9 @@ } }, "node_modules/postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" @@ -13901,9 +12874,9 @@ } }, "node_modules/postcss-normalize-whitespace": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", - "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13915,9 +12888,9 @@ } }, "node_modules/postcss-opacity-percentage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", - "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", "funding": [ { "type": "kofi", @@ -13930,14 +12903,17 @@ ], "engines": { "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" } }, "node_modules/postcss-ordered-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", - "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dependencies": { - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -13948,14 +12924,21 @@ } }, "node_modules/postcss-overflow-shorthand": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", - "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-page-break": { @@ -13967,90 +12950,113 @@ } }, "node_modules/postcss-place": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", - "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-preset-env": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.3.1.tgz", - "integrity": "sha512-x7fNsJxfkY60P4FUNwhJUOfXBFfnObd2EcUYY97sXZ0XRLgmAE65es9EFIYHq1rAk7X3LMfbG+L9wYgkrNsq5Q==", - "dependencies": { - "@csstools/postcss-font-format-keywords": "^1.0.0", - "@csstools/postcss-hwb-function": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^2.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.0", - "autoprefixer": "^10.4.2", - "browserslist": "^4.19.1", - "css-blank-pseudo": "^3.0.2", - "css-has-pseudo": "^3.0.3", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^6.1.0", - "postcss-attribute-case-insensitive": "^5.0.0", - "postcss-clamp": "^3.0.0", - "postcss-color-functional-notation": "^4.2.1", - "postcss-color-hex-alpha": "^8.0.2", - "postcss-color-rebeccapurple": "^7.0.2", - "postcss-custom-media": "^8.0.0", - "postcss-custom-properties": "^12.1.4", - "postcss-custom-selectors": "^6.0.0", - "postcss-dir-pseudo-class": "^6.0.3", - "postcss-double-position-gradients": "^3.0.4", - "postcss-env-function": "^4.0.4", - "postcss-focus-visible": "^6.0.3", - "postcss-focus-within": "^5.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.2", - "postcss-image-set-function": "^4.0.5", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.0.3", - "postcss-logical": "^5.0.3", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.2", + "postcss-nesting": "^10.2.0", "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.2", + "postcss-overflow-shorthand": "^3.0.4", "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.3", - "postcss-pseudo-class-any-link": "^7.1.0", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^5.0.0" + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.1.tgz", - "integrity": "sha512-JRoLFvPEX/1YTPxRxp1JO4WxBVXJYrSY7NHeak5LImwJ+VobFMwYDQHvfTXEpcn+7fYIeGkC29zYFhFWIZD8fg==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", "dependencies": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.10" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "engines": { @@ -14061,9 +13067,9 @@ } }, "node_modules/postcss-reduce-transforms": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", - "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -14083,20 +13089,27 @@ } }, "node_modules/postcss-selector-not": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", - "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", "dependencies": { - "balanced-match": "^1.0.0" + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.1.0" + "postcss": "^8.2" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", - "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -14106,11 +13119,11 @@ } }, "node_modules/postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dependencies": { - "postcss-value-parser": "^4.1.0", + "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" }, "engines": { @@ -14174,9 +13187,9 @@ } }, "node_modules/postcss-unique-selectors": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", - "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dependencies": { "postcss-selector-parser": "^6.0.5" }, @@ -14244,15 +13257,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dependencies": { "asap": "~2.0.6" } @@ -14315,9 +13333,9 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } @@ -14325,7 +13343,7 @@ "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -14345,9 +13363,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "node_modules/queue-microtask": { @@ -14369,15 +13404,109 @@ } ] }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "node_modules/ra-core": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/ra-core/-/ra-core-4.12.2.tgz", + "integrity": "sha512-ooChHjyvDr8hZuVWJAR4o+bMyuHlI4ie+d2plLRmY4FNtUqiMf8cjagN//kLHAz4GdVnPTNZBnyJTaGYw9odOQ==", + "dependencies": { + "clsx": "^1.1.1", + "date-fns": "^2.19.0", + "eventemitter3": "^4.0.7", + "inflection": "~1.12.0", + "jsonexport": "^3.2.0", + "lodash": "~4.17.5", + "prop-types": "^15.6.1", + "query-string": "^7.1.1", + "react-is": "^17.0.2", + "react-query": "^3.32.1" + }, + "peerDependencies": { + "history": "^5.1.0", + "react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react-hook-form": "^7.43.9", + "react-router": "^6.1.0", + "react-router-dom": "^6.1.0" + } + }, + "node_modules/ra-core/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "engines": { - "node": ">=10" + "node": ">=6" + } + }, + "node_modules/ra-core/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/ra-data-simple-rest": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/ra-data-simple-rest/-/ra-data-simple-rest-4.12.2.tgz", + "integrity": "sha512-fmJiBqwha0j7bjFLq+jpCC8JFqKnBCjLYXdcVX0hX+9cbfQ8skP0ChrK+0cxCI1Adt1zWGgxOXriucEkXci7tA==", + "dependencies": { + "query-string": "^7.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "ra-core": "^4.0.0" + } + }, + "node_modules/ra-i18n-polyglot": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/ra-i18n-polyglot/-/ra-i18n-polyglot-4.12.2.tgz", + "integrity": "sha512-xtR0M1CjmgHekwq6B1WSPFAFV1cHpzG+rLMdD0MAXNlxHevhi+tiAjJBo0fHZMUejyAAiCiP+QRSzVARdqoOAg==", + "dependencies": { + "node-polyglot": "^2.2.2", + "ra-core": "^4.12.2" + } + }, + "node_modules/ra-language-english": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/ra-language-english/-/ra-language-english-4.12.2.tgz", + "integrity": "sha512-65bVgDuAKH2NUJUSwFrEcpzMhyJPBVgmIekIPbfq/jAYUAQHEggRFz/9pRgkXXEvGVuwfm+kTVuseP2lC+fJ5Q==", + "dependencies": { + "ra-core": "^4.12.2" + } + }, + "node_modules/ra-ui-materialui": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/ra-ui-materialui/-/ra-ui-materialui-4.12.3.tgz", + "integrity": "sha512-mXyf1xykKD2JM6JZld6AVKqG+L603ilWCGqsmrgkeZFGfaUCuIlHt7XBbM+yRXbLWL9Stc66aXJBzAUDqxmkpA==", + "dependencies": { + "autosuggest-highlight": "^3.1.1", + "clsx": "^1.1.1", + "css-mediaquery": "^0.1.2", + "dompurify": "^2.4.3", + "hotscript": "^1.0.12", + "inflection": "~1.12.0", + "jsonexport": "^3.2.0", + "lodash": "~4.17.5", + "prop-types": "^15.7.0", + "query-string": "^7.1.1", + "react-dropzone": "^12.0.4", + "react-error-boundary": "^3.1.4", + "react-query": "^3.32.1", + "react-transition-group": "^4.4.1" + }, + "peerDependencies": { + "@mui/icons-material": "^5.0.1", + "@mui/material": "^5.0.2", + "ra-core": "^4.0.0", + "react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react-hook-form": "*", + "react-router": "^6.1.0", + "react-router-dom": "^6.1.0" + } + }, + "node_modules/ra-ui-materialui/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" } }, "node_modules/raf": { @@ -14449,6 +13578,29 @@ "node": ">=0.10.0" } }, + "node_modules/react-admin": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/react-admin/-/react-admin-4.12.3.tgz", + "integrity": "sha512-b0PMrEG17qRIo8Iu/hwP7HtnaCC1A2iXlBGWitvLoqCCGulzO1GmlloHVxm/ztje342Nz2bxRhH8GPQQl5v1iw==", + "dependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "@mui/icons-material": "^5.0.1", + "@mui/material": "^5.0.2", + "history": "^5.1.0", + "ra-core": "^4.12.2", + "ra-i18n-polyglot": "^4.12.2", + "ra-language-english": "^4.12.2", + "ra-ui-materialui": "^4.12.3", + "react-hook-form": "^7.43.9", + "react-router": "^6.1.0", + "react-router-dom": "^6.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-app-polyfill": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", @@ -14465,10 +13617,15 @@ "node": ">=14" } }, + "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "node_modules/react-dev-utils": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", - "integrity": "sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "dependencies": { "@babel/code-frame": "^7.16.0", "address": "^1.1.2", @@ -14489,7 +13646,7 @@ "open": "^8.4.0", "pkg-up": "^3.1.0", "prompts": "^2.4.2", - "react-error-overlay": "^6.0.10", + "react-error-overlay": "^6.0.11", "recursive-readdir": "^2.2.2", "shell-quote": "^1.7.3", "strip-ansi": "^6.0.1", @@ -14499,70 +13656,6 @@ "node": ">=14" } }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/react-dev-utils/node_modules/loader-utils": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", @@ -14571,17 +13664,6 @@ "node": ">= 12.13.0" } }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/react-dom": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", @@ -14595,18 +13677,63 @@ "react": "17.0.2" } }, + "node_modules/react-dropzone": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.1.0.tgz", + "integrity": "sha512-iBYHA1rbopIvtzokEX4QubO6qk5IF/x3BtKGu74rF2JkQDXnwC4uO/lHKpaw4PJIV6iIAYOlwLv2FpiGyqHNog==", + "dependencies": { + "attr-accept": "^2.2.2", + "file-selector": "^0.5.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8" + } + }, + "node_modules/react-error-boundary": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", + "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "react": ">=16.13.1" + } + }, "node_modules/react-error-overlay": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz", - "integrity": "sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA==" + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-hook-form": { + "version": "7.45.4", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.45.4.tgz", + "integrity": "sha512-HGDV1JOOBPZj10LB3+OZgfDBTn+IeEsNOKiq/cxbQAIbKaiJUe/KV8DBUzsx0Gx/7IG/orWqRRm736JwOfUSWQ==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } }, "node_modules/react-i18next": { - "version": "11.16.7", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.16.7.tgz", - "integrity": "sha512-7yotILJLnKfvUfrl/nt9eK9vFpVFjZPLWAwBzWL6XppSZZEvlmlKk0GBGDCAPfLfs8oND7WAbry8wGzdoiW5Nw==", + "version": "11.18.6", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", + "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==", "dependencies": { "@babel/runtime": "^7.14.5", - "html-escaper": "^2.0.2", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { @@ -14623,9 +13750,34 @@ } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/react-query": { + "version": "3.39.3", + "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz", + "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "broadcast-channel": "^3.4.1", + "match-sorter": "^6.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } }, "node_modules/react-refresh": { "version": "0.11.0", @@ -14636,23 +13788,29 @@ } }, "node_modules/react-router": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz", - "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.2.tgz", + "integrity": "sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==", "dependencies": { - "history": "^5.2.0" + "@remix-run/router": "1.7.2" + }, + "engines": { + "node": ">=14" }, "peerDependencies": { "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz", - "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.2.tgz", + "integrity": "sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==", "dependencies": { - "history": "^5.2.0", - "react-router": "6.3.0" + "@remix-run/router": "1.7.2", + "react-router": "6.14.2" + }, + "engines": { + "node": ">=14" }, "peerDependencies": { "react": ">=16.8", @@ -14746,10 +13904,18 @@ "react-dom": ">=16.6.0" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14810,14 +13976,14 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dependencies": { "@babel/runtime": "^7.8.4" } @@ -14843,17 +14009,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -14892,11 +14047,16 @@ "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "engines": { "node": ">= 0.10" } }, + "node_modules/remove-accents": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.4.tgz", + "integrity": "sha512-EpFcOa/ISetVHEXqu+VwI96KZBmq+a8LJnGkaeFw45epGlxIZz5dhEEnNZMsQXgORu3qaMoLX4qJCzOik6ytAg==" + }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -14912,7 +14072,7 @@ "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } @@ -14928,14 +14088,19 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -14957,7 +14122,7 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", @@ -14965,6 +14130,14 @@ "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, "node_modules/resolve-url-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", @@ -15022,9 +14195,9 @@ } }, "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", "engines": { "node": ">=10" } @@ -15089,14 +14262,6 @@ "rollup": "^2.0.0" } }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/rollup-plugin-terser/node_modules/jest-worker": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", @@ -15118,17 +14283,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -15151,28 +14305,59 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safe-regex-test": { + "node_modules/safe-array-concat": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sanitize.css": { "version": "13.0.0", @@ -15180,9 +14365,9 @@ "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" }, "node_modules/sass-loader": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", - "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", "dependencies": { "klona": "^2.0.4", "neo-async": "^2.6.2" @@ -15198,6 +14383,7 @@ "fibers": ">= 3.1.0", "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "sass": "^1.3.0", + "sass-embedded": "*", "webpack": "^5.0.0" }, "peerDependenciesMeta": { @@ -15209,6 +14395,9 @@ }, "sass": { "optional": true + }, + "sass-embedded": { + "optional": true } } }, @@ -15257,23 +14446,23 @@ "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "node_modules/selfsigned": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", - "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "dependencies": { - "node-forge": "^1.2.0" + "node-forge": "^1" }, "engines": { "node": ">=10" } }, "node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -15284,6 +14473,22 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -15320,27 +14525,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/send/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", @@ -15352,7 +14541,7 @@ "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -15374,10 +14563,18 @@ "ms": "2.0.0" } }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -15391,18 +14588,26 @@ "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", @@ -15442,9 +14647,12 @@ } }, "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/side-channel": { "version": "1.0.4", @@ -15509,9 +14717,9 @@ } }, "node_modules/source-map-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", - "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", "dependencies": { "abab": "^2.0.5", "iconv-lite": "^0.6.3", @@ -15528,16 +14736,6 @@ "webpack": "^5.0.0" } }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -15589,20 +14787,29 @@ "wbuf": "^1.7.3" } }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -15619,16 +14826,35 @@ } }, "node_modules/stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" } }, "node_modules/string_decoder": { @@ -15639,25 +14865,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -15824,9 +15031,9 @@ } }, "node_modules/style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", + "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", "engines": { "node": ">= 12.13.0" }, @@ -15839,11 +15046,11 @@ } }, "node_modules/stylehacks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", - "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "engines": { @@ -15858,38 +15065,55 @@ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", "dependencies": { - "has-flag": "^3.0.0" + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/sucrase/node_modules/glob": { + "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.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { + "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -15900,6 +15124,18 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -15943,6 +15179,43 @@ "node": ">=4.0.0" } }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/chalk": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, "node_modules/svgo/node_modules/css-select": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", @@ -15958,13545 +15231,827 @@ "version": "3.4.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "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" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "node_modules/tailwindcss": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.18.tgz", - "integrity": "sha512-ihPTpEyA5ANgZbwKlgrbfnzOp9R5vDHFWmqxB1PT8NwOGCOFVVMl+Ps1cQQ369acaqqf1BEF77roCwK0lvNmTw==", - "dependencies": { - "arg": "^5.0.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "cosmiconfig": "^7.0.1", - "detective": "^5.2.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "normalize-path": "^3.0.0", - "object-hash": "^2.2.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.0", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.21.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "autoprefixer": "^10.0.2", - "postcss": "^8.0.9" - } - }, - "node_modules/tailwindcss/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tailwindcss/node_modules/chalk": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/tailwindcss/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tailwindcss/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/tailwindcss/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tailwindcss/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/commander": { - "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==" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "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" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-vitals": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", - "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.88.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", - "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", - "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.1", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", - "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.2.2", - "ansi-html-community": "^0.0.8", - "bonjour": "^3.5.0", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "default-gateway": "^6.0.3", - "del": "^6.0.0", - "express": "^4.17.1", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.0", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "portfinder": "^1.0.28", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "spdy": "^4.0.2", - "strip-ansi": "^7.0.0", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "dependencies": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "peerDependencies": { - "webpack": "^4.44.2 || ^5.47.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "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" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "node_modules/whatwg-url": { - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/workbox-background-sync": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", - "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", - "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-build": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", - "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", - "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.6.0", - "workbox-broadcast-update": "6.6.0", - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-google-analytics": "6.6.0", - "workbox-navigation-preload": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-range-requests": "6.6.0", - "workbox-recipes": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0", - "workbox-streams": "6.6.0", - "workbox-sw": "6.6.0", - "workbox-window": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-build/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/workbox-build/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/workbox-build/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", - "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", - "deprecated": "workbox-background-sync@6.6.0", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-core": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", - "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" - }, - "node_modules/workbox-expiration": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", - "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-google-analytics": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", - "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", - "dependencies": { - "workbox-background-sync": "6.6.0", - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", - "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-precaching": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", - "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-range-requests": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", - "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-recipes": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", - "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", - "dependencies": { - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-routing": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", - "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-strategies": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", - "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-streams": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", - "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0" - } - }, - "node_modules/workbox-sw": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", - "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" - }, - "node_modules/workbox-webpack-plugin": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", - "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", - "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/workbox-window": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", - "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.6.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" - }, - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==" - }, - "@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/eslint-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.5.tgz", - "integrity": "sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==", - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "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==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==" - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==" - }, - "@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.5.tgz", - "integrity": "sha512-h8hlezQ4dl6ixodgXkH8lUfcD7x+WAuIqPUjwGoItynrXOAv4a4Tci1zA/qjzQjjcl0v3QpLdc2LM6ZACQuY7A==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/plugin-syntax-decorators": "^7.22.5" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "requires": {} - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz", - "integrity": "sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", - "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", - "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-flow": "^7.16.7" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.7.tgz", - "integrity": "sha512-lF+cfsyTgwWkcw715J88JhMYJ5GpysYNLhLP1PkvkhTRN7B3e74R/1KsDxFxhRpSn0UUD3IWM4GvdBR2PEbbQQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", - "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.16.7" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", - "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.16.7", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" - } - }, - "@babel/preset-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", - "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-typescript": "^7.22.5" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/runtime-corejs3": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.0.tgz", - "integrity": "sha512-qeydncU80ravKzovVncW3EYaC1ji3GpntdPgNcJy9g7hHSY6KX+ne1cbV3ov7Zzm4F1z0+QreZPCuw1ynkmYNg==", - "requires": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" - }, - "@csstools/postcss-font-format-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz", - "integrity": "sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-hwb-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.0.tgz", - "integrity": "sha512-VSTd7hGjmde4rTj1rR30sokY3ONJph1reCBTUXqeW1fKwETPy1x4t/XIeaaqbMbC5Xg4SM/lyXZ2S8NELT2TaA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-is-pseudo-class": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.0.tgz", - "integrity": "sha512-WnfZlyuh/CW4oS530HBbrKq0G8BKl/bsNr5NMFoubBFzJfvFRGJhplCgIJYWUidLuL3WJ/zhMtDIyNFTqhx63Q==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "@csstools/postcss-normalize-display-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz", - "integrity": "sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@emotion/babel-plugin": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", - "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/serialize": "^1.1.2", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - } - } - }, - "@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", - "requires": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "stylis": "4.2.0" - } - }, - "@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" - }, - "@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", - "requires": { - "@emotion/memoize": "^0.8.1" - } - }, - "@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, - "@emotion/react": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", - "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "hoist-non-react-statics": "^3.3.1" - } - }, - "@emotion/serialize": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", - "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", - "requires": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", - "csstype": "^3.0.2" - } - }, - "@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" - }, - "@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" - } - }, - "@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" - }, - "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", - "requires": {} - }, - "@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" - }, - "@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" - }, - "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "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==" - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" - }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - } - } - }, - "@mui/base": { - "version": "5.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.5.tgz", - "integrity": "sha512-vy3TWLQYdGNecTaufR4wDNQFV2WEg6wRPi6BVbx6q1vP3K1mbxIn1+XOqOzfYBXjFHvMx0gZAo2TgWbaqfgvAA==", - "requires": { - "@babel/runtime": "^7.22.5", - "@emotion/is-prop-valid": "^1.2.1", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", - "@popperjs/core": "^2.11.8", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, - "dependencies": { - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - } - } - }, - "@mui/core-downloads-tracker": { - "version": "5.13.4", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", - "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==" - }, - "@mui/icons-material": { - "version": "5.11.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", - "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", - "requires": { - "@babel/runtime": "^7.21.0" - } - }, - "@mui/material": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.6.tgz", - "integrity": "sha512-/c2ZApeQm2sTYdQXjqEnldaBMBcUEiyu2VRS6bS39ZeNaAcCLBQbYocLR46R+f0S5dgpBzB0T4AsOABPOFYZ5Q==", - "requires": { - "@babel/runtime": "^7.22.5", - "@mui/base": "5.0.0-beta.5", - "@mui/core-downloads-tracker": "^5.13.4", - "@mui/system": "^5.13.6", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", - "@types/react-transition-group": "^4.4.6", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" - }, - "dependencies": { - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - } - } - }, - "@mui/private-theming": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", - "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", - "requires": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.13.1", - "prop-types": "^15.8.1" - } - }, - "@mui/styled-engine": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", - "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", - "requires": { - "@babel/runtime": "^7.21.0", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - } - }, - "@mui/styles": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.13.2.tgz", - "integrity": "sha512-gKNkVyk6azQ8wfCamh3yU/wLv1JscYrsQX9huQBwfwtE7kUTq2rgggdfJjRADjbcmT6IPX+oCHYjGfqqFgDIQQ==", - "requires": { - "@babel/runtime": "^7.21.0", - "@emotion/hash": "^0.9.1", - "@mui/private-theming": "^5.13.1", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "hoist-non-react-statics": "^3.3.2", - "jss": "^10.10.0", - "jss-plugin-camel-case": "^10.10.0", - "jss-plugin-default-unit": "^10.10.0", - "jss-plugin-global": "^10.10.0", - "jss-plugin-nested": "^10.10.0", - "jss-plugin-props-sort": "^10.10.0", - "jss-plugin-rule-value-function": "^10.10.0", - "jss-plugin-vendor-prefixer": "^10.10.0", - "prop-types": "^15.8.1" - } - }, - "@mui/system": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", - "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", - "requires": { - "@babel/runtime": "^7.22.5", - "@mui/private-theming": "^5.13.1", - "@mui/styled-engine": "^5.13.2", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" - } - }, - "@mui/types": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", - "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", - "requires": {} - }, - "@mui/utils": { - "version": "5.14.3", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.3.tgz", - "integrity": "sha512-gZ6Etw+ppO43GYc1HFZSLjwd4DoZoa+RrYTD25wQLfzcSoPjVoC/zZqA2Lkq0zjgwGBQOSxKZI6jfp9uXR+kgw==", - "requires": { - "@babel/runtime": "^7.22.6", - "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, - "dependencies": { - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - } - } - }, - "@mui/x-date-pickers": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.10.2.tgz", - "integrity": "sha512-RZHvPj5UYGdV2FoBlTbtAtg1aaJ1sbdD9LM9vSgefQWMW0vFC4fSYtFACS4ptxK/8Q0FHyuVZF5bDO+TUAPxQg==", - "requires": { - "@babel/runtime": "^7.22.6", - "@mui/utils": "^5.13.7", - "@types/react-transition-group": "^4.4.6", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-transition-group": "^4.4.5" - } - }, - "@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", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "requires": { - "eslint-scope": "5.1.1" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz", - "integrity": "sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw==", - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.8.1", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - } - } - }, - "@rushstack/eslint-patch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", - "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==" - }, - "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" - }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - } - }, - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "requires": { - "@babel/types": "^7.12.6" - } - }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - } - }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - } - }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - } - }, - "@testing-library/dom": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz", - "integrity": "sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "aria-query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@testing-library/jest-dom": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz", - "integrity": "sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug==", - "requires": { - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "aria-query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==" - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@testing-library/react": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.2.tgz", - "integrity": "sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==", - "requires": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.0.0" - } - }, - "@testing-library/user-event": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", - "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", - "requires": { - "@babel/runtime": "^7.12.5" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" - }, - "@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "requires": { - "@types/node": "*" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-proxy": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", - "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", - "requires": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "@types/node": { - "version": "16.11.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", - "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prettier": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", - "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/react": { - "version": "17.0.39", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz", - "integrity": "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", - "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-is": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", - "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-transition-group": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", - "requires": { - "@types/react": "*" - } - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "requires": { - "@types/node": "*" - } - }, - "@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" - }, - "@types/testing-library__jest-dom": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz", - "integrity": "sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==", - "requires": { - "@types/jest": "*" - } - }, - "@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" - }, - "@types/ws": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", - "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", - "integrity": "sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==", - "requires": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/type-utils": "5.10.2", - "@typescript-eslint/utils": "5.10.2", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.10.2.tgz", - "integrity": "sha512-stRnIlxDduzxtaVLtEohESoXI1k7J6jvJHGyIkOT2pvXbg5whPM6f9tzJ51bJJxaJTdmvwgVFDNCopFRb2F5Gw==", - "requires": { - "@typescript-eslint/utils": "5.10.2" - } - }, - "@typescript-eslint/parser": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", - "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", - "requires": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", - "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", - "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz", - "integrity": "sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==", - "requires": { - "@typescript-eslint/utils": "5.10.2", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", - "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==" - }, - "@typescript-eslint/typescript-estree": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", - "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", - "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", - "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", - "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", - "requires": { - "@typescript-eslint/types": "5.10.2", - "eslint-visitor-keys": "^3.0.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - } - } - }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "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-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autoprefixer": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", - "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", - "requires": { - "browserslist": "^4.19.1", - "caniuse-lite": "^1.0.30001297", - "fraction.js": "^4.1.2", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "axe-core": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", - "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==" - }, - "axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "requires": {} - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", - "requires": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001512", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", - "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==" - }, - "case-sensitive-paths-webpack-plugin": { - "version": "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": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" - }, - "check-types": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", - "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" - }, - "clean-css": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", - "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" - }, - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "core-js": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz", - "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==" - }, - "core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-js-pure": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.0.tgz", - "integrity": "sha512-VaJUunCZLnxuDbo1rNOzwbet9E1K9joiXS5+DQMPtgxd24wfsZbJZMMfQLGYMlCUvSxLfsRUUhoOR2x28mFfeg==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "requires": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-declaration-sorter": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", - "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", - "requires": { - "timsort": "^0.3.0" - } - }, - "css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-loader": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.6.0.tgz", - "integrity": "sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.5", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - } - }, - "css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "requires": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "requires": {} - }, - "css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "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==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-vendor": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", - "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", - "requires": { - "@babel/runtime": "^7.8.3", - "is-in-browser": "^1.0.2" - } - }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==" - }, - "css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" - }, - "cssdb": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.2.0.tgz", - "integrity": "sha512-OP1owHiK7IkCPSmNvWGMOEbfMcPZ8HA1TkzUXzB2SA708Y4pFGXWtLAVxds2QJI/0FA3mCNwRkEA9B4U4fW2Dw==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", - "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", - "requires": { - "cssnano-preset-default": "^5.1.11", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", - "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", - "requires": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.1", - "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.4", - "postcss-convert-values": "^5.0.3", - "postcss-discard-comments": "^5.0.2", - "postcss-discard-duplicates": "^5.0.2", - "postcss-discard-empty": "^5.0.2", - "postcss-discard-overridden": "^5.0.3", - "postcss-merge-longhand": "^5.0.5", - "postcss-merge-rules": "^5.0.5", - "postcss-minify-font-values": "^5.0.3", - "postcss-minify-gradients": "^5.0.5", - "postcss-minify-params": "^5.0.4", - "postcss-minify-selectors": "^5.1.2", - "postcss-normalize-charset": "^5.0.2", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.3", - "postcss-normalize-repeat-style": "^5.0.3", - "postcss-normalize-string": "^5.0.3", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.3", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.3", - "postcss-ordered-values": "^5.0.4", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.3", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.3" - } - }, - "cssnano-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", - "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - } - } - }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - } - }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-accessibility-api": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz", - "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==" - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" - } - } - }, - "domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.449", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", - "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==" - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "requires": { - "stackframe": "^1.1.1" - } - }, - "es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "requires": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, - "eslint": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", - "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", - "requires": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "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==" - } - } - }, - "eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "requires": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - } - }, - "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "requires": { - "@typescript-eslint/experimental-utils": "^5.0.0" - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", - "requires": { - "@babel/runtime": "^7.16.3", - "aria-query": "^4.2.2", - "array-includes": "^3.1.4", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", - "language-tags": "^1.0.5", - "minimatch": "^3.0.4" - } - }, - "eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", - "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", - "requires": {} - }, - "eslint-plugin-testing-library": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.5.tgz", - "integrity": "sha512-0j355vJpJCE/2g+aayIgJRUB6jBVqpD5ztMLGcadR1PgrgGPnPxN1HJuOAsAAwiMo27GwRnpJB8KOQzyNuNZrw==", - "requires": { - "@typescript-eslint/utils": "^5.10.2" - } - }, - "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "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": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==" - }, - "eslint-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", - "requires": { - "@types/eslint": "^7.28.2", - "jest-worker": "^27.3.1", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1" - } - }, - "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", - "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - } - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fraction.js": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", - "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-to-regexp": { - "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==" - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "history": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", - "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", - "requires": { - "@babel/runtime": "^7.7.6" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", - "requires": { - "void-elements": "3.1.0" - } - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } - } - }, - "http-parser-js": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", - "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", - "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "i18next": { - "version": "21.6.16", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.6.16.tgz", - "integrity": "sha512-xJlzrVxG9CyAGsbMP1aKuiNr1Ed2m36KiTB7hjGMG2Zo4idfw3p9THUEu+GjBwIgEZ7F11ZbCzJcfv4uyfKNuw==", - "requires": { - "@babel/runtime": "^7.17.2" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "immer": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz", - "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - } - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "requires": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "requires": {} - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==" - }, - "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - } - }, - "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.0.tgz", - "integrity": "sha512-oGu2QekBMXgyQNWPDRQ001bjvDnZe4/zBTz37TMbiKz1NbNiyiH5hRkobe7npRN6GfbGbxMYFck/vQ1r9c1VMA==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - } - } - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - }, - "string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "requires": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" - }, - "jss": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", - "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^3.0.2", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-camel-case": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", - "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", - "requires": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.10.0" - } - }, - "jss-plugin-default-unit": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", - "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "jss-plugin-global": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", - "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "jss-plugin-nested": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", - "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-props-sort": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", - "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "jss-plugin-rule-value-function": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", - "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-vendor-prefixer": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", - "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", - "requires": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.8", - "jss": "10.10.0" - } - }, - "jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", - "requires": { - "array-includes": "^3.1.3", - "object.assign": "^4.1.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" - }, - "language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==" - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==" - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=" - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "requires": { - "tmpl": "1.0.5" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", - "requires": { - "fs-monkey": "1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" - }, - "mini-css-extract-plugin": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz", - "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==", - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - }, - "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.6.tgz", - "integrity": "sha512-vSZ4miHQ4FojLjmz2+ux4B0/XA16jfwt/LBzIUftDpRd8tujHFkXjMyLwjS08fIZCzesj2z7gJukOKJwqebJAQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", - "requires": { - "@types/retry": "^0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "postcss": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", - "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", - "requires": { - "nanoid": "^3.2.0", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", - "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", - "requires": { - "postcss-selector-parser": "^6.0.2" - } - }, - "postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "requires": {} - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-clamp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-3.0.0.tgz", - "integrity": "sha512-QENQMIF/Grw0qX0RzSPJjw+mAiGPIwG2AnsQDIoR/WJ5Q19zLB0NrZX8cH7CzzdDWEerTPGCdep7ItFaAdtItg==", - "requires": { - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-color-functional-notation": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", - "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-hex-alpha": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz", - "integrity": "sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", - "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", - "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", - "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-media": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", - "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", - "requires": {} - }, - "postcss-custom-properties": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.4.tgz", - "integrity": "sha512-i6AytuTCoDLJkWN/MtAIGriJz3j7UX6bV7Z5t+KgFz+dwZS15/mlTJY1S0kRizlk6ba0V8u8hN50Fz5Nm7tdZw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-selectors": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", - "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-dir-pseudo-class": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", - "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-discard-comments": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", - "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", - "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", - "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", - "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", - "requires": {} - }, - "postcss-double-position-gradients": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.5.tgz", - "integrity": "sha512-XiZzvdxLOWZwtt/1GgHJYGoD9scog/DD/yI5dcvPrXNdNDEv7T53/6tL7ikl+EM3jcerII5/XIQzd1UHOdTi2w==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-env-function": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.5.tgz", - "integrity": "sha512-gPUJc71ji9XKyl0WSzAalBeEA/89kU+XpffpPxSaaaZ1c48OL36r1Ep5R6+9XAPkIiDlSvVAwP4io12q/vTcvA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "requires": {} - }, - "postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "requires": {} - }, - "postcss-gap-properties": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", - "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", - "requires": {} - }, - "postcss-image-set-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", - "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "requires": {} - }, - "postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", - "requires": { - "camelcase-css": "^2.0.1" - } - }, - "postcss-lab-function": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.0.4.tgz", - "integrity": "sha512-TAEW8X/ahMYV33mvLFQARtBPAy1VVJsiR9VVx3Pcbu+zlqQj0EIyJ/Ie1/EwxwIt530CWtEDzzTXBDzfdb+qIQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-load-config": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", - "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", - "requires": { - "lilconfig": "^2.0.4", - "yaml": "^1.10.2" - } - }, - "postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - } - }, - "postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "requires": {} - }, - "postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "requires": {} - }, - "postcss-merge-longhand": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", - "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.0.2" - } - }, - "postcss-merge-rules": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", - "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.1", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", - "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", - "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", - "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", - "requires": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", - "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", - "requires": { - "postcss-selector-parser": "^6.0.6" - } - }, - "postcss-nesting": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.2.tgz", - "integrity": "sha512-dJGmgmsvpzKoVMtDMQQG/T6FSqs6kDtUDirIfl4KnjMCiY9/ETX8jdKyCd20swSRAbUYkaBKV20pxkzxoOXLqQ==", - "requires": { - "postcss-selector-parser": "^6.0.8" - } - }, - "postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "requires": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - } - }, - "postcss-normalize-charset": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", - "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", - "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", - "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", - "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", - "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", - "requires": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", - "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-opacity-percentage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", - "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==" - }, - "postcss-ordered-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", - "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", - "requires": { - "cssnano-utils": "^3.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-overflow-shorthand": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", - "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", - "requires": {} - }, - "postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "requires": {} - }, - "postcss-place": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", - "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-preset-env": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.3.1.tgz", - "integrity": "sha512-x7fNsJxfkY60P4FUNwhJUOfXBFfnObd2EcUYY97sXZ0XRLgmAE65es9EFIYHq1rAk7X3LMfbG+L9wYgkrNsq5Q==", - "requires": { - "@csstools/postcss-font-format-keywords": "^1.0.0", - "@csstools/postcss-hwb-function": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^2.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.0", - "autoprefixer": "^10.4.2", - "browserslist": "^4.19.1", - "css-blank-pseudo": "^3.0.2", - "css-has-pseudo": "^3.0.3", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^6.1.0", - "postcss-attribute-case-insensitive": "^5.0.0", - "postcss-clamp": "^3.0.0", - "postcss-color-functional-notation": "^4.2.1", - "postcss-color-hex-alpha": "^8.0.2", - "postcss-color-rebeccapurple": "^7.0.2", - "postcss-custom-media": "^8.0.0", - "postcss-custom-properties": "^12.1.4", - "postcss-custom-selectors": "^6.0.0", - "postcss-dir-pseudo-class": "^6.0.3", - "postcss-double-position-gradients": "^3.0.4", - "postcss-env-function": "^4.0.4", - "postcss-focus-visible": "^6.0.3", - "postcss-focus-within": "^5.0.3", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.2", - "postcss-image-set-function": "^4.0.5", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.0.3", - "postcss-logical": "^5.0.3", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.2", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.2", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.3", - "postcss-pseudo-class-any-link": "^7.1.0", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^5.0.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.1.tgz", - "integrity": "sha512-JRoLFvPEX/1YTPxRxp1JO4WxBVXJYrSY7NHeak5LImwJ+VobFMwYDQHvfTXEpcn+7fYIeGkC29zYFhFWIZD8fg==", - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", - "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "requires": {} - }, - "postcss-selector-not": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", - "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", - "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", - "requires": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.7.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - } - } - } - }, - "postcss-unique-selectors": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", - "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "requires": { - "asap": "~2.0.6" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "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==" - } - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "react": { - "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==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "requires": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - } - }, - "react-dev-utils": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", - "integrity": "sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ==", - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.10", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-error-overlay": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz", - "integrity": "sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA==" - }, - "react-i18next": { - "version": "11.16.7", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.16.7.tgz", - "integrity": "sha512-7yotILJLnKfvUfrl/nt9eK9vFpVFjZPLWAwBzWL6XppSZZEvlmlKk0GBGDCAPfLfs8oND7WAbry8wGzdoiW5Nw==", - "requires": { - "@babel/runtime": "^7.14.5", - "html-escaper": "^2.0.2", - "html-parse-stringify": "^3.0.1" - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" - }, - "react-router": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz", - "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==", - "requires": { - "history": "^5.2.0" - } - }, - "react-router-dom": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz", - "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==", - "requires": { - "history": "^5.2.0", - "react-router": "6.3.0" - } - }, - "react-scripts": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", - "integrity": "sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg==", - "requires": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.0", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "fsevents": "^2.3.2", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.0", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - } - }, - "react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { - "minimatch": "^3.0.5" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" - }, - "regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" - }, - "sass-loader": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", - "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "selfsigned": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", - "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", - "requires": { - "node-forge": "^1.2.0" - } - }, - "semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", - "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - } - }, - "source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } - }, - "stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - } - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "node_modules/svgo/node_modules/dom-serializer": { + "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" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" } }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } }, - "strip-indent": { + "node_modules/svgo/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "requires": { - "min-indent": "^1.0.0" + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" } }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "requires": {} - }, - "stylehacks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", - "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", - "requires": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" } }, - "stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, - "supports-color": { + "node_modules/svgo/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "has-flag": "^3.0.0" }, - "dependencies": { - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - } - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - } + "engines": { + "node": ">=4" } }, - "symbol-tree": { + "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, - "tailwindcss": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.18.tgz", - "integrity": "sha512-ihPTpEyA5ANgZbwKlgrbfnzOp9R5vDHFWmqxB1PT8NwOGCOFVVMl+Ps1cQQ369acaqqf1BEF77roCwK0lvNmTw==", - "requires": { - "arg": "^5.0.1", - "chalk": "^4.1.2", + "node_modules/tailwindcss": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", + "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "cosmiconfig": "^7.0.1", - "detective": "^5.2.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "object-hash": "^2.2.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.0", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.21.0" + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "tapable": { + "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } }, - "temp-dir": { + "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } }, - "tempy": { + "node_modules/tempy": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "requires": { + "dependencies": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", "type-fest": "^0.16.0", "unique-string": "^2.0.0" }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "terminal-link": { + "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "requires": { + "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "terser": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", - "requires": { + "node_modules/terser": { + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, - "dependencies": { - "commander": { - "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==" - } + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "terser-webpack-plugin": { + "node_modules/terser-webpack-plugin": { "version": "5.3.9", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "requires": { + "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "test-exclude": { + "node_modules/terser/node_modules/commander": { + "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==" + }, + "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "requires": { + "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "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" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" }, - "thunky": { + "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "tiny-warning": { + "node_modules/tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "tmpl": { + "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "toidentifier": { + "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } }, - "tough-cookie": { + "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "requires": { + "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.2.0", "url-parse": "^1.5.3" }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" - } + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" } }, - "tr46": { + "node_modules/tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "requires": { + "dependencies": { "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" } }, - "tryer": { + "node_modules/tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, - "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "requires": { + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", + "json5": "^1.0.2", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" - }, + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, - "tsutils": { + "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "requires": { + "dependencies": { "tslib": "^1.8.1" }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "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" } }, - "type-check": { + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { + "dependencies": { "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "type-detect": { + "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } }, - "type-fest": { + "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "type-is": { + "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { + "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "typed-array-length": { + "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "typedarray-to-buffer": { + "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { + "dependencies": { "is-typedarray": "^1.0.0" } }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "unbox-primitive": { + "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "unicode-canonical-property-names-ecmascript": { + "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } }, - "unicode-match-property-ecmascript": { + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { + "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { + "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { + "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } }, - "unique-string": { + "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { + "dependencies": { "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "universalify": { + "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unload": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", + "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", + "dependencies": { + "@babel/runtime": "^7.6.2", + "detect-node": "^2.0.4" + } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } }, - "unquote": { + "node_modules/unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" }, - "upath": { + "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } }, - "update-browserslist-db": { + "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "url-parse": { + "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { + "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "util.promisify": { + "node_modules/util.promisify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { + "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.2", "has-symbols": "^1.0.1", "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "utila": { + "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } }, - "uuid": { + "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "v8-to-istanbul": { + "node_modules/v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "requires": { + "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", "source-map": "^0.7.3" }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" } }, - "vary": { + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } }, - "void-elements": { + "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=" + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } }, - "w3c-hr-time": { + "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { "browser-process-hrtime": "^1.0.0" } }, - "w3c-xmlserializer": { + "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "requires": { + "dependencies": { "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" } }, - "walker": { + "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "requires": { + "dependencies": { "makeerror": "1.0.12" } }, - "watchpack": { + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "requires": { + "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "wbuf": { + "node_modules/wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { + "dependencies": { "minimalistic-assert": "^1.0.0" } }, - "web-vitals": { + "node_modules/web-vitals": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } }, - "webpack": { - "version": "5.88.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", - "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", - "requires": { + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", "@webassemblyjs/ast": "^1.11.5", @@ -29522,303 +16077,429 @@ "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "webpack-dev-middleware": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", - "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", - "requires": { + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.1", + "memfs": "^3.4.3", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "webpack-dev-server": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", - "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", - "requires": { + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", "@types/express": "^4.17.13", "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", - "@types/ws": "^8.2.2", + "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", - "bonjour": "^3.5.0", + "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", "colorette": "^2.0.10", "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", + "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", - "del": "^6.0.0", - "express": "^4.17.1", + "express": "^4.17.3", "graceful-fs": "^4.2.6", "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.0", + "http-proxy-middleware": "^2.0.3", "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", "open": "^8.0.9", "p-retry": "^4.5.0", - "portfinder": "^1.0.28", + "rimraf": "^3.0.2", "schema-utils": "^4.0.0", - "selfsigned": "^2.0.0", + "selfsigned": "^2.1.1", "serve-index": "^1.9.1", - "sockjs": "^0.3.21", + "sockjs": "^0.3.24", "spdy": "^4.0.2", - "strip-ansi": "^7.0.0", "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "ws": "^8.13.0" }, - "dependencies": { - "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", - "requires": {} + "utf-8-validate": { + "optional": true } } }, - "webpack-manifest-plugin": { + "node_modules/webpack-manifest-plugin": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "requires": { + "dependencies": { "tapable": "^2.0.0", "webpack-sources": "^2.2.0" }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - } + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" } }, - "webpack-sources": { + "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } }, - "websocket-driver": { + "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { + "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } }, - "whatwg-encoding": { + "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { + "dependencies": { "iconv-lite": "0.4.24" - }, + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + "node_modules/whatwg-fetch": { + "version": "3.6.17", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz", + "integrity": "sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==" }, - "whatwg-mimetype": { + "node_modules/whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "requires": { + "dependencies": { "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "requires": { + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "workbox-background-sync": { + "node_modules/workbox-background-sync": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", - "requires": { + "dependencies": { "idb": "^7.0.1", "workbox-core": "6.6.0" } }, - "workbox-broadcast-update": { + "node_modules/workbox-broadcast-update": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", - "requires": { + "dependencies": { "workbox-core": "6.6.0" } }, - "workbox-build": { + "node_modules/workbox-build": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", - "requires": { + "dependencies": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.11.1", "@babel/preset-env": "^7.11.0", @@ -29857,141 +16538,159 @@ "workbox-sw": "6.6.0", "workbox-window": "6.6.0" }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", "dependencies": { - "@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "workbox-cacheable-response": { + "node_modules/workbox-cacheable-response": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", - "requires": { + "deprecated": "workbox-background-sync@6.6.0", + "dependencies": { "workbox-core": "6.6.0" } }, - "workbox-core": { + "node_modules/workbox-core": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" }, - "workbox-expiration": { + "node_modules/workbox-expiration": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", - "requires": { + "dependencies": { "idb": "^7.0.1", "workbox-core": "6.6.0" } }, - "workbox-google-analytics": { + "node_modules/workbox-google-analytics": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", - "requires": { + "dependencies": { "workbox-background-sync": "6.6.0", "workbox-core": "6.6.0", "workbox-routing": "6.6.0", "workbox-strategies": "6.6.0" } }, - "workbox-navigation-preload": { + "node_modules/workbox-navigation-preload": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", - "requires": { + "dependencies": { "workbox-core": "6.6.0" } }, - "workbox-precaching": { + "node_modules/workbox-precaching": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", - "requires": { + "dependencies": { "workbox-core": "6.6.0", "workbox-routing": "6.6.0", "workbox-strategies": "6.6.0" } }, - "workbox-range-requests": { + "node_modules/workbox-range-requests": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", - "requires": { + "dependencies": { "workbox-core": "6.6.0" } }, - "workbox-recipes": { + "node_modules/workbox-recipes": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", - "requires": { + "dependencies": { "workbox-cacheable-response": "6.6.0", "workbox-core": "6.6.0", "workbox-expiration": "6.6.0", @@ -30000,163 +16699,168 @@ "workbox-strategies": "6.6.0" } }, - "workbox-routing": { + "node_modules/workbox-routing": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", - "requires": { + "dependencies": { "workbox-core": "6.6.0" } }, - "workbox-strategies": { + "node_modules/workbox-strategies": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", - "requires": { + "dependencies": { "workbox-core": "6.6.0" } }, - "workbox-streams": { + "node_modules/workbox-streams": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", - "requires": { + "dependencies": { "workbox-core": "6.6.0", "workbox-routing": "6.6.0" } }, - "workbox-sw": { + "node_modules/workbox-sw": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" }, - "workbox-webpack-plugin": { + "node_modules/workbox-webpack-plugin": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", - "requires": { + "dependencies": { "fast-json-stable-stringify": "^2.1.0", "pretty-bytes": "^5.4.1", "upath": "^1.2.0", "webpack-sources": "^1.4.3", "workbox-build": "6.6.0" }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "workbox-window": { + "node_modules/workbox-window": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", - "requires": { + "dependencies": { "@types/trusted-types": "^2.0.2", "workbox-core": "6.6.0" } }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "ws": { + "node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "xml-name-validator": { + "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, - "xmlchars": { + "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "yaml": { + "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } }, - "yargs": { + "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { + "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -30164,17 +16868,29 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/frontend/package.json b/frontend/package.json index f98e640..87eedb2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,6 +8,7 @@ "@mui/icons-material": "^5.6.2", "@mui/material": "^5.6.2", "@mui/styles": "^5.8.4", + "@mui/x-data-grid": "^6.11.0", "@mui/x-date-pickers": "^6.10.2", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^12.1.2", @@ -19,7 +20,9 @@ "axios": "^1.4.0", "dayjs": "^1.11.9", "i18next": "^21.6.16", + "ra-data-simple-rest": "^4.12.2", "react": "^17.0.2", + "react-admin": "^4.12.3", "react-dom": "^17.0.2", "react-i18next": "^11.16.7", "react-router-dom": "^6.3.0", @@ -51,4 +54,4 @@ "last 1 safari version" ] } -} \ No newline at end of file +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 1651157..2f85447 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,67 +1,75 @@ import i18n from "i18next"; -import { initReactI18next } from "react-i18next"; -import { createTheme, ThemeProvider } from "@mui/material/styles"; -import { red } from "@mui/material/colors"; -import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom"; -import { Base } from "./components/Base"; -import { getLocaleOrFallback, resources, SAVED_LOCALE } from "./locale"; -import { Home } from "./pages/Home"; -import { About } from "./pages/About"; -import { Organization } from "./pages/Organization"; -import { FAQ } from "./pages/FAQ"; -import { Rankings } from "./pages/Rankings"; -import { Account } from "./pages/Account"; +import {initReactI18next} from "react-i18next"; +import {createTheme, ThemeProvider} from "@mui/material/styles"; +import {red} from "@mui/material/colors"; +import {BrowserRouter, Navigate, Route, Routes} from "react-router-dom"; +import {Base} from "./components/Base"; +import {getLocaleOrFallback, resources, SAVED_LOCALE} from "./locale"; +import {Home} from "./pages/Home"; +import {About} from "./pages/About"; +import {Organization} from "./pages/Organization"; +import {FAQ} from "./pages/FAQ"; +import {Rankings} from "./pages/Rankings"; +import {Account} from "./pages/Account"; +import {AdminPage} from "./pages/AdminPage"; +import * as React from "react"; +import simpleRestProvider from "ra-data-simple-rest"; i18n.use(initReactI18next).init({ - resources, - interpolation: { - escapeValue: false, - }, + resources, + interpolation: { + escapeValue: false, + }, }); const theme = createTheme({ - typography: { - fontFamily: "'Montserrat', 'Arial', 'Helvetica', sans-serif", - body1: { - whiteSpace: "pre-wrap", + typography: { + fontFamily: "'Montserrat', 'Arial', 'Helvetica', sans-serif", + body1: { + whiteSpace: "pre-wrap", + }, + }, + palette: { + primary: red, }, - }, - palette: { - primary: red, - }, }); const App = () => { - const savedLocale = localStorage.getItem(SAVED_LOCALE) as string; - const locale = getLocaleOrFallback(savedLocale); + const savedLocale = localStorage.getItem(SAVED_LOCALE) as string; + const locale = getLocaleOrFallback(savedLocale); + + return ( + + + + }> + + }/> + }/> + }/> + }/> + }/> + }/> + + {["about", "organization", "faq", "rankings", "account"].map((route) => ( + } + /> + ))} + }/> + + + {/* Admin page without the navigation bar */} + }/> + + + - return ( - - - - }> - - } /> - } /> - } /> - } /> - } /> - } /> - - {["about", "organization", "faq", "rankings", "account"].map((route) => ( - } - /> - ))} - } /> - - - - - ); + + ); }; export default App; diff --git a/frontend/src/components/RankList.tsx b/frontend/src/components/RankList.tsx new file mode 100644 index 0000000..8f18ccc --- /dev/null +++ b/frontend/src/components/RankList.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import {DataGrid, GridColDef} from '@mui/x-data-grid'; +import {Link} from '@mui/material'; +import {Ranking} from "./Types"; +import {useTranslation} from "react-i18next"; + + +export const RankList: React.FC<{ data: Ranking[] }> = ({data}) => { + const {t} = useTranslation(); + + const columns: GridColDef[] = [ + {field: 'rank', headerName: t('ranklist.rank'), width: 90}, + { + field: 'name', + headerName: t('ranklist.name'), + width: 300, + renderCell: (params) => ( + + {params.value} + + ), + }, + {field: 'time', headerName: t('ranklist.time'), width: 120}, + ]; + + const rows = data.map((person: any) => ({ + id: person.rank, + rank: person.rank, + name: person.name, + time: person.time, + url: person.url, + })); + + return ( +
+ +
+ ); +}; + diff --git a/frontend/src/components/Types.ts b/frontend/src/components/Types.ts index 3a6a641..6ae7931 100644 --- a/frontend/src/components/Types.ts +++ b/frontend/src/components/Types.ts @@ -23,6 +23,13 @@ export interface ChipData { label: string; } +export interface Ranking { + name: string; + rank: number; + time: string; + url: string; +} + export type eventID = "333" | "222" | "444" | "555" | "666" | "777" | "333bf" | "333fm" | "333oh" | "333ft" | "minx" | "pyram" | "skewb" | "sq1" | "clock" | "444bf" | "555bf" | "333mbf" | "333mbo" | "magic" | "mmagic"; export type provinceID = "ab" | "bc" | "mb" | "nb" | "nl" | "ns" | "nt" | "nu" | "on" | "pe" | "qc" | "sk" | "yt" | "na"; diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index e6b59b5..a14dd39 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -155,10 +155,15 @@ export const resources = { }, rankings: { title: "Rankings", - soon: "Rankings Coming Soon", single: "Single", average: "Average", rankfor: "Rankings for", + unavailable: "Ranking Unavailable", + }, + ranklist: { + rank: "Rank", + name: "Name", + time: "Time", } }, }, @@ -303,10 +308,15 @@ export const resources = { }, rankings: { title: "Classements", - soon: "Les classements arrivent", single: "Single", average: "Moyenne", rankfor: "Classement pour", + unavailable: "Classement indisponible", + }, + ranklist: { + rank: "Rang", + name: "Nom", + time: "Temps", } }, }, diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 1f97fe0..08994f9 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -1,4 +1,5 @@ import {Trans, useTranslation} from "react-i18next"; +import {useEffect, useState} from "react"; import { AlertColor, Box, @@ -16,13 +17,14 @@ import Alert from '@mui/material/Alert'; import IconButton from '@mui/material/IconButton'; import CloseIcon from '@mui/icons-material/Close'; import CircularProgress from '@mui/material/CircularProgress'; +import Stack from '@mui/material/Stack'; import {AdapterDayjs} from '@mui/x-date-pickers/AdapterDayjs'; import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; +import dayjs from "dayjs"; + import {API_BASE_URL, signIn, signOut} from '../components/Api'; -import {useEffect, useState} from "react"; import {Province, ChipData, chipColor, User} from "../components/Types"; import httpClient from "../httpClient"; -import dayjs from "dayjs"; import {GetProvincesWithNA} from "../components/Provinces"; export const Account = () => { @@ -130,6 +132,7 @@ export const Account = () => { variant="h5" fontWeight="bold" gutterBottom + marginY="1rem" > {t("account.hi")}{user.name}!
@@ -149,34 +152,37 @@ export const Account = () => { } }} renderInput={(params) => } - getOptionLabel={(option) => t('provinces.'+option.id)} + getOptionLabel={(option) => t('provinces.' + option.id)} isOptionEqualToValue={(option, value) => option.id === value.id} /> {t("account.policy")} - - - - + + - + + + + {t("account.roles")} diff --git a/frontend/src/pages/AdminPage.tsx b/frontend/src/pages/AdminPage.tsx new file mode 100644 index 0000000..2f39261 --- /dev/null +++ b/frontend/src/pages/AdminPage.tsx @@ -0,0 +1,19 @@ +import {Admin, ListGuesser, Resource} from "react-admin"; +import * as React from "react"; +import simpleRestProvider from "ra-data-simple-rest"; +import {useTranslation} from "react-i18next"; +import {RankList2} from "../components/List"; + + +const dataProvider = simpleRestProvider('http://localhost:8083/'); + +export const AdminPage = () => { + const {t} = useTranslation(); + + return ( +
/* + + + */ + ); +} \ No newline at end of file diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 4bd07c8..7c654b5 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx @@ -9,11 +9,13 @@ import Autocomplete from "@mui/material/Autocomplete"; import Stack from '@mui/material/Stack'; import Switch from '@mui/material/Switch'; import CircularProgress from "@mui/material/CircularProgress"; + import {eventID, Province, provinceID, useAverage} from "../components/Types"; import {GetProvinces} from "../components/Provinces"; import {useEffect, useState} from "react"; import {API_BASE_URL} from "../components/Api"; import httpClient from "../httpClient"; +import {RankList} from "../components/RankList"; export const Rankings = () => { @@ -60,7 +62,7 @@ export const Rankings = () => { return null; } - //const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + provinceId + "/" + use_average_str); + //const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + province?.id + "/" + use_average_str); const resp = await httpClient.get(API_BASE_URL + "/test_rankings"); setRanking(resp.data); @@ -85,30 +87,38 @@ export const Rankings = () => { - } - getOptionLabel={(option) => t('provinces.'+option.id)} - isOptionEqualToValue={(option, value) => option.id === value.id} - /> - - - {t("rankings.single")} - - {t("rankings.average")} + + } + getOptionLabel={(option) => t('provinces.' + option.id)} + isOptionEqualToValue={(option, value) => option.id === value.id} + /> + + + {t("rankings.single")} + + {t("rankings.average")} + {loading ? : ranking != null ? ( -
{t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)}
+
+ {t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)} + +
+ ) : ( -
Nothing to show
+
+ {t("rankings.unavailable")} +
)} ); From 921af7718429206044134d3942e4b6bba16fbce4 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 9 Aug 2023 01:44:31 -0400 Subject: [PATCH 46/72] no display when no Province selected --- frontend/src/components/Api.tsx | 2 +- frontend/src/pages/Account.tsx | 34 +++++++++++++++++---------------- frontend/src/pages/Rankings.tsx | 27 +++++++++++++------------- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 7e5344e..88a9799 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -5,7 +5,7 @@ import httpClient from "../httpClient"; export const PRODUCTION = process.env.NODE_ENV === 'production'; export const API_BASE_URL = - process.env.API_BASE_URL || "http://localhost:8083"; + process.env.API_BASE_URL || "https://api.staging.speedcubingcanada.org"; export const signIn = () => { diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 08994f9..6395a75 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -237,22 +237,24 @@ export const Account = () => { {alert ? - { - setAlert(false); - }} - > - - - } - variant="outlined" severity={alertType}> - {alertContent} - + + { + setAlert(false); + }} + > + + + } + variant="outlined" severity={alertType}> + {alertContent} + + : <>} diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 7c654b5..bf8d4ec 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx @@ -36,9 +36,9 @@ export const Rankings = () => { setProvince(newValue); if (province == null) { - // Handle the case when the province value is null. + } else { - // Do something with the ranking data (it will be updated automatically when the hook fetches new data). + console.log(ranking); if (province.id === "qc") { console.log("Vive le Québec libre!"); @@ -51,31 +51,32 @@ export const Rankings = () => { useEffect(() => { setLoading(true); - let use_average_str = "0"; - if (useAverage) { - use_average_str = "1"; - } + let use_average_str = useAverage ? "1" : "0"; (async () => { try { - if (eventId === null || province?.id === null || useAverage === null) { + if (eventId === null || province?.id === null || useAverage === null || province === undefined) { return null; } - //const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + province?.id + "/" + use_average_str); - const resp = await httpClient.get(API_BASE_URL + "/test_rankings"); + const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + province?.id + "/" + use_average_str); + //const resp = await httpClient.get(API_BASE_URL + "/test_rankings"); setRanking(resp.data); } catch (error: any) { - if (error.response.status === 500) { + if (error?.code === "ERR_NETWORK") { + console.log("Network error" + error); + } else if (error?.response.status === 500) { console.log("Internal server error" + error.response.data); - } else if (error.response.status === 404) { + } else if (error?.response.status === 404) { console.log("Not found" + error.response.data); + } else { + console.log("Unknown error" + error); } } setLoading(false); })(); - }, []); + }, [eventId, province, useAverage]); return ( @@ -111,7 +112,7 @@ export const Rankings = () => { {loading ? : ranking != null ? (
- {t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)} + {province != null ? ({t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)}) : null}
From f11a53908015c7c6c8651c6c7a367c9329dc2448 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 9 Aug 2023 14:51:04 -0400 Subject: [PATCH 47/72] fix forgotten translation --- frontend/src/locale.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index a14dd39..7e35fde 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -164,7 +164,7 @@ export const resources = { rank: "Rank", name: "Name", time: "Time", - } + }, }, }, [LOCALES.fr]: { @@ -265,6 +265,7 @@ export const resources = { qc: "Québec", sk: "Saskatchewan", yt: "Yukon", + na: "N/A", }, province_with_pronouns: { ab: "l'Alberta", @@ -317,7 +318,7 @@ export const resources = { rank: "Rang", name: "Nom", time: "Temps", - } + }, }, }, -}; +}; \ No newline at end of file From 3e527bb984b88a053a524bc1ac6acce994dc98f6 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 9 Aug 2023 15:53:23 -0400 Subject: [PATCH 48/72] minor visual fixes --- frontend/src/locale.ts | 2 ++ frontend/src/pages/Rankings.tsx | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index 7e35fde..b751b96 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -159,6 +159,7 @@ export const resources = { average: "Average", rankfor: "Rankings for", unavailable: "Ranking Unavailable", + choose: "Choose a province", }, ranklist: { rank: "Rank", @@ -313,6 +314,7 @@ export const resources = { average: "Moyenne", rankfor: "Classement pour", unavailable: "Classement indisponible", + choose: "Choisissez une province", }, ranklist: { rank: "Rang", diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index bf8d4ec..12cdac5 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx @@ -109,16 +109,24 @@ export const Rankings = () => { {t("rankings.average")}
- {loading ? - : ranking != null ? ( + {loading ? + + + + : (ranking != null && province != null) ? (
- {province != null ? ({t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)}) : null} + {t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)}
- ) : ( + ) : (province == null) ? (
- {t("rankings.unavailable")} + {t("rankings.choose")} +
+ ): ( +
+ {t("rankings.unavailable")}
)} From 33acfe24391abbd08b3eb433dc7a03dfc6c052c8 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 13 Aug 2023 16:38:55 -0400 Subject: [PATCH 49/72] fixes from Kevin's suggestions --- README.md | 2 +- frontend/src/components/Api.tsx | 6 +- frontend/src/components/Provinces.tsx | 6 +- frontend/src/components/Types.ts | 18 ++++ frontend/src/pages/Account.tsx | 119 +++++++++++++++----------- frontend/src/pages/AdminPage.tsx | 6 +- frontend/src/pages/Rankings.tsx | 13 ++- 7 files changed, 101 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index 726766a..928e769 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Right now, the python part is commented in the docker-compose file, so you can e First option, in the project root directory, you can run: ### `docker-compose up` -Runs de app and an nginx server. The app is available at [http://localhost/](http://localhost/). +Runs the app and an nginx server. The app is available at [http://localhost/](http://localhost/). Second option: Move into the `frontend` directory. diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 88a9799..9b7fe52 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -1,11 +1,7 @@ -import {useEffect, useState} from "react"; -import {eventID, provinceID, useAverage, User} from "./Types"; -import httpClient from "../httpClient"; - export const PRODUCTION = process.env.NODE_ENV === 'production'; export const API_BASE_URL = - process.env.API_BASE_URL || "https://api.staging.speedcubingcanada.org"; + process.env.API_BASE_URL || "http://localhost:8083"; // doesn't seem to work, don't know why export const signIn = () => { diff --git a/frontend/src/components/Provinces.tsx b/frontend/src/components/Provinces.tsx index c79f2bf..761b95f 100644 --- a/frontend/src/components/Provinces.tsx +++ b/frontend/src/components/Provinces.tsx @@ -15,12 +15,12 @@ const provinces: Province[] = [ {label: 'Saskatchewan', id: 'sk', region: 'Prairies', region_id: 'pr'}, {label: 'Yukon', id: 'yt', region: 'Territories', region_id: 'te'}, - ];// TODO: have translations for provinces + ]; -export const GetProvincesWithNA: () => Province[]= () => { +export const getProvincesWithNA: () => Province[]= () => { return provinces.concat({label: 'N/A', id: 'na', region: 'N/A', region_id: 'na'}); } -export const GetProvinces = () => { +export const getProvinces = () => { return provinces; } \ No newline at end of file diff --git a/frontend/src/components/Types.ts b/frontend/src/components/Types.ts index 6ae7931..92cd956 100644 --- a/frontend/src/components/Types.ts +++ b/frontend/src/components/Types.ts @@ -1,3 +1,5 @@ +import {AlertColor} from "@mui/material"; + export interface User { id: number; name: string; @@ -30,6 +32,22 @@ export interface Ranking { url: string; } +export interface State { + alert: boolean; + alertType: AlertColor; + alertContent: string; +} + +export type Action = + | { + type: "SHOW_ALERT"; + alertType: AlertColor; + alertContent: string; + } + | { + type: "HIDE_ALERT"; + }; + export type eventID = "333" | "222" | "444" | "555" | "666" | "777" | "333bf" | "333fm" | "333oh" | "333ft" | "minx" | "pyram" | "skewb" | "sq1" | "clock" | "444bf" | "555bf" | "333mbf" | "333mbo" | "magic" | "mmagic"; export type provinceID = "ab" | "bc" | "mb" | "nb" | "nl" | "ns" | "nt" | "nu" | "on" | "pe" | "qc" | "sk" | "yt" | "na"; diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 6395a75..b78802a 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -1,5 +1,5 @@ import {Trans, useTranslation} from "react-i18next"; -import {useEffect, useState} from "react"; +import {useEffect, useReducer, useState} from "react"; import { AlertColor, Box, @@ -23,9 +23,36 @@ import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; import dayjs from "dayjs"; import {API_BASE_URL, signIn, signOut} from '../components/Api'; -import {Province, ChipData, chipColor, User} from "../components/Types"; +import {Province, ChipData, chipColor, User, State, Action} from "../components/Types"; import httpClient from "../httpClient"; -import {GetProvincesWithNA} from "../components/Provinces"; +import {getProvincesWithNA} from "../components/Provinces"; + + +const initialState: State = { + alert: false, + alertType: "error", + alertContent: "" +}; + +const reducer = (state: State, action: Action) => { + switch (action.type) { + case "SHOW_ALERT": + return { + ...state, + alert: true, + alertType: action.alertType, + alertContent: action.alertContent + }; + case "HIDE_ALERT": + return { + ...state, + alert: false + }; + default: + return state; + } +}; + export const Account = () => { const {t} = useTranslation(); @@ -33,20 +60,38 @@ export const Account = () => { const [province, setProvince] = useState(null); const [chipData, setChipData] = useState([]); - const [alert, setAlert] = useState(false); - const [alertType, setAlertType] = useState("error"); - const [alertContent, setAlertContent] = useState(''); + const [state, dispatch] = useReducer(reducer, initialState); - const provinces: Province[] = GetProvincesWithNA(); + const provinces: Province[] = getProvincesWithNA(); const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); + const defaultProvince : Province = provinces.find(({ id }) => id === user?.province) || {label: 'N/A', id: 'na', region: 'N/A', region_id: 'na'} + const defaultDOB = user?.dob ? dayjs(user.dob) : dayjs('2022-01-01'); + const defaultWCAID = user?.wca_person || ""; + + + const showAlert = (alertType: AlertColor, alertContent: string) => { + dispatch({ + type: "SHOW_ALERT", + alertType, + alertContent + }); + }; + + const hideAlert = () => { + dispatch({ + type: "HIDE_ALERT" + }); + }; + useEffect(() => { (async () => { try { const resp = await httpClient.get(API_BASE_URL + "/user_info"); setUser(resp.data); + } catch (error) { console.log("Not authenticated"); } @@ -54,21 +99,7 @@ export const Account = () => { })(); }, []); - let default_province: Province = {label: 'N/A', id: 'na', region: 'N/A', region_id: 'na'}; - let default_dob = dayjs('2022-01-01'); - let default_WCAID = ""; if (user != null) { - if (user.province != null) { - //set province in the combo box - for (let i = 0; i < provinces.length; i++) { - if (provinces[i].id === user.province) { - default_province = provinces[i]; - } - } - } - if (user.dob != null) { - default_dob = dayjs(user.dob); - } if (user.roles != null && user.roles.length > 0 && chipData.length === 0) { let tmpChipData = []; for (let i = 0; i < user.roles.length; i++) { @@ -76,29 +107,24 @@ export const Account = () => { } setChipData(tmpChipData); } - if (user.wca_person != null) { - default_WCAID = user.wca_person; - } } + const ListItem = styled('li')(({theme}) => ({ margin: theme.spacing(0.5), })); const handleSaveProfile = async () => { + hideAlert(); try { const resp = await httpClient.post(API_BASE_URL + "/edit", { province: province ? province.id : 'na', }); if (resp.data.success === true) { - setAlertContent(t("account.success")); - setAlertType("success"); - setAlert(true); + showAlert("success", t("account.success")); } else { - setAlertContent(t("account.error")); - setAlertType("error"); - setAlert(true); + showAlert("error", t("account.error")); } } catch (error: any) { if (error.response.status === 401) { @@ -142,12 +168,11 @@ export const Account = () => { id="combo-box-demo" options={provinces} sx={{width: 300}} - value={province || default_province} - defaultValue={default_province} + value={province || defaultProvince} + defaultValue={defaultProvince} onChange={(event, newValue) => { setProvince(newValue); - if (newValue == null) { - } else if (newValue.id === "qc") { + if (newValue?.id === "qc") { console.log("Vive le Québec libre!"); } }} @@ -164,21 +189,21 @@ export const Account = () => { disabled id="region" label={t("account.region")} - value={province ? t('regions.' + province?.region_id) : t('regions.' + default_province.region_id)} + value={province ? t('regions.' + province?.region_id) : t('regions.' + defaultProvince.region_id)} variant="outlined" /> @@ -198,11 +223,7 @@ export const Account = () => { component="ul" > {chipData.map((data) => { - let color: chipColor | undefined = "default"; - - if (data.label === 'GLOBAL_ADMIN') { - color = "primary"; - } + const color: chipColor | undefined = data.label === 'GLOBAL_ADMIN' ? "primary" : "default" return ( @@ -236,7 +257,7 @@ export const Account = () => { - {alert ? + {state.alert && ( { aria-label="close" color="inherit" size="small" - onClick={() => { - setAlert(false); - }} + onClick={hideAlert} > } - variant="outlined" severity={alertType}> - {alertContent} + variant="outlined" + severity={state.alertType} + > + {state.alertContent} - : <>} + )} ) : ( diff --git a/frontend/src/pages/AdminPage.tsx b/frontend/src/pages/AdminPage.tsx index 2f39261..a8524bb 100644 --- a/frontend/src/pages/AdminPage.tsx +++ b/frontend/src/pages/AdminPage.tsx @@ -11,9 +11,9 @@ export const AdminPage = () => { const {t} = useTranslation(); return ( -
/* - + + - */ + ); } \ No newline at end of file diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 12cdac5..10726d8 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx @@ -11,17 +11,17 @@ import Switch from '@mui/material/Switch'; import CircularProgress from "@mui/material/CircularProgress"; import {eventID, Province, provinceID, useAverage} from "../components/Types"; -import {GetProvinces} from "../components/Provinces"; +import {getProvinces} from "../components/Provinces"; import {useEffect, useState} from "react"; import {API_BASE_URL} from "../components/Api"; import httpClient from "../httpClient"; import {RankList} from "../components/RankList"; +const provinces: Province[] = getProvinces(); export const Rankings = () => { const {t} = useTranslation(); - const provinces: Province[] = GetProvinces(); const [province, setProvince] = useState(provinces[0]); const [eventId, setEventId] = useState("333"); const [useAverage, setUseAverage] = useState(false); @@ -35,10 +35,7 @@ export const Rankings = () => { const handleProvinceChange = (event: any, newValue: React.SetStateAction) => { setProvince(newValue); - if (province == null) { - - } else { - + if (province != null) { console.log(ranking); if (province.id === "qc") { console.log("Vive le Québec libre!"); @@ -59,8 +56,8 @@ export const Rankings = () => { return null; } - const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + province?.id + "/" + use_average_str); - //const resp = await httpClient.get(API_BASE_URL + "/test_rankings"); + //const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + province?.id + "/" + use_average_str); + const resp = await httpClient.get(API_BASE_URL + "/test_rankings"); setRanking(resp.data); } catch (error: any) { From 2d06d0655442c18a0a921df350305678eaa7b371 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 13 Aug 2023 17:05:25 -0400 Subject: [PATCH 50/72] roles translations --- frontend/src/locale.ts | 16 ++++++++++++++++ frontend/src/pages/Account.tsx | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index b751b96..c07a744 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -148,6 +148,14 @@ export const resources = { welcome: "Welcome to Speedcubing Canada account page. \n\n" + "To access it, please sign in with your WCA account.", roles: "Roles", + role: { + GLOBAL_ADMIN: "Global Admin", + DIRECTOR: "Director", + WEBMASTER: "Webmaster", + SENIOR_DELEGATE: "Senior Delegate", + DELEGATE: "Delegate", + CANDIDATE_DELEGATE: "Junior Delegate", + }, success: "Your account has been successfully updated.", error: "There was an error updating your account.", dob: "Date of Birth", @@ -303,6 +311,14 @@ export const resources = { welcome: "Bienvenue sur la page du compte de Speedcubing Canada. \n" + "Pour y accéder, veuillez vous connecter avec votre compte WCA.", roles: "Rôles", + role: { + GLOBAL_ADMIN: "Administrateur global", + DIRECTOR: "Directeur", + WEBMASTER: "Webmaster", + SENIOR_DELEGATE: "Délégué senior", + DELEGATE: "Délégué", + CANDIDATE_DELEGATE: "Délégué junior", + }, success: "Votre compte a été mis à jour avec succès.", error: "Une erreur s'est produite lors de la mise à jour de votre compte.", dob: "Date de naissance", diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index b78802a..d8cd326 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -229,7 +229,7 @@ export const Account = () => { ); From 2bc5811116ca4fdfcdc2e185b3953b2f326f1bff Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 13 Aug 2023 17:18:04 -0400 Subject: [PATCH 51/72] 2nd of Kevin's suggestion + small fix in french translation to be move inclusive --- frontend/src/locale.ts | 10 +++++----- frontend/src/pages/Account.tsx | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index c07a744..3b17e62 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -312,12 +312,12 @@ export const resources = { "Pour y accéder, veuillez vous connecter avec votre compte WCA.", roles: "Rôles", role: { - GLOBAL_ADMIN: "Administrateur global", - DIRECTOR: "Directeur", + GLOBAL_ADMIN: "Administrateur.ice global", + DIRECTOR: "Directeur.ice", WEBMASTER: "Webmaster", - SENIOR_DELEGATE: "Délégué senior", - DELEGATE: "Délégué", - CANDIDATE_DELEGATE: "Délégué junior", + SENIOR_DELEGATE: "Délégué.e senior", + DELEGATE: "Délégué.e", + CANDIDATE_DELEGATE: "Délégué.e junior", }, success: "Votre compte a été mis à jour avec succès.", error: "Une erreur s'est produite lors de la mise à jour de votre compte.", diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index d8cd326..243fabc 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -60,7 +60,7 @@ export const Account = () => { const [province, setProvince] = useState(null); const [chipData, setChipData] = useState([]); - const [state, dispatch] = useReducer(reducer, initialState); + const [alertState, alertDispatch] = useReducer(reducer, initialState); const provinces: Province[] = getProvincesWithNA(); @@ -73,7 +73,7 @@ export const Account = () => { const showAlert = (alertType: AlertColor, alertContent: string) => { - dispatch({ + alertDispatch({ type: "SHOW_ALERT", alertType, alertContent @@ -81,7 +81,7 @@ export const Account = () => { }; const hideAlert = () => { - dispatch({ + alertDispatch({ type: "HIDE_ALERT" }); }; @@ -99,8 +99,9 @@ export const Account = () => { })(); }, []); - if (user != null) { - if (user.roles != null && user.roles.length > 0 && chipData.length === 0) { + useEffect(() => { + if (user != null) { + if (user.roles != null && user.roles.length > 0) { let tmpChipData = []; for (let i = 0; i < user.roles.length; i++) { tmpChipData.push({key: i, label: user.roles[i]}); @@ -108,6 +109,9 @@ export const Account = () => { setChipData(tmpChipData); } } + }, [user]); + + const ListItem = styled('li')(({theme}) => ({ @@ -257,7 +261,7 @@ export const Account = () => { - {state.alert && ( + {alertState.alert && ( { } variant="outlined" - severity={state.alertType} + severity={alertState.alertType} > - {state.alertContent} + {alertState.alertContent} )} From ec4799930a3cf4317911a04262a8f21ef67ea192 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 13 Aug 2023 17:28:17 -0400 Subject: [PATCH 52/72] removed unused default file --- frontend/src/index.tsx | 8 +------- frontend/src/reportWebVitals.ts | 15 --------------- 2 files changed, 1 insertion(+), 22 deletions(-) delete mode 100644 frontend/src/reportWebVitals.ts diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index ac93dff..6a163ab 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -2,16 +2,10 @@ import React from "react"; import ReactDOM from "react-dom"; import "./index.css"; import App from "./App"; -import reportWebVitals from "./reportWebVitals"; ReactDOM.render( , document.getElementById("root") -); - -// If you want to start measuring performance in your frontend, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); +); \ No newline at end of file diff --git a/frontend/src/reportWebVitals.ts b/frontend/src/reportWebVitals.ts deleted file mode 100644 index 5fa3583..0000000 --- a/frontend/src/reportWebVitals.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ReportHandler } from "web-vitals"; - -const reportWebVitals = (onPerfEntry?: ReportHandler) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; From c60a5e1e7c1b770a53200c54528d343ecfea3d7f Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 13 Aug 2023 17:34:09 -0400 Subject: [PATCH 53/72] if simplification --- frontend/src/pages/Account.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 243fabc..88e9f3a 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -67,7 +67,12 @@ export const Account = () => { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); - const defaultProvince : Province = provinces.find(({ id }) => id === user?.province) || {label: 'N/A', id: 'na', region: 'N/A', region_id: 'na'} + const defaultProvince: Province = provinces.find(({id}) => id === user?.province) || { + label: 'N/A', + id: 'na', + region: 'N/A', + region_id: 'na' + } const defaultDOB = user?.dob ? dayjs(user.dob) : dayjs('2022-01-01'); const defaultWCAID = user?.wca_person || ""; @@ -100,20 +105,16 @@ export const Account = () => { }, []); useEffect(() => { - if (user != null) { - if (user.roles != null && user.roles.length > 0) { + if (user && user.roles && user.roles.length > 0) { let tmpChipData = []; for (let i = 0; i < user.roles.length; i++) { tmpChipData.push({key: i, label: user.roles[i]}); } setChipData(tmpChipData); } - } }, [user]); - - const ListItem = styled('li')(({theme}) => ({ margin: theme.spacing(0.5), })); From db8642c2dbf7e43a3147cf1eab1984b271abcd0a Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sat, 2 Sep 2023 17:10:02 -0400 Subject: [PATCH 54/72] changes since last code review: admin section, load db auto, frontend improvement --- README.md | 27 +- back/api.yaml | 2 +- back/backend/__init__.py | 4 +- back/backend/handlers/admin/__init__.py | 4 +- back/backend/handlers/admin/edit_users.py | 38 --- back/backend/handlers/admin/show_users.py | 89 +++++++ back/backend/handlers/province_rankings.py | 14 +- back/backend/handlers/user.py | 54 ++-- back/backend/lib/auth.py | 14 +- back/backend/lib/common.py | 38 --- back/backend/lib/formatters.py | 186 ++++++------- back/backend/lib/permissions.py | 48 ++-- back/backend/lib/secrets.py | 15 +- back/backend/load_db/README.md | 5 +- back/backend/load_db/cleanup.py | 29 ++- back/backend/load_db/delete_old_exports.py | 20 +- back/backend/load_db/get_latest_export.py | 6 +- back/backend/load_db/load_db.py | 220 ++++++++-------- back/backend/load_db/load_db.sh | 2 + back/backend/load_db/update_champions.py | 246 +++++++++--------- back/backend/load_db/vm_setup.sh | 1 + back/backend/models/champion.py | 21 +- back/backend/models/championship.py | 49 ++-- back/backend/models/eligibility.py | 13 +- back/backend/models/province.py | 33 +-- back/backend/models/region.py | 11 +- back/backend/models/user.py | 15 +- back/backend/models/wca/base.py | 33 +-- back/backend/models/wca/competition.py | 118 ++++----- back/backend/models/wca/continent.py | 17 +- back/backend/models/wca/country.py | 21 +- back/backend/models/wca/event.py | 21 +- back/backend/models/wca/export.py | 19 +- back/backend/models/wca/format.py | 19 +- back/backend/models/wca/person.py | 49 ++-- back/backend/models/wca/rank.py | 46 ++-- back/backend/models/wca/result.py | 89 +++---- back/backend/models/wca/round.py | 21 +- back/index.yaml | 243 ++++++++--------- deploy.sh | 134 ++++++++++ frontend/app.yaml | 3 - frontend/package-lock.json | 15 +- frontend/package.json | 1 + .../directors-meeting-jul-20-2023.pdf | Bin 0 -> 21623 bytes .../directors-meeting-may-16-2023.pdf | Bin 0 -> 21398 bytes ...hip-reimbursement-transfer-policy-v1.0.pdf | Bin 0 -> 35078 bytes ...pionship-reimbursement-transfer-policy.pdf | Bin 0 -> 35078 bytes .../documents/reimbursement-policy-v1.2.pdf | Bin 0 -> 51819 bytes .../public/documents/reimbursement-policy.pdf | Bin 42875 -> 51819 bytes .../supported-events-policy-v1.1.pdf | Bin 0 -> 40309 bytes .../documents/supported-events-policy.pdf | Bin 29579 -> 40309 bytes frontend/public/robots.txt | 1 + frontend/src/App.tsx | 13 +- frontend/src/components/AdminDashboard.tsx | 13 + frontend/src/components/Api.tsx | 3 +- frontend/src/components/MyCubingIcon.tsx | 22 ++ frontend/src/components/Provinces.tsx | 32 +-- frontend/src/components/RankList.tsx | 24 +- frontend/src/components/Roles.ts | 14 + frontend/src/components/Types.ts | 12 +- frontend/src/components/UserEdit.tsx | 29 +++ frontend/src/components/UserList.tsx | 42 +++ frontend/src/components/UserShow.tsx | 59 +++++ frontend/src/cubingicon.css | 84 ++++++ frontend/src/dataProvider.ts | 130 +++++++++ frontend/src/i18nProvider.ts | 17 ++ frontend/src/locale.ts | 123 ++++++++- frontend/src/pages/Account.tsx | 133 ++++++---- frontend/src/pages/AdminPage.tsx | 97 ++++++- frontend/src/pages/FAQ.tsx | 112 ++++---- frontend/src/pages/Organization.tsx | 2 +- frontend/src/pages/Quebec.tsx | 24 ++ frontend/src/pages/Rankings.tsx | 120 ++++++--- frontend/src/pages/documents.ts | 26 +- frontend/src/pages/links.ts | 2 + 75 files changed, 2076 insertions(+), 1111 deletions(-) delete mode 100644 back/backend/handlers/admin/edit_users.py create mode 100644 back/backend/handlers/admin/show_users.py create mode 100644 deploy.sh create mode 100644 frontend/public/documents/directors-meeting-jul-20-2023.pdf create mode 100644 frontend/public/documents/directors-meeting-may-16-2023.pdf create mode 100644 frontend/public/documents/major-championship-reimbursement-transfer-policy-v1.0.pdf create mode 100644 frontend/public/documents/major-championship-reimbursement-transfer-policy.pdf create mode 100644 frontend/public/documents/reimbursement-policy-v1.2.pdf create mode 100644 frontend/public/documents/supported-events-policy-v1.1.pdf create mode 100644 frontend/src/components/AdminDashboard.tsx create mode 100644 frontend/src/components/MyCubingIcon.tsx create mode 100644 frontend/src/components/Roles.ts create mode 100644 frontend/src/components/UserEdit.tsx create mode 100644 frontend/src/components/UserList.tsx create mode 100644 frontend/src/components/UserShow.tsx create mode 100644 frontend/src/cubingicon.css create mode 100644 frontend/src/dataProvider.ts create mode 100644 frontend/src/i18nProvider.ts create mode 100644 frontend/src/pages/Quebec.tsx diff --git a/README.md b/README.md index 928e769..33dff5c 100644 --- a/README.md +++ b/README.md @@ -25,24 +25,14 @@ Open [http://localhost:2003](http://localhost:2003) to view it in the browser. The page will reload if you make edits.\ You will also see any lint errors in the console. -### `npm test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -Currently, there are no tests. - ### `npm run build` Builds the app for production to the `build` folder.\ It correctly bundles React in production mode and optimizes the build for the best performance. The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -Currently, this step is handled automatically by an AWS build pipeline. +Currently, this step is handled deploy script described bellow. ## Backend As mentioned above you can either use docker-compose or run the app locally. @@ -58,7 +48,7 @@ Then you can run the flask app with: ```shell gunicorn -b :8083 backend:app ``` -If you use pycharm, you can also create a flask configuration and run it from there (keep in mind the target folder is `back/backend`. +If you use pycharm, you can also create a flask configuration and run it from there. Keep in mind the target folder is `back/backend`. ## Datastore emulator @@ -68,10 +58,15 @@ gcloud beta emulators datastore start ## Deployment -To deploy run the command (make sure you built the frontend first): +To deploy the app use the script `deploy.sh` in the root directory. It will build the frontend and deploy the backend and frontend. +Here are the options available (you must choose prod or staging at least): ```sh -gcloud app deploy frontend/app.yaml dispatch.yaml back/api.yaml +./deploy.sh +# Arguments: +# -p: deploy to prod +# -s: deploy to staging +# -f: frontend only +# -b: backend only +# -v : On staging, the name of the app version to upload. ``` - -You can also deploy the backend and frontend separately, but the first time make sure you either deploy everything at once or the app and then the dispatch and the api together, because the services need to be created first. diff --git a/back/api.yaml b/back/api.yaml index 40f936b..6c24978 100644 --- a/back/api.yaml +++ b/back/api.yaml @@ -1,5 +1,5 @@ service: api -runtime: python39 +runtime: python311 entrypoint: gunicorn -b :$PORT backend:app env_variables: diff --git a/back/backend/__init__.py b/back/backend/__init__.py index 4c61932..51a624a 100644 --- a/back/backend/__init__.py +++ b/back/backend/__init__.py @@ -29,7 +29,9 @@ app.secret_key = get_secret('SESSION_SECRET_KEY') app.permanent_session_lifetime = datetime.timedelta(days=7) address = get_secret('FRONT_ADDRESS') -CORS(app, supports_credentials=True, expose_headers='Content-Range') +CORS(app, + origins=[address], + supports_credentials=True) @app.before_request diff --git a/back/backend/handlers/admin/__init__.py b/back/backend/handlers/admin/__init__.py index 1e87308..83bf6f3 100644 --- a/back/backend/handlers/admin/__init__.py +++ b/back/backend/handlers/admin/__init__.py @@ -1,8 +1,8 @@ from flask import Blueprint -from backend.handlers.admin.edit_users import bp as edit_users_bp +from backend.handlers.admin.show_users import bp as show_users_bp from backend.handlers.admin.provinces import bp as provinces_bp bp = Blueprint('admin', __name__, url_prefix='/admin') -bp.register_blueprint(edit_users_bp) +bp.register_blueprint(show_users_bp) bp.register_blueprint(provinces_bp) diff --git a/back/backend/handlers/admin/edit_users.py b/back/backend/handlers/admin/edit_users.py deleted file mode 100644 index 3a0c1c7..0000000 --- a/back/backend/handlers/admin/edit_users.py +++ /dev/null @@ -1,38 +0,0 @@ -from flask import abort, Blueprint, render_template -from google.cloud import ndb - -from backend.lib import auth -from backend.lib.common import Common -from backend.models.user import Roles, User -from backend.models.wca.person import Person - -bp = Blueprint('edit_users', __name__) -client = ndb.Client() - -#@bp.route('/edit_users') -def edit_users(): - with client.context(): - me = auth.user() - if not me or not me.HasAnyRole(Roles.AdminRoles()): - abort(403) - return render_template('admin/edit_users.html', - c=Common()) - -#@bp.route('/async/get_users/') -#@bp.route('/async/get_users/') -def edit_users_table(filter_text=''): - with client.context(): - me = auth.user() - if not me or not me.HasAnyRole(Roles.AdminRoles()): - abort(403) - - if filter_text: - users_to_show = User.query(ndb.OR(User.name == filter_text, - User.city == filter_text, - User.wca_person == ndb.Key(Person, filter_text)), - order_by=[User.name]).fetch(30) - else: - users_to_show = User.query(order_by=[User.name]).fetch(30) - - return render_template('admin/edit_users_table.html', - c=Common(), users=users_to_show) diff --git a/back/backend/handlers/admin/show_users.py b/back/backend/handlers/admin/show_users.py new file mode 100644 index 0000000..366fa05 --- /dev/null +++ b/back/backend/handlers/admin/show_users.py @@ -0,0 +1,89 @@ +from json import loads +from flask import Blueprint, jsonify, request +from google.cloud import ndb + +from backend.models.wca.person import Person +from backend.lib import auth +from backend.models.user import User, Roles + +bp = Blueprint('show_users', __name__) +client = ndb.Client() + + +@bp.route('/get_users') +def get_users(): + with client.context(): + me = auth.user() + if not me or not me.HasAnyRole(Roles.AdminRoles()): + return jsonify({"error": "Forbidden"}), 403 + + # Pagination + page = request.args.get('page', 1, type=int) + per_page = request.args.get('per_page', 30, type=int) + cursor = request.args.get('cursor', None, type=str) + if cursor: + cursor = ndb.Cursor(urlsafe=cursor) + if page < 1: + page = 1 + if per_page not in [10, 20, 30, 40, 50]: + per_page = 30 + + # Sort + sort_field = request.args.get('sort_field', 'name') + sort_order = request.args.get('sort_order', 'asc') + if sort_field not in ['id', 'name', 'wca_person', 'roles', 'province']: + sort_field = 'name' + if sort_order.lower() not in ['asc', 'desc']: + sort_order = 'asc' + + # Filter + filter_text = loads(request.args.get('filter', '')).get("q") + + # Query + if sort_order == 'asc': + order_field = getattr(User, sort_field) + else: + order_field = -getattr(User, sort_field) + if filter_text: + text = filter_text.lower() + limit = text[:-1] + chr(ord(text[-1]) + 1) + users_to_show = User.query( + ndb.OR( + ndb.AND( + User.name_lower >= text, + User.name_lower < limit, + ), + User.wca_person == ndb.Key(Person, filter_text) + )).order("name_lower", order_field).fetch(per_page) + has_more = False + else: + users_to_show, cursor, has_more = User.query(order_by=[order_field]).fetch_page(per_page, + start_cursor=cursor) + return jsonify({ + 'data': [user.toJson() for user in users_to_show], + 'cursor': cursor.urlsafe().decode() if cursor else '', + 'pageInfo': { + 'hasPreviousPage': page > 1, + 'hasNextPage': has_more, + } + }) + + +@bp.route('/get_users_by_id') +def get_users_by_id(): + with client.context(): + me = auth.user() + if not me or not me.HasAnyRole(Roles.AdminRoles()): + return jsonify({"error": "Forbidden"}), 403 + + user_ids = request.args.get('ids', "[]", type=str).strip("[]").split(",") + for user_id in user_ids: + if not user_id.isdigit(): + return jsonify({"error": "Invalid user id: " + user_id}), 400 + else: + user_id = int(user_id) + users = User.query(User.key.IN([ndb.Key(User, user_id) for user_id in user_ids])).fetch() + data = [user.toJson() for user in users] + return jsonify( + {'data': data} + ) diff --git a/back/backend/handlers/province_rankings.py b/back/backend/handlers/province_rankings.py index 14fe6e9..9235fe6 100644 --- a/back/backend/handlers/province_rankings.py +++ b/back/backend/handlers/province_rankings.py @@ -10,18 +10,10 @@ bp = Blueprint('province_rankings', __name__) client = ndb.Client() -@bp.route('/test_rankings') # temporary +@bp.route('/test_rankings') def test_rankings(): - - data=[{"name":"Sarah Strong","rank":1,"time":"9.18","url":"https://worldcubeassociation.org/persons/2007STRO01"},{"name":"Alexandre Ondet","rank":2,"time":"9.84","url":"https://worldcubeassociation.org/persons/2017ONDE01"}] - # Calculate the total count of results - total_results = len(data) - - # Set the Content-Range header - headers = { - 'Content-Range': f'items 0-{total_results - 1}/{total_results}' - } - return jsonify(data), 200, headers + data=[{"name":"Jonathan Esparaz","rank":1,"time":"5.52","url":"https://worldcubeassociation.org/persons/2013ESPA01"},{"name":"Wilson Alvis (\u9648\u667a\u80dc)","rank":2,"time":"7.10","url":"https://worldcubeassociation.org/persons/2011ALVI01"},{"name":"Sarah Strong","rank":3,"time":"9.18","url":"https://worldcubeassociation.org/persons/2007STRO01"},{"name":"Alexandre Ondet","rank":4,"time":"9.84","url":"https://worldcubeassociation.org/persons/2017ONDE01"},{"name":"Abdullah Gulab","rank":5,"time":"10.86","url":"https://worldcubeassociation.org/persons/2014GULA02"},{"name":"Nicholas McKee","rank":6,"time":"11.30","url":"https://worldcubeassociation.org/persons/2015MCKE02"},{"name":"Alyssa Esparaz","rank":7,"time":"16.11","url":"https://worldcubeassociation.org/persons/2014ESPA01"},{"name":"Daniel Daoust","rank":8,"time":"23.40","url":"https://worldcubeassociation.org/persons/2017DAOU01"}] + return jsonify(data) @bp.route('/province_rankings///') def province_rankings_table(event_id, province_id, use_average): diff --git a/back/backend/handlers/user.py b/back/backend/handlers/user.py index 185be1a..766aec2 100644 --- a/back/backend/handlers/user.py +++ b/back/backend/handlers/user.py @@ -1,26 +1,16 @@ -import datetime - -from flask import Blueprint, request, jsonify +from flask import Blueprint, jsonify, request from google.cloud import ndb +import datetime from backend.lib import permissions, auth from backend.models.province import Province from backend.models.user import User, UserLocationUpdate -from backend.models.wca.rank import RankAverage, RankSingle +from backend.models.wca.rank import RankSingle, RankAverage bp = Blueprint('user', __name__) client = ndb.Client() -# After updating the user's province, write the RankSingle and RankAverage to the -# datastore again to update their provinces. -def RewriteRanks(wca_person): - if not wca_person: - return - for rank_class in (RankSingle, RankAverage): - ndb.put_multi(rank_class.query(rank_class.person == wca_person.key).fetch()) - - @bp.route('/user_info', methods=['GET']) @bp.route('/user_info/', methods=['GET']) def user_info(user_id=-1): @@ -36,14 +26,16 @@ def user_info(user_id=-1): return jsonify({"error": "Unrecognized user ID %s" % user_id}), 404 if not permissions.CanViewUser(user, me): return jsonify({"error": "You're not authorized to view this user."}), 403 - return jsonify({ - "id": user.key.id(), - "name": user.name, - "roles": user.roles, - "dob": user.dob.isoformat() if user.dob else None, - "province": user.province.id() if user.province else None, - "wca_person": user.wca_person.id() if user.wca_person else None - }) + return user.toJson() + + +# After updating the user's province, write the RankSingle and RankAverage to the +# datastore again to update their provinces. +def RewriteRanks(wca_person): + if not wca_person: + return + for rank_class in (RankSingle, RankAverage): + ndb.put_multi(rank_class.query(rank_class.person == wca_person.key).fetch()) @bp.route('/edit', methods=['POST']) @@ -60,7 +52,8 @@ def edit(user_id=-1): if not user: return jsonify({"error": "Unrecognized user ID %s" % user_id}), 404 if not permissions.CanViewUser(user, me): - return jsonify({"error": "You're not authorized to view this user. So you can't edit their location either."}), 403 + return jsonify( + {"error": "You're not authorized to view this user. So you can't edit their location either."}), 403 province_id = request.json['province'] if province_id == 'na': @@ -94,15 +87,16 @@ def edit(user_id=-1): elif changed_location: return jsonify({"error": "You're not authorized to edit this user's location."}), 403 - for role in permissions.EditableRoles(user, me): - if role in request.json and role not in user.roles: - user.roles.append(role) - user_modified = True - elif role not in request.json and role in user.roles: - user.roles.remove(role) - user_modified = True + if "roles" in request.json: + for role in permissions.EditableRoles(user, me): + if role in request.json["roles"] and role not in user.roles: + user.roles.append(role) + user_modified = True + elif role not in request.json["roles"] and role in user.roles: + user.roles.remove(role) + user_modified = True if user_modified: user.put() - return jsonify({"success": True}) \ No newline at end of file + return user.toJson() diff --git a/back/backend/lib/auth.py b/back/backend/lib/auth.py index 19dc808..9e74ffa 100644 --- a/back/backend/lib/auth.py +++ b/back/backend/lib/auth.py @@ -2,14 +2,16 @@ from backend.models.user import User + def logged_in(): - return 'wca_account_number' in session + return 'wca_account_number' in session + def user(): - if not logged_in(): - return False + if not logged_in(): + return False - wca_account_number = session['wca_account_number'] + wca_account_number = session['wca_account_number'] - user = User.get_by_id(wca_account_number) - return user + user = User.get_by_id(wca_account_number) + return user diff --git a/back/backend/lib/common.py b/back/backend/lib/common.py index bcda97a..7b56109 100644 --- a/back/backend/lib/common.py +++ b/back/backend/lib/common.py @@ -78,44 +78,6 @@ def is_string(self, h): def is_none(self, h): return h is None - def get_nav_items(self): - items = [('Home', '/'), - ('Competitions', [ - ('Nationals', '/nationals'), - ('Regional Championships', '/regional'), - ]), - ('Competitors', [ - ('Province Rankings', '/province_rankings'), - ('WCA Competitor Tutorial', - 'https://www.worldcubeassociation.org/edudoc/competitor-tutorial/tutorial.pdf'), - ]), - ('Organizers', [ - ('CubingUSA Supported Competitions', '/supported'), - ('WCA Organizer Guidelines', 'https://www.worldcubeassociation.org/organizer-guidelines'), - ]), - ('About', [ - ('About CubingUSA', '/about'), - ('Who we are', '/about/who'), - ('Donations', '/about/donations'), - ('Contact Us', '/about/contact'), - ('Logo', '/about/logo'), - ('Public Documents', '/about/documents'), - ]), - ] - if self.user and self.user.HasAnyRole(Roles.AdminRoles()): - items += [('Admin', [ - ('Edit Users', '/admin/edit_users'), - ('Edit Championships', '/admin/edit_championships'), - ])] - return items - - def get_right_nav_items(self): - if self.user: - return [('My Settings', '/edit'), - ('Log out', '/logout')] - else: - return [('Log in', '/login')] - def is_prod(self): return os.environ['ENV'] == 'PROD' diff --git a/back/backend/lib/formatters.py b/back/backend/lib/formatters.py index cba32df..b6d2637 100644 --- a/back/backend/lib/formatters.py +++ b/back/backend/lib/formatters.py @@ -1,112 +1,122 @@ def parse_time(time): - centiseconds = time % 100 - res = time // 100 - seconds = res % 60 - res = res // 60 - minutes = res % 60 - hours = res // 60 - return (hours, minutes, seconds, centiseconds) + centiseconds = time % 100 + res = time // 100 + seconds = res % 60 + res = res // 60 + minutes = res % 60 + hours = res // 60 + return (hours, minutes, seconds, centiseconds) + def FormatStandard(time, trim_zeros): - hours, minutes, seconds, centiseconds = parse_time(time) - centiseconds_section = '' if trim_zeros and not centiseconds else '.%02d' % centiseconds - if hours > 0: - return '%d:%02d:%02d' % (hours, minutes, seconds) - elif minutes >= 10: - return '%d:%02d' % (minutes, seconds) - elif minutes > 0: - return '%d:%02d%s' % (minutes, seconds, centiseconds_section) - else: - return '%01d%s' % (seconds, centiseconds_section) + hours, minutes, seconds, centiseconds = parse_time(time) + centiseconds_section = '' if trim_zeros and not centiseconds else '.%02d' % centiseconds + if hours > 0: + return '%d:%02d:%02d' % (hours, minutes, seconds) + elif minutes >= 10: + return '%d:%02d' % (minutes, seconds) + elif minutes > 0: + return '%d:%02d%s' % (minutes, seconds, centiseconds_section) + else: + return '%01d%s' % (seconds, centiseconds_section) + def FormatVerbose(time, trim_zeros, short_units): - if time >= 6000: - return FormatStandard(time, trim_zeros) - else: - if short_units: - unit = 'sec' - elif time == 100: - unit = 'second' + if time >= 6000: + return FormatStandard(time, trim_zeros) else: - unit = 'seconds' - return '%s %s' % (FormatStandard(time, trim_zeros), unit) + if short_units: + unit = 'sec' + elif time == 100: + unit = 'second' + else: + unit = 'seconds' + return '%s %s' % (FormatStandard(time, trim_zeros), unit) + def FormatMultiBlindOld(time, verbose, trim_zeros, short_units): - time_in_seconds = time % 100000 - res = time // 100000 - attempted = res % 100 - solved = 199 - res // 100 - - if verbose: - return '%d out of %d cubes in %s' % ( - solved, attempted, - FormatStandard(time_in_seconds * 100, trim_zeros)) - else: - return '%d/%d %s' % (solved, attempted, - FormatStandard(time_in_seconds * 100, trim_zeros)) + time_in_seconds = time % 100000 + res = time // 100000 + attempted = res % 100 + solved = 199 - res // 100 + + if verbose: + return '%d out of %d cubes in %s' % ( + solved, attempted, + FormatStandard(time_in_seconds * 100, trim_zeros)) + else: + return '%d/%d %s' % (solved, attempted, + FormatStandard(time_in_seconds * 100, trim_zeros)) + def FormatMultiBlind(time, verbose, trim_zeros, short_units): - missed = time % 100 - res = time // 100 - time_in_seconds = res % 100000 - delta = 99 - res // 100000 - solved = missed + delta - attempted = solved + missed - - if verbose: - return '%d out of %d cubes in %s' % ( - solved, attempted, - FormatStandard(time_in_seconds * 100, trim_zeros)) - else: - return '%d/%d %s' % (solved, attempted, - FormatStandard(time_in_seconds * 100, trim_zeros)) + missed = time % 100 + res = time // 100 + time_in_seconds = res % 100000 + delta = 99 - res // 100000 + solved = missed + delta + attempted = solved + missed + + if verbose: + return '%d out of %d cubes in %s' % ( + solved, attempted, + FormatStandard(time_in_seconds * 100, trim_zeros)) + else: + return '%d/%d %s' % (solved, attempted, + FormatStandard(time_in_seconds * 100, trim_zeros)) + def FormatFewestMoves(time, is_average, verbose, short_units): - result = str(time) - if is_average: - result = '%d.%02d' % (time // 100, time % 100) - if short_units: - return result - if verbose: - return '%s moves%s' % (result, ' (average)' if is_average else '') - else: - return result + result = str(time) + if is_average: + result = '%d.%02d' % (time // 100, time % 100) + if short_units: + return result + if verbose: + return '%s moves%s' % (result, ' (average)' if is_average else '') + else: + return result + def FormatTime(time, event_key, is_average, verbose=False, trim_zeros=False, short_units=False): - if time == -1: - return 'DNF' - elif time == -2: - return 'DNS' - elif event_key.id() == '333fm': - return FormatFewestMoves(time, is_average, verbose, short_units) - elif event_key.id() in ('333mbf', '333mbo'): - if time > 1000000000: - return FormatMultiBlindOld(time, verbose, trim_zeros, short_units) + if time == -1: + return 'DNF' + elif time == -2: + return 'DNS' + elif event_key.id() == '333fm': + return FormatFewestMoves(time, is_average, verbose, short_units) + elif event_key.id() in ('333mbf', '333mbo'): + if time > 1000000000: + return FormatMultiBlindOld(time, verbose, trim_zeros, short_units) + else: + return FormatMultiBlind(time, verbose, trim_zeros, short_units) + elif verbose: + return FormatVerbose(time, trim_zeros, short_units) else: - return FormatMultiBlind(time, verbose, trim_zeros, short_units) - elif verbose: - return FormatVerbose(time, trim_zeros, short_units) - else: - return FormatStandard(time, trim_zeros) + return FormatStandard(time, trim_zeros) + def FormatQualifying(time, event_key, is_average, short_units=False): - if event_key.id() == '333fm': - return FormatFewestMoves(time, is_average, verbose=False, short_units=short_units) - elif event_key.id() == '333mbf': - return '%d %s' % (99 - time // 10000000, 'pts' if short_units else 'points') - else: - return FormatVerbose(time, trim_zeros=True, short_units=short_units) + if event_key.id() == '333fm': + return FormatFewestMoves(time, is_average, verbose=False, short_units=short_units) + elif event_key.id() == '333mbf': + return '%d %s' % (99 - time // 10000000, 'pts' if short_units else 'points') + else: + return FormatVerbose(time, trim_zeros=True, short_units=short_units) + def FormatResult(result, verbose=False): - is_average = result.fmt.id() in ('a', 'm') - if is_average: - return FormatTime(result.average, result.event, True, verbose) - else: - return FormatTime(result.best, result.event, False, verbose) + is_average = result.fmt.id() in ('a', 'm') + if is_average: + return FormatTime(result.average, result.event, True, verbose) + else: + return FormatTime(result.best, result.event, False, verbose) + def FormatDate(date): - return '%s, %s %d' % (date.strftime('%A'), date.strftime('%B'), date.day) + return '%s, %s %d' % (date.strftime('%A'), date.strftime('%B'), date.day) + def FormatClockTime(time): - return time.strftime('%I:%M %p').lstrip('0') + return time.strftime('%I:%M %p').lstrip('0') diff --git a/back/backend/lib/permissions.py b/back/backend/lib/permissions.py index 8bbbb61..964d735 100644 --- a/back/backend/lib/permissions.py +++ b/back/backend/lib/permissions.py @@ -1,31 +1,35 @@ from backend.models.user import Roles + def CanEditLocation(user, editor): - if not editor: - return False - if editor.HasAnyRole(Roles.AdminRoles()): - return True - return user == editor + if not editor: + return False + if editor.HasAnyRole(Roles.AdminRoles()): + return True + return user == editor + def CanViewUser(user, viewer): - if not viewer: - return False - return (user == viewer or - viewer.HasAnyRole(Roles.DelegateRoles()) or - viewer.HasAnyRole(Roles.AdminRoles())) + if not viewer: + return False + return (user == viewer or + viewer.HasAnyRole(Roles.DelegateRoles()) or + viewer.HasAnyRole(Roles.AdminRoles())) + def CanViewRoles(user, viewer): - if not viewer: - return False - return (viewer.HasAnyRole(Roles.DelegateRoles()) or - viewer.HasAnyRole(Roles.AdminRoles())) + if not viewer: + return False + return (viewer.HasAnyRole(Roles.DelegateRoles()) or + viewer.HasAnyRole(Roles.AdminRoles())) + def EditableRoles(user, editor): - if not editor: - return [] - if editor.HasAnyRole([Roles.GLOBAL_ADMIN]): - return Roles.AllRoles() - elif editor.HasAnyRole([Roles.WEBMASTER, Roles.DIRECTOR]): - return [Roles.WEBMASTER, Roles.DIRECTOR] - else: - return [] + if not editor: + return [] + if editor.HasAnyRole([Roles.GLOBAL_ADMIN]): + return Roles.AllRoles() + elif editor.HasAnyRole([Roles.WEBMASTER, Roles.DIRECTOR]): + return [Roles.WEBMASTER, Roles.DIRECTOR] + else: + return [] diff --git a/back/backend/lib/secrets.py b/back/backend/lib/secrets.py index e1e9d23..c97c464 100644 --- a/back/backend/lib/secrets.py +++ b/back/backend/lib/secrets.py @@ -2,11 +2,12 @@ from google.cloud import secretmanager + def get_secret(name): - if os.environ.get('ENV') == 'DEV': - return os.environ.get(name) - client = secretmanager.SecretManagerServiceClient() - project_id = os.environ.get('GOOGLE_CLOUD_PROJECT') - name = f"projects/{project_id}/secrets/{name}/versions/latest" - response = client.access_secret_version(request={'name': name}) - return response.payload.data.decode('UTF-8') + if os.environ.get('ENV') == 'DEV': + return os.environ.get(name) + client = secretmanager.SecretManagerServiceClient() + project_id = os.environ.get('GOOGLE_CLOUD_PROJECT') + name = f"projects/{project_id}/secrets/{name}/versions/latest" + response = client.access_secret_version(request={'name': name}) + return response.payload.data.decode('UTF-8') diff --git a/back/backend/load_db/README.md b/back/backend/load_db/README.md index ef13d19..a2f78c4 100644 --- a/back/backend/load_db/README.md +++ b/back/backend/load_db/README.md @@ -12,9 +12,12 @@ You can create a new VM at https://console.cloud.google.com/compute/instancesAdd * **Management**: Use the following Startup script: ```sh -apt upgrade +apt-get update; apt-get upgrade -y cd speedcubing-canada/back +git reset --hard HEAD git pull +chmod +x backend/load_db/startup.sh +chmod +x backend/load_db/load_db.sh backend/load_db/startup.sh ``` diff --git a/back/backend/load_db/cleanup.py b/back/backend/load_db/cleanup.py index 3aa0d90..63a65a6 100644 --- a/back/backend/load_db/cleanup.py +++ b/back/backend/load_db/cleanup.py @@ -4,18 +4,19 @@ # Delete classes we don't use anymore. with client.context(): - for clsname in ['AppSettings', - 'Document', - 'Schedule', - 'ScheduleCompetition', - 'SchedulePerson', - 'ScheduleRound', - 'ScheduleStaff', - 'ScheduleStage', - 'ScheduleTimeBlock', - 'WcaExport']: - class MyModel(ndb.Model): - pass + for clsname in ['AppSettings', + 'Document', + 'Schedule', + 'ScheduleCompetition', + 'SchedulePerson', + 'ScheduleRound', + 'ScheduleStaff', + 'ScheduleStage', + 'ScheduleTimeBlock', + 'WcaExport']: + class MyModel(ndb.Model): + pass - MyModel.__name__ = clsname - ndb.delete_multi(MyModel.query().fetch(keys_only=True)) + + MyModel.__name__ = clsname + ndb.delete_multi(MyModel.query().fetch(keys_only=True)) diff --git a/back/backend/load_db/delete_old_exports.py b/back/backend/load_db/delete_old_exports.py index eb9ac54..8800035 100644 --- a/back/backend/load_db/delete_old_exports.py +++ b/back/backend/load_db/delete_old_exports.py @@ -3,6 +3,7 @@ from absl import app from absl import flags +from absl import logging from google.cloud import ndb from backend.models.wca.export import get_latest_export @@ -13,15 +14,18 @@ client = ndb.Client() + def main(argv): - with client.context(): - latest_export = get_latest_export() - exports = sorted([f for f in os.listdir(FLAGS.export_base) - if not os.path.isfile(os.path.join(FLAGS.export_base, f)) - and f != latest_export]) + with client.context(): + latest_export = get_latest_export() + exports = sorted([f for f in os.listdir(FLAGS.export_base) + if not os.path.isfile(os.path.join(FLAGS.export_base, f)) + and f != latest_export]) + + for export in exports[:-5]: + shutil.rmtree(os.path.join(FLAGS.export_base, export)) + logging.info('Deleted %s', export) - for export in exports[:-5]: - shutil.rmtree(os.path.join(FLAGS.export_base, export)) if __name__ == '__main__': - app.run(main) + app.run(main) diff --git a/back/backend/load_db/get_latest_export.py b/back/backend/load_db/get_latest_export.py index a0bbcd5..0832478 100644 --- a/back/backend/load_db/get_latest_export.py +++ b/back/backend/load_db/get_latest_export.py @@ -5,6 +5,6 @@ client = ndb.Client() with client.context(): - export = get_latest_export() - if export: - print(export) + export = get_latest_export() + if export: + print(export) diff --git a/back/backend/load_db/load_db.py b/back/backend/load_db/load_db.py index c86d3b3..9ad1783 100644 --- a/back/backend/load_db/load_db.py +++ b/back/backend/load_db/load_db.py @@ -19,143 +19,145 @@ from backend.models.wca.result import Result from backend.models.wca.round import RoundType - FLAGS = flags.FLAGS flags.DEFINE_string('old_export_id', '', 'ID of the old export.') flags.DEFINE_string('new_export_id', '', 'ID of the new export.') flags.DEFINE_string('export_base', '', 'Base directory of exports.') + def get_tables(): - return [('Continents', Continent), - ('Countries', Country), - ('Events', Event), - ('Formats', Format), - ('RoundTypes', RoundType), - ('Persons', Person), - ('RanksSingle', RankSingle), - ('RanksAverage', RankAverage), - ('Competitions', Competition), - ('Results', Result), - ] + return [('Continents', Continent), + ('Countries', Country), + ('Events', Event), + ('Formats', Format), + ('RoundTypes', RoundType), + ('Persons', Person), + ('RanksSingle', RankSingle), + ('RanksAverage', RankAverage), + ('Competitions', Competition), + ('Results', Result), + ] # Ideally this would live in person.py, but that would be a circular dependency # between Person and User. def get_modifier(table): - if table == 'Persons': - id_to_province = {} - for user in User.query(User.province != None): - if user.wca_person: - id_to_province[user.wca_person.id()] = user.province + if table == 'Persons': + id_to_province = {} + for user in User.query(User.province != None): + if user.wca_person: + id_to_province[user.wca_person.id()] = user.province + + def modify(person): + if person.key.id() in id_to_province: + person.province = id_to_province[person.key.id()] - def modify(person): - if person.key.id() in id_to_province: - person.province = id_to_province[person.key.id()] - return modify - return None + return modify + return None def read_table(path, cls, apply_filter): - filter_fn = lambda row: True - if apply_filter: - filter_fn = cls.Filter() - out = {} - try: - with open(path) as csvfile: - reader = csv.DictReader(csvfile, dialect='excel-tab') - for row in reader: - if filter_fn(row): - fields_to_write = cls.ColumnsUsed() - if 'id' in row: - fields_to_write += ['id'] - to_write = {} - for field in fields_to_write: - if field in row: - to_write[field] = row[field] - out[cls.GetId(row)] = to_write - except: - # This is fine, the file might just not exist. - pass - return out + filter_fn = lambda row: True + if apply_filter: + filter_fn = cls.Filter() + out = {} + try: + with open(path) as csvfile: + reader = csv.DictReader(csvfile, dialect='excel-tab') + for row in reader: + if filter_fn(row): + fields_to_write = cls.ColumnsUsed() + if 'id' in row: + fields_to_write += ['id'] + to_write = {} + for field in fields_to_write: + if field in row: + to_write[field] = row[field] + out[cls.GetId(row)] = to_write + except: + # This is fine, the file might just not exist. + pass + return out def write_table(path, rows, cls): - use_id = False - with open(path, 'r') as csvfile: - reader = csv.DictReader(csvfile, dialect='excel-tab') - use_id = 'id' in reader.fieldnames - with open(path, 'w') as csvfile: - fields_to_write = cls.ColumnsUsed() - if use_id: - fields_to_write += ['id'] - writer = csv.DictWriter(csvfile, dialect='excel-tab', fieldnames=fields_to_write) - writer.writeheader() - for row in rows.items(): - writer.writerow({k: v for k, v in row[1].items() if k in fields_to_write}) + use_id = False + with open(path, 'r') as csvfile: + reader = csv.DictReader(csvfile, dialect='excel-tab') + use_id = 'id' in reader.fieldnames + with open(path, 'w') as csvfile: + fields_to_write = cls.ColumnsUsed() + if use_id: + fields_to_write += ['id'] + writer = csv.DictWriter(csvfile, dialect='excel-tab', fieldnames=fields_to_write) + writer.writeheader() + for row in rows.items(): + writer.writerow({k: v for k, v in row[1].items() if k in fields_to_write}) def process_export(old_export_path, new_export_path): - client = ndb.Client() - for table, cls in get_tables(): - logging.info('Processing ' + table) - table_suffix = '/WCA_export_' + table + '.tsv' - with client.context(): - old_rows = read_table(old_export_path + table_suffix, cls, False) - logging.info('Old: %d' % len(old_rows)) - new_rows = read_table(new_export_path + table_suffix, cls, True) - logging.info('New: %d' % len(new_rows)) - write_table(new_export_path + table_suffix, new_rows, cls) - - objects_to_put = [] - keys_to_delete = [] - - modifier = get_modifier(table) - for key in new_rows: - row = new_rows[key] - if key in old_rows and old_rows[key] == row: - continue - else: - obj = cls(id=key) - obj.ParseFromDict(row) - if modifier: - modifier(obj) - objects_to_put += [obj] - for key, row in old_rows.items(): - if key in new_rows: - continue - else: - keys_to_delete += [ndb.Key(cls, key)] - - logging.info('Putting %d objects' % len(objects_to_put)) - while objects_to_put: - batch_size = 5000 - logging.info('%d left' % len(objects_to_put)) - subslice = objects_to_put[:batch_size] - objects_to_put = objects_to_put[batch_size:] - with client.context(): - ndb.put_multi(subslice) - - logging.info('Deleting %d objects' % len(keys_to_delete)) client = ndb.Client() - with client.context(): - ndb.delete_multi(keys_to_delete) + for table, cls in get_tables(): + logging.info('Processing ' + table) + table_suffix = '/WCA_export_' + table + '.tsv' + with client.context(): + old_rows = read_table(old_export_path + table_suffix, cls, False) + logging.info('Old: %d' % len(old_rows)) + new_rows = read_table(new_export_path + table_suffix, cls, True) + logging.info('New: %d' % len(new_rows)) + write_table(new_export_path + table_suffix, new_rows, cls) + + objects_to_put = [] + keys_to_delete = [] + + modifier = get_modifier(table) + for key in new_rows: + row = new_rows[key] + if key in old_rows and old_rows[key] == row: + continue + else: + obj = cls(id=key) + obj.ParseFromDict(row) + if modifier: + modifier(obj) + objects_to_put += [obj] + for key, row in old_rows.items(): + if key in new_rows: + continue + else: + keys_to_delete += [ndb.Key(cls, key)] + + logging.info('Putting %d objects' % len(objects_to_put)) + while objects_to_put: + batch_size = 5000 + logging.info('%d left' % len(objects_to_put)) + subslice = objects_to_put[:batch_size] + objects_to_put = objects_to_put[batch_size:] + with client.context(): + ndb.put_multi(subslice) + + logging.info('Deleting %d objects' % len(keys_to_delete)) + client = ndb.Client() + with client.context(): + ndb.delete_multi(keys_to_delete) def main(argv): - old_export_path = FLAGS.export_base + FLAGS.old_export_id - new_export_path = FLAGS.export_base + FLAGS.new_export_id + old_export_path = FLAGS.export_base + FLAGS.old_export_id + new_export_path = FLAGS.export_base + FLAGS.new_export_id + + logging.info(old_export_path) + logging.info(new_export_path) - logging.info(old_export_path) - logging.info(new_export_path) + # A new client context is created for each write here, to avoid a memory leak. + process_export(old_export_path, new_export_path) - # A new client context is created for each write here, to avoid a memory leak. - process_export(old_export_path, new_export_path) + client = ndb.Client() + with client.context(): + set_latest_export(FLAGS.new_export_id) + UpdateChampions() - client = ndb.Client() - with client.context(): - set_latest_export(FLAGS.new_export_id) - UpdateChampions() if __name__ == '__main__': - app.run(main) + app.run(main) diff --git a/back/backend/load_db/load_db.sh b/back/backend/load_db/load_db.sh index 148f49f..6b887c3 100644 --- a/back/backend/load_db/load_db.sh +++ b/back/backend/load_db/load_db.sh @@ -42,3 +42,5 @@ then --new_export_id="$LATEST_EXPORT" \ --export_base=exports/ fi + +/usr/sbin/shutdown -h now diff --git a/back/backend/load_db/update_champions.py b/back/backend/load_db/update_champions.py index 69d28a4..2eeb760 100644 --- a/back/backend/load_db/update_champions.py +++ b/back/backend/load_db/update_champions.py @@ -17,133 +17,135 @@ def ComputeEligibleCompetitors(championship, competition, results): - if championship.national_championship: - # We don't save this in the datastore because it's easy enough to compute. - return set([r.person.id() for r in results - if r.person_country == ndb.Key(Country, 'Canada')]) - competitors = set([r.person for r in results]) - users = User.query(User.wca_person.IN(competitors)).fetch() - user_keys = [user.key for user in users] + if championship.national_championship: + # We don't save this in the datastore because it's easy enough to compute. + return set([r.person.id() for r in results + if r.person_country == ndb.Key(Country, 'Canada')]) + competitors = set([r.person for r in results]) + users = User.query(User.wca_person.IN(competitors)).fetch() + user_keys = [user.key for user in users] - # Load the saved eligibilities, so that one person can't be eligible for two - # championships of the same type. - if championship.region: - eligibility_class = RegionalChampionshipEligibility - def eligibility_field(user): - if not user.regional_eligibilities: - user.regional_eligibilities = [] - return user.regional_eligibilities - else: - eligibility_class = ProvinceChampionshipEligibility - def eligibility_field(user): - if not user.province_eligibilities: - user.province_eligibilities = [] - return user.province_eligibilities + # Load the saved eligibilities, so that one person can't be eligible for two + # championships of the same type. + if championship.region: + eligibility_class = RegionalChampionshipEligibility - valid_province_keys = championship.GetEligibleProvinceKeys() - residency_deadline = (championship.residency_deadline or - datetime.datetime.combine(competition.start_date, datetime.time(0, 0, 0))) + def eligibility_field(user): + if not user.regional_eligibilities: + user.regional_eligibilities = [] + return user.regional_eligibilities + else: + eligibility_class = ProvinceChampionshipEligibility - eligible_competitors = set() - competitors_to_put = [] + def eligibility_field(user): + if not user.province_eligibilities: + user.province_eligibilities = [] + return user.province_eligibilities - class Resolution: - ELIGIBLE = 0 - INELIGIBLE = 1 - UNRESOLVED = 2 + valid_province_keys = championship.GetEligibleProvinceKeys() + residency_deadline = (championship.residency_deadline or + datetime.datetime.combine(competition.start_date, datetime.time(0, 0, 0))) - for user in users: - resolution = Resolution.UNRESOLVED - for eligibility in eligibility_field(user): - if eligibility.year != championship.year: - continue - if eligibility.championship == championship.key: - resolution = Resolution.ELIGIBLE - else: - resolution = Resolution.INELIGIBLE - # If the competitor hasn't already used their eligibility, check their province. - if resolution == Resolution.UNRESOLVED: - province = None - for update in user.updates or []: - if update.update_time < residency_deadline: - province = update.province - if province and province in valid_province_keys: - # This competitor is eligible, so save this on their User. - resolution = Resolution.ELIGIBLE - eligibility = eligibility_class() - eligibility.championship = championship.key - eligibility_field(user).append(eligibility) - competitors_to_put.append(user) - else: - resolution = Resolution.INELIGIBLE - if resolution == Resolution.ELIGIBLE: - eligible_competitors.add(user.wca_person.id()) - ndb.put_multi(competitors_to_put) - return eligible_competitors + eligible_competitors = set() + competitors_to_put = [] + + class Resolution: + ELIGIBLE = 0 + INELIGIBLE = 1 + UNRESOLVED = 2 + + for user in users: + resolution = Resolution.UNRESOLVED + for eligibility in eligibility_field(user): + if eligibility.year != championship.year: + continue + if eligibility.championship == championship.key: + resolution = Resolution.ELIGIBLE + else: + resolution = Resolution.INELIGIBLE + # If the competitor hasn't already used their eligibility, check their province. + if resolution == Resolution.UNRESOLVED: + province = None + for update in user.updates or []: + if update.update_time < residency_deadline: + province = update.province + if province and province in valid_province_keys: + # This competitor is eligible, so save this on their User. + resolution = Resolution.ELIGIBLE + eligibility = eligibility_class() + eligibility.championship = championship.key + eligibility_field(user).append(eligibility) + competitors_to_put.append(user) + else: + resolution = Resolution.INELIGIBLE + if resolution == Resolution.ELIGIBLE: + eligible_competitors.add(user.wca_person.id()) + ndb.put_multi(competitors_to_put) + return eligible_competitors def UpdateChampions(): - champions_to_write = [] - champions_to_delete = [] - final_round_keys = set(r.key for r in RoundType.query(RoundType.final == True).iter()) - all_event_keys = set(e.key for e in Event.query().iter()) - championships_already_computed = set() - for champion in Champion.query().iter(): - championships_already_computed.add(champion.championship.id()) - for championship in Championship.query().iter(): - if not championship.national_championship and os.environ.get('ENV') == 'DEV': - # Don't try to compute regional champions on dev, since we don't have - # location data. - continue - competition = championship.competition.get() - # Only recompute champions from the last 2 weeks, in case there are result updates. - if (championship.key.id() in championships_already_computed and - datetime.date.today() - competition.end_date > datetime.timedelta(days=14)): - continue - if competition.end_date > datetime.date.today(): - continue - competition_id = championship.competition.id() - logging.info('Computing champions for %s' % competition_id) - results = (Result.query(Result.competition == championship.competition) - .order(Result.pos).fetch()) - if not results: - logging.info('Results are not uploaded yet. Not computing champions yet.') - continue - eligible_competitors = ComputeEligibleCompetitors(championship, competition, results) - champions = collections.defaultdict(list) - events_held_with_successes = set() - for result in results: - if result.best < 0: - continue - if result.round_type not in final_round_keys: - continue - this_event = result.event - # For multi blind, we only recognize pre-2009 champions in 333mbo, since - # that was the multi-blind event held those years. For clarity in the - # champions listings, we list those champions as the 333mbf champions for - # those years. - if championship.competition.get().year < 2009: - if result.event.id() == '333mbo': - this_event = ndb.Key(Event, '333mbf') - elif result.event.id() == '333mbf': - continue - events_held_with_successes.add(this_event) - if this_event in champions and champions[this_event][0].pos < result.pos: - continue - if result.person.id() not in eligible_competitors: - continue - champions[this_event].append(result) - if result.pos > 1 and len(champions) >= len(events_held_with_successes): - break - for event_key in all_event_keys: - champion_id = Champion.Id(championship.key.id(), event_key.id()) - if event_key in champions: - champion = Champion.get_by_id(champion_id) or Champion(id=champion_id) - champion.championship = championship.key - champion.event = event_key - champion.champions = [c.key for c in champions[event_key]] - champions_to_write.append(champion) - else: - champions_to_delete.append(ndb.Key(Champion, champion_id)) - ndb.put_multi(champions_to_write) - ndb.delete_multi(champions_to_delete) \ No newline at end of file + champions_to_write = [] + champions_to_delete = [] + final_round_keys = set(r.key for r in RoundType.query(RoundType.final == True).iter()) + all_event_keys = set(e.key for e in Event.query().iter()) + championships_already_computed = set() + for champion in Champion.query().iter(): + championships_already_computed.add(champion.championship.id()) + for championship in Championship.query().iter(): + if not championship.national_championship and os.environ.get('ENV') == 'DEV': + # Don't try to compute regional champions on dev, since we don't have + # location data. + continue + competition = championship.competition.get() + # Only recompute champions from the last 2 weeks, in case there are result updates. + if (championship.key.id() in championships_already_computed and + datetime.date.today() - competition.end_date > datetime.timedelta(days=14)): + continue + if competition.end_date > datetime.date.today(): + continue + competition_id = championship.competition.id() + logging.info('Computing champions for %s' % competition_id) + results = (Result.query(Result.competition == championship.competition) + .order(Result.pos).fetch()) + if not results: + logging.info('Results are not uploaded yet. Not computing champions yet.') + continue + eligible_competitors = ComputeEligibleCompetitors(championship, competition, results) + champions = collections.defaultdict(list) + events_held_with_successes = set() + for result in results: + if result.best < 0: + continue + if result.round_type not in final_round_keys: + continue + this_event = result.event + # For multi blind, we only recognize pre-2009 champions in 333mbo, since + # that was the multi-blind event held those years. For clarity in the + # champions listings, we list those champions as the 333mbf champions for + # those years. + if championship.competition.get().year < 2009: + if result.event.id() == '333mbo': + this_event = ndb.Key(Event, '333mbf') + elif result.event.id() == '333mbf': + continue + events_held_with_successes.add(this_event) + if this_event in champions and champions[this_event][0].pos < result.pos: + continue + if result.person.id() not in eligible_competitors: + continue + champions[this_event].append(result) + if result.pos > 1 and len(champions) >= len(events_held_with_successes): + break + for event_key in all_event_keys: + champion_id = Champion.Id(championship.key.id(), event_key.id()) + if event_key in champions: + champion = Champion.get_by_id(champion_id) or Champion(id=champion_id) + champion.championship = championship.key + champion.event = event_key + champion.champions = [c.key for c in champions[event_key]] + champions_to_write.append(champion) + else: + champions_to_delete.append(ndb.Key(Champion, champion_id)) + ndb.put_multi(champions_to_write) + ndb.delete_multi(champions_to_delete) diff --git a/back/backend/load_db/vm_setup.sh b/back/backend/load_db/vm_setup.sh index 3681a65..7baf532 100644 --- a/back/backend/load_db/vm_setup.sh +++ b/back/backend/load_db/vm_setup.sh @@ -34,6 +34,7 @@ pip3 install --upgrade pip pip3 install -r requirements.txt # Set up the staging environment. +git config --global pull.rebase false echo export SCC_ENV=COMPUTE_ENGINE >> /root/.bashrc echo export WCA_HOST=https://staging.worldcubeassociation.org >> /root/.bashrc echo export GOOGLE_CLOUD_PROJECT=scc-staging-391105 >> /root/.bashrc diff --git a/back/backend/models/champion.py b/back/backend/models/champion.py index 0cf3e54..de2c462 100644 --- a/back/backend/models/champion.py +++ b/back/backend/models/champion.py @@ -4,16 +4,17 @@ from backend.models.wca.event import Event from backend.models.wca.result import Result + class Champion(ndb.Model): - championship = ndb.KeyProperty(kind=Championship) - event = ndb.KeyProperty(kind=Event) - champions = ndb.KeyProperty(kind=Result, repeated=True) + championship = ndb.KeyProperty(kind=Championship) + event = ndb.KeyProperty(kind=Event) + champions = ndb.KeyProperty(kind=Result, repeated=True) - national_champion = ndb.ComputedProperty(lambda e: e.championship.get().national_championship) - region = ndb.ComputedProperty(lambda e: e.championship.get().region) - province = ndb.ComputedProperty(lambda e: e.championship.get().province) - year = ndb.ComputedProperty(lambda e: e.championship.get().year) + national_champion = ndb.ComputedProperty(lambda e: e.championship.get().national_championship) + region = ndb.ComputedProperty(lambda e: e.championship.get().region) + province = ndb.ComputedProperty(lambda e: e.championship.get().province) + year = ndb.ComputedProperty(lambda e: e.championship.get().year) - @staticmethod - def Id(championship_id, event_id): - return '%s_%s' % (championship_id, event_id) + @staticmethod + def Id(championship_id, event_id): + return '%s_%s' % (championship_id, event_id) diff --git a/back/backend/models/championship.py b/back/backend/models/championship.py index 3d03284..224d88b 100644 --- a/back/backend/models/championship.py +++ b/back/backend/models/championship.py @@ -4,35 +4,36 @@ from backend.models.province import Province from backend.models.wca.competition import Competition + class Championship(ndb.Model): - national_championship = ndb.BooleanProperty() - region = ndb.KeyProperty(kind=Region) - province = ndb.KeyProperty(kind=Province) + national_championship = ndb.BooleanProperty() + region = ndb.KeyProperty(kind=Region) + province = ndb.KeyProperty(kind=Province) - competition = ndb.KeyProperty(kind=Competition) + competition = ndb.KeyProperty(kind=Competition) - year = ndb.ComputedProperty(lambda self: self.competition.get().year) + year = ndb.ComputedProperty(lambda self: self.competition.get().year) - residency_deadline = ndb.DateTimeProperty() - residency_timezone = ndb.StringProperty() + residency_deadline = ndb.DateTimeProperty() + residency_timezone = ndb.StringProperty() - @staticmethod - def NationalsId(year): - return str(year) + @staticmethod + def NationalsId(year): + return str(year) - @staticmethod - def RegionalsId(year, region): - return '%s_%d' % (region.key.id(), year) + @staticmethod + def RegionalsId(year, region): + return '%s_%d' % (region.key.id(), year) - @staticmethod - def ProvinceChampionshipId(year, province): - return '%s_%d' % (province.key.id(), year) + @staticmethod + def ProvinceChampionshipId(year, province): + return '%s_%d' % (province.key.id(), year) - def GetEligibleProvinceKeys(self): - if self.province: - return [self.province] - if self.region: - return Province.query(Province.region == self.region).fetch(keys_only=True) - # National championships are not based on residence, they're based on - # citizenship. - return None + def GetEligibleProvinceKeys(self): + if self.province: + return [self.province] + if self.region: + return Province.query(Province.region == self.region).fetch(keys_only=True) + # National championships are not based on residence, they're based on + # citizenship. + return None diff --git a/back/backend/models/eligibility.py b/back/backend/models/eligibility.py index 5741843..f619bd8 100644 --- a/back/backend/models/eligibility.py +++ b/back/backend/models/eligibility.py @@ -2,13 +2,14 @@ from backend.models.championship import Championship + class RegionalChampionshipEligibility(ndb.Model): - championship = ndb.KeyProperty(kind=Championship) - year = ndb.ComputedProperty(lambda self: self.championship.get().year) - region = ndb.ComputedProperty(lambda self: self.championship.get().region) + championship = ndb.KeyProperty(kind=Championship) + year = ndb.ComputedProperty(lambda self: self.championship.get().year) + region = ndb.ComputedProperty(lambda self: self.championship.get().region) class ProvinceChampionshipEligibility(ndb.Model): - championship = ndb.KeyProperty(kind=Championship) - year = ndb.ComputedProperty(lambda self: self.championship.get().year) - province = ndb.ComputedProperty(lambda self: self.championship.get().province) + championship = ndb.KeyProperty(kind=Championship) + year = ndb.ComputedProperty(lambda self: self.championship.get().year) + province = ndb.ComputedProperty(lambda self: self.championship.get().province) diff --git a/back/backend/models/province.py b/back/backend/models/province.py index 2ec89a0..b4ba904 100644 --- a/back/backend/models/province.py +++ b/back/backend/models/province.py @@ -5,21 +5,22 @@ # Cache mapping of province names. provinces_by_name = {} + class Province(ndb.Model): - name = ndb.StringProperty() - region = ndb.KeyProperty(kind=Region) - is_province = ndb.BooleanProperty() + name = ndb.StringProperty() + region = ndb.KeyProperty(kind=Region) + is_province = ndb.BooleanProperty() - @staticmethod - def get_province(province_name): - global provinces_by_name - if province_name in provinces_by_name: - return provinces_by_name[province_name] - # Check if this is the province ID (two-letter abbreviation) - maybe_province = Province.get_by_id(province_name.replace('.', '').replace(' ', '').lower()) - if not maybe_province: - # Or maybe it's the name. - maybe_province = Province.query(Province.name == province_name).get() - if maybe_province: - provinces_by_name[province_name] = maybe_province - return maybe_province \ No newline at end of file + @staticmethod + def get_province(province_name): + global provinces_by_name + if province_name in provinces_by_name: + return provinces_by_name[province_name] + # Check if this is the province ID (two-letter abbreviation) + maybe_province = Province.get_by_id(province_name.replace('.', '').replace(' ', '').lower()) + if not maybe_province: + # Or maybe it's the name. + maybe_province = Province.query(Province.name == province_name).get() + if maybe_province: + provinces_by_name[province_name] = maybe_province + return maybe_province diff --git a/back/backend/models/region.py b/back/backend/models/region.py index 7343da3..6ade7fa 100644 --- a/back/backend/models/region.py +++ b/back/backend/models/region.py @@ -1,9 +1,10 @@ from google.cloud import ndb + class Region(ndb.Model): - name = ndb.StringProperty() - championship_name = ndb.StringProperty() - obsolete = ndb.BooleanProperty() + name = ndb.StringProperty() + championship_name = ndb.StringProperty() + obsolete = ndb.BooleanProperty() - def CssClass(self): - return 'region-%s' % self.key.id() + def CssClass(self): + return 'region-%s' % self.key.id() diff --git a/back/backend/models/user.py b/back/backend/models/user.py index bcb08c4..76afc96 100644 --- a/back/backend/models/user.py +++ b/back/backend/models/user.py @@ -29,7 +29,6 @@ def AdminRoles(): class UserLocationUpdate(ndb.Model): - city = ndb.StringProperty() province = ndb.KeyProperty(kind=Province) update_time = ndb.DateTimeProperty() @@ -40,6 +39,7 @@ class UserLocationUpdate(ndb.Model): class User(ndb.Model): wca_person = ndb.KeyProperty(kind=Person) name = ndb.StringProperty() + name_lower = ndb.ComputedProperty(lambda self: self.name.lower()) email = ndb.StringProperty() dob = ndb.DateProperty() roles = ndb.StringProperty(repeated=True) @@ -58,6 +58,17 @@ def HasAnyRole(self, roles): return True return False + def toJson(self): + return { + "id": self.key.id(), + "name": self.name, + "roles": self.roles, + "dob": self.dob.isoformat() if self.dob else None, + "province": self.province.id() if self.province else None, + "wca_person": self.wca_person.id() if self.wca_person else None, + "email": self.email, + } + UserLocationUpdate.updater = ndb.KeyProperty(kind=User) -UserLocationUpdate._fix_up_properties() \ No newline at end of file +UserLocationUpdate._fix_up_properties() diff --git a/back/backend/models/wca/base.py b/back/backend/models/wca/base.py index 641fa71..fe46412 100644 --- a/back/backend/models/wca/base.py +++ b/back/backend/models/wca/base.py @@ -1,23 +1,24 @@ from google.cloud import ndb + class BaseModel(ndb.Model): - @staticmethod - def GetId(row): - return row['id'] + @staticmethod + def GetId(row): + return row['id'] - def ParseFromDict(self, row): - raise Exception('ParseFromDict is unimplemented.') + def ParseFromDict(self, row): + raise Exception('ParseFromDict is unimplemented.') - @staticmethod - def ColumnsUsed(): - raise Exception('ColumnsUsed is unimplemented.') + @staticmethod + def ColumnsUsed(): + raise Exception('ColumnsUsed is unimplemented.') - @staticmethod - def Filter(): - return lambda row: True + @staticmethod + def Filter(): + return lambda row: True - # If any entities need to be fetched from the datastore before writing, - # this method should return their keys. This is used when we have a - # ComputedProperty. - def ObjectsToGet(self): - return [] + # If any entities need to be fetched from the datastore before writing, + # this method should return their keys. This is used when we have a + # ComputedProperty. + def ObjectsToGet(self): + return [] diff --git a/back/backend/models/wca/competition.py b/back/backend/models/wca/competition.py index c6afc1a..a45261c 100644 --- a/back/backend/models/wca/competition.py +++ b/back/backend/models/wca/competition.py @@ -7,62 +7,64 @@ from backend.models.wca.country import Country from backend.models.wca.event import Event + class Competition(BaseModel): - start_date = ndb.DateProperty() - end_date = ndb.DateProperty() - year = ndb.IntegerProperty() - - name = ndb.StringProperty() - short_name = ndb.StringProperty() - - events = ndb.KeyProperty(kind=Event, repeated=True) - - latitude = ndb.IntegerProperty() - longitude = ndb.IntegerProperty() - - country = ndb.KeyProperty(kind=Country) - city_name = ndb.StringProperty() - province = ndb.KeyProperty(kind=Province) - - def ParseFromDict(self, row): - self.start_date = datetime.date(int(row['year']), int(row['month']), int(row['day'])) - self.end_date = datetime.date(int(row['year']), int(row['endMonth']), int(row['endDay'])) - self.year = int(row['year']) - - self.name = row['name'] - self.short_name = row['cellName'] - - self.events = [ndb.Key(Event, event_id) for event_id in row['eventSpecs'].split(' ')] - - self.latitude = int(row['latitude']) - self.longitude = int(row['longitude']) - - province = None - if ',' in row['cityName']: - city_split = row['cityName'].split(',') - province_name = city_split[-1].strip() - province = Province.get_province(province_name) - self.city_name = ','.join(city_split[:-1]) - if province: - self.province = province.key - else: - self.city_name = row['cityName'] - self.country = ndb.Key(Country, row['countryId']) - - @staticmethod - def Filter(): - # Only load US competitions that haven't been cancelled. - def filter_row(row): - return row['countryId'] == 'USA' and int(row['cancelled']) != 1 - return filter_row - - @staticmethod - def ColumnsUsed(): - return ['year', 'month', 'day', 'endMonth', 'endDay', 'cellName', 'eventSpecs', - 'latitude', 'longitude', 'cityName', 'countryId', 'name'] - - def GetWCALink(self): - return 'https://worldcubeassociation.org/competitions/%s' % self.key.id() - - def GetEventsString(self): - return ','.join([e.id() for e in self.events]) + start_date = ndb.DateProperty() + end_date = ndb.DateProperty() + year = ndb.IntegerProperty() + + name = ndb.StringProperty() + short_name = ndb.StringProperty() + + events = ndb.KeyProperty(kind=Event, repeated=True) + + latitude = ndb.IntegerProperty() + longitude = ndb.IntegerProperty() + + country = ndb.KeyProperty(kind=Country) + city_name = ndb.StringProperty() + province = ndb.KeyProperty(kind=Province) + + def ParseFromDict(self, row): + self.start_date = datetime.date(int(row['year']), int(row['month']), int(row['day'])) + self.end_date = datetime.date(int(row['year']), int(row['endMonth']), int(row['endDay'])) + self.year = int(row['year']) + + self.name = row['name'] + self.short_name = row['cellName'] + + self.events = [ndb.Key(Event, event_id) for event_id in row['eventSpecs'].split(' ')] + + self.latitude = int(row['latitude']) + self.longitude = int(row['longitude']) + + province = None + if ',' in row['cityName']: + city_split = row['cityName'].split(',') + province_name = city_split[-1].strip() + province = Province.get_province(province_name) + self.city_name = ','.join(city_split[:-1]) + if province: + self.province = province.key + else: + self.city_name = row['cityName'] + self.country = ndb.Key(Country, row['countryId']) + + @staticmethod + def Filter(): + # Only load Canada competitions that haven't been cancelled. + def filter_row(row): + return row['countryId'] == 'Canada' and int(row['cancelled']) != 1 + + return filter_row + + @staticmethod + def ColumnsUsed(): + return ['year', 'month', 'day', 'endMonth', 'endDay', 'cellName', 'eventSpecs', + 'latitude', 'longitude', 'cityName', 'countryId', 'name'] + + def GetWCALink(self): + return 'https://worldcubeassociation.org/competitions/%s' % self.key.id() + + def GetEventsString(self): + return ','.join([e.id() for e in self.events]) diff --git a/back/backend/models/wca/continent.py b/back/backend/models/wca/continent.py index da2690a..574d77a 100644 --- a/back/backend/models/wca/continent.py +++ b/back/backend/models/wca/continent.py @@ -2,14 +2,15 @@ from backend.models.wca.base import BaseModel + class Continent(BaseModel): - name = ndb.StringProperty() - recordName = ndb.StringProperty() + name = ndb.StringProperty() + recordName = ndb.StringProperty() - def ParseFromDict(self, row): - self.name = row['name'] - self.recordName = row['recordName'] + def ParseFromDict(self, row): + self.name = row['name'] + self.recordName = row['recordName'] - @staticmethod - def ColumnsUsed(): - return ['name', 'recordName'] + @staticmethod + def ColumnsUsed(): + return ['name', 'recordName'] diff --git a/back/backend/models/wca/country.py b/back/backend/models/wca/country.py index 361eabb..2bf6be5 100644 --- a/back/backend/models/wca/country.py +++ b/back/backend/models/wca/country.py @@ -3,16 +3,17 @@ from backend.models.wca.base import BaseModel from backend.models.wca.continent import Continent + class Country(BaseModel): - name = ndb.StringProperty() - continent = ndb.KeyProperty(kind=Continent) - iso2 = ndb.StringProperty() + name = ndb.StringProperty() + continent = ndb.KeyProperty(kind=Continent) + iso2 = ndb.StringProperty() - def ParseFromDict(self, row): - self.name = row['name'] - self.continent = ndb.Key(Continent, row['continentId']) - self.iso2 = row['iso2'] + def ParseFromDict(self, row): + self.name = row['name'] + self.continent = ndb.Key(Continent, row['continentId']) + self.iso2 = row['iso2'] - @staticmethod - def ColumnsUsed(): - return ['name', 'continentId', 'iso2'] + @staticmethod + def ColumnsUsed(): + return ['name', 'continentId', 'iso2'] diff --git a/back/backend/models/wca/event.py b/back/backend/models/wca/event.py index c207aea..5b1e377 100644 --- a/back/backend/models/wca/event.py +++ b/back/backend/models/wca/event.py @@ -2,17 +2,18 @@ from backend.models.wca.base import BaseModel + class Event(BaseModel): - name = ndb.StringProperty() - rank = ndb.IntegerProperty() + name = ndb.StringProperty() + rank = ndb.IntegerProperty() - def ParseFromDict(self, row): - self.name = row['name'] - self.rank = int(row['rank']) + def ParseFromDict(self, row): + self.name = row['name'] + self.rank = int(row['rank']) - @staticmethod - def ColumnsUsed(): - return ['name', 'rank'] + @staticmethod + def ColumnsUsed(): + return ['name', 'rank'] - def IconURL(self): - return '/static/img/events/%s.svg' % self.key.id() + def IconURL(self): + return '/static/img/events/%s.svg' % self.key.id() diff --git a/back/backend/models/wca/export.py b/back/backend/models/wca/export.py index fea30ef..db5df89 100644 --- a/back/backend/models/wca/export.py +++ b/back/backend/models/wca/export.py @@ -1,15 +1,18 @@ from google.cloud import ndb + class LatestWcaExport(ndb.Model): - export_id = ndb.StringProperty() + export_id = ndb.StringProperty() + def get_latest_export(): - latest = LatestWcaExport.get_by_id('1') - if latest: - return latest.export_id - return None + latest = LatestWcaExport.get_by_id('1') + if latest: + return latest.export_id + return None + def set_latest_export(export_id): - latest = LatestWcaExport.get_by_id('1') or LatestWcaExport(id='1') - latest.export_id = export_id - latest.put() + latest = LatestWcaExport.get_by_id('1') or LatestWcaExport(id='1') + latest.export_id = export_id + latest.put() diff --git a/back/backend/models/wca/format.py b/back/backend/models/wca/format.py index 0ffd8e1..607a3f7 100644 --- a/back/backend/models/wca/format.py +++ b/back/backend/models/wca/format.py @@ -2,16 +2,17 @@ from backend.models.wca.base import BaseModel + class Format(BaseModel): - name = ndb.StringProperty() + name = ndb.StringProperty() - def ParseFromDict(self, row): - self.name = row['name'] + def ParseFromDict(self, row): + self.name = row['name'] - @staticmethod - def ColumnsUsed(): - return ['name'] + @staticmethod + def ColumnsUsed(): + return ['name'] - def GetShortName(self): - # Average of 5 -> Ao5 - return self.name[0] + 'o' + self.name[-1] + def GetShortName(self): + # Average of 5 -> Ao5 + return self.name[0] + 'o' + self.name[-1] diff --git a/back/backend/models/wca/person.py b/back/backend/models/wca/person.py index 12d36a1..519add9 100644 --- a/back/backend/models/wca/person.py +++ b/back/backend/models/wca/person.py @@ -4,28 +4,29 @@ from backend.models.wca.country import BaseModel from backend.models.wca.country import Country + class Person(BaseModel): - # Details from row with subid 1 (i.e. most recent updates) - name = ndb.StringProperty() - country = ndb.KeyProperty(kind=Country) - gender = ndb.StringProperty() - - # The person's province, if they're a Canadian resident. This isn't computed during - # the database import. - province = ndb.KeyProperty(kind=Province) - - def ParseFromDict(self, row): - self.name = row['name'] - self.country = ndb.Key(Country, row['countryId']) - self.gender = row['gender'] - - @staticmethod - def Filter(): - return lambda row: int(row['subid']) == 1 - - @staticmethod - def ColumnsUsed(): - return ['name', 'countryId', 'gender'] - - def GetWCALink(self): - return 'https://worldcubeassociation.org/persons/%s' % self.key.id() + # Details from row with subid 1 (i.e. most recent updates) + name = ndb.StringProperty() + country = ndb.KeyProperty(kind=Country) + gender = ndb.StringProperty() + + # The person's province, if they're a Canadian resident. This isn't computed during + # the database import. + province = ndb.KeyProperty(kind=Province) + + def ParseFromDict(self, row): + self.name = row['name'] + self.country = ndb.Key(Country, row['countryId']) + self.gender = row['gender'] + + @staticmethod + def Filter(): + return lambda row: int(row['subid']) == 1 + + @staticmethod + def ColumnsUsed(): + return ['name', 'countryId', 'gender'] + + def GetWCALink(self): + return 'https://worldcubeassociation.org/persons/%s' % self.key.id() diff --git a/back/backend/models/wca/rank.py b/back/backend/models/wca/rank.py index 0751bcd..26f1760 100644 --- a/back/backend/models/wca/rank.py +++ b/back/backend/models/wca/rank.py @@ -4,36 +4,38 @@ from backend.models.wca.event import Event from backend.models.wca.person import Person + class RankBase(BaseModel): - person = ndb.KeyProperty(kind=Person) - event = ndb.KeyProperty(kind=Event) - best = ndb.IntegerProperty() - province = ndb.ComputedProperty(lambda self: self.GetProvince()) + person = ndb.KeyProperty(kind=Person) + event = ndb.KeyProperty(kind=Event) + best = ndb.IntegerProperty() + province = ndb.ComputedProperty(lambda self: self.GetProvince()) - def GetProvince(self): - if not self.person or not self.person.get(): - return None - return self.person.get().province + def GetProvince(self): + if not self.person or not self.person.get(): + return None + return self.person.get().province - @staticmethod - def GetId(row): - return '%s_%s' % (row['personId'], row['eventId']) + @staticmethod + def GetId(row): + return '%s_%s' % (row['personId'], row['eventId']) - def ParseFromDict(self, row): - self.person = ndb.Key(Person, row['personId']) - self.event = ndb.Key(Event, row['eventId']) - self.best = int(row['best']) + def ParseFromDict(self, row): + self.person = ndb.Key(Person, row['personId']) + self.event = ndb.Key(Event, row['eventId']) + self.best = int(row['best']) - @staticmethod - def ColumnsUsed(): - return ['personId', 'eventId', 'best'] + @staticmethod + def ColumnsUsed(): + return ['personId', 'eventId', 'best'] - def ObjectsToGet(self): - return [self.person] + def ObjectsToGet(self): + return [self.person] class RankAverage(RankBase): - pass + pass + class RankSingle(RankBase): - pass + pass diff --git a/back/backend/models/wca/result.py b/back/backend/models/wca/result.py index 4bc4f57..e03e660 100644 --- a/back/backend/models/wca/result.py +++ b/back/backend/models/wca/result.py @@ -8,48 +8,49 @@ from backend.models.wca.person import Person from backend.models.wca.round import RoundType + class Result(BaseModel): - competition = ndb.KeyProperty(kind=Competition) - event = ndb.KeyProperty(kind=Event) - round_type = ndb.KeyProperty(kind=RoundType) - person = ndb.KeyProperty(kind=Person) - fmt = ndb.KeyProperty(kind=Format) - - person_name = ndb.StringProperty() - person_country = ndb.KeyProperty(kind=Country) - - pos = ndb.IntegerProperty() - best = ndb.IntegerProperty() - average = ndb.IntegerProperty() - values = ndb.IntegerProperty(repeated=True) - - regional_single_record = ndb.StringProperty() - regional_average_record = ndb.StringProperty() - - def ParseFromDict(self, row): - self.competition = ndb.Key(Competition, row['competitionId']) - self.event = ndb.Key(Event, row['eventId']) - self.round_type = ndb.Key(RoundType, row['roundTypeId']) - self.person = ndb.Key(Person, row['personId']) - self.fmt = ndb.Key(Format, row['formatId']) - - self.person_name = row['personName'] - self.person_country = ndb.Key(Country, row['personCountryId']) - - self.pos = int(row['pos']) - self.best = int(row['best']) - self.average = int(row['average']) - self.values = [v for v in [int(row['value%d' % n]) for n in (1, 2, 3, 4, 5)] if v != 0] - - self.regional_single_record = row['regionalSingleRecord'] - self.regional_average_record = row['regionalAverageRecord'] - - @staticmethod - def GetId(row): - return '%s_%s_%s_%s' % (row['competitionId'], row['eventId'], row['roundTypeId'], row['personId']) - - @staticmethod - def ColumnsUsed(): - return ['competitionId', 'eventId', 'roundTypeId', 'personId', 'formatId', 'personName', - 'personCountryId', 'pos', 'best', 'average', 'value1', 'value2', 'value3', 'value4', - 'value5', 'regionalSingleRecord', 'regionalAverageRecord'] + competition = ndb.KeyProperty(kind=Competition) + event = ndb.KeyProperty(kind=Event) + round_type = ndb.KeyProperty(kind=RoundType) + person = ndb.KeyProperty(kind=Person) + fmt = ndb.KeyProperty(kind=Format) + + person_name = ndb.StringProperty() + person_country = ndb.KeyProperty(kind=Country) + + pos = ndb.IntegerProperty() + best = ndb.IntegerProperty() + average = ndb.IntegerProperty() + values = ndb.IntegerProperty(repeated=True) + + regional_single_record = ndb.StringProperty() + regional_average_record = ndb.StringProperty() + + def ParseFromDict(self, row): + self.competition = ndb.Key(Competition, row['competitionId']) + self.event = ndb.Key(Event, row['eventId']) + self.round_type = ndb.Key(RoundType, row['roundTypeId']) + self.person = ndb.Key(Person, row['personId']) + self.fmt = ndb.Key(Format, row['formatId']) + + self.person_name = row['personName'] + self.person_country = ndb.Key(Country, row['personCountryId']) + + self.pos = int(row['pos']) + self.best = int(row['best']) + self.average = int(row['average']) + self.values = [v for v in [int(row['value%d' % n]) for n in (1, 2, 3, 4, 5)] if v != 0] + + self.regional_single_record = row['regionalSingleRecord'] + self.regional_average_record = row['regionalAverageRecord'] + + @staticmethod + def GetId(row): + return '%s_%s_%s_%s' % (row['competitionId'], row['eventId'], row['roundTypeId'], row['personId']) + + @staticmethod + def ColumnsUsed(): + return ['competitionId', 'eventId', 'roundTypeId', 'personId', 'formatId', 'personName', + 'personCountryId', 'pos', 'best', 'average', 'value1', 'value2', 'value3', 'value4', + 'value5', 'regionalSingleRecord', 'regionalAverageRecord'] diff --git a/back/backend/models/wca/round.py b/back/backend/models/wca/round.py index 7646a9e..be34240 100644 --- a/back/backend/models/wca/round.py +++ b/back/backend/models/wca/round.py @@ -2,16 +2,17 @@ from backend.models.wca.base import BaseModel + class RoundType(BaseModel): - rank = ndb.IntegerProperty() - name = ndb.StringProperty() - final = ndb.BooleanProperty() + rank = ndb.IntegerProperty() + name = ndb.StringProperty() + final = ndb.BooleanProperty() - def ParseFromDict(self, row): - self.rank = int(row['rank']) - self.name = row['cellName'] - self.final = int(row['final']) == 1 + def ParseFromDict(self, row): + self.rank = int(row['rank']) + self.name = row['cellName'] + self.final = int(row['final']) == 1 - @staticmethod - def ColumnsUsed(): - return ['rank', 'cellName', 'final'] + @staticmethod + def ColumnsUsed(): + return ['rank', 'cellName', 'final'] diff --git a/back/index.yaml b/back/index.yaml index bb632ea..8feedda 100644 --- a/back/index.yaml +++ b/back/index.yaml @@ -1,122 +1,125 @@ indexes: -- kind: User - properties: - - name: wca_person - - name: name - -- kind: User - properties: - - name: dob - - name: name - -# AUTOGENERATED - -# This index.yaml is automatically updated whenever the dev_appserver -# detects that a new type of query is run. If you want to manage the -# index.yaml file manually, remove the above marker line (the line -# saying "# AUTOGENERATED"). If you want to manage some indexes -# manually, move them above the marker line. The index.yaml file is -# automatically uploaded to the admin console when you next deploy -# your application using appcfg.py. - -- kind: Champion - properties: - - name: event - - name: year - - name: region - -- kind: Championship - properties: - - name: national_championship - - name: region - - name: year - direction: desc - -- kind: Championship - properties: - - name: national_championship - - name: province - - name: year - direction: desc - -- kind: Championship - properties: - - name: national_championship - - name: year - direction: desc - -- kind: Championship - properties: - - name: region - - name: year - direction: desc - -- kind: Championship - properties: - - name: province - - name: year - direction: desc - -- kind: Championship - properties: - - name: year - - name: region - -- kind: Competition - properties: - - name: country - - name: name - -- kind: Competition - properties: - - name: year - - name: end_date - -- kind: Competition - properties: - - name: year - - name: end_date - direction: desc - -- kind: RankAverage - properties: - - name: event - - name: province - - name: best - -- kind: RankSingle - properties: - - name: event - - name: province - - name: best - -- kind: Result - properties: - - name: competition - - name: event - - name: round_type - - name: pos - direction: desc - -- kind: Result - properties: - - name: competition - - name: pos - -- kind: Result - properties: - - name: competition - - name: pos - direction: desc - -- kind: UserLocationUpdate - properties: - - name: user - - name: update_time - -- kind: UserLocationUpdate - properties: - - name: user - - name: update_time - direction: desc \ No newline at end of file + - kind: User + properties: + - name: wca_person + - name: name_lower + - name: name + + - kind: User + properties: + - name: name_lower + - name: name + + + + # AUTOGENERATED + + # This index.yaml is automatically updated whenever the dev_appserver + # detects that a new type of query is run. If you want to manage the + # index.yaml file manually, remove the above marker line (the line + # saying "# AUTOGENERATED"). If you want to manage some indexes + # manually, move them above the marker line. The index.yaml file is + # automatically uploaded to the admin console when you next deploy + # your application using appcfg.py. + + - kind: Champion + properties: + - name: event + - name: year + - name: region + + - kind: Championship + properties: + - name: national_championship + - name: region + - name: year + direction: desc + + - kind: Championship + properties: + - name: national_championship + - name: province + - name: year + direction: desc + + - kind: Championship + properties: + - name: national_championship + - name: year + direction: desc + + - kind: Championship + properties: + - name: region + - name: year + direction: desc + + - kind: Championship + properties: + - name: province + - name: year + direction: desc + + - kind: Championship + properties: + - name: year + - name: region + + - kind: Competition + properties: + - name: country + - name: name + + - kind: Competition + properties: + - name: year + - name: end_date + + - kind: Competition + properties: + - name: year + - name: end_date + direction: desc + + - kind: RankAverage + properties: + - name: event + - name: province + - name: best + + - kind: RankSingle + properties: + - name: event + - name: province + - name: best + + - kind: Result + properties: + - name: competition + - name: event + - name: round_type + - name: pos + direction: desc + + - kind: Result + properties: + - name: competition + - name: pos + + - kind: Result + properties: + - name: competition + - name: pos + direction: desc + + - kind: UserLocationUpdate + properties: + - name: user + - name: update_time + + - kind: UserLocationUpdate + properties: + - name: user + - name: update_time + direction: desc \ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..2ba804a --- /dev/null +++ b/deploy.sh @@ -0,0 +1,134 @@ +#!/usr/bin/env bash + +# Arguments: +# -p: deploy to prod +# -s: deploy to staging +# -f: frontend only +# -b: backend only +# -v : On staging, the name of the app version to upload. + +set -e + +PROJECT="" +IS_PROD=0 +VERSION="" +FRONTEND_ONLY=0 +BACKEND_ONLY=0 + +while getopts "psfbv:" opt; do + case $opt in + p) + PROJECT="scc-UNKNOWN-YET" + IS_PROD=1 + ;; + s) + PROJECT="scc-staging-391105" + IS_PROD=0 + ;; + f) + FRONTEND_ONLY=1 + ;; + b) + BACKEND_ONLY=1 + ;; + v) + VERSION="$OPTARG" + if [ "$VERSION" == "admin" ] + then + echo "You can't use -v admin. Please select another version name." + exit 1 + fi + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac +done + + +if [ -z "$PROJECT" ] +then + echo "Either -p (prod) or -s (staging) must be set." >&2 + exit 1 +fi + +if [ $FRONTEND_ONLY -eq 1 ] && [ $BACKEND_ONLY -eq 1 ] +then + echo "Cannot set both -f (frontend only) and -b (backend only)." >&2 + exit 1 +fi + +if [ "$IS_PROD" == "1" -a ! -z "$VERSION" ] +then + echo "You can't specify a version for the prod app." >&2 + exit 1 +fi + +if [ "$IS_PROD" == "0" -a -z "$VERSION" ] +then + echo "You must specify a version with -v for the staging app." >&2 + exit 1 +fi + +if [ $BACKEND_ONLY -eq 1 ] +then + echo "Deploying backend only." + CMD="gcloud app deploy back/api.yaml --project $PROJECT" + if [ ! -z "$VERSION" ] + then + CMD="$CMD --version $VERSION" + fi + echo "$CMD" + $CMD + exit 0 +fi + +echo "Recompiling react." +rm -rf frontend/build +cd frontend +if [ "$IS_PROD" == "0" ] +then + echo "Setting REACT_APP_API_BASE_URL to staging." + export REACT_APP_API_BASE_URL="https://api.staging.speedcubingcanada.org" +else + echo "Setting REACT_APP_API_BASE_URL to prod." + export REACT_APP_API_BASE_URL="https://api.speedcubingcanada.org" +fi +npm run build +cd .. + +if [ $FRONTEND_ONLY -eq 1 ] +then + echo "Deploying frontend only." + CMD="gcloud app deploy frontend/app.yaml --project $PROJECT" +else + echo "Deploying to App Engine." + CMD="gcloud app deploy frontend/app.yaml dispatch.yaml back/api.yaml --project $PROJECT" +fi + +if [ ! -z "$VERSION" ] +then + CMD="$CMD --version $VERSION" +fi + +echo "$CMD" +$CMD + +if [ ! -z "$VERSION" ] +then + URI="https://${VERSION}-dot-$PROJECT.appspot.com" +else + URI="https://$PROJECT.appspot.com" +fi +echo "Successfully uploaded to $URI." + +if [ ! -z "$VERSION" ] +then + echo "Once you're done testing, please clean up by running:" + echo "gcloud app versions delete $VERSION --project $PROJECT" +fi \ No newline at end of file diff --git a/frontend/app.yaml b/frontend/app.yaml index 0c7211d..8bed6d8 100644 --- a/frontend/app.yaml +++ b/frontend/app.yaml @@ -10,6 +10,3 @@ handlers: - url: /.* static_files: build/index.html upload: build/index.html - -env_variables: - API_BASE_URL: "https://api.staging.speedcubingcanada.org" \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 3374c24..dee0aa9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -26,6 +26,7 @@ "dayjs": "^1.11.9", "i18next": "^21.6.16", "ra-data-simple-rest": "^4.12.2", + "ra-language-french": "^4.13.0", "react": "^17.0.2", "react-admin": "^4.12.3", "react-dom": "^17.0.2", @@ -13405,9 +13406,9 @@ ] }, "node_modules/ra-core": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/ra-core/-/ra-core-4.12.2.tgz", - "integrity": "sha512-ooChHjyvDr8hZuVWJAR4o+bMyuHlI4ie+d2plLRmY4FNtUqiMf8cjagN//kLHAz4GdVnPTNZBnyJTaGYw9odOQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/ra-core/-/ra-core-4.13.0.tgz", + "integrity": "sha512-CxMAWwlvJ/p4N9JwJu/mWXua5D08MwqcSBnUnSYyn9MBY1xmnKkeKrvqYqihJ8xAPwoVcsKfhnsbHfNfm3Fzcg==", "dependencies": { "clsx": "^1.1.1", "date-fns": "^2.19.0", @@ -13470,6 +13471,14 @@ "ra-core": "^4.12.2" } }, + "node_modules/ra-language-french": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/ra-language-french/-/ra-language-french-4.13.0.tgz", + "integrity": "sha512-mKF7MBUXuN8S9V69/o6hBymSv6SrVL5GSogl7/+YX8SskYA0WUQiIJ1C7BVZfSwdPFPL9WAQkUqX786hin/msA==", + "dependencies": { + "ra-core": "^4.13.0" + } + }, "node_modules/ra-ui-materialui": { "version": "4.12.3", "resolved": "https://registry.npmjs.org/ra-ui-materialui/-/ra-ui-materialui-4.12.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 87eedb2..e494cf6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,6 +21,7 @@ "dayjs": "^1.11.9", "i18next": "^21.6.16", "ra-data-simple-rest": "^4.12.2", + "ra-language-french": "^4.13.0", "react": "^17.0.2", "react-admin": "^4.12.3", "react-dom": "^17.0.2", diff --git a/frontend/public/documents/directors-meeting-jul-20-2023.pdf b/frontend/public/documents/directors-meeting-jul-20-2023.pdf new file mode 100644 index 0000000000000000000000000000000000000000..df6fd4de8fb6a06bdf67326476f3753cb4fcfb32 GIT binary patch literal 21623 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 XYnnusrhj*EKz|=Dg~{~!oiF8IRzSZS literal 0 HcmV?d00001 diff --git a/frontend/public/documents/directors-meeting-may-16-2023.pdf b/frontend/public/documents/directors-meeting-may-16-2023.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2ac5d2f0270aa2d1addfb73c67756cae2e0efa00 GIT binary patch literal 21398 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 BbFcsa literal 0 HcmV?d00001 diff --git a/frontend/public/documents/major-championship-reimbursement-transfer-policy-v1.0.pdf b/frontend/public/documents/major-championship-reimbursement-transfer-policy-v1.0.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f56003036bd4b0d17819e77b941369efd07a66bf GIT binary patch literal 35078 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

FVnc%n_AP6{Mw9h_!t1ab{z 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 KwXn1Z`u_oIRwefU literal 0 HcmV?d00001 diff --git a/frontend/public/documents/major-championship-reimbursement-transfer-policy.pdf b/frontend/public/documents/major-championship-reimbursement-transfer-policy.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f56003036bd4b0d17819e77b941369efd07a66bf GIT binary patch literal 35078 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

FVnc%n_AP6{Mw9h_!t1ab{z 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 KwXn1Z`u_oIRwefU literal 0 HcmV?d00001 diff --git a/frontend/public/documents/reimbursement-policy-v1.2.pdf b/frontend/public/documents/reimbursement-policy-v1.2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..79f3fe9efeab62b27134892d7e43664e6c5a3d57 GIT binary patch literal 51819 zcmdSB1yG&M(k==FLV`nZ35x&;?oO~^!GpWI+rpjT?(Po3-3bsRxH~M|-JQEg^6mZo z|2}7*eebDTbxsxY%B<;`?w;e`rWfE~pkrX9 zV`X4uprd1DWG08>=7!U^(0d++;qSvaS?L34`L%)CW|oFgJ ztUYjd09tt&5xD0IfXoO8w6f)(rFC#{pfT158qiqU7}DAp=sp()dU|#mpd;{?YX2z> z{ePLw-(CM3MwwXw07mv_J{gz+0493&|7|{Pt@QQvbnSGEEev(FEwuHte=)6RscUDh zZvnKWHP<$=w4v5D(l)mO3v6p-Y(;IOZ)~n(XJf1X+=3ctqitbppl?HMWoc%t>qKLv zXYk);{8tnDcay>XEF&Eg_`<*jzRNGWEdOFw&pz<% z2{vHDKdwN_Z)pL1?gv2s+c&^gW@~9@qYHKx`e*Z%0o&5^B!gd{I|RQ<=<6A4f3kG^ zZEVc!%m6kf2KB!=)i1igyq@3E%+f~IN?TX|mqmWzm$d@?>G%2ZpZ);$Dp@PTzbb@n zw4I*2r2U6K{vsEa)doEK>@Oewhf{$~{kf?SSd?F_gjfNrzj+m61F-#hVh6DQgHTCI z$K=_WeiQ!9!vE5lD&Ut_$^d@ZJoxr(7Bb+;{j<>gQr2H0itAe#0*wIlzZs(yGByLd zI)GNl47`d6=<8bQ=|8h)3k0uu=5UTF2kPp<>-89JWtuBnz86YS=CkF{c`gP}UeJCx zz5KoW+oZ~Isid9U>qk9=GO>Eo((>sF^Sc!0RpaUkB5|dqr9%%RlTADxH;O0eJV6fO znvbd<6G7pcNLdAb>4bu#+n*dHPR>N)`Pr^Nr+T2+NLo{#g3z|;U+a%g*_Wjz5){ahYX#LxszT7`n zUJ-nY`;_>!4ASUSboFpGw{tx>i3RP%bGvdi-{rtdV`x69<8Nu-UtG)|=Miok_Y8MQ z$;$`wU}$=9RqM;wrCJp2P}&AEk!F>u?8Fun=FkXEQnpEQ#WLj<#~kl5$p%u{%~PqE z9=Ir!7|Ukq)ftr}i^>%y>8CEmyrRZjbFx%bopkcFdz&8>t_f=)X7g6w+~rn#w~)rL zu}SyZs7GC@(_WN26HR)SJrU1V)F)G(hp|ik9tzYskR9O{y@_iP`04(g$q%ZObfgltu)^*PQD|6^Jnp_eJ$|qg5o7I34;@ByW6Njl!*E zvGqmKSESvZpX0FE+{~@!m{u{|%uzk@Kvs1D|Iw9P49awK&v6_Kh~`Hj$Gx(og!v4j08ZH94li?-dmQ>iMtfe;2nWE5{DQtf`i5^EzoX?``ZLWZh-eC5Im zh<@mKv#e3ftkt@dY5|G6EbraJ4_NVJi7<|UXoDextEu4y1w_hxdutl?mZKRo#mD%Z)gOceZ`QXHnh}^Of{~*_#B5 z5T)3Mv%0_s7>kUsY>0yoX3hXJy-6Im?pTgk&u_x-isa*XA^_ZqTTyqM(x}v?+I028 z%pEhqq@*>{y4U{g^cp82iII>c&@sBs1k;NIbj7;IUDyv56T0>WR2SvAy!Fxri?q9r z*hYPxKhNEaS{jRCHN9;NF+b=c=G3kgs9Y#0Xp8du?PDq7D$RVq$z;+);H|j!gAc`# z(!yNrUZm!S!sX;kmOPyzddt%Y&r$Ng>1hT@==DL>AM?D9vFj zV!7ypKO6qBQf)~8~_@&P8iUoUF|WEXDQQBtkC>4ISF%sjm=e3BW< zYhQ=+E{w>$)PXiY8fK|g7KEA1t1&PSk0%89)4fINKx>>F5JX~_7bOZV+O#BnATL`b z{hUmf60Kue`yDFY3jU=hY88M(N|SZ*635=q&IO%O`NCbPr9iUmRiXD6s9TG!}^%#Y;;n{xIX3+KI!Bi_on z2)k4}9y5;Rx-&es%$mvSfP#q8kylC7>#ju*TWjQ3>hJQ_wy6tAvSAf;f?RJBJY5pl zzX|gu4)T%>Nd;^mF(K2t=!OBC_;qDF0CMxZPk1%f2Tr{BO{od|{R#TkKZTr^A0bDh zP}I?>e%9vHnTQ4LqV|p|@=Y3CZGRigqCZio&xv`z>n6SUJ;PQ~9+rS)%}oSdbTW%R z(VVMjQ6(#FT8T4oXuJ0@^|I-9>W6M0>}Xa0#-FVXToV?z}^lEQn^i!m7Ym^X6!Z7~2sWkBE||sd{8CjzuZs7TcyOxw8}v%3 z5?*5Sl$XYl`!Lq#*ZPK*!U#|adS%JLYgJXeX(lZ+9kjY)Ar@7Vqm&62I;q(ec}mwr zi7I2mm+yW-H-=-bGe={m@R=1R_YcO%fD+KMNXVRO2TmE%r&7Ir20tPn3;52y;j>?$&ym#91l1sW}gd#6;x+v~@F_-2{ws zHE;gFNZD=Q5)1}%idLMn~M9eD7h9< z?9N3ljBmNeSk_GVR(k|yySJ*Xz#yoF`ovLQaF9sA7_adw$_cmI!OOQHeyOO`$qD0ob}n@>Zai!OZ2M< zb_oI{o{;eftFyv2GrW$}f;Y^;tafHj9dnMiMvu> zGIUCBZT6@_%I8~{P`9ge>aTSmT!`xz*)3v1SnXBn-heJB{H9~HZ~_WV_qBtn{=n!i z`!kCx@unwS%KvixWkO$#qH>c&xF*eRYn>!S{_gPvSYK?e^CtiVWZ;Ivr3;rciiPo5 z(+a=r##fZ9`pnH7+={PlM;{8i4dPGGu!IGMl83P$0y1uT^JkB`*<*M^ZWR=D_qO;e zLL+@fXqPuro&Y}*Rn_l=QezGEtQRmO26i6fM|vc9#Ts1b1=lFtE6*_6bSL8SuM7KR z@8xQ~+;`g?$WK{}N3Txfzvx!$D#K~pXQHktyADOpb2nBziC&bTbf*wb(eI+AbXPuc z@muXNyO6H36AqK8PcDe+z1c}ruCMDYjghZubZRfwlZ7;;?&{64;MSE!ksxEP8 z&A~aoyLA;Aw?8C`ILUTs)uWi!&_7_|N~JZP+Z?!wS}6np*V1Wm2*n>vQqD*<#$Ts{ zf5B(9J~MhkOrd2zS!qe5wI+)gjwkViw;0-Q@(?$esOGBM6rZ7J^>}&+qF0bD9L#>d zhe#5!VK`)fsnYggl)$tjWbs60wjd0d!i7Nhu7d^NAh#Z*##>w-a;G$o+w$-+6KG6eRDw z7>RtOP{t_@*s~Mav#X2S;5Zb_%<^siN`AZa1sF@j72(EVf~4Dr+`_Y{)hN;(jyfae zkUwOAC5wtnh=G_PvlK6+Hv?yF%_UtJWG&7=!F$N7W76@i8iTbBz~6&|yBw_cZa#?4 z!r_v$yB>DFR&PMrG{P)c#&&Rm4 zc{03qP?4mxf$0M4YWG?FEC~zzaS*&jcByP%a|hdv4AS?0lWO^FSr(Ub1(%<@F6AWO zj$Y$Ojm4gxBdSjtf-g=V61&6GTIpkdPcpdXC*y55cxaW|+wN=dECbIG%XWM&5Y=nq z*>|TtJp}@kP2}kVZq46+33D-}CyLZ0b=y7b7fy-mTIu8XRl>2^#;3I{$*J7+Dxt{}GBlhq`}-qH@1bnSUSW{|Siy8Rs)R zgGT?1^BJCDp8q7y|3&xL$p44L`Oi4O|17%yCD=2+s(%aQpSAIq41Wdkzk!1PAduG# z#&1CNNS7KNhOL_d#X$>yH@ySL@gZ2JD5ofwpF28~Qn2n$IsiY6!qB}*1KErw|v zOhrnPOzh+fcNHg-SUv8~!*?{>q%4=*Zja6r9$W8#t8dQQcuqxaVn_o}#j;Xwrd>yF@nCDYnH5iwKz>S5I6?4u%bjk9f?%BQ zubG#A|8T-1j@*{E$(d(hdQa^iyc+PCSgk_Y6E#}s9?gcXgOp_~b2ARrsRyx)EyDOm zqcf5(Ygz%RPS>mc2?6KLy#N)VAE}8Kwhfz30%y)hL(JT0?AOQ3q3sa*a!3@}2Gsf! z_(ma?pY##dUW&7j?i7Ud)y7CG^UkqmGTeswN~u!lirjkk6$m=doVq*BY|`xL5WTd; zMA^)7O8YJr3qvpIl&G_!vncHx!+L4^RvN>yo&oObQ2S(zj{U3VldJxKCPw2i+ru91 zbjG+nq#ERHe6^)jl|9aOy$f;XOLVJo&Y9*xw4^%ant}OZFT_&`qot1DN(9$c56n{m zjHMIn*m0}#e@5)_C)GI(L0L*$cfz2ue&+eWCs!-e5C%Y6+_7Hzk>WTHcmHKLcg=VC zieHIf;oQDJn(ezAQ)nsKqwC1930=fKopdV3^Ys;; zRaZyL3posqJPPNQ%Xct&j^*gIs8{yKk(nc9&vr?Ao|OHNHCg*EzgkuoIB}X@ zlMNfjQ~>dD#XhKXkBMlFy1v2fr?dF3CmR*kJysD{0Yr#0h^;s$fY&T$iX+{5fh(3@ zSs^FFyAKn9ZgFkJJm@D?4@a%~^MTqi?B$14e~`*`aY?~|j>b?&K6bLm`Z zNz`-cKJ|1cCU!vNgd5&d_md+;c4_S$pde6nHHTg>Q~3j0FsLJz;2_5Q-=niuc%E-O zv%T7_3TQck$#H@i^AGbKM$3WCK_;`%f!Wz2d0B*6x0tb4vHG6K$V4BWsRqq6FY|Sm z1Wkr9`?H?we_|T#x)ANaF(HBlCN+ZlO!#GC9WKd$-pWogpsi&A<0GE5hudBrU|&xj z-o6sxM%Wx=x6eC+@5u3h;OF!00>I-qY7P0>xynjWVK>z z`HUurG90I64c13?pJsTN^Gp(N@(OZNg$%$+{f^s9dn-P;bRFj&RU}U9(MtSwtAu^u zGY9x@3$jI~SOOgmHO3z#&4@j9$+V8S2es|wUtk#zu^iVJPW(K>BrU{t3bt`eFC@z4 zVWDjo(n7$E(X8fRn-+mYFlkgV9rQmqijoMc$bWD%K5G^X&X<^?rw`1RU}GYbS~ZT= z=tfL16CGPw{mBtux2;ojL@nZ<*VZ@#a`V^Q(Cf9E0UdeNcZ90k_~}-LIn#ReSd}Bf zgmTQ&6A_69HnmCc218$=dJb0AFk>~43|m#uKwgmD5G^GB;MWJ59;{>f8whYpL4qz{ z)6f~0ysk0MF<}rD*;m4HEY21q+uQDiB)Xa}MEMx+IilLk+brxx(YK2tYIG^OK;q=0 zU)RtSZX2E6H-Row^ymppPc<>hE~UN#jl&mj3iPqg6rq0)EgdC5uqnfh5lP;F{<^c*ZNfJ9bGWS z+FDfT9GI=*IPkGKW$c(y_ss$XX2W~vf*H6{V@0VHuQ^9aGneaLJV`@v21$J?@6GvS z>^i(u_@%KE@@>0xP=%FKRi|0aiGmb-M7)g(%c+dySJ99WXs1H`1<#*(BrWT?DVw3q zF<&hg8?L9+Z$@2Ju2%&$;3Bv+H2REF5d~@dC8N$hDZ(nU2cdSVO9#D>cvXIKD=Y)a zXi?PNYRmsRj$9eNBYLkG5=mHQN#|X0`(9ac$kkft^!rghSk^Mu{tYvsMNXWwl=!(# z>&=gqKj~MT$Ujn|%SQy;fdBpm!aSEdfmB%nsqt$)JZI~^*Q!j%`s3Y&jD5g z6|w0+F%$6-J#}^|4DAh#S*6+|Rp$bSr>?zs^1@tcQt>6z)G$CXNNKMyRk-aqs9l}| zOGX%=%TtyE4|+mS7Ca}{f$FKAM4Fm)WiVrfLdilUOI@W|W74GCKd^|o#v zEn!<4pc~VWJcg)ntncu=$;(MwbtG1`ZjQvTQ|>uw{b2KPJv*t_V_zAge;Z}{G7J^0BQKmXI;~dnLRuVgkfdxMg26V-1V7$7 zU3^-vdK$75j}F>6tuc+<4m4VfEYcU8IEGL&wO2UI9V`n{qG@5?eyAwh(;npMXDQYq zw_OcpJ6MWe+Ukogf@v|JHe6+8!f!V`aKVLQS3dOn*qeqmU-#IF@B&RW506_xUf>mn z-(>JSf}LPOTe7G|F16u` zh+z-SYqQp)EaEM)9`d8OqwEwUKbHl^T8Jx_lgW0s^>*iC>{vc zx)XP%%{%152%ov{x4HMFCX{NE z7FP1fR`T#x@-Aj-ldaH-x%k~)M~6Avem3s&lKG`JhZG?b%=9vf+Bp_qBO84pIXoj9 z;fU=dLMG&~3+J_RXtZ;Xv~mt-unSe`$6Q}62;mO7H!SIYkdz7Q##Wu@x%3fQILnw| zL%7%{x2yuz=gshR;5no!1zH_`$Th0gmC)q!o2^Tb4G2+ecBjwp-MR=P-*k=NSD!!)`5VYIfzo}G>U zY*7c_%?zNT(J0v>1}^4w5KJIVzhyinLV~5}ZUt}}3j$FQW_%nLHEIB_U&VLn%4c!eyc;I^aK{LA0pUMMk)j_86^rOR5cOm_ko0zZX|?ZQsz z{+zOW#8n+=9naJ@G#B3^u=m~~TS8m)af!i2s>-(g+qLkH?xmZ}H}mc# z*SzLR#$CzRkytdash0D^0@69dnI3QM6*c!Ngp(q47(^qnh@x`vUo$C{I;=LHiCfcJ z&>}}yTKJ$5^wF!O=35=Qm!6}fZzlxA*AwPcNs}YvlmUp$V9}$S6keKjVtnFyJLH9Z zB@Yv*Qt8cm_x-yQ?a=l3j;lSC9_pnX=5HnjV^?DEc`7~wSu5AZXMMBp?644rXXuqglUUN$+7=ZnbtQ z#72e6Yp(*5dI#NUp)iZB4>}NJUSe(HV=F2$S;1K{WP~i#&Xgoq0xoo+m~*kP**dr- z&-U{3t2DS0JkQg{)gx~jD94RRFNmG#OeC^VmlTLd%aLnc9EzbVBwpvDr(W$@X@-6| zx%VE6C_^%coJx`z;JbbqM+tF0bVnYKK7=wP^CF@g0pcKgKg?RvGejz#JRl5ISABrFyG6D8R-$_Fd_IiQ>=&Ro+@mHGXwjMZIJt zKT*`uc5u!v(S7rp%wcQ6+mgfAaI>n8uTXgg{v)Y8K3WviwAy6lJUzZH!Atay0MZzH z_<>?Cuf&>??*kpgaQsbh1Ai7{^n}?43~IpVTdqe(Tp^xX7{5ei%WM^dj3;JOA*TWkB z7W!cLmm?0~lPUiN`uIdLoSjWj=xO)7{ygHq){48O3FBYhI5#wWG&n#`EPq^|qld8!mtxi%%`- zaP3Arp0+^TwLQU6_A!P#tAunu8g6kcOJo9O9vmX|*w{d&3`f|ElL&rf2mjg-{vpR= zs*HXs9_QANJ+p&rCks3`v}ebiRnz=bdlki9hL^&Q*N)B?Lv6`y9`{>LeB;M^*}?^{ z`9jz|?r-k1QTiTE?oZ;Q8w&Wk6N7<*t%;@E!EX#2tJP2~x9GE>Tm|zeJF#Ki8lcXw zjbUB&#fKw5VJI3IohMv#?=pPXB5Gr37Sk2N%YV=hNlYikZ+(Z@@bY{?F3HPo1H*ZM z(?;;;RU~gH4imenvz;GMpV`1s!oA@d-w85X^U)1gNzgrAo5YZJD75>Hd#=y*S2=z8hpej?S@$yv5mt|{2 z>d{;c$FeTZV-0xab{A^&j)9SGN1jDUqmSzlQ=l#YZN$oyC^Oa5tWoRKSTNN)b% z=4`qVq&Fm?;Uq5+b-EkLX!I4cn%8ME;EWI@2bVROG$X?nN|>JBvD@*#%b51WA9p0Q zIbzil3X>BkW2V-Oz|NX*6^x_o%NJApDR#=tKjaF?9IfXMTlpLv$_$_v2z{MozrmVn znBl+WA&ZM_Boeelx_LWk{JHU*W@TIL{EEoIN_UtZ7}JgY(s!fS%XPc|1U8iYQOgA1 z17aZBt!eps1&Mc!2+Z>%-4wWBj`T#W-KDWL(QjSjoO9XSw{!nI*?ABg=TUhw|I+Z4 z$6QDk7v!JTZk8>Au)!{aFDAL7M6|8UIF-Rj*!&_@j6>Wjwm@2oSqpb(9tH-<0Rk79 z{anB+w?ta&3EBG)TzAQ3UCWaH9o)N&7OCOxSwcCd&J=uu%h#bXm#8?5#y%T->cFlS zy{XemshoLp_>>JK>Eq>LV`vvb_P2hu;%5+Z4DBa@BZ}J(og?G7x2A{6ZRX36{Gvv^ zX$a2ciKU`qnAU>kFu20*%Oey?GG<*K*p)y_bvrpF8Qh+v93~U0{*cC)m<|HZZhj;# z5z*{o5z!S3X!W?LsH4ED=!P7oB6Ts*HL?36MA!X24^Xc`{|WpkE`Cpt1MKMt!T79S z^KFb@ix+o6#gXz}(vh<1z6;WUci+yo%g}R=((LMITz5-Q&O0thT-NptN9_Ks!W4#^ zmZg3^9~5{%=|ZLo__tTg>$4VY2)=|kMecfJ_r2w(#QdkkFTmFoVZS0m95^0^;``o+ z`(97*Zrqji<-aJ=|v*<9?rw+84{xOLx~9QM@D+#6Lvk_A%L2L4)`I#bmK)T)w{uzu4ol1XKBuIniUsq@0O<*U#} zc*Em&*KnNcBMyYgkg7HVU#ivv~`#dwW%ZV-klCQst$kX3zXEL{qoE zK5|tb?%x%q8+A`#>e`3rb^}0kAG_qK_+Gi=zXzR!K7eN+fcBe7_fRs=;&40McC%skcY`- zwsRyyD-(qYt`-heC!q1+&}gUe!paY~#R}Hw8jfnDapujyD!iR5ptIlL+D0Kz-~R|=C;lX$`8fQWmnxE%%(XLEdIH{YNjKn!+ozc!J1?>}B`0FlvunJI)>qVRbk+i<{}CzcY)a z=o2YfC;2k=4*Nr~SF~ii$g7QVfaVZp!x3vMcIr19l0H zVB)k>6#}*?S!pvnPDUzlg%q$2PWED`eNf%d3)4j z9SFoa@tsIYaqnL$o9bOGEuqZ}3o{t=_i0H;@<~L?V(zK*#U-iLzZiKoB?-x$r1$wi zNcH%n6!1bc-ta!2ugz3KvLPRJk8IjK#`LKI$J;H&l&7x-cA5^`Yhg~yFGv*+LGs#j z2O(sEnd|pvl&y+a{jI(x^K-9%LPR_RQCW)Dy=QpV9miNYZ#f?-A6x!Q;LmT-+e;wu0yMOsA|Y+tCV>GLFi&uKuR0s@A3jbK!LsL1N}O(*-1MK2w* ze=EOu%_rTyLfXrl>abeeaYc5Fbb+R6_R2^T(;&kr% zxpO?3_LK4MC%Gt?%iaYU}bh2Clpz1Qv z4DNn=Ro-TM)k~M-Pfg|g$=mJy&l}Ecro`aat!KA~efEQmx6NR;KNvAMS#FV#xk@S< zr+8=%E@i*Tf@?2%D3Lx?>GV?V!*Jn-C$HtWQ_S1T63{}>_m^SbJx zh2$1KV;(R5K8!?gtFyTkRxm#nYWqjA-h1+?qrFMhA6Hd5Wd$~Z1By&B&6nD7C<^!& z61c>Dx(RQnk4NNM1m@(2MO6HVB|2lz1=#1e%y&qPbC|{oqtBCD--CqhvW42EHev+0 zS@Pw&dNwBlnzb@R-OR>+Z_BqcDYz8eEa1I@5ROoF8@xC(5UL_Qq`8?%Qscl0d#^_V zX5G_?`A$Dam>s6KkbbUA>ny-Wba~~+*5v16ZA5dUoSP4 z%$=cA%!C5;4MeI$=vT z<0J@`pYlPa8?RH*OD~jt6dh^4+guBwV9$fU@*8gnn z3s1EQgtJ#V+qK2v_~6+-z3oN9_)xEV^%PI>;!eDRD~c_gL^6o#tw>60c6KiImsliF zsoc(SOMz(5gwRR$$*(U2?ym4#`&?1sZR!jxd5%1=w-t-RdbhS+OFub_WlR@i6i^m* z0})N?_rAVnhds9d#$XCVADOM{KqE2j){jv3CE9_qQH_a_vODZwd~1B)dc}1w6;#|O zVa6Yt=296&Lnm?amF4|ePs|Oy*!@2 z2%{kdI}-aKK1^O>k&H6Sxz2W9ER$@*XVTbyPSaRMW>Fdov zu*tmb|1`#2rw*rklExIfU{B7wto|ZvAsVns!$bp$?q20Grf4|G#NucDawrmQpXuc) zmBh7Gdq+wT#&z@V?GT4T(b;3A?*T}`{HeD5VLtW%^nSigu+~F$=Fxoe(h`2YO?~#! zyz)U+@2>8y_CeKczijLHqof~d!%M`UX>Xcmoa!1oD))-w)D@NN7yByrqV%VU`b#OP zno3P(?R@p8OQ@P?lJ>O(o_1UEH(w}tF37sF1`R}I=KAhVT=F+NORl#j`5gUV-sBc`hHYQfKE{CdeP z0Q$ zpY8J}jY(IVR^Niw<~gIsPM;c_rDLJ%L~E;W^PDPXOAFL?q}8#rHMY>VwS9iIv@+JU zrM1#_vavKXqt(&3&^Is!Cjx1knOQn$TRc-}+W{@jEp?2|^#ArqZEgupxudq%H!{{W z1CR1QYW~k!Y8!C&iY<*1(A@05rARUS1;za>!|dOrfiZv+gaF`#z2|&2aE=rM6XXA< z94T{ca9WKe$A8J^vgQ3BW`zBBe*a${kOH&%3lse30V&2`*+2hCgkt;yBmOTFp?=Z* zg{%Evg%bV}@tJc~064J?tPa4hS^rxG)GsalCEFj&knzvSvHx`jlvwzBEo$pk*~qM? zOBX8)G^G6{Du5S?%H9j#8{fMo`g?h3v0E<)nOp`pQbu|lWHqt-)@eBrgIp$8r$WiH zm4|zP>~*p`yU1SpneEfG)!yS|n1|b) zhor|{>CGe;t>>DD$8cio+Z01jIwUSe)F(euH`ykP1=L_zKEdV&^LIguNL9r7HZ zRCX=ae7F+RyrO>XuiZMywBUy~&!XnRWo7fRJKM7boU=aWK zxPDXldIWJzcBYL3^Wu0>1LuY10f%yb4YWeamk_bV(l;sbDalyl_3T ziG~U_zriK148=Nuo%gxGcs~LU{3WSK^U*&&RAE??(1)H;hkvpdO2vw^=T2JH zWa{vAep5=y%NZi2eMNP5MiA&(yLIl3eE&(vq@2;2#P}NkX~cyg1#fXSApcA`DjwsK zzU9ieG5>~;JOT5P1Q9Yc6+ksB2H<5AQOB3t+%h%X^3EVgAGa+QXy%k^c5c zVhtBH8@>t>%2>Z73R9zZ)+Z%^3_dv#Mc6Td_y<||=dwO7mizs%>jOuAHt$@GeBZDI z(5qHR)H+_C0B<3NQz(7Ncbr-8Fdgv+6L(^XC)c6kbLCl`^GCix6aXSj)a9jx6*9Fl zvxkL!iXaM%U%_ROmROB_#QWm6^VUa*h!~mO4-qOyM@n%8l9JRhO{wgi=$TQZoXMP3 z=$b&=r&JhiVkUcy&{h|%t=I4Jbh*@rDj^FpbxpO-7#w;-%LifHc$tLF>H}iYIxgC~ z!rX4rinKg{rk4e;MLEsuyGPB}zY#k-uVFRsGTEbe+$C)}|4jR;bks}zBaQF-<|y9b zn(BK*E=WbIC8byn%VG_iC8g*_#p0i-tdB_1A*|!G*=OB-q+6jbRY3bhPD?d0Pf5vC zR)xiyv+mNS9n?B|KB*T-uX-0l>UmMGpwY;9dHiduN173=r1|afzSo4m^7w?n_0i#a zWOXa4Rbvo!F*nR;l!iS^FqtFk!LG0WmQ$QzN!&2JxmXn_;E+h%n9QElv>kAWCJc0# z1~)}Yqt_;enax+_fyW##A_9!iK&@kw;hSXl3Vy!La>B8Jn}nCr=7#%Xwe;%hY(6~S zpWqO=`wp=K7JLTNdh|TR3`K@NEYaDFoyv2BwH(6cB{NNV9)fQNwuW1+vnE zWCk=ARMT|Af&OT0fR=Ya>G|87H5HR+&p1|IsJYEz8kz615z4Q`HQ+y&_#5b2LJZo6 zJm5vlZWz&IAOuk6hI09~NG7XHU5@Lkd4}bB2fplLA~D2xSBR%q4)a9CB;p9 zj7`#k6X6XvGh2ZcPS*Fuhmi~KhPzs`u9DLy59LRDb*!-zL$r;#L3};So=od*DP!ru z5#3Km##AmF^E`0n`0PH%)*RSl^YhhQ81BHe++)YQh4GGEUV3sr+!_r-OCP;w{Z4XW z_NK*2fd-OmO9dIsNQOAOTTCJY9@8rhjXyg6>z6%E$QZQH7R8>k5ZsQRQ*gD z=l3D7?U6%*^6<}?IT&I+=$pn}rOc`74$3MOmZ%3nSGc>@@t|DPVQuJhX{p<{nV)xS zN?all%TU;4S)bA{`6KR;IPPG2Co@i7PQKy&SS61LH61=wm`s7>`yMKA3#D|Y9tz+9 z@9i1JTUJB^K>yTc%m-6k^yQr&kq>2=P3s=KTrh09m7y)5b{!%FzGv<%1jR0VJrnJfJbFRn^VvZrK(ujF!D1b31H`yD7s)69Y;iL zn7J@otWlOAQfi|Pu{Y~nsE{S33KM_SFiM=%S_uW7C)!kz&?AbP}2|{D{IgiPBGyCf}!Ea!1}h{@8cf+oi3!@H2cmj1bA)+U*pp2jyA>n8l|_V@I;HlBDD1qNMR1 z6tUu+6c2U=`M6ZFHn<8mY%bNZfw|?P(@8@#r{$uccXK<}=$EPUg*i$e(p78s@HI`@ zTcI%j=i&g z8&IA z4YZD(v-`c)$+eMSFx0DW|6@39>4}VFS^$^a+XwIY@`#=*?xCrnT~11yfzA>B&+&_& zE{R?}rTe~qOHLu! zt{}pwih*CK($`F9KpRFR$l=$x@&p2B%ezp`kXLdWcyxL#pM zHZ9&DwqP&AenjH3J^L<}n(rab=T>{!m?}Ij)Ut1=ii%CJ6?u^u_LZZbDdv)Y;F);9 zn@;Swws7br!yib)-9K!L@J3kXA;pF>wTTtI5W{-IP+nsh1nZixPasGU%OGk7eP;d` z`uSqIkiX>5ioX1X(Tx1vWKCXG)yH>}bpiGq+`eugB<9YZ067jFXu1_pD(d;g#dz$B}!@_{#$FG$TI5B*&&XA+X<5i-ErF4F{~++(-YUL7QmiS+75 z{;Cnba5)(Qor(l!4`;7RHkCbqy`z}eX4w0uLRcyPfD;b=)-8))*I;`{SffOvh(@FY zcx!(b%u@3jZt6#Iuo2wN#H7i-NcafqhsT~3_nn8cRy$~{_msr4Ge%xcEaO}=aF`2Z z^Ysqtr*DOAxGx7YN@R|WH4mNj({Knk$Fq&RNKx|G4x=kW9mQ{>7>uuPN>2-NOtP^) zZfM!HsTs>9@f%LaAf=8PBc--U+HU{Z|B=~&Lev{0II)`}H+xL}LqCcedQQmq9TNEs zfpPr#SPa@49m>sbyjGq2$1s}HPA>BM#~DtQ*49s7MVX7*45%D;Ny4b+$yaCO88y|V zIM2Oga-Vdp6-IKZwny6ce>G2PKV8JqNHF6NnLw-OR!ae0i@FrHs-0-o+LTT5O2}ZK zHlDznXoWkY9R2i1&8WARzJO{;aCh8NrE1eiAo z)u)5pKXUCy_Sg)oQRBS}x$&=0sj6BPItX?!P@JP+IbuOh=oIxO!1S*un6bqUhC8zL z7%eyvUpKf|tSkC%wa%d>=klQD&lO+6-= zZD|rk7%rF}ko{cg*0HpD@p2_C47M_ZPt|xNFqY9rGUcv3`Rd^jA&>K7`yC(^PP}o& zhHE1m)n-Ud@6ACJ;WD(9ut-${+HuOWtp3UdjL5K2?%~isKjrIB3Z$2ab|{oC!^FJt zbT#J{A2X?#aZ9&sRL#%pB&$r7)*HUqG^R!*Cv@o*@;3wa3N^)tYUGTJwhjwWP8Avt z$MQ$Y?vo`vB*7UdJ{+PFJcKLxqU?u6{dAS6yREmIbUbpY5(>tQFxlIU<1MBqIZ~+U zJ^CoinG&~%f^O4$;J@JBd*Bi|&)Tm9ZIo~Ij)-tph~%ZGEbl4NYOc^Jx>2jFVqOaL zL4EqBs)oC{Mtcc*{aN7+@Rp~NQxNiBFsonT^mB;K$i~9-7iPuyR}R=e(U*UF=85so z38%lI8Grsa%AbGh!uTg2?0=1B{2fR6zYERy3+MY=;@2;|{CE7~&+)JS1ix6Q|Ak*T zdBxtKkwfx949_5;03Z>N%l!fVS}e#^tAg)cegPOJQ8Lnt%x26@$!}+LBj0riS6s_i z6kV?%gC3{u&+0Zi&+49-$_}s2>Ry-!Jl;gIq?*Wqn9D%OmV@&vdn?}_uMX&1B)ii= z8XjD(X2?&k*QHyi2%lQO9OAL8CJs*Yw`8^sCk65QQc zxCDpbZo%E%-Q7L726uP21PSgC2<{F+?@Gvf_C9BiPwt<4*BH&Dt7^`gC0)I`*30iF7_t|*ulC7=G`WkBOJ4gC-!kIt`FU2%LiAef6)SjS^<61mN2a&L=BqU*Xhj3iF zXm{b;o$!ZgXv6VuljCRaHZSkSzcE5DCHT|M7+%e%34dtA<5Ny@)_C&FKnIal{~giS!h{Bw={{mVbJ#+#e4^zd-PIpq z{9oAP9H^kx`ckRIMarQY#ag}{gtowUc=WuGX@bPAn3jBqDRDbW-%UoTf{e2BFp%3! zM)0MK2Va1iWDjZYtw*>+Cuk18V!&kj($xNQUT&|R1|(A6;D>(*g4XNP-C1ZcsyiX> z=j^zuN9mT{W2_mNx~B1iS)PDn;XdP>FPV_;0To1o@^&kF6t$w+MK+6k*6p>7y#v}t z{g^)msq^4G z3i$CJ^mqLl@CN>BkIG*Pj=)~rx1d5?d#u6Td9)~M)%5jP4Sc1d5b03+>HWl^xA9@J zBayc^nf1`jG%pXlwuVah0YB`H!<4*ltz>SNuH?B&b4cfk-Gw1{l6BjGsYbxm#1a?O za(?FsYy1n99G#Q9l856#5d^g3T{sIr_xDlFOnpu|gM*!$i4~kT?8bUDy)Vk-3Y$1! zUqpDKA}RHFVhgADf_N;DLVxHhKfsKESBtulZ?9qKokAIMy3reGuK8zT5ob{B?!i=8 zgA9YvC1NWaT9C@p-c>!52o~5`=Nq}`fi8aU2ER3IdI@5|Ur*S?bF=S>gVDhYORVYW z36p80_fr6a3M>fZq8#wU<7d?3up55yGmKN0$Nm8e_n0;qBR|8ng0MM3ENfVSEdj^c z;l2_shmM->LfvySBm#Dd$BSN!3eyt;zv{v2gGP4VjuN!}wB43Q zU-V=>IWA9`p%abuqJlmvf42p-f$G5`hqAoRuf~k#@hhWI%%mc3^+z)pEU%pOg{MpX zm1yq$gHSO2;O|Ht(iDNj?AE0k04(yHg_9;o>)LqQpW~ps8VWXMU|_^fjwN~FfwkY= zON3IGtf+-~7n1cBZ@Fzl{YhG?P%Tk(NYl{1WeNPU*{gWx4Yz8+JlYM%DS?rcmT7i>_k7pTD2RSeb%drkAb9Y1%$8c7Y(LlmU5qA4=7q{l_!L-iuV;cSnK zy%(Yt*58Fld`0xR!=T+vv0#~WWsrHWX`)^m-lF@%is)MBl1uGj%iX-anpuX7x&-xIH7%eyteTY;t$e}N*A7{_ao5V~Z-`{v zf0|Jqir3)1ZM708-3P;!r`e7`pu(W3nFdVeA?)9Wz<#CecCiGP3|6lNohwy1A*lmp zqi%BUs|UTYWL$zuiZK5aqRlVQf5OHt4H`$tI!|R9M}Jl(ZNq3R?1Q!;8EpknS4V>U z<;*zxPQ8zqit|*t4+T8L<2-%X%#d+2-#$Ck4512Z})-eJ`v4NDYCRKd{i1dVg(dQKeJo+q=361`w zT#{-7A|)MN<}x=bN~&54%6)4tfy)Q31hlcY8%S1W?qYgouDUW$Ee z4}MEl3Tw#PK9@s+0DpN{!wUUH7#Pdw2?Lh1y?u1?^XGU`)ftHxX3npcG$G%~w;Q?S z?3nL)M0wyf?|UDtg@&!X(&$lozp%n-U}L44KVT&uk7UC2yyPDw4p@5neEnm`0|)|_tjv+=$9Jik=Vo+ zKn{K_qc!ejUDI$cmM1>r>7Wqv)F?7EOo{t><(3 zB@;oQXF7Atqcfp>hli54taRZBvupsztVX{>&oR``{b(*+5lFNpwQvO^`0OKEUzbR6 zl}R+)P2P)+IG!8zGnQeGA{!G-CipG<0^L}gyPx3Xkp}LzL9!LASp)0sN^IJ%RF;hG z-#bQXvxVlAO71S!^Id&qA5Pp$VOz@l`Y*MlA%1j)6Wc z=R)u@8*|*xW9`ZdxcpkZ=CQw@iGhTlg)=|#Fd{r$xHx~C9U7zih!4zov349vh=1+B zpPi*`OnfdS;GPpMb{exc1^yG~l`;mKoOX=KXyRF7(W^th7@y(5Y|%~2*a#XiHtKdH z(WC1iBJeHrT5p0f4tbM>uy?cxt@#Vjj~~}Pm0x~bTjd1^xsx3w^FYB-R{bEoDr1@$ z7cK9*C%_oOd>L^a%~#QVl6cq}dqLGw(z|#;?Z~ME`eE z3q>%@5LjiO_s-jzE)X!1)O=2E+t`V>zdBoUvz2L!Ei`^cU*SH`Uf5mGxpcP9&wzo` zFI0bjxyG`M+hOy*&Md#q^=rG|4>U{xt3c$*dcbl-f&BjZ@H@Ws@jV1wIUNnn3}kS_aKN~elW%UFywwHOh_9z6QEFIh zOL99dEnRyeBH8o?MU~sb{F8y-xY77)E-e^w)GtO;s=>-(D+qAaFCsOOHy~=ZR#H0e zpemSDSxQQlYLbbC6w);!LqT|{;Am?g(;}77Znv;`MAQ>ugxf1n;!#oJP;z+%ZEHG7 zrFq`DHjd5rbRNlJ9f2_aAXLHa`(^F;jNV4CZns!FZezs%I%?7MSsgD7L=k4*-(Fn+ zo5N7kk6GUbFC~)O6S_Mv0M*?Z#-%NR*fEzQs3z>vawy7KCzW(y%5=*Mcfx-dBjjC`v1)j#ToJyrvMLJ#8IX}!=4N(KF7 z#Q8AU{22Z@4KoCdFb|J22-zyce{^ZQ8;|t9Ptz8@DRjw6Cmx&CCXGnxU8O6@-a{1C znKoa7OE2(`>=&{ZZLWl}AME&7cJL+jgk9R1i$Y;9qk@Z%V+0R z1Rv#U^aQE=uCf>MXOrEzKCUBh(n_x_g*Pc%Cgr()vJjX@GLG&mbi{@U)uXgTAN%YM z7Gp@VW*jXVq!6>mXCpA^9bigqi{6zmUQ=D|P%0R$gvmu@qbKTiP((cA)v3Q;6MpV| z>^?q%nr;-u@nNh(AnppWkMn5DefG9VZKNf1syu5qq1+c3f@Ce`gFgh@7c!CY>hXpC zS5UQ!xcdLxjrixqAy!W2f9*#6Cl=&?yBh)c4{QbCzhf(a=#c-r;4^>p{&{}?|6w=c ze-~)xPa}T&_HX+Qe_H;Jzkl%(fd5Op#EdJFtg-~7>UUQ}26>5)>4{#g5LhUI63Y@j ziz+=E{j#{sZz?77BN!tX@5ta<^}ZtX)NpdeN)Z|$V~LP0E+LtTvJ_AG6|56Mi>~8Nl?<78T%MTU11hZ?LN0p?O7&9St4K?SL4hw@|&Z`qsbz z-3m%Vf`WpyBE}Z_s?JKl@XWwWD}CVaW&onMVnTmH4bw9-u`n^PF>!D*6VU_MSr|CE znAm}D;W2Y?u`&SIIG9+0F?v~97yvBHoPS_hAAxbd%?$-@Oo1`SnSiDQ9Swg+J?3KJ zWME-oVP|6prv3KlcOpFtD;onRD;Fnl;DBL>_3b2#%}vezM`0x=V{26+04oC*fQ^+I zSoNEGz`Y`479zmgE*n2T5wM4TcgLTE|32KzL@X@Kz~J4mjQ7&9K8jXqI`% zUd8}**l0G2)qZS%bt(Ei#}W7Einf?hiVXX@;bFn{#SKrDIp}=DS-jWDJtUXA^0GUh zy9@70)gTn1S~E~ZA|obaV>yC(Uij0B5H;h@`ni|g_|-|hr?YqDRaQUf+1mw8g{em2 z?g%XXaQU3?2m_C_?f7zgG16`Z!e*O)JfI7;G|w0|;zg}B!{;OdjtgJ%_V$g2npM6-CD5p;yXz_$lOTp2S?H15x?*rw% zv>dcF9klAS!>b-KkaWArtfCIwZ$9OCF!hyi*xAZw30edt*dvB~kp6fcD0i;$R9ze> zu3}n6PThTsEotV#!$`G~~N;^IT!79|re3c52WG?@h3tXK>V0-ahc;4koFxKw4u>O~wGA0B64R8Elc-s`|w0%S#7OE=>_9x z62Orz5UEr0VT^)?EDUT9#b0p34GN%8j1&dl%=ChQk(`WyJFlXur=`$(`ZZz)n^D(( zXT_LSl}^d)6bbLcDH6ofa4h>TT?<>RF3gvDZ@8gP%l5poX0}*-xecJrWIrIckdef> ziIJj;8cv1{hbGq472JOa_}mok_N&s?lX506)fKJ!6)$w*X+hc4?D*lPoBBVg`Awr3 zmz5Y2?29{fT*5rP3t&+J$=>rfWfP%*n@s$v+-lBcKkA(bsYPNn^aP{j;5}?p)a~YL zKm2)(=@IYyN+3kSLeMgoP^g_6BMs%g5 z(4e=%6w=v%z1e`KCdlGl>GUyP#Ig!)Q$R-a(Yz|QE970t(%Ss-=1Mc1T5$PF^Uq_t zr<-t!?(TzukEpPUK`O%NidEP~a^otIqk=*acEhO6t0*L{gSXF*;%YKLD7tlTKvSY4 zr5a?cf{O{Oaiv@6=a+?Q*9(m$Z0w<}#gmm#Q@HS?jgMb(TPC2Y`UMuCnzH#~MZ#nr;mYFXju#r@f~d=hG5`8Y;cJsAG+bNdY1*4`wg zLK3w3uSyHJN&zz1a4AQku^#MJA{ALYn_kBta&Tw}M0{>m`>i_TGWtH-1&HQK2|3@q zRlD?3?ZDx_>51q7{OZ6KH@_iBdjdKNOkSV9b-TRdQS#Wm(g~*uw3lga&$}R)Zpevh zR~=$k>8Bkwh&Q=y<)!ms-Q!${b}-8Z1>An}^EeVd&3Ug5Oky-N&!h(zq6y zI!$~5p7V6Mm{oKQRRS^!lutL7`J32zU}c{45rIAeQFLFEQ^h^O>L+q(Ketb4a2rX; z)-gT2%Z@1~H0NYDq4Ux2@hdVZdU@~&PLyAoUVS&mr?V{gX`u41Xu-i7zm!Q0cbRY!Myz4p4aIK@TF(}H?P zDn~Kd)<@x9p7Z7@61)4Jm%!gqXSL%b(6En1e+hb+iT@VVX0URYALR40e=(t33`h*w zlwdocQF-%f8KZ2}r&*?}!3t(bbT9%ip?G&}T3OF58;0vf_ShSG9t2~Vou1pzlY`AR^T9(*pIV#Lf&NgU@6-TL*-hW%7lp zr>`?b^}cNlx}2`Jj2qc1^Ew+PX@WWnP1Nit8#lkd&aWFwIeAdTvyg=#je74HcnpY{ z+2;|{Us5qOQ|_i1WQX!{Qm}t-B$r|bnVhz5nGca5Q8gr}g|=PT0*_*SAB^GSqwlxR zz?%LA=7{6R9>Fa?=vD zE2?Qy4y~BX`C<$-@14u%j9TgiBnUQ~;3J=^kQEl9TY}iPXazv>0}7kLYZ` z(l6Uc%s@J>aj7f+EgEJ^BWq? zpr-5>K0hv#nFjNf<~ivM)q3m426Li}sHXP;7EBajJSy=O62?B{Uj2nIjttDCa*Rmx zbRP;1-yat*&M>1l!@%_>1jk|V=;MzI(`{WVM=8O{Z7R5Ji(cO5)d(T`P(G=GjIE3R zLU4D6SGhTD5h~}ok5YDR?BI8fQXdE|#gFSW8MItzicjNy*R%r4R)}@-OIuJB>wCPc zK*p9Ldd<74@BsV*L_EDZ5?EQ#ny686iL^{i z@i++$ydOu!XPL^+10^|=T|YAY7pl;@%&cszGuEb$Ju6K-1UKOv8J6$o%3q3mPZUq? zwb%QRVrKwL1mg!Aj0IEAx7{8lThN4K55@UOvwZ>V3yFp;(4lklT@U_~SUCa}ENJIy zY=g^%p(7X)b&{z5P72ebM4}-dKelp3oQPdLAfU;73CEq!h<;qbe7A5&LqjR_?(=$8 z6#<+1B8MHg>eqH{$3W7QuGrbi`qLG*zD3v}w{V}&z#_H?bTR(;DUy1Brm~Vj74v0!- z&qF!mr^Q1@%pUAU_AwSUz(f;$}=ZbgAI9{YUb(*fPH@*_rf1Zc!bt(nCjfn=S$FO>o_P!VAgh zSg93g6PbERse9vtKLL(JAt}}S?|gdkkbG3rx;<3%`3!(PB>nNgIzPavHL5#n7+G&uQucp!pV*B~{p`b2U(=Ddp|fR z12+WZ4mk^OXhh@Nx|KgB=7IGCXs+ye;V1j8-4@S+ni7Rp9&7L;RkVU(mtVOR^JA_Q zhgJAxDkYdPF{04R8;q#+C5{G1n9cfy~}OmM;#aSO>{-J!B-aPREb>4|HS!bWh*}?)%zN8+>GV80)@w-}78mitcyt z`^Yz^zwx+qL=g@low@x=p6SMFn#Oc_095s-Y~-ZS6@QI?bJi)Ij-QeE-3S*dwChHA9M_*z`g|F5TOGJ!auoEr0~b!=n?8pa={-$RANN(o z$|7LPUmskHhuW^wdC_IAcf6;(j&~xY|Mkv^xE=U|n1?KrFRwjG8dx&b;>03%2&(Ut zcg(rLnDiVlDymF{gwyLr5y=$r=gq?5LJOiZv$^TdNnRr54;v2c1Hscyo3*+>tkh>}5D zs9?d3rVvzP*CWd2xLch1f+}-O+`f8EcFr?b76#R9-(NYV(+CJUk0`}p zh{1vj0rUwdU8XMbfTjQvRxe$R(yr^Yg4(^3!;ceJky!M)_Bt(HUV~LRKf42=Bc?z` zeb_6Zex{p$0GA(XIF*wL(`}NzcT`c`y~NOcHlMRFzk3HHD!^Ks(UD*7xieSv`T9v1 znM7k@s?x@JwS{^1E|cbXw9$pAkZ_ZPsmYs& z=-zK?Ps7bMMbSs&S!1#u$Z}cJFI%(JHKIWe_egz|l326-y?&9|MD0{yXVl$fb)BU0 z?2H`6w)yDK2lfsds&U5>`S%}V=uC1Dc<^H0yNGw*vEs(ARVg)@tEf;Y&23XdFbj%4 zn0^9rxhB2ZU0DYF9E!r=_fNRj+p6(Sf03t(MJTCQZ0I!cn5^!SzlrkPk0$n8433yR zJiJ|NbnZld*Ztj5Tye`-0gH6BRm{_7&+F~>xLl;HK_z%Hfk>a)IB0Olj#aJ=O_j4VnE}2ND^moVs zN^{WoMz{I2V>BbHWKIP9lf8Rlb6gE-$$p4^mR~Me(hDR+-N$ApqM3Y=v>#~!P`ft% zt>1pkO?XAsy`#UOQ7)Ah_B4)iE<8LJ=s)2ScSlmkOv*D!&FJD%!r0#_r>7(5rUQFj z-S3Rn;qaZz8S%0_d7o1~VWb60M?{CJ?E6}1uE#a}1Ku+vQXg8L+kzk&WAEAKH)&Yb z=%v9-0|x3-wQD8bJSr7B6|b^=c|>`OB&Fm}$n08FsZ&W?58&cNt zEJgA)By7N;$hCDi&E4z~^Rhd=x@XcyGavdhN*Y2@U+5Oqg5Bt$7S*B-6%^LOu1(HL z8nPLHs)hYjM~A+}9OnB@3ab$U{m=m@(ZsnEAr)Kr_;bBvc%P%t9#1jm1>bH!64+y$ zJF-LA7(_^y`KsH(i07{0ust@e$aO+RKjhhGzi-Mj zb1Fl#awZ`;f{h?C65jU*Xi(GBn)XQqW}bf|HVjM2(YZJu?N2vxYwnf4WpClf z+_Hd@9q+M(s<7|3A_;|@_u_~l3oz+vlbnTMtzcRZD!p(D4z?Ho#o*}h)R)Eo?%czR zIPdA#9?TE!r1|5b=>hKs0n{eWnJJae%MDR&;p+|$*o$9ma|;V+)=K)Qd8X`ygvl>1 z(z8A9@ecaLPW=Nzqtd16PRcs3I&%6m@g zTp7d0_AMH-qM~Rj-;tUJ2Pq9iBUuFb56`%HO4*pok~cOHT5acHjzMMY#nqom zuJ5_Jt!lZL$m#$}8G_n=8W+!s?1_8FNprOG|w7i;ha0mER(XsZke2;aFmzNN08oU(PT!^xb7HW||bq&H4ag9)KXbp)V7vZ5nj4L%A9x+S!1OP+PDrP~Q5~V6@63 z=&GEWrrYKV0$lgn0mG0Vq*%OaJM)YN;F!T@X{C(duFJ&v?5t)2(XDSdVL!jg zCdiZEyk{dJ*i2RSpp~l8j-9JS8sYjq)(8JWXn-$A-*; zXHgUemz$r3Km>CrIwYo~a07sL3SOSNZ74B$g4CW$F_k)QDgW4j?h3FuxF{7KmVkc9 zRW~p8;aQo1wxU+zp%wsFft<%6NiL8xa$DO!LTx;q8yBUISZIOr3mm!I;2JGPKO>Gu zC!LM`hh9;+vALCUAV_p0w;N8boG8IDJ*Sbxk`?4=Iu*tg1w8-?$4muQBE^2nGahG@ z`#wKkF{vqhnF)CJHagCKLH8aPQ%3$!G0_rE@Sd2j-VAb+%9xo@WEpX^Y-+u`alURx z#Jn>v3{k$dPXTMbBzU>s`4ir@Rn1J#LpZrf4?JxVem%9au{2EA`3J9At!nnF#LN>LDQ9E z+cM9YTw1N`Cz5DkCZl#cG~*mswgs`HMV{u;{zH<@gTAE1Srx6i8-?piQWzDQ&vX_ArN_k9HX z=Ar;m#^`-9x9U`0id$h+6|0gmpPb~wUCp_VT&Qsmd3;8t28Bgl@DfOBL9w7!V|*7mRobP|#^EXZmSa$MNf8Mo1(r zLLT+2rW6mT#5L+zT3EoI4Gv17%#Nt|NPM9N#f>Ubx6$cM3unWl-x&+lgOJe_scqXp zdZqO9qBRzW9MVaa7jvWcIx1k%CktE$Q7M3WrGVSA81jx7e^DjM9Gf14KNQcGBi5E{ zkFA$z_~LHZGz}`#-vtZofAaN(&Da^xUb}kQ>rl00n6NSdzV#+=&E=r*( zs+Z9drypAgJ`KAlDQLr#Xu>p)uxA_+F%NQvD~TDXNAoXNji5$o)Na5WkW*29slm*L z226Vj295WvFG#H??=UM(?AlZ)iaIJtnVOeW%jDrv=l}Xd@lgjQqQ(xPByMX4Ie~7u z%Yk6@%BI*Qtifn~ih!>0LYd~H8LWnIX774Hm3n)__k{|l9JF_HC;Jol;W+(f0902K zk=bPlG9uN@3#Y2`Zyo2__RVCs73VsXsO`?p{VA@)Bq^y1w%Fcbjh|N0MDulU2lq&z zu0!R+L$?Iv-hFQPUc8xonmi%PtMJI%w;#iIPoMsdo8(A=dZMsd}=) zS8`9#YSvv|ZTsdq3%YhK8`}QExjVAwr#-rYM}S92mIwu)Wa2J-i3icaM?e9~sfZ!zb0Na*fo_>B$B zqt?PqeD0MfZYjOK4!Cd`!=5?&jsQ<>vsvsvEK;LA;>&(+IXg)TFJdo&C?i+aoLa_l zd+E=@uU&h18s_FPu;t|0@@c3iz5QY;zR8+<_Ie!ljA$y}od5WojX#=vvx~noghqIa zDCRJ00$>&gdguCY9#?iraC`r4oIY99;YA?w&)4>2?UF z#|)j;)2AV5hG_zYk^8V2?&!fgyT#cCNKlNDu(}(aPL+VI`7)DW2OqgASsvg&2;q`2$S`#wg>7DW@c{x7975O$vNqBMzmPH1K@v@}Bbp zl8@gKBC?8NH=HF2Ufd0;FtqxVQ<8!dIK(^xTo~@L3_l0c_JL4F=#?i6r?1i){5lSi zYnYEqELuP`mC;R$HDZ3KFZ#E1|IDI^nK31V0jhkkpn#qe7(d*nE$uA~TTZY6)6DMP zEvGu?4kI>X@VWuiqT*o$`^}$P1cV!v%UZc}-&W{*sFcuY9!kGW!!Ch+vqo$Wgh(HJ z@Ao|r6uEKHO4)JBiA<25KdyY#{Gv7}KKhR5a7`J=v8Sew5-uN!5q3Wct3lwaCL2Ts z2Vc@lH*pFhVQIwGH!Hx~T%YVH62v7ndvUSdJ(A}*+9L=5@rk4u8i{%MaX%k3c5-)5 zQOG?_$n6`_B6>m-^{mm4&x+K#hi)TeLX9w90#?(<_CXLoO(BU4IU^U~4vb43FSq?m zc;qR-*^iT;r2H&v?)^#5V(MVR+w7cHS}2-jP&w&nq=M1dI+E3%2`EP`4%xTJ;P%Mo zz#T-h_Z!u5>2GqexARu|6Xc(51Th9-VKKu-cuqu04CvL2zGrYH=8b3-F*wImt%+AtJg&@#JyBZU?78Lrq?xjM-raW5^-!BOCzMze1;&kp&FP`ZHz{h!AAR<*3-&y@4YX z9ZUZ>{JhmHy2UrZ5X^f#WLCegVllF#5Y+xq#g$}{GK1;UiVV7@?4P4GW!`_5s$kWz zrJAV|4T1H}8>(R4Z}p-t$sc8$i>ULbfh@w&)__tgp`MANJRFf80VrhEaH-enb*NUe zSxB;SDz!EVh(qa#XDNKr`@-6Ls~4_FW8*JqJ1tw`hsz{q65p$eVMz@qF97ZfTVkZ_ z%~v9|pN1gjD3L^y^)aK@Jc=9bLLz<&WDC_7C&COu*^e*$>N=rgKzw^WdJ43D#NuPG zP~{i&cj;l+c7f69a8pHD#yg#$s4I#Nkwx(-3bigK-%BteL4wZRILNBpViEJ`1x==^ zNL8Ed`YBF0h3PsQyab$tDN&`WD?f+A?o$>G{50e%Ol#nL0?gz=w(%NF{(QouWC~Ov zi`=IxNyen4y9ynMlB80#3DL;`PieTv1Er$KEP^?Gz^gA}KTcdmpYwyW6le*G45aFg zz4OeI;!1ZnwWJukiPsS$w{JNi$dOXaN}t5RCKnC{QIiW_;RT)lSw6X~o`Z&`gS+O5_ zhCo|u(6^4EYH&uZYS6D9-Y#4*AhsF6(<6C2UW4lTs2(2OBN=~y3z?dmBOKqNW*46P z1JxBMqES;%anIO{4AuxvtBBD&<%rQ}1u0G^h|yLsSnOTFJ}=r3qupr}p;^u=rzB&C zEv9er2#H&%U$qO0S473M0EHD9_txn<;GH6$^wj1%3e0?o2n;CU?U$a=N5r1cPPX$+ z8}R!Y^m`G*&~5}Xu*)ZVbU@AL^LTfTR}-el>=m{?+Q{szrTvXVpHqVKm~zE^@B(fJPg-5N7ln6!zbt zPDFpeP>MiQ(MJ(wTk($~GWtN$^MCYV8P$HXsDJuRqR!62MZ^wd9R~oTB(VXBIHdZ1w zARQYAI~VYrorntu+orp}#ZHyfLGT9Ru0Ef~B7RcdlWDX>Ke>?m0*U(zu?$6NtzZiQJVWs~Z zb|NEV6QCjB;J%^S{!AJAe}+{HF-V zn@yItGuAhC*1x{|^^^0hBnMEiFfqTCWEXim`z?U=y(zH0`2u*;``uh%9_w2TfHz;* zep_K;;`nR&uk(NFd&^^atB>WcXKy{h@sW(|@b|+i0ObHL(2k?5)vk zf4krrcSnetFXaytxGUTl?Scd2^oiO`Qd3`cM4+e`dk&Y4UqE z|JNKebarq6u2O%d{GXZmd&U7{$oyX+MfG^M4$dF-HO_E#Tp%=iGhiW<2NvrnVpS` z0SGK*=OkigV&`Ds|H|65Ec+Z$H;UzpNA3I7vQ%FGFz*8jqk0vFal`04*6 zrj*Cq3U|T#OhQsR8*MlSy>1qyy4qZ zuHsX5D}|pI&<~(j0W#@d%rPruQjJBC8`O(2MHif{Ip|LOtbDCRL!HeuD{#5tv6rg| zYa2Hn*LVo16(XKcC?P2%x7uC1&#Ld*bErsAgsMmhiEM=OFJdN&e1GlW9ebhsd@-qy zJizsFz86z}4MMi%FBmDk#wUhEMy**$^pD2%mEQ2PMC>L_WR(lmz3ITJ()B;;tw>4Y z@OAsftMwYNF*#ZcR~Wx4JaTguV40HY_|^5c%Y{~JLk74dMdHpbMM&u!H0wO)oqjFR ze08^z`PuE*Y>*L)ogq=QE z-_0~%YD3*75@dzQ&a$jsn;PAYY|X8f=OH#$Y|O9cn;Uyf7`2?Nk4~00*5;v7T~E(W zPYw>PmUoFO#fJ?ObHd2G8h^EcONAo(96!mOrkY~96ee7P$I6nwG;W>`$3XC3_vY|1 z@f~nIId~cdHdH&Z%xP1ut*&`CKN+7SH8_8pus!a+VLuSqs7-`EY&zz2`q9fcUdpis zQ5TK8^-JEHv=!XQv6=n)`t}+Yrt?&_^cw=MwveRU#j4t*w(eeh;b}IS+{E6Qx>f>r zie#_X={4E~j9k{y71sLELxt~N%qLWQAL^nGyUp;2A-G9`?soBrm=9g`-dN4c_BDf{ zJ(x1v4CgTWYo4ZzrkcBbx{BU2P3y8u!St{lS_|Id9OUL|E1TP&2PeG>l&u2iwmwHj zD*iYpl`_RDBJ~etK|>SgUiUt_WsQ6VKFx)G;m77Ap-<}iwcq+7)8|@3;9-5Hz;K%I z!)wNHY)D~e7Ha`zPu75z&)OBn@`K(UwK#zpFH&olBHlK+~8+7wyP3v zT|eB9S~dMTo<>S>5!=-RLq! zsf1oXF{Q6dSUaD=y^Dn?V~Xo97PDt`JMWj(7@sO$CF~slPOiF^kxqph zX#@zagl0D0_9nW;M%fQ5SlK>h=xb{X&SxJE(tnLl7OC+w^VhcXrHt&=5r&Ht-mYzm z$krD?bTpAj9x_Yfv~_qDm?Vvje{zA{t1H40BpDt3(0LxTw@rKbVpEDoj>^^CahzT1 z8Dq8gekMw1Gu_qwo2t3l$q5*AtLeJq#RclN-O5C1_1eW(xG9+C_O9#WTRB2a?tL!z zm%gjYm2?~U4%0_gWb(Zx>+Z@W=gSVK{jKJntr(7uRl;>u#(P|^I@40?gU}x-uWmQ4 zli(wlwv4iZLFZwRlM-usPAKs*B$B_R>N?5r`V7AypzSY+gB7`%HJoLqsKNwM$;5_u zoSIv=o^#|m9Ufy5@)CdahHfYrj-5=QpjeJ3H=j&6l9Cf4X+MjIu`G5V431lyBZxLn zFZ`PISQzl)>U+681NZZ!o#$>`%dIsVmDYtfHZX`oFBm1yf1=b9^NTQ7Cv9JZ8rCVx z9nvbpM;sik$F#EBmb>nYd^HCd8GcU>pHnwW#jMGfy+;CWuXAZK9@kymV%VFTDmj~_ zww>LL6m}h z+J#u8B?~DK3Ei#l3tB&kIJRP*!`U2C@a*z!-Z3^xkC_ngzxH?*?PVw9kO`5e0vxW9 zPCs1eMU2yo{@fTJlgw^gNYTlelybeB;B_yn>AyJ-7S~a{b&(wYLipHJb#`Ub)^*WU zCT#RAfnKHJD~jWT**?MP`5C-Xl9H};anB~SBPk_;^j-nlW4b$xv-ic%3v9Aa zfb4I3{CMv}NjUi9CqK4Ad$f`FKb`LJ-&_kBak%l`ph^TU?eoFUA5)wD^eHx}?ikqK z&bBF&P_!LxEfVjDD}3ZW^Ho+k<7{`DXlpyGh3|gYR6Ht40ALLdH&HaKK2F4ni|q0@ zXRNI|eSk2ad43AMs@ij@Te0=dmD2K%?V>w7<3{CdwA;@m8$`{qu=%;v@#H;{>l=jA zjzPoUj9$pVVNl&(4tn?lH&(>(%=0Ox)$Z)2*VE^DLD#YMh30Be+=5YvX z_3r9Qwa%yOS$gF%kYnvpYF)45Y0Il4bV}%EN2cdumq7@>_2TnR)egg%exdTO#*X9Jr`SnX%z7Ld?x!Mvv&jsshpnFH( zHlVqiEMaB%XrnVjj^O&2%y=;5k2*ykGGyKH#i~5D0&4NZJpV{ zutchW9%zf{_;ypHzL1Dt#Ta(uTsU|`TDvatu-Y7U6V3Cunyzk3@fn=Bc3r3m|NgVO zEqTUSr$0P$H2Mh1RJf$c$B?w3c$f202Dh^y>2;|#JvMOUsB7@3kMQ?X;X+0Ur2LBr z@w`2c`WQqSZp^5(Gc4zl{;rUAm_J-$i4LGzZj)Lm{AR$;)4?-&1su7IdRhT7fi>yi z9n^{tVPrjDC1eEQ-?JGAkRx@&fv|!*srVWCRfD>|KkMyf&c(oVc4jxMyWM7(Z*{fB z%Fr-+E;CPSBiZw!OOkugAj&XiMl`NTGoX41NVuF)DdEFoBWB#*ZFr(PN@cYqLZorL zRE{TSb?{MTPOG4m9FgQx7e<86611haVQ_Rl;Ue5^}>tm*Covb`nDXIB$G> zYN9szYg|nQIT~}B9F-?`NE;*-2|eg6{QL5m$c>-=6?!aGxfNoPAm4;v40C-nS zP>R4bnpN6d9SRDh=JXhB-Zjp-V2l*4($K`3!LlH2DO}iU&9+aq#QkN{7UfdV!SXFn zSZnfJZ4aU~P2KoeDlNkH##@N7eR#_r1h;_mo{Z5xHe7KJuEJfT&k-!f=h-CJ>7oqo zo6b4s?K||585oAD9gp%12%S0NPXQxFk%3UkGAM>+VPNmg)lqh$<%QyWngn zSwZJ)AaBR`28#(sd#g#4UkJ%JY_D{0ldJWyCqCE*y`BgLC0&??V!iexF+@exNYPV6 zEEK%jLCXhiYazmCVyYHqgIaIC&`%h(*4kXL#6P^29o$u>!}22c$nHGcN;beqw9sIw zFo-#>x6BCk+qPY`BIzgSP8u3|^GGvc-C);y?$DP8FBw{zFwn&=w(Ilco8unXzPP$% zBur}+^~UALBTMT~6A4Z7F=l8x4*3&PB|*0%)?tBJ2<8=s?s<8Nz0ASgTu6jnj#6Ww zBB%!%OiizDc&4Jp^?XSp>(oi=7zwxfE)+pdEb_B8z-P>o3egxyRkZ-#o(vM)C>nJh zHM~fbc|S?s5bkeOT!YJ6_?9Vb74;%I!#OzF0n+#Up=Ywsi(!n?yy5qwG;q;RDk+*s zsVhbbne>>hHdlbJX{hl@gPe2Ucv1>izm&q}sEK8H2YhuSDN|>ya})iBQzWl=TJ06g zW>P+(5}By||Frj&VNrE`zkq~*bc2L+OAZW;ba!`mcSs3Hx0EzUcS)y|ARW@(C?SZX zXQSNrbF1fl&vUNpJm=H9zpOp~Sv6~Bui4lB#b3xIf{4!5hKTNyQA?3*eS)(2ig0oS z-&_Oql(*_!ZlX2c>LLAFk(IKO=GUkw7uDXTwb44a2uI<$i|Uh8dEs;=dBoRB@O6?; ze54}3RK6)amwbe9elSu0hV*@D8hiz(o+;CE9fC$UDarw-hF`NKQaH^9+Z^~QOC!Y7 z{nNOr99okI$#yN4dG1=%eB;V4R&S2L2n5k_O$Wo7Ce1qTASywk8(oVEP1QG8i6y72 zn_I>HDieGq>DD!@p>D{tj)&QZ5td;v5j!5=cQA>y?SM7Q)Vh0mAu9y zoy5TYETErClGMKELU@%{Fh4swVzm|ZfO%)#(B2H89M-@M^#;9z``QQ5be*jf+(Vrr ztce|od%aZ~jTT&sr~9Qu!7mzuA&P+f{7E#4eE17v1$C!6qe_C{^DMu0+y|Ac@H5`L z((X8x$KepFP);w`9W>}AFe(r2%Mxh=AKMJ{uF%4sioIKe7)5@<%h--`Mb;Me5X>;x z6T|futzgIk*-zM@Wvw~>h!5G`q1Ft-r9Lk*3t7m1d7L5yT|J|c9N+KUVdcY%(Xh&_1C5K9+Nz{{cCVE`^x34#H=q9|0RY@E9; z=S3p;QLc|*tuk)*x_%!?$IJKJsyxB+Gmr*W;rUqSs?vdUrQCj8jw7-VGg%=;5Od|4 zh@T5A5|+ohP6Pz5i3%%I)^9?N${FOKz*Ls%CiqUwA@Y!?E-h(fLdoq$&rSv$1HtV2 zito&7={4$}f8wcL1u1gVYl03fQIHLJf`S5%tJ&!vHX-YjxWcSzORYIYX_U`TQMsAS z>^SGXdR|bGGp*_hrHVx)`f&k)(`?35vwE0*Tce=bt>i4whM!QYwPo>)Yw@K@bD3Gr z`*Mz;o5raJ_?zXz-F)(NZj=-)`)Ru{%-mze8DBWf@J4*}Qj(rygKJCM6nky`omef^ zojzfNm3y+#uXxxw(5%j3ro+!vQ0rgZreMi+f4w%VLs6F@{@66R_n7umMQ%IdnueqZ z;uoLsr#pM^d>EaqyBPF8EIQJ)d=@4ym=;r&#cDt@r6ZTiE~BY3bx)(}@iZA}Sh_8m zm?8>jkKYokwIr&o{^Ge0oNe)h=&XC7E{^gPHpR=S_HPVvS@%cE$Xm&%@63bL3`@2o zPrq+VVmVQmbsb%S)pAs*4(2)3a@aGbm*AZ!G@Z&f0HgjbN#}Hr&bkyj1;-*MitP$n zH6XsBb*61mHsSVZH}1^a)&>2rb{CyuYU0h@M5Gm~PR_o1l8X9KI} z&fy9Th7PldV}?t`WHULFc;?RYwrkWtvc` zI=5*?@GUPb6Uht*5${D&V?h3E$*?yr41G{d)g*k-re8Ybwy?_Nwp6OKCs+C2?6A}b z)A_bUf7Un;FTW*O3Fa5-SG89~qGeS|Qj(ON-cCu>l?WPl5E&_g^+}dxR~H?_T4664 z^pIbKYkHyS2a7#nhDFTEPPvVvAvlI4Fls7YnT$Xgqk$fn4`E@7IWIeq2c((hgkxeA zAS^B2K&sS5OwBXFL6u^jWvb1ieZZeO9@mo=$6*pb7_VBhlIJRmhNiA9^_qgocaSkb zSPh{mk(LsRJYG?d*#$^StqrRgwDN$1s-_1sDK9S-ugpAv39Q1j_SktaL7?6of=8{d z&kCjs4C9`M zej$mWq*3sek*I^ItVF8!%l)M3YE*0O?7T#|B5jo1=yB+nc(Ym<81~AXhcMJ|g1W4o zNWpc3t%~-f9Zh`^5osUB@kG>--ucnTmYhzWpyF^1S~Mvt*_bk7C)7TQxK5Oxa&tN% zHAc)Tn5=#OKxQ}<)w2>J$B{NDRV#lTo_3!^jhSvgfmMqiAv3UBTL{TFeJfJ{SoUX&a)Bkw~*d^X{;z&MGqLOqifFeiV-gBmUHb zvgC*$@v}h6)57(H2>WTDDE6Z%;9l+-U@upL^JlLNNx#J z4P9OmHS3Omw6r8MLFWGM7EzBvT}^qFs(=6(QrcNI982>4;G9_KaIu%@6aMNkL2K4L z*y#vJuy7huB*-%id>}%}2w^IWM}=K#J%v$>PUErii-Ok*7w3 zOeN8dfcfZ7lK2owI`{!Ih!2k-y7z^E5o*8av)F80d-y0AL3k22R6>4iM5JhPZ@&aT z8Dg1tP%k>G1gt0f{M0d(qnM$OUnB^;fGOZ~^d?6|uDO*b%?N>cVDvaq%ZwA95OF+v z$Jm%D=Aj5#DgVP_=*wWES7a#TY>6wP6s#5HkqzL;SCy+gYBkNQrIWRgt zUJ(d++7XqlZcpMLqwiHIjN3yPBD&TYDgh+jc^woj8x0)`LyhWp2$}F`D%!6pO_mg2 zDnTR#x#tBRc1Y0L0+~=1b;#fi9%0wRWN0tPZIQs11u<_s7iS2}K5PVJ*arqAxZ8#u zuw?;3I|v!Fv@r2~_2RZAY=(GsmIWxe)3i{iUELny+Eyq@_Vj|Lt3^gC9NQgReN`j0 zt?GOvO{?V9l6IDY{s`triaEQ=>pgjS_{qEW&|7T#Lq@@AFs6PzH4n41RNrd|u)a4` zrNFF1=?*A|l9W)Bp{A5(>?$wMK$~shT%wXk06eKid8ROhQlzgdq zM4|A-LS_VhYRp@rX2cdt8WjFcDOG~~`Sb{NPt<;xRzc(~O3&2pi^3_mszIQb0E&Yb zJ9~WMm>1-VEC;N)qA&K?=uag*DNN5LPt(Wf6b4c3G%AG40$X!*Lv?#}L%CYfn}>8m zRnK6O#^}cCJSpmrfmf%JuXeSj7&|?XMb<3qq?Bu=4#MUrG$|PQICMWHhHkOD_Ap?y z7BgUAF<>-bCx(_=r+nP3m98}%e8>34Bqy|E^5Yma4mXpd#v+;vTYKE+khw*)W}r}Y z6+5VIBGatlHdGrYJk~FhOmJKmnz8o&NWsSEeAD~VChIu+<2U7VWV@x&WY9I5HGU!S z(zV(N{|iFSx36DjBB!OlIjZpVxxTW5{9627v*Fek*EM0%qfRKu&}B}qACpVCr={8# znc_R#_GX+3@a+FrG~&lo?Yk%6>>Oa`zn}s3JNJyAkHh~74g3S6_&)=`{{jg9a{%xi zg7NPFz;~eU9YFgR==%cz{tH~a1A*@V-aAnE4)g_pVh{lO-ktvdase>*SJ0IGU%9dW z22I(3*8c;V{(`ao7oaIKfVtg)rX2Se;ZGzEbdL)Df@R*Lp7$^*=qH|c4}RX`svJKN zynE;s^b?Z={lpJ{K$^fn0I2w%#Pk05Fxo$^mH!6M``1PCZ{m7CuFPL?y&pfvf8cuT z|5qL{LPEcK#4tRwvo`)OK|K(dk(HGlpfWJ90r(yO1p`hoB+OtA;QS8YBVlIdU}I!u z1_72l|NlX~-;H9}?*hMrdMr##03+gWqZoiq@$Z3p+VIZGDyeO6>qpfz5X8Gk9ph1- zDFuU;0}4^cVa8h^lU@PR3BChh9wEEZsYn6ll$9*Ka) ztZ;oKX20k+T5TDK#O)#$gZ9Mel>^7KZ;qQf-{CMvWkki@1~^-nj7N7L5$Eh2*^P}d zrA+A93Y?DD`z=OO=X7`H7o8}#P(2Oc2dL@p?zmM?2@(4F*`Oof1O|Bm^OM7e-iU1F z_(7&i?wMt9F@9&V>oUuvl-_)p3m3f1!N}wjQ0&+4VLQ8ku9QLJYiS_(?HOHaFs5-q0o!;bB2)V4#&i%74}ZRekx z?H1cSoP=%y!nE9O8#&w$Tiv_zZL}g^ZX{Wn>I6#-YD#jk2@3|=W({aEB7TN6JBkT2;V-IDbsb5*KG2>P^78y-W}h(3eI4TebDucZpl}k zC{FGZzq-NHj3+md$K3S& zGIXjdaXGLT@475lkGj3=pMdyJa>d{dQA*WeOGrDOBiU!_rxu$>rc6&o*j07C#m<^3 znM;H?e1@S-+$HES^S)fAXvTFR;Fy71SE_v1Gr}rOoL(pD_~gwcSyTCl+`$(Ox}(mU zkA7!I6HP~x6l0XwC@PR?OVQ z6r5>ld3l)?Twlf?1<^HewFH}-%&W;}PB&T}k`b0LWiXd1-jb#3_j;YLK&7GZQ>FT^ zuN=XN#%B|J*jh^ER~ZXwZIEFVOi#_7^K2)h= z4f|5C@^yGo$PT}$@$I<{w8r#%*LCP_h@JL_sPZ~tB2HKzt1FxOO9xr8QmTb?E4sSV zi37)o4f$N1`xxFHaHeWb)uA68bI83Hn?~eqb16|Py9w=kPTFRDF;1cAeZdlu#NbQR z(RT$a=Tl`jsyXJglb~^X`q`_}LlKR!G@Y-eZZm6XqyUg&udTrNwM)~F0wb({rS<#DySpJ1$&OzL#(Bo{c%$Fd_(0jhD;alWoaC07! zo|mFzzI{&__mNr5_s3tyS-fqOYOklW%U(iFhxz$_ms-|&@$^e#(rUmnI*=a7fv5NR z1Cm*^KM`+5A;w&T@-dUR>LtYfbNOT#RNXBM(gnwT2-xCQhhWk38<;>7<@ReA9 z;iGqjRS(PjzT=9S+LUgqY`dX91#aa~--+r)h0s%i=nL=m<;KsKF!5?1Z4;aAS#lFcLB{I>15@d*Ecq zEOyS7=%beIAHl|#G@riotSE*Y@%AkgngN__zNI{`3$L8H+8Nbq+A_1!|5%lDb=X9Q zvo=@q>fu->M9PUEB?G%fnuaRieAqL6ZX97t#E}Zk^O+QP=D%~xRA(ffu7CR-M(Zzgg0laF8*|M+rzsW{#0%i z-Sck;_1;~AeC(c+G6ogntb(1o>2AjtTP^epsqp=^zYTO*OyrMf8`C61Cz*lk|N&vKh+6C z(4bUoEvS8`9r$5kHpPs1%%-!(l|S%UsCg5`*aLCNlfK@2wtAC!z3R2??K#G4yIvtZ z+>E4(J~fr_+f;nfw}>Z}cq^Q-CibNi5t8f%@)QNwMGB=}2J6*Wbcr_7G#5{TcKx4U zA@}O+IkdJuvX-CPRp0IrIaD#LCG$2 za}C{X)wJ*sua+QXmNz0?ojNH&*-68)U>!miLLGYJB;RGxOEAYP;wk@5@FMza0DhL0e|bvcY3Wr$XhXS)x&Q zgc$^d^|h9b~*-EM2# zNA=nK{ZqY0R44>#dP8u^?^aQyA^YE3(A8jSmo!B##ZK+FL^r zA=I$^@oMY^p7zSDitle*mkim@M+5+|tmj7Hu^)w7{Mio{{=y zd5)RcoBF;bl+3*j@Nn<7{zBeTes%b^xmA+_);z5ooi)>hqW5=~%N%={Fk?cJ#=iYg7Q%ha6?ZZ^hy!jr@g z+oK;WTNUKTv$BL?>D#&)+$e?YG+G$_e$*&*l6EBXxeoO%;5fR zaszA4Q~&ugckES}W>hM2lWFykwRmsP5$Y%%$G}YteEaBYS!7caf!zE}v=)^CPpWkK zWoFCks}v5;%r>93@$aT6r@8IMUQ4X{{6n0@dX-d9Nk;;wBXC`y)25NkkT-yPlOh(Gp6oAgI8LXbYvAV`%>t&)E}a8crUEM~WD4#y?}!H!Opt zC1iSkS%5Y2FpI30p)mZgNMu4rjWljs>_e|l@>8*z*}Bl<2b#T@q`g<8FE44GA1|Hn z+6kL@29PqfMIN*AAY18YT5uhdiPS_+;K`zvK=z{^uFf_fvV5&Lnr}L8vUUG7ee=3a zn0So8kl(gp(*D&G(~s7;Y&>@EeMkJgQ0v~g<_mV$-0OA`eKM@lgEEX0M)@4l#M`?k zk3IHJ3?IL`C`?VSpapg&Qvq=Hhr_N{d$_q$M{s-UFCTq#aw!#ycUC4O&_7V<6Ll{7 zOzC3%48ujPc-^7D)Ju&}FTivcr*Qok*q{zoU3efFG##V4G6ESjPU^WpWZiLc{$wD5 zgq5H)ZUQ4^KRwkxE;i)vB82;BJ=I(wlHz7XLV_{2bUnh?qnl0KlgFIOrCzc?r`Y?q zQiRb@bxQS$qNuV~;uKwY;IZgEBnV%RHBb;|dtwSXu=$}=2YM=?N`&Ni^usYrDo|)X ztf0j`>p%$G(~k^{J4zQIMVE)x(4Y3tsa!%JBS7d5Cv{6zjnfM~V(iM``?mY?)dqdT zbY7#UzY_70CW=>1W$M6_j*N=lDoD|N13fs&P6XmoEKc^=L(~RQ%tGN+v&Yk?5R0g# zxt08|3ot$?!;_cl-Xv&yNRrMO6=|xB+Ug=+u;x1Al9KQWA?k%>do_w$oYITdDsfFc zdC5B%H>xa_R!H-ESeK;xMq|2~RM2uYRf5`2o%0HxQVVpW|4^LnTo;&8 z74uU_B)WshPA{k-Mn_Nh&m^i@bX`Q433=bv!VvgTKS^oCS1ETz^=A6&TX;-t%+gm#0~mx(!i)Y-~8Bemw=DKB+INS}Z^ z)rKY>HA#jMQIw|7lMaH`HQFt22!zPBo)j&Bfg-a1{M1pkXse5=q3Tom7#P~^A+dya zu!ljQQ7hz@p}zmq_#lhv-dz#SI%)f$25CVbIpwpxP3@fGDTd-jKwPzeNvw3e*tHqv zurGFT+koGJ@Df-4l`=76kuHfnKEk;08yW{1(aZSg3L~FF`5EfUsj!2vr{O%eSj%+7 zCvk?h;QE=7<#=sI;sZ40n}^X*#O~&SO0nMvkuo77x-7{*NDU^hb~xh4>p^{2X~}dL z((f`|yJ{za zuYB)aup2f4x3{$Qlt$%;(N`aRjW||{DXxz`I+woXB+wGSCO4!i$+9&5Ah;*(g-7{d zZ#Ku?EE%pL!e=VJYe5cU7f(bnxQKsnYgV@)JqwB-O^C-V@B&N1YGXT&#Y?1Sbms$D z4NF!N8LQ!(x~=3GH&pIK%4Ix{yciY_1*0KyST{hMkL(y%3KVX6$h3^ZB?F?e*e7?- zz;f3e7@abWvxuHtGuhaEQtTnSp=q9W*{JH%*6tqhrINGkyr1wO31iMeD{a$6a;P?f zQ_s`ArLWpprpO`dLV|b!DbhbV1mu{OYf0X>`X)^mYNXK6Q>=awE2R#P#WWAvBe>w2 zx9B~!qa0Uyrg@`n>B6UND#3(#UV@4$c?ykwlldcUBle={L**&qa1cYB`X;LE3=zDG z7-J9T`3}-ijapr@BN0ml>2B$zi)rzM)l_b8NM6QEe>TMr{lgaxF&O2z#5md>3RIJ^ zwmu_}PMCX~91FXCC9ughE3Q??+y_3)(Y>;`tYM6k!xl7b3rF!|x-hH}pv{>BONvrA zD2Do(s3uMnZuu{M#*DbEb7f5PP=~HAg!2k0te@;Z^vZ;&WFzoX9h{teG`LEp56ja{ z9U}5JGOn)c6~PWiiJOhUeCICn1w#v;p-};CK|tDTB{N*+_YtPN;*(t!AFa7t z-ga`K^iA}-sOGsi65_A6<%Fk8WvM@lEhJi+_v6qSgLd=)BSgfj=~%3~8eg&<-9+q5 zwn@egz0pjGWK}MuO$>Yd=zA2K8OlsMjBdjIVG!Qaw~c!$$XUU^30)DXnC_&ZfQ2=f?O<|qu-534T;jz3Oq@Ntb&M%4QR z`S?@iQf!98^;oA%nOc>qIjv8{H(@F4rZa6Z)7gE$5}h*|f<8tyMAHIUMqg3H9w^Y6 z*>h}DynSw!eajPfu-PGQq4SA)?H3i0t(6>?D89#aeR15|0$%#~2XiXlo!?Ll_NaxE z*(}a(AO|J(a?b=HEo5pc!}D6OC17nla(=a7^3v%;U#3%@^U^SHV@*k~G<&L!n`X76 zjVnc#@hW8-h{aIHRMkUMakzA-M%MKcXd0vbt8?k(iRRSnBEE!$G9C;QwN@Y9OgeUb z7M)k`+zD}|)F^MRZMUSOOIqXAhn5pobd+in`a4KP`ETvYQM2p~ zFb$7*1xfJ}OIez9ok|s1&0goD$#rXfH>*Y3Nd}EN$K^X##Ks+^`u z6MPp=o$|dgG70-<&nHU6fA*+1mTQ zz7!-cAZDvRxxBm-G#>InZSB7yaa6s@T98~yqEO18$u8q*M&45=#6F2Ud$m*8hJNwA zO;J^kX2RfG`>Yx%nCgIIMvc^nr|dbwrKIsto1$oL_=Fm%*$$3&S{u5cUR_1PMcG8q z0iDSj!`lkyrit^@MT*S}?IQ9vn?;HM$7U%bHx5Qwx6m|5oz$R}x6OmX4bhS1ri?yG zq2A%m(#FC`G+#=+n46_Hq?)Bqb6isT)pl6MD#`|hIbjI}&NLaz0_u@I>$NPQ;Z1BU zD<6hL>=BOHmAVPb&U3#%^=rFbLc2g{&1D_C@$?eYH08YsWocR$8qQviUwqRTLrCnX zOPDz}V!b_m{6vE=ll6>{QTU}OzQ}j{gk3h&;g>oZXqFqqqlTGQMwt;(zR6L;QemW@ z(7LN`9qD+(YEC#QYPJRi8aKFw z!28qYyy0&W!%jO6kGPFl*6`(viCTFKm^VtocRm#jdLqX>e0|4K@d>>mjdQcbZ@c>S2w=& zkUFRjV~Y!BAybEsk!Pt5J)vQQGxVV)k7w2shwynv{N)X)p)xu-r5p(+EZGMm%nR7P zP?$U)zxIYSsW{a2&}9Bi3^1PWLrlc8Jo4B90Y{K}$55O7`w{Y86p2oCNhkx-C$G@f zW8|}-tBc4>&GyvIg^e{aK9dY&QG~w?IxY>NFjs`;?$|>ODK6#@V8=l2@5LKMSIAnA zxO}mqo(p1Pg;oruX2QG>^^Kr3!cLVwE5&(^{@UOY#?ZhXlppgH`|M>h(Lhh2yMNj! z#y&IQ9XPnZW!dQTaKS#KKj1?QEU3^rW{z+63 z=oRdmp#X%asz~8NGnxTJ4ov-(kUy#u+Y@>~KLZhh;KM(o?H>hG7z5F$Xz)Z3m#jVc z(V1u?ZmVQz7v)xV07?k?EV4|-hPZ45IV9|3CcqC1(j}TwEEqoo2MJ|VKJhh1zU(t& zU&N7_YQZ?jfrFf&mk;@28Do->}Nd4s}!e!BCbMXgw!>V1Gp5_;%wC9{yDfGIs-j)dYf<9u+B=L z%!DblIYqizHQ4bGYYMkajYQGSlTA=Uuxt#pk8Dsq1(`#-%_Er9ZY*VAbt9l-hfoJU zkS;Xkws8ixPOe*?y3Q@Q?j4PS-j;Na>Dy)XfKaq?w9E^-=MOB;71dYk!L22QC9!j9 zB|DNYYdW8O(y_5^?i13s-7~kba`0NtJ zlYe;Y6tW~lwx`-W?c3aa{r70Bvujx`lx9m zBTX0yua#dI@Bg9_NyfEc(Z;GuUhXyUI2_h5x7()T{N$A%FUeR}PnjE-_v`+g0o1ew zJ$+uy?68I(6zH4U2*vsyx1f$_-@c>QM2<5Tk1JwbBO#G#EbzSQoyk{cc1IL*IG&W_ zwBnW_QES^;w+`BREtSenTPw%_B1%~4n6$bTov)F6%#6&-sxP!8B6%Wd8z;J2RVAQS zx?~g{YMVr%tf~j}uN6eaEwaFYxT6>(_cnJQv=GRWQk-303HSR+BuW~>qZ(67e@=J>0V<`fUFevt^TQxwc;O>5w% zj8)H>k%V8xn(;`IHM=@T!^uY`l_V4%d4o)v!WEKXL?|peBWM|S?jR}gX$Uu0-~%T8 zhPNd}@s#AoyaF9s53-(CnQ($1Z-r*4c86xDu_c9PR2}+25#n&RDro^=d^bBI2@uQQ zBQK{p!Vf!%qvI57lUg@Rm8}1FD{gUJeE;AKtbNjm9wo(7|UEj=E*mO<}{rq zAc4cTQ5%GEgAjxQc3Kr0$vJw`ax_pz*w&I2TYENh1gyg92Twj$je&w^u4(m#a2!>yL(f4b;bo=TM6u3RcgVN5ZXRS@!Z2@Lvn>_(Brg9+v&d-}pVJp4!2u}g0huVEoM-(}vU75ha4>;>oU;Nz^S{p7 zNjO*l;>Mlw9Z<_NGXYY1wmbPf7?A!0(s>R*CJ*9dA-QV=0@Sb^fC?4N46r^pfJS#6 z0k7}!l>8hFs0*}X1^+DBSb=sNKhN(5WWPHH+HnA)*1Nty!27?kMEp7*Z+ar=Lg+w#}u@?RQ&{CC`zpG=Z}m)PV_+tL zr1wi(RyLNq)Lp;C*qK;3fo1t6#>UJFuy%fp0k#f*^amJRaQr^!J3|ZLNAXL4Ow25R z0m^SNHt-!)>9=}JcVEhHF&2Pp_gjn&%<)G(b{1ea{;eLE<J@@tHljScvh_$|f?2LIlcneETDXJ+I4 zV}3yTtvkBX-SPLh%xvu7-#-U48wV#qefqT?CkJ3W^IHte44B~j8e?GrgMa_MFars} z{+KhE3E)Nk))x2}f5z?%Y<{oD4sa`fj{z(FM~nq9@A1S76SvT|3~cZ?&FVoz}?H=F=s~uAbFZ20uK+sL$vTTx!bRv{_tM{ n2DqclD%#mOlK>YPaQ@?l#K6({$IiwMnAtEPP*8}-i6Z{O+wQHtjx~r=Dsjk`&BTxr%Z=!VJS(!LlSXr2uI9b`FEjnYTAsJ)UA>ARFV;Lan zQQ0|(iCIA`#Ki0@?8L-u%%E6H$j`A#P{hKPx@OjP^!g^cmNur=R`w>QHuQFerj~k+ zcJ_vrhE@*r4tBa$_C|(w^fuNOruwc7HU>u2aD04!E<-B=YdteKW|n{20R3r$iS6~q z!u5J%=KQw}H&Rw&CSo}_Mma-!YezeMLwjOo_P>sSBe>0YUGR;`jHyH0F4XunFOo*A;VxXyk(9K2+ z&kF6e9setp7|Z!e=mK{mC?DtmoPNQ6!CeZ~gmj8-zRi<9BDr{jSy{zQrNw<3%bH0| zC9#C^^74_VvFR3m;7<80lRv~cQu|r`Q!+SG8!4wKAd^UVeD{m9)Y;|HY1^&Wt;g-B zN1o?ruS&&|y`9KHF!ITEFVY1N%NPmZrQB(ggmxgjyg0g?o1aAjNF81r!(rO@PDL$e znjKOdb%y~RB^xJacZ`7@FW(-Yt8WN?Bz#GJSp{o#D|-MQmX01rXYt^@L_QDR)`vWJ zSq$wLP5d3*$E&Nw(*mNc)4tIj8AZilehh7Zx7JXxA>FEEkJdhzjRMFiSKEs(D$ZjN zo~G@P=8b2|FO54rV3QA~b6liTGe2@yDl?VOF=#L;OBGirPBBbhiF-$nx#4Q9u0HMR z?MPS{6R8brC1FRXXz6~hyI;&;+}xsnYtpAF)9obAmyISn4@$X((lvsCZ7*iy{ zJ~|N7*Naw_ROWi@Pm{X!X*~wFp2OZB#ZZ}XcX5H+ZhJewmU~vscso!13_w zu7>4$`4+g3hQteFkQ3fIHn<=kLzaKv3piNS8a)?dJDBff1p=wL2XR&7m+7F(lZm(r zMUbuy8`PxM`$=YRaBmQ2eJ=Djb(#-U72rERv24pd&N!{Qfm+{6GiP`-T7=(9Ig??D zYpnccZtiktEdPE(5Y+EiHW@?_(*3|Lgs>jeuXKwP3EN?uz_e`Nt3Q*jrXLJpL_$SF zD3$K`892mod7r}TJ8s-dCa$q9Fw1y5Tjj`li%H7$eAdwDTCIMlLLmg@JUq?Gz0K`dVNoG z%HMus5cO^15>#t0z2>7H+TGc)3SLfpm{)O_zW=$vQV;b1L@UN8b`J3U>B1S6g(991 z@aAm_TbJkQ;@Ti0&TT+vd~eDQ)L`Hgv(4n3YB~KcAbXMi^yNW(O z>P7{Q<$-*K7pgIAob!}U=Ld5yoQl(jcX1OfZ)-GHacMB}YS+LC5L45zH-BV4Dnh|GxAzX=^Tp)%LYB#-!9o%&XrhQoB-8 z(iImBIK)!HRhj#Fm(6B?AW(H103VJcql3BLyUD!Bg-H!f`L^ggxO>df`GhSuN~E4i zI9(nXpz&8`ikpR0#IW8NQkxq{5c%2L$U?q~)iZ_zC4NVE4w+Zy;qAz=Fua-TI=XQ2 zOW-5IWo3xWAq8Yapu5uMo!D{)6|E&~RXi_q=vO2wR;DD>o-o0Xxl(Er@y2v)*w4gM zzVBCciRG8>I#JSXdYM9C94)+kuKZG2E9>6_kpfF&a&PsZjgUq;>Q#kdrVHwfEF%+% zhy$4jk-E^Dr-y`*SQf=eLQA%-DW0e+)+xTGGNr}pnb-e>O0y27NV&%{r0|le< zY1O|zIzN2g;Tp>?iCaPP=oy9gxH!h|j-KULznOsrp=ZmPTs2=nzZaW)D_?V5c;x&o za65^JOB5Tyh*k&la!e!jv3(aG%cOD3K?od^L_p3h433Y_*hos7pVzF2#E*^3?lQ9B zfKbEP3+ap1H#wmS;JCx4oxjAw`Do{Yw{|H8lIg@_$FbgYgU6QJFk2r|5;HmRDT{gE zvkc~HkN!^oQ_6P6SRfIhRp1)AK}m&pI+m1rSdn&=$OYuEvMhc+{x;zcTIe<)3Ao5LldmpV%*UXcMZ2C$LH(+1%cx7q zKXRRBcHLY@j|MAWf`%0wZ^w0=4iLO3o?{cHMyrXK;S?L@UHhI{B+OGCe;zK=6G{qt zOBD^3T#NnvUSy7Q3^%rF?pmiqB^y8R^O-t?5$c1J_uDzC?@|R}r&Y;^eHOF$Am-3|?Z* z_W%AyS&kF=J|)bJSw+VyDDCOtL3TrH6m_?A%bdipqwyX;Rg&!cet3B%!cTb@5Ec?X z20^J{|F2MU2Hm20{O)fxb7yQCqDtwrZ|{n=GPQyJ(8trOpV`uEX9t~F^-sCUhLe0u292N zi@*AXd+av4-+5FF3kmV*CX04)TB$L3!PEU_!?|CuX3T9z?$BfuJ z&dk^g!IzPKW1Hv)VjcK=o*mK~r55Dg(4~eCH@R^qmVQ~E9k1M$t(|TFl7LHD>q^D+ zJs(~0kFgE&O)$W4qu{^473^GV!yj4Nt@m7?0>L?iD~v~2 zKlU~zKkwUq3Qt(pC~q5BuylJoKb=>iS}Li#P9fw&0y}B(eoDG`EIqur-#Z;#TML9v zbmuKk?`60swOK0ds_NL~tGGo9m6eX&IM2q}Ay!sOV|@dIc(e)(Cl3jW5w&5c5q*H* zLD%suW)c-{o4fOp^H`EmnNa$StB^IIL>-20O?r%1z+U59)qzlf_VMQq`*|n@jVtBh zBuApCt$yOoQRX+QF>|{457O@wY%hk_w~dE6V&6r9qzF{_!zQC_E{ZoS@Ve5AKCp*! zI^rSM1X{+uNea#YvW~rh!SY3Dg4z#CW7k375^hvij9oL^TY(y+!p}=nnvT`3gZ0it zO9_Kw`z34$>-{RdThK+tKlDtN&cNZB{*F+!l&oIzzjJt#@A@KT0|RM(|6oV3Dm>b6jB#~4?S=SPvbyGjNP4`n zf$b88)X?5@;#i-QfJBo!v+xFuSM>!(hyGMT;cfAN{G&qMx5r+)BgGl3$=LN-{5QQC zJry_|hivpfUBzuUa)Fnr@>%S%6s;GHXqsUUBdwR}nR~!`pT(7IjiYFURAXvUO#j_p zvT9>Pe|el@U9)RvsewGCDUD0&EP|d|pFG-I6L4*rb9)}n>BGH;*rd}jNz_@cbGre} ztd`*s2X8u~>B9EVUCdfB*kL1+5r;_f$t>-HLTeIupZWR-pVRija@Yb$8co&mHf&4I(X<0EPa(`o^2Nis9}f`8qqdAkj4;(YD8~uRyTX>w z)aHvKkZIfr^dGu7@Qw0&!f}@QcUF|#G_@bxG{I?;2lq4b?E#VPTAT^y71d6u8CT6( z>A>WH+ZJaTrrYwV&VHiZ6?em4+*LClCC#AQ^1(S+(QP>z`9!ILN0#`&QS896Az_RA zSU5Y!zx6xy{mM6ocoN&5hE;lR9qqq#4Nd$L=l5I zI9pp@+2RmeNx>%Xxr%GO_>KI_0J`q zX2o{=kF9ZYh@^|OIc7GtWwQzv@b=z*pe3}M8MJK?xsRm2RV+enlN5I7_?aL|!&YKT z$#3=K%cT_5#!4>k$ry5C4|JawcIrU|p7pC{Wg|53EfD%nhWaKQ21)i5mF$8#h=5G( zl<}`S*vW-`kxT)wnR?EswxPo|??-AUZQSz4f>|H5#WziG#ugUo(_ao&3*bzNEl_@O zTcC|neaq=ENW+MLl5>a#7`1R&W zncN$h(as$IccNb@zgh2lU)xr@zwf<$ooI(k#ELz?D@4uLeuDOAzPtnztC}e?2i;qK z{1)ME&P)=mP2stJ(KYn06lE83qezd*(>Z3kTjtC&xy~*9mYckSA1f321vW6m{rxMZ zwRf;H)V2ICx@G$pg|c$6aQ>Ib8Ji8oNXqpGhyHJ1%kmFSg=72|*s?Ic0$a-1P;$iB z0r6Y}mOt?IFQCnWJLyzVdVmC-8U~xu@MBW4+>ee{z}h z-2ULO{^6p7|6DBfw+b(>7oTTxdm3K`-~9^!+8Ufce|XriF64|JqrUcV18%Tn)`8fh z=gpUgnv*-n`$h0mrZ!rz&G=4i^_u;2%_Do)Jy3OJz58;rSHUmYaW@)z==bu1-OJ0# zxaz%Zo9y-R5S+f(dqH)TZnV}1{xy+tl2<97Wa_l1{Tz{Jz2HEio)TF&zcd_hV1qT- z2pKCS#;tLQvpT{_+jICH*ThOt41kUPV_Y4<)+qcO!rP@&6t5$9m__um2nff z4d80Ko0m+JLVih8Izs>m`7$j~5KIdLwF@#IpU(ItkvlTBc?yioAL#=_*Mq*2X;i6t zqsEFnqS-NZQE*ITZzrI-_90eqMVbC;c0=;#%qXJJ>v=agCFHgZ90aL}{7O&0vTxdU z6}oUk8e!){1KpmkhIc|3Dj?D18qph0;hTh6e=$VZcq_?4u~!r}P#-6&DzLzr&2k^% zFQZPQFLv)eP$cX&ckbmnx6QDpNAlJl6JW!cZ!P2D@P$bLs(~~W{oa)(QY;?~;vdHzo z!roTMGMu74C%rIyunyadF5IVgVlJVI4M~L!?AOZ@hQ~A?mzP_`W6X*T@2G6FatL=>f26q9CTiZ1$Oo2-!IwR_h(`j_} z+hYAkz_$EipStDgq) zF%i8JRS8uN2r)+SRhI6nk%QB?_yn6vPA$VS>=DZf)3y17sTE=+(a;4evO3 ze15clr`4|m##An~H!9S9q&8=o!#}J|cGQEy2b6vqq9>xT>2+lXwdqCv=(L2z0S0y8 zx~rAox>=&S-bv{^CfdIFm>P4b_egJ^&*Z^Ku9?sDrLRjlxeFpM()f{nkQyPnN9W)O z1%a-oHT;U5E|9nlgFb2n4q_tkBRXf5_vO}~ey{hc6StkfbWlgz62>PyS-|t4fcVfr5#Fg9?x*yh;`EjBe~TAm9&Y|A?gaOz z_#yP4;+MF6n{E)m4|8T>2wL=$Dt%hps$NKBjZ$01tQLq09M@GX&S#KcD?H3)Hn}f# z6*YxY7V%l*p66R9o6m5WdTxE{NIbUV)%cw@Nr(Oy&hS5$8%$n8A zhXapJVx%If3ZFbpFIt5|3#De5nS%?ZxY&qf)=guzdJ&T>#3$C)e{&}`?CO=A(2E5Y zbTrR_Jp&E44Ei1Cz$ZXsSGd|;fPQs^8>3I3O(h~sIQJqm35j@cONW#|DD(}g_i#-e zJ603Szo`K13ag%HDC307H!-l4oNc-5#fw3H}5XA#O(5|#F z^*cP;9RiIow0%@MUE^2va$n1%1<3##cdxlrB1;2Ey>rjk$aGR`ES#SIVS(1baU-ao z&5k5iHHI7Dtt!lOX9%C=T(3(V;)*c1~8O^(K54GEMVJ)~Q zJ}s>Q({w~(hCu0;mUbRgq=wyWgwK8){|w7n!8y2P0f;Q~;AEsFE^OOwf2#h?yyi;%i56WkD%7#C zXlU8+F2}Y4{jT5V!9Cof$EB}9YN=zurSE2eg+_IOcs*Ddn+Y5@l^E66;F!kJ+0>j< zt~*w9DRg}9(f^<*%9|mRST;)!;~)Vk>l2|4x0?X9&wpgi3gh7ZlH<&eo)nS;5Ag6F zsh=B2WoXz|hq6{Fl`U0sG?XGvuObdFc*H|g7ej@>rbf4i*%L!)!m(GAxpgrYCsgK|8TP>r466)dJ~oa0(J zY|uBq^0{hC10zC*Xz?%=EZ6KU5ZgTq0Tk@whDB_I``WgSmvOBOF->SmpF&i*Gd9+^|901|nkmhp7o*SWKhhkbizS{DjG+vF-s;E&w`_`iUB!_H=s*n04 z;UqT=DZqWnr5@sj<7~RqbFzPIp-65=>z%f#ex_^#WrP%S(;LY8!vZ z3n?+)c@}#0ddb0%=2FY#li;P_6A7k{Ch7&l!wH^|^j^c&_<#kdQI z7fB=q{W~8EOlTy>EtrHqF!$)ajyGj0sDVis3|~CTUV!aJ>P%6fBFCRI%yuwn&6#?~ zJ3o{@(!MYXFxFs{o253El-Ve@bSheQDZZMwEd75hd@MJk)tI)jQB1W_gtt+2x6qhw zhgQzV@AWx3&f5*J^IDWHEVnzR37cYPmQ&Wvv-%$0>=(`L9o-B^<|q|5rHEa;sFTN_ zn}?*6cRYt(tj;{)@oq^3cf_k{#gI~3E}|D(eUbkf@Do|O$eQ9pxH_b^u5oBAnB(ul zb52(YwmGKEH>uT^(&i1AZ%C343R7qIE3y?QIR_iaYynXE`XFj8iRR z;9|~(zyvc4S|`#XBw35^S2@grJ#!sqZz>A z#IpL{F;2O4e#^=s4q_IB?)F=BVg%?eLA);j+@CW;-)H&s3V{L%*9?yE9UrVV0-da7Gz?~ zEG6XV{eFFEiBT}mwJ86?esKzk9a$ll5%g^W8`W>9--$}B_0%gvILOw>&+LEwv1Mc$g$N{erN;( z%o^#1HpgD&mnfOLNkNH?M0qu`)W|p$#3UB5=&>zIZ!NkpzVH%`_+Z~C!i1{RgAm^5 znfODaDOCnKVW9c_ohWMZs8S5HuS&AUj$c>ZNu5g(-jnk?0AGpin{{mnFxTKCxFcBB z6a)rDz+yBg0tZ!MG3H3(U%@{@%OQKt3h|E|VMcbfS`C|444!5c*6U}&?9}Ld4yqvO z_t0IJigUOIpo77dWwvI1_TpmGRXk-QCdeY4Y$*z5uZbxfb0Ho!R}Z)B56}GmF8fM+ zo$6Urpmyv-6YZo4#TA(wlbKX5>WUHxMI~~*yK^a&mDKxu^z@qp8}0CKXOF%UQ58r= z(K9J>L!WQoCeT7$jyzB&qK}}A$b3}PM~*KU=Sd7Obp$m`?AryHUX7JIm4gbVL;omn zCx&J59}ikzHD_PxADZYV_g|Yk*07iUApxZ3bs`o2?34LgD3o{GFa4W01n{~}5BPjC z*7}^tqFrPBxeMmh1c%7=$}`Ixi4WElu=ion4DB`2VK+S4QS1&T->l3_1|3pj?=LA1g>f-|> z*OmPo>LP;^Y=Im4S23d}%{O7ZrX0RmpFaw4*ic958^4~;wvr_;RuaL-FyhXWUEC$K z;#%+E^ID!hVT7_Aq6ds{m0!qa=( zorb2j`fXg7Qoj~M(4MBVSE+j%=5KbXC@!kXlx-Xo_?~xYi3t3O63HCeiO3^N2~vM$ zWK_MRx5q`A-@%m6PfVWa@=FuRyugO&ZYll;@Du+J;s^Z)@q<`d|AY8hSY8o70~yQz zbC&&jp#F~$;6IT6&sjDl6wCiP%%)-apTlg;|JM1ZvOo5KPoLlz|2@ZMc|FIbj79v2 z2#^XRy@!VJFm4g>!DO-^MiwT5gSA9u`yBr1@+1+RI$6-xrNO?|iJms_HX@EIr)bS% z^mICt?{VX?0z6tl$p3irNd4sXXoEY__4268WzO||dPk-sgD;amb0u@-0pQQvUhKKN zcqjx*SCD4OAKsnbDkHB0#;(sbFE5Pkz)s=?`1u%kN)zx)_2LcZ__V`6X&p85LXiN@ zegPL|dU3sMXJQqyO3LHby`OaLL{G?0{G9*N-+{VnyaaYBJ-24UbsX<{*#Yy__l3qd z#ToCd6EXQ|c_whIPzhN8++vN`*bXXLF0ff=QG&?Mf%Rd6BQB+MS%WtGZtb6dzWL#e zvnBpJ#*5SLnpr`*gR0UV<7-iuTNk&hk&aX@;Bm+G^W^D4u4vKw&tV|o@$NAfW#H-T z@hma6spxZWa;SrFdvf`1=m(?bS`Ad|9p+pp58(pZZfsc3Ca4Q+Q&6AEi57pYp}EyC`dye{b+&NR)tR<$tG0;raR53g#oX-7vam9f2$f*b`&vu3^VCtZl_PB;xjA{2xw z*y**Suydw7gcE273MG_(OPsR{j(8Afk2eZNtbL6QXD4PB3V)yCw8fcjoE5kO$m1fL zh=r_BY~N3ter>*FSliXOydiP6(H~`Yi0j3E>%Ud%oJ(H2$4fz$@{Z*S4Oc@aJpwayk^o`xi--JbE+mP43@ECfs8ZFq#MK@acnl-t?!>s-*K2 zEa1~Nk!Ma;Mogexi8$Q{)JtAKEURU&&l4r-q%C}N{Dda_*qIH`=cKFyV08gTdQdjy2t&i>=GaYR zWMEH>e#|3txyJyWt1lNOrqUE7rE=CqM3l+_XLZ39UU1#>7=x2vm>R%AXt!%B+MhCW z;ts!?KSSiUerQ+5AK2bUkd0Xe{#YteG%Xy`F%l{);ZQpwa`G3>}h(H>k@XiYiZV*!}QmDWQ?Kl2Ky*|-ladA@|gFP*xul+wZJ1Nlcs5PGL(H1 z?H(zyf{@PG8!WeeJKntgv%jzQ0#MldZgRL$UbFoxgnfMzG+&~*6(STn ze=IaP+hG+Y=;J>KDvJdR)~QZdgI#(H z+atBi+0xWR!`0~VkuTadr?h)`9zJ+Vpm^qAQZy;rt!Mt~|E!_(4lNPl>qSX9`O9y2 z6{wIC>Rhz#bqbwd@KvRafTm;LTj9K_ln)p}ef-P@Jr%wu)z?*p))vNKz4aC+%kPp7 zx%CkVIpcQEG!aGadSWzFg4Ia==K?AUo5+4Y(C^-Kpq{gMWQT`7O8r$XDx1jA3L%eo zS_ql~vYU*rAN*&9J89`BLg;?%G~Tw8;>H>72l-o>bVhFgr@6ynoX(dP33L6-4;Jw> z17c;HF9-fiW@TK?KpEoVhiZ*QV`$m6ot3?_}Zt2oHWt!l6j+9x=H zNzhGK3fiURWX$eD?W@P+&&v=)*NhC@nARcI>E;+I_H2rtZe8;^GSk&Dl$fk3IG~^C zLLk#i>_$=n5F{z1{EtIU`W;p$25kEt?%A-gGQ|S znb-r{1tsgg=noV#Uft#=*7bB64p8vClTZwTmy(pj@B>9m5x=*BRZ1 z$F1l0-syD4Z`OymJ8T~Pp0uE!o`7HFZEn}Cb9!n9AU_ct-MFA5ijVsJqjMT5nL{3V zcO3w2$2NPEim%kdxv z*H(b%a1T3c3bs3I-nyTDX{i)U-R&Iwv--?uOAUYD`6K?Yf23iHu=Q2^kH(D7R@&u0O6b|9;6jtF}J#%XaEdFW3yx|~ywKJ8e7ffGd7 ze^e}>gX9@GXPGGZF@jupr@OTsR=6-8YWG*E!AI(ulY?pXUpF;*6-9Q!L&|J%t=GB< zC`$NOQn+LT`bi(?PsbG6gccM>0Wq}zGO6zPOCiwWj^!S?X&&1|aqMMk`$w>-W3EW2 z%vPKbA4j1=Pv7=bP^(UMxTnSB-&Oj4E)AE4kK=XSAc7-O-+k57EJW%^PZ^#T()2iR zqQ0Ba#PeR6WS`H!Mp+zZwo!bo&gd?}aCxYi<-$IP8ogGm8{y8J0J=e@*0g3~vtgTQ zGM%RuHLb2E$DjR8LP5FiXyc&gpl-ZVUe`BqlDJAKmo+n%Wc=!2eHTy<=k$TZkO6P=g| zzUvuRss#^0xZ;c-fXX!4pr$Q2apI2jPIOVXaS`vNdk$V*mof0{sO+tQ@x;hjwrVzF zU-^zIHrKU8d;WDV-AXi_m!zl)nNsE_^}76e8PZ4GViS`$cWZ=SO(HktChc=GF9PCL zKvkb2Z%(Tg&zE9Wo}>cprVk6!+%ECbIcpU~x|Ouo#$Zw!fysuFgu##xznseWs_h$J zlcDG4zf1knOT7}&{EgmjeQ6~A>x`e@_ak9YHtOHJB+|TjkgVd3;ff@e4xu9yOH0qq z&By*0j|47P*gI`267QQ5Im@8YFBTL=za6_3kY64!Yo?V_3Q@ka&f{e#k_m9txp0cAc>`pl^BYV;O!&zS>Nm` zjyzH%LxVX8E;+)%FB9wynsEAO8Eo-OPSgUcns0KJVu{xo*ciaEz3aTDG)+g@Sc072 zj>Te~vVA;cQh0ajA1DZb2;MtV!Vzwzl8fhR|0A%HO2lkC5l&bZBwFVsJRYFxHXITRo ztm$?`60?zK#+zI#gdcq2$0Ap8h4|gO=TR&mlPVv!OqPYi6uh_5)G%EBVX9yIJJGyM|(fm#5c5wg&mWB8>xA?!r57(2jwm_?*x z4UX52DRkyDi;z+&eql9tVBIAKQcD7yxdo)ilY_Jc_n`V>JObOPw>*4$Y;;$!OuoNw zd!exf`KE(($YvZ_mM4|ErzLlZZw7nr<(nOZxpqfUh5!c`D5IXBmS=q=AWwnj}3;E z`Hw$_MC4{YYWq#a*u1xU4<`&Xq|-Gju>cgElMlWxzHeRZ&&u#p&wem6wH$7=oa`jn zW@?|%bu}4-S}tF&O2xYEZgL0UczJGfy*R!AQY+3*T1F{nYL9o^XQ(Ezf234&q_wky zr8A{7mrkq;*RJbd?w$@R3ORLics>Bqz(e`nG%us~1^|pE#}lR*dov;NvZB6_y`)P%`aL}9FP>Fx zkact-d*0f)U5vApTDCv_z)9?Rxm!n>Bg^|>Y_4#i=4J9cR-g7#b$31~mdUfs3EbRV z^OlD5hCN)1$(ZX!uGXJ;3?xN%V^e25rj?(d8XKv2yZSA})VznQzkb7BFqR8Dw;)Z9 zQo9DSTj^HuYc^+>F~+kQHrRE8ax%dWvcmp=dJ~imQP=zq%1vtTCi)E2ih)y3bf1B& zy@ceoFG75sX@WPR?ub-zE75wq2E?_lY2F6vwokJy1>h}mXaKyn_A>$0qtsmlA91V; zY93mi>JS7|97>0b5}%(p@2cOAA#TXeb#P-|oi1zPys-(2Q_G zK`WAL=7?w|qs7#v+p%plRH(%*UPV(>=(;vi0 zW9}?zc+2xag%^NoOd`fLbK8w+bKxBkbrR+^IU;0uIx*e61hD{@m?pl$_Kvynj&Bx0 z=A?b8P$!S`;3D&ZI@rzscgSLxduNsQi$TkHpV3-Tegj^(q?@TlnpBZTOIu58p+KWK z@AeREecB!ZREY^L{{D5EXoCGK#266xlDT$gdRx zyc~~*5w}M!f?U4&T7~`*OW=3ykf;p;{6W4VEay;$kfc00q?j)F!^wN`WYe2aiTR40 zZiQn%Ac}~i%rq5cMU}F3vU5j8{YoH;Oy9xfP?XtBe8T${ut(@8LPCZN3P6O))00tN zgQTT!$xs0*NX0Kqq7}>*Y{EB$I=-aC=#sHHX@$4D>+HNIEzsxH9I1vZ%GNj6xnObb z53d}C@f2VawP*~AN9(%k?1}KaM=Q|*9L%qa-iz~CHujENZvG&1bKAgb-Dh(`0UlCz z+@rL?GL|#Z`n-!IKZtGG&%Wg#_wpqFKcRJ@YQfwIKubka z5o}}yo$!9vMZN>RAn<;2z8zcNNom&_MqSR2Fd1h6cabufb;)4n3)T7IF(*q%h{qV9HnFMj&2syNzuxD# z;@H7W!^`OM!F{t?d3STM7+DxdaE#phfY=55>f>cQei>$gA}1J;>}CO?^B&`@gs}Ux zp&}HPUc3UGGWL<2%^mo=k;%sPF0(^o;1|(j>z+Z9}-E4 zfXl|;O!|VZN$gaEk{QWmVtV&k8!6R=v!9x^T|5O^#Q6l~Q|7D$(^*J@g>Vk}fD!{h z6)Hy3Q&G^ z*2bI4u*BL~8YMPz9LTlrm$Q~1oiP0dTv*e2?JNsksgv`E+&c@el3Q4);m-2#O68k4 z6(~-0>G3g8_~qGb9A5tHJ0EbC4|6apfwZq2=P~RHjkVI1aYsj}vn%_N)2Eff{SeOC zQD4Z5p}nk^-@~k&%`!%b4pIFpZ9)KLaK|&Z6z%bAqkr1W!;t7h-!=t$%GuL3omJJU ztWl2~Jm4PMCqwd4M|GhuWo7OOv%l`wmAOYFR-kanbG~F?3PwF5aX-NHPiLLIo&F&3 zsYVeIYBqADIF$y;|07iJ4odl6BNVYSysvkJKt%}yG5VJd)6X!aCErK`Nc?Ck?Aj0D z6+&S%ZH(=S>o+07;QJPUi!c<&xF#x1@!_)CuoFm_sd+|jyf@17=)`7Ro-7k-SV8=1 zTe>{Ljwm&ys>ab@A<2pN-if0NM=)_m#Yb3*qQ#r!2qUF8>yi0#E`*C%L#nX}#*CsQ z$ZV9+;CZ9Xl!!cI2^s&qhVa+3qIf382!OCH_m)jTGld^h`XN;ge1SCkIRleFM*95g z05%$uOQ!{eJv6YxZ2sp@u|)3LxSv(>a~$3uOlU>tWMOLN>=inf1TiFgT=dG7BW}k7ZdNl$n;s()GQR z(JLud{|^z!izLQ?EvM$Rec?x9PIBKglRB0Iqcq0}uO=&b?Tz(qu}racZd zP@WKKH6FkD%+m9ei4*yGX^P28af-w)ns~`>nkPr2LR>m|J6xqZF85mb;QUJQ z*_086^Gb0r>B8PE`gQtZah?igrh5GWzP352edf#MYi?=|lnI+A8%$7@VX~OUN!x2a zI;MzCf`Pxo)}JS?C6%e#uKDY&)m7(ANDNpGrPPp6^sL;e5>%gmyiR5 zs;4o=IYR<{$$iW0=DcIwMyC;XtpPcbglS(r=^x-t?7aP-^{yVx1jFGz1Bag?8OzV) zq%(qe6$qbv7b~OsZumxKM)rAV?S{I?1ivOOf4L@k&+abMUQFm_^onjQEPi%|fgzoC zeWA*Pad)$O-DKX&~Zj)o}*#qa)rSlO4zaRLfqie8g zP6wNhXfqdsDzNK0c?Z9z4TT(YZK7Eo`jvj*9;r8BVx6KkG=scS-*-9IB$mLbeM8(m zfZZc*`r&xD7!lb3bfqXgp-X>WRkAf6=7)it>iEtVs>#{yPR6Ik`E}?1E^agkdZmsl zzlYm&1`)MmxHjFBa;NruX@f#@Vpbv3|2-i!jc})u7^^x4ezDp>E0Ymp1c@+rK=axM z_;KdV{v{!}ex^e=2bIb+o?GU%W&1QHc8}!EDr2fy$tH;5d6^9MolAf@=1O4jg=El&ZtR4PNaz*gUr3|9zwAr!#yA!s zB}TJ#$&`H%Bl;sy-eVbs>YIV45M;>Y5Vb?TvVRKydNo@tSoW`SU;V~vK}|YcS5Q;) ziFCRl2yo)&^Y;WJv3K_cDRApSGp&KsQ7@-AL$$!mjj9B>Joa771rxGCW;q?zPXghe zLo}=k&`IlgQjok)kcoXAv&}Fnf&FqPO|Vcl(z`pwn`Zpt)l>*{I&z!?oP!$qbWjke ztCY-c)c3biM7iLQD-QF{Jx4&#aA#OVvsAMfpcO6ky3~_~a@4(toB355Y65pRHEnh% z7CDAW`P{eWwfA(B{Jbd7EEnt3mX2eGhN(h|pz)L(Qu??lQhJ9p zV88qCh5#AlAVR-2h7-R%c6Y!QIP$Bssqc*X&^cMq*dal%5Q{}ut4p=@gU`C#-~>i% z#@SWj;3Uhr%EspTyBJGxyCJpH9%&f$0>#>_0+W`8G`EGfY+lnY^`c0wwN6Nff$tV6 zoMuZnnhEBdqmvj7JnLzo>rq!CfOXwui}sdW@^>OeLv5c*5(pFrzjgPd``42Z6=$mk zLVW3jAA+}Sf0KRm?Of2%e_>xCyWU7FyPiYQb=k4t+rz)R8Mrz{iPtoLNTXb&`MPD2 z!r1?PcvJLkktF%(Taoknl^FWIt*ch-Y~bECJ|?~J=jBb-6r|`2pvvleKAjrXe`jn> zSwM#jEv;UaYd#_uItx3bZbBC8vyJDhM$dU7D%>Gk^S!45<qY&X7uHzPJ*j_0i25a}?%}mSCDlImT*O zq?#e!1l4)YKvg4FWY`$5Na){R3Js@)GRwrfl*(6O;y!qL0G0xh6J}L&o|)Fo>V*Z} zRMqLS2BTNoru2x^MDG0}fff$^A}xvGT6tsR?W01pGsUK(@q*Fvhg3;VDR4&0PsgYP zPmwDAD2HJ&zdfWH?i(GaT~6F@>q$Mn)pxgBy1ul8@ zAGt>_at^9MtClDgS1w3{K5ER|R@d^f)aoolZ@ehJ zbGYZP<`IVce+&Vv{|R_t<>FxbkJke$+h0uouiwP~{42n#jo^QKQm}IU<4M8F`TzS{ z08;8dIR4)tivL#mr>_4C;yM0;_@%~wK)kC@{2dxK&!a4nD(jL*OTg9r9+cjkH^UUK#!*=&Y!wXx*@y$iU8_S^Q zyJ(JdGX*ev1sK_ScyaAu?Z@-Y5mTFVZzfm^;Pt4)Ag~x{*a7$tXr5;)w7d+Y>*_3&-9I_v5AD#gFF<%ZR%hQI2m$DHjnRqY~_H z3Voh4smj0R;xX3}i~|mgy~ZMHBW|6zpt%<+GdWW-_Xkpv>$@vrMOus_Nzo%b8mfxN zh2h2RrUv1ZEP(E)d*Q0a3;fb9T~(Go5NHWZlRX}B#ZV$hFpW?mktGM(5_WN3ie_pd z5w#Zu#B6U74NK;4&ko)Q@=w6(4-bwGpS)W;zZo86gq@G^p`Fyfm`M`kZ^q|Uh;!6J z(q#yQBkfMp9a^JTtW_?I&(7>k%U0Al%|f7%$1$Qj1ys~Iw=0!?Gn7aPfXXd1wJ*<` zS86YR)_xmNoAm_T`V*_h<7z{*>pv8#?He6)K|2iXsd46NA<^o-BOb_$sdbv@BJnnb z%Y(`xUdY#8S`FeW;E1xLf>rKHq!tzW0b3{1IJg(sh|ucx^O;-?B688Vh(Dsp}M46t$2lUa*L1Sq55%)TAv2x#f7LA*gHYzV$!z+@_@Z`qiU*{Pv{2>qtF>Jxyd z@$&zX_08dtJ>9x-Cbn(6V@#Y(Y)x$2>e%+gwrz7JnAo;$-F(0Ae&^hC&mY~jYgO&_ zJiB&xRjpd@de__IWoQYi2NB+{?6~Sznby8DtXY`)=85Au-heZaev_QyOh}J_N@5`e z`&E6)IcA&>})Sn&CV92uY&U^;U{|0zYS=@8~UrisuUNTf_-@GK!v#V+JJlTYE#y! z8|bqc0;Qu6>4B&N41N;Odjv4qk;r@7Ec$5XS~thuJHw>{fGzv8FlCw>+b{o6s1yJ&-? z4(TZd(pA|UnOWNFs`$NTiScBv*VVxrh-i)Vf2SmgRk8O@!wz$$f)%pWA(o-$$p#&G z%bxG6V(VSYu5~A^j|&d!<{7dYl8v}fzwIj;gsHGs`a{=wBUdoW)k}S26}l9-tXnpG z>$T{_J-OiS)R6VK!kDxo%PnS6%v;e3B_n?aS?@1R*ncA&Ng~+B&hm4r1;*84Ep>Sk zM-OHi;*+wZ4DzQ4vHQ#-}fuQ7o7|L)t`mh zXqlX(;R={0aRRGG4N?k~=eZUm26hI)B3(>1%3+-$ zV3Zh21GT6d8bM?x9g2RfBH%M*iB4(`B;}IU7!oV%>amo&Q&UmbQBob*a0}kNa3`RR z|9dsb%FJC#&&<_O;f>sf$TIvn;?3Px(Phppl!a{8Wcbm=0xXl%K!246A zc_5yT5C8ig_47+K`X$f8oo6KDWlJ>tNyX30*7LyI$Yx}mabhV6wMP5fO9$+P`QYSQ zz{>c0K;&6y3+11oCLDySKpdS0L{mT`BF7ZTB9L%XLC9l&(YCF5x|gA?SuWZ#wkl9I z!Y0d(;B3)1Ry!kNR(%i$rI0Oy@T_p6UA9^Q{DHg-)`+cRK8F+m{^q2X4Z2w5iy`9; z1D30!V{GZyuXr)FS;-g{uHRO)A%7|Mnz-fdS)O>sc;U64`d(~=N36Zm7*P6(+2Ay> zv4E)-FImqCE!Kj13*)*wX$ACyZ{z__0`i-hqDkJaCMkWvf`?c#=)XH7y9mV>2acTO z?OvE)Dx0nZ&H9;j1_Blr4uIJwM3<=wfKg=YM3C(ve_Zcz%~RctNM<}gPAo2HT}y2K zemT4$TPpPXxgM>T;@8B---eUM&+3?`;=svbKn_72lMUWYee*~kmKOoj#gH(|^cXTU zOsOnPpTJGIq~b~An3wl)h+fNP`@6v0gV%e-4Krb&S2|0~s|%4sr>C-yoJ`>;i(CNb zoaTUI?-|tYQ8YK6C?wjldbpx7eD*0F&^1y*bqdXHoA0_aj`v>Ul6Azh$kr5-83?~a zP@or!`?w2E5ozdQ7bI7?mNmH1q0FxHNo~c{@waodE?anBx%BaRBi{`u_j2x02HRTh zH*ljZ1F_X5PIW4mE!gC-`)D;t=zes>-no-Ez>VN-KJIjs$JU(}aPzxn-Sg-u69b7L z3wL4iWmIIOaB1NoJ2Xb`mEfxZ_+jHToDlyx@H96^*Od5PM#wWSQsO-BVD@zp=bbVR zo1Aur$z&C@T0T^iF@0Dh_#@m8fs58Lg$5 zcWdjex2kyS&N?qZ*n|8unHLInpRG$y;JOe2lMX+To54#}!$2CSU1;IEZZ^yms;Vk(__{F5Z#wtUze=tNVy23Xs=V1X4)E*GaOK?;2?Ho`J3f1ehMU|1lq%6}bRwKrcQU?i#go zQ_wmPd8z@h5>cRVv@!CHe`Deh0gqmMzbl`cu2x(JI~1liZV`wBg6QoBQ{oRp;fF#Y zB;i}0n+ZWcY;BJw1p+Vght4>_DFU??R*mJd=%G-I?wEc&;r3mzrR^T;3>aZ}jvW}C zMV=ptKj3Or$gOnnH@H#s$Eqe;j1g1uKCOSo1JvKJVAm>w;UWCf%hu!A<9=OwtUdi0 zEwlua5p!Zq*C=3>WD3Eq|Cw2~$e5$|zjrsu^t|F~km3o==&%j&Jl_XXM8>tq{SnLL}wvMkTL6!P( zm6V;uO52NWNImFeMg65a78o7lq92Aj$=&o6N-ZnUt~9sv#>%ZXB9dKyNKB<8%s=^S zBaS9edt=Fjt8qP+QUg{2TSlB1#i%1o( z|JerU^p4)npkcpMH(_fm@HuAL{7VBr3`7ZL!QVkc5S!CT%a6st7e6JE#|yeAFaXuV z2FA5Lfy617GpIJ~#%egqMK_gfaN2Cg8*kEo1f&>z2|$Et%%UEB=Az%xbdQPCcJ{F| zp+U`}_g$;^0IY#MiVFL{lnfhZpe4~*t-2iem#|&g>fvt|?0MdVQ=zu%0^thXmwl4u zs9LowaynP~utd1>^$MOJ{`#Ja(WxIs?prD-Wd2omw4NM?J?M%%npfQCjqB4?@9Vou z5$sGmU0{~$*Tl%D#;MtA81Y;S+=U*(f7Je<9g+^(Wy1YF)$$ttD-AOQjVKSFD+n2A z9pXQ>Jkf(s_SCOs2j3jJ?5rD)&1RcMto*IYjr8y(iuzKAKf$%{>r1Yf{6mL3p?r&j z;1+*l{y)>p#ynY>Mq7nMiFi}wQ8nSe7NgD%&$pG!t7^g@^0oRx)PA?wi}`cO9^5}R z5V+`M)|bPZRjiWo+qWcS-uwg>=sjSe)e|dn#7?G}wb2}LVoaueI?i@6^ck<5B`8En*sU%8xlOpKzY8%J?|AMX^5yG88h zI^FS@duUc4Z4I5S$T~=<0Di^(ug84%hhQ%z7oDh?SRD8SRlkmFp#I+``G4XN*tl5! z+a%}y$0P^*FE=~jf4bSf9P|GQZUC@;ndH8SiqiPBfd6)||CdYsA2t7)RTX$7TLeEmauB7{&NT4%ept8=<$B zi#t}D$PgJzlzeF!$y~H8AU*&K`4vp89zEa4Uj=sVTU@?2BN|*BKeztM+9=p4tKTf~ zHGH)_Loi>i5Ava(q>d3A8hD%&wJR8_Nw>ncJur|)N3q)fH86nxoK>&@nE!LG001QR zdSWE{s9}LBCnl>6asvK+Xdxg#{B{4o9`PT+|9n;!Vpdib4rb#23hDU5K*Xuj0@2m8 zKfUIm3uROwNGLO!Kv0k%z)|zXjliP;!kn(0x$c6qItUCt%j4C(%t4iijhRhMS9f+^y?*P4obG>%4j0o{M*AMA@~zBKCBwgeGcqSaK0fO>5P4Rl3aBthizDuV z)5a@bpijk{>spKI@R+*V!~sBb$jUl_AOY<`-tEV-Lb-VBM2jbaS`Lnu>ac`1#|c#M z)^^m^a@4NZ39o*|K+@|Ww~jjYxc`~s$=qMcX>X^HC1e?t;D8wNUFOGCp!}8QTTMxz zgsNFJ1x?Qxwv@RiFBA1@642?d2sMWBc}8YhQd(-(qlT`YOB7F*G!gbD9%FqXsu5H% zl8kJ);t2I>_2v1r{%28O%fj*r0b9_grvuzZ?Z-=S3FdnOOL|HVm&ptG_}$6o-1SqQ zZ<|*LIpy|)>-dfUlih$-ju%kb#bv%Q)enQ`8wU;Oq|Y{3SPA$*H_)NXf!l}Zj~6}k zprlfgeHnOYw=sZ-i`jBzuITzlcr5k9eH#;$QO5gX-xnzp|HGLCiyAEqyZj;KkYa9% zNF(u{;6k@$E*KE?mC}!u#-0s}(NVBVn-%;6ejJawyhNjjGowNs)7;_V3PHZxj&<_a zqeWBEq(#fZJOjR75RhoX!)2|a$OL=p&eymmyVBcnDmTcT&p1poktgnyyHKU4)91I! zTFIlI-uH#eZ3B^LiojXu2V7>MmZzd}*tH6*x;uloO4Tf452n!abWiv1Z`4*bHp*1q zFixfcoaus*x~1R8DQU^Wzz$LTg(lsh0E#6@QQ$4i9|#!9$v_Oe1ywbDZN;{W-x2%R zOnMIct0r`6^vd2BNci6`kRaYhVmY4mEbXwmF+Uo7;D&#$IPl4t+hOtNHiEX0Z$a)L zBT4X(AVn25o{ty}Pp)eydTa^$-WMJWsL?f$aV0O;7p?h~EOz5-L)q5u`{AXV`M;_A z&7hc+ml_csNdTQYZ(!cO1+c1uWFPvQv5Qi|O(pKCv{`UFjQJ!&YLi+Izrkob`i$5X z^|%8aMt-d`zvBO04TMNo3|iq94t4h;Q=n1Q5due+3fylKT^SLjn7n3-kfP@^w%05msp@K6Hl98IK7l0sAH*MVJLZnxnD1z9E(6ca^g35jrW z2*6UJ2Tp=)OMnNFW*cs6_q>N9JGSwq^gDF+m~@ar#Gmj}f&w|pw)#h7)%o~=#Bw=- z*GzlOr$_cFgZW>lvg-KJ*ql7o)M`38w3$D93GJx*+4gD+oO*D@ zYRm2!{o8#wWlzuX;15(-r65%ibfs!+WBCcy$T1<|2>TJ#mNgVox1opkR|$35FTA5o zUqExB6O}q-tfH$an@N>>=&z5(8n9pKXWYN#1pc+%#N-*~N)P}Kv1i_i*c zT-D+CH;%XDFoK)flEayM+BAq_Q~`qHHJ?@aN^Fx29xLdbz|X{4tCTL=hF!?p8UrZ2 zi44mU8TMt%68YyE&4#qh%uH?HA*lonBa`?7=PC*pl&=80OJZug-^(N&E{dS8G zEme~8z`Qm4^fH~mk^Y&<=m3J6z*cv^VMqr;dP+<_-~J8zyt6Ti*u%0(=SsAX86L04 zAebJ=$r?9Z6*;Aagz?DOf;`bgZCB`cec;qbozX#6jtVF(mYS^XOI7j+^sg+TKWZW# z6L;!q+>6a!ra*w#0(~xKHGN~XpsXU*+r3r(Hg+CZxfer3ps!#Q{qN*d2`{jQ$y~Z$ z9g~_o#*%XN%rD=vV@ilDxHwGdeGPj3icE_>UOa;n6_#g~p^5zIRi^1x3WxQcje#S= z1y|`;goF~bt4dcFxTC`g^ATpEm&5m%6_|A}4)%QDs#dBU-T1qXK3-mJx_TQMb$4YY zDX!XHmNdiCIZDZPzKTx@T=#F0*ga2tg#J#tYn|tTM*XY?%g`gt0uP|JLscUJAiq}p zONiWKKw`+Jg*pIDD%-bvuuN?RqQKPhIEX|Hc>$~RFiw6ZZ$;%1UYX8$pRkr4npxfD z+sPNl0nu5?+dJHxoEF*cMr)X1v7rdSq|)P=SycmzTo|4^`D~~k0oTo;g_g&9j&yfv}1F1M<(yTUEU6Sef)M5ucRHHKTdPfOA^6`028=%E8m-N$9 zZ-$+kDuEJ}H6fsNqy4}$WoMWD#f^?GPP@Qgij$q^qS>mEhon`EaYnEKmBfWnbm*O2 zcjuTWvs|H2?c#H`r~%mCsK@2@z_gjIx}dvRnkJ;X*i6Hrn6C2?KU4;f!A%q~Bq&u&_Yy zTVTo~!0c!|+aNycA77B3;~xudM5R7qTUD-5na1mhK3wI*h-}h=bC+K~o^t-8gl{Pa zK^BGM6?g`SnLXkaH&|9RGgs-M9O8iTc2;!2F_urUhfGe}v&x4^07_O53u&Y66}G~o z*gOSe`1%_79Wk<{7sH%#ZXI%NrA37A|6W@RA-^Be-3%r2@Zq8%F?#e9@M*Rk;&)g} zNwvRpH{9NhD>IE_g((V)&qB{BC-x?>-APC`EEHK!VHPUiId+hb!FkRuo?^&9xclt4^u?IJM)>9Oj-u4X26`itsW`3XBZ*Yv6Nx`p+0t1o+ig5F>ujj=W3 z<6w2EzCITBKw7P!=IjrCKW@|6MvK*!d6^8g2AkJL3*wBZW}E;^X38*L)%Z$D6JHAN zfkGH3Miw%8CZq-W?*%6~XC+IsEa)vTaD55Eaag82M`n>;_KIw>O&eu4dcHt>O_aPsp`#d*^-`$*&WbZ*#9|>oezb8%oQvPSAfU+>hvO||M8B?L zep@`DrKJ-7_G_cMnvmV%W-az$U`oP?N*=c<2Z-Y|x7)w8&+R$B@7nPp!qwyGQUm?+ zNm^jHnSR{!%g_gqVdzAmX6Hg6_RKuv#Y5#old>aIHGH&)DoJ1=*KUgMncCj_TUd{$|>1&uq z_OC+rFU&W@?Epk2bL6313ee%BBW4fvAbXo#>+@-7;=S>?V_#xL{6eKvObcHmuDeh; zBR5FhrOKTPzy7NHrh@BDhFh=Y_IVE! z%I<;%1xj@U&5_kAoxx4PgTPQ<&nxo0nt}U&vZmQG`Zm=IdQRRK?BBMt?=y^v>VV2-6WR~_3 z#)mC0BIN5W^ubsg0O-OH^5@F60xx>80zV17qkkayLRncqITc51%DjK;8W`ro?;NDx z@K2j`5~dIuZ@wZ632vP@XDX$`STuqz^>47z0fM|9@ z5Ey(fL*7=d*LptO;-m`P6qG;VD!`=`i*N5y`SE2^4*+Oy9r)m<25j7yfR{ndiNdR| zwFHr>+QG0ZpFB$WF}F%1ssgfAk}Q}QQRo$o#xw?!r$eVfC4WFvlT!E@_+nyR=q(3Y zZ4^W8g_AMfB((E?HW!Mvpz*x6efKnja{KY_jG=IjGA+ODqJ3?8MRH(nPwsU8qA{Zq z=?cws0YxLJ&X3ps*RrlC0T@O_D0?`V1;nKi?<9S1fQ)3(?c8ekPEQ^{{{~LzaikNq z$xn`tu>pMio9Cul^t4aVPq97ohu5_;if9<=()~Gkwg;S*0x#8ZFqnk+^W)dV)=d^}zlSRejLknop?HH0qbnSfV`v!4)47|sc)LNny4t1Qj^#6LV!aE;IkdQYTv}>HN7_L^}QD4J#Zev?RVXpP%`aLa-ZoFoC0|QfZZ?qcTn&OEbUN0~8oIcJ9`yS&Y?fSg<~u zigv2pyc^cO9A9BjO}suDS&vDkYo^cSY{~Q7Xh+CE?0%D44G0j1C$R6k0CL@peeE}t zS-E^p)wbb^H`Bu@qh!$*D_QZPDTUNI^og@MAD5<|og7wrXNH8TFJ-2FvRM|VG6ncJ zeeO9tsQZ3w02fp%2oPfVW7tCE?&eGmcitRs4==o*7ws;+O>}=62&v9D^8odm?OkSX zEe&hf|9*1Lq!AK!ol=Rzkbngj0vHldy3Je_0L=lUY~FgBW!-ma1$Bp|CqE`{Be59t z9CTZ|y@#rEc6$P$Bc?&dd^xJ1cGE4sgDVU-UdYRa0ri??o}5(G4sI~?-Yw=WEgrvp zaU^4{&+00y^gdcB`TqVXf=sHpArT@4y3FTWe1x^e;k@+MfMBX>2#*sMSY6h%puV`k z(QVoik2ba#6%uZmFgLtfuSroh3(Sz?!u{(kJ>xTzL*CYk^ABZl5I2Z0wq2FF#R>yZsF zcD-7;*+Ny7Qh9!l27*OM?8WRSi0d8M?ZN5_V0SnQL%=`bNq?u-C;dZ#Iu@a{a;dS) z)N`t)Tj4&+>nNJUZz(up?&RcQy~(8u{aeppC!pv>;qUE%*KR6o&+pmlI?22NnPNuQ zsse7_TCz1%AEEf&Ztury)GC8#5d18CB{N8s;SMmd#B+2dXud|SN>cIPgMTB%>&!=Z z()Eb5VNe|9I#S;-lT91!Qvj6bp$Uv1^6AEDN7u-m2?eJ54#nrW8`YEj5c{o)Z&=d{ zB!OZc<8zbI%s?caS2_UHfvtbrpRM^x@2L834EMAuWildOhH_v;Pbw?^Be>4m&tN>& zD`9WUZY1#(2hwqH=8}9VC;|~5N3!ncARfqkcoQ-7lp`~`YyNs$iT8iFArrJGSXbA-zoFuQLECcdY2z5ASzfUDJTC-hECor zXH|tPe=b)pXPT=!=~0$f`qcJeFV-7B!qyp&N=r%WVv#U3GLjfPF)A6HjPc=lmP|w zuJwxQ!0z=?i|SB^3kvIC*Qe&BjMxo9)x&l*(4ikNNBIAe!D@y;zjOjhwQwIr$;20b z>~55f9B~#p;48&^5ZDh&eT^B{K2UBLn_?$%CQYdBX=+9T^byjcQZ!s90-%-${fpG1 zQXD2q8h0cg{Q$>e4LsU#BXt<5Fk0!Y3vdyRE3T6~+@-j4Bs;@}I27ZHg+YvTldrZX zf_UWy4%=(%hFmXPw57l?_jg-?g-ZpRjVlSs32YRJiRft{K${x;;v^350BF`P8JKzX zhr}o>B}e!AYHT3g)V-xo=7FPC0CUF@N^YXp3aZj!z?w7^a>1K3hCINuw_R!uf~}Hy zQMl~dIXKvI5EO&6)5}1P;IB(BAL4?SUq`S2xU<&Qb@L1UJp!n0oC|X*zqdQ0`r_|> zUa$|p*p^mSuB_GcF^f#ONuZ?ZGdJ1gq0dAoLt>Y~v5|4v^2}NKw!@;+b4o}CJ^h}U z25knHRp5}$)GK#n>>1h1=A4)qn(AMqmZ2faNIb?HAsi&jApenB zcQ0vMGdYT;W+LmoJj`*ZjKjEw3#pAmH}^GdS5rA%KpA6D`>sjJ98fd|sxU0^d4=DW zSrLRjrgRg0t4Wa>&esMt+B7#F#)|*y7+n4)DLeLs5AEot7K$ALY(r5~lY@9=E$R3X z@LbuszFTp~w$8`L7!fBJgTgImHx6|ZHAocCtM&}Kt)QXpu`Nb`>sdc$9QK10k5}tpnbicGG5RjA zmJ>d9o4Qh0 zWDe9ysWfrR`Dcdow}9=TCF$_61oRW``UUat?<$ORm35LYbpW_ZIoTRc zh(p5PU=F!WZNfq%x`H@XKE2V?v{1hBBihaL=344-hfDS zA-@*Vwi3cNjVP|ZkBD7;GP!n$)JkxVC+5UDFQK84Lt-S|9HA~%!**L9={z8F&kO4v zeld3STFlRtbVidQLHw6uO8dN)VWL`DOW0cY#JP%i2Ko;<+>-9U1d2+A%0Gjq$O_~x zaxqs>fCP=ET*nxAGo#`Z6d#Tf8U+I7H4&M6xR!a-WW&|t1rI-r^6xw9=voGkOS zmXBVNY+nqdBrmJ!G~6lOR+GZ0(VU7KrGaGyz~_tbxTYV!!MWwqx62CfBCpLcn;L%p zHfDN@SpOqTM@yuIa_pvP`i!`0Qw;bEJ2freLrx}7c5LcEy4ZeU*%Ivv#(D2m*wx-Z zi)YX#Nwi^6{bDhn74M=fb1EnFu$4kkb~a@7Y3nrws6+HI;;%&`VX6@SyiODPl1s3*H4$ zD}s8bfZMSe@r{}ks}X08&y2&LNaV|t=*YLq1?`xU&6pMu4ot(M z7C|m>r7?pIX#N#y5i|%*I*pivKzUV_k6O%pXuyn@P|!sG#-j8_@;;05%waV} zGW#|Hsx>+q|1MTK=b(L?KR=oz2*({T2cWu{iq5S_k`t?KUprS<{OP>X0XnphKU7}n zQlWOZv<#%UjgY3KD%xTDgf;zKLleu_#Tz;#g}Mt>2oK#6l>hdt@o&j?_C@lf9G~JV zU;nbO7f?JbbuF^LQB>O^&)nbs*3D=l!;ShOBr7lV!7E-GjsTk6SoqE=;UM9)q2nxM z|27BDr`P2aTr>3|PNeYN2ROH>Yr(Xii%IFus+@l+a??$3jb;dXy*4pFbh>>+HYc7} zT>?7@b&ry;T3V$^p1qBdO<$#cgR>Y5JaMj>ssu_M3R%y2D5&qpbho)b1Ip1GP$4XD>sx~HeH<}!NUlz zx?#t1)jRrR@{;XTazE}n^P$uk!z7&V7mYur&!SV&)h5sSAEzSwZm}G?^~%?cH|HN~ zIgye(C9ds*`A4%w7xJ9GX|og$m<#))^iQ(_CWaPK>tUw8Ps)@JRNlV_UAawQFI|A6 zUsbzoR)_CPG-$5`K)GM7m*+|0MI5CNBNM7nx0-P7i7iWW^ z(OlPU^KAoNTzN2Sf?`4KN;5(OXT+U$|&&II@PUhJ9 zFxDz-+x4WHU0{w=YbT+eUyFll&d893w|B!G1@kZHcT%0iC$V-(4tl%;-LY5tOlqy8 zRrj;npC7fHzIK<*JvSpR+h9atm_4aEDnPZwl;kqx&sa1^Z z2Ok>?=Yp07CVR9HRi+BdCa_|MEptU~Ue@u@_r^APRLU}L5Y$41@wtYgWdgz!3gNgC zM+nV9Z%g2d6Q0~_ri`rWZ<3-WKqI(M(!u!R{iC(wfS|U`JQ>!a378VOeY5Bw2HJ?> zDBD|TvM|OOZ_GKRiG6ME`Rvl*gPU+l=6#BO1}uCZtV(bUHGtu~1Hp+NLM z>He8Tz{%NhWrRWMe6XN^-g6i~ytf^l9Sl1zutBrTp1vLDdY4XPc4YASLDZs>5d??r zU2Q_5&8ijc-1$GN487FK=(I0oe`a8p!T#7Fb_7DC58?Rz4FpAQTC!Ggnsz1^Vi1U{ z7_+#p3yP0^q|E7N&%cycffAhKED1{5&#LyxpY$@O z9tacOZtuL>O4%Zd%0*8r9gN1_nXLX!NHu18!m&dRcSt@D?kJXh)TDvOaG#64m$y2Q zpzv-hgfRpQiy1b`doEgP$e?cgH{%N{F{)j}V#%EqPREH$>k_;o%qV6QaGC^PEoH{Y zp_0a(W-xa&k;pBAQZg-nKzVc*jFaiA1Z-2ZVy%NBE1{!fnzz`_meW(vQY@W~J-ji< z+R#6caxvjyLuSW2QVLI!vmzb*-8dXz*gCg&D&=x8hGQK+SqYs^oEblBzmHp>sji?{ z&f>U_G3*%l0}cS|U#VNd#0rLG^9wTxL>MyUW=wqj$6)rvp|D3(MT5IW{DoQdjOe*F;Rr1Iq`qE@fD*D^d!6+$e zHQNx~9PpIJCwx$9%FH5|ix>QcB961f74&&OI4i-{pvXY#p4dmPJZbK94>K#u@%wmP zaSDglbHW^HrL6QRTx<%FU?7OPeE2FK=)!Kr)SgBPX>~`4T+6FG;ROPsp&0()It-%W z09ROt2>#$kSYRQkT~X4T|A{NS~c>?E^Pmzz$}!C!hjMz6!(U{BKC%Mv0rW5fAL^)Pha_b`uJIska;@f9jf zO+4{BHI;@s6M=u8fww}P(f=E(^PdJaTBw1vV4(~eD(W^SK{FON||3I=q7yZ-G*EL<{!0JKAa7`G z;oxGDxao&O%fimc!OG6eOw7Q>&dkWn&B^gKHY^9)o+#FnAxmr0m8M!!Fn7I=V z)f_q5{|zepZ^+a?g8v^f#lpq>^@9EjGR4mJ#exgu^|8iV^tqIjlF3FJi9xTBJ=yzF zPqv&#^E07HH0C>Xc!IfNp{SBl=3I>Yo+4lP-n5&XV38vVhiw!6Jxt}%AS}fGXT&og~2OfK+ny9X6^L3q?1l zu_FgaO^PC1O-4j)E1Z8FGg$r3`~ohy4FeA*9V1*@~Fp5z`LFxVA~h^SUKBy{ZL4n zi3H(iM$3iu#!BWx94GvvjosVbj`GGt&j(SLFV24nH&hG54FJmr-D2jT7s<4%PbFx>w7a z$$3(v%b!WRvz~j7W5Lb3MCg;|GcKU>Rv*(u8Rt4geKhjUvw{y<8@RDk3&-8v!yPP4 z*M(Zy9|SxdVJZ3RHT5YSy~Fszi)=Lc$-_$x?F60_sXp(EJG5&U`K;4htc}x`O5kD4 zPgDY5nxano?eLdjxGBP(4vC1E@7)bPSS>3KwL_u3n6i6}S1?EGUS>>YS_i;>Jtd#n z<_$UKUi$Glmf6C}#JyE!5;luj2s9Zw;6GOrlxL!8+t-R*QYk3VV_=I7^N z&~0WLPS@9{d-ki7Wi{*9zu~4~S~|M#&K~56w0MrVJwEzxt5(x(;XBP<*^ns?n{9fk zmR)W-osV`}dUs+tJJ*Od)R>;|yz9-%Y>q>>Qa;`9-KM}tZ|s-x?p z@v@{+&(if>j&dCn(iSVVjzKYXAY z3r1q6QYa}`qA4t<5>BP%MM*m@BVw#d9EpPC*5?VMEz%2rXT25%e7FH`_GaOB&pUV@ zC$!z$vQg<=`C}< z9c5(&ygYp`+^v+dralf|333H9p$3$e&b7gHb-dfIRb+J1^U zwP9Yt*`84H9`J8JGBwGJn-U6q_Iec^W+&s43sa;59Pf}WzF+G{Owf+)ZcdC#Ww$S; z=;lmGyFE_wd6d@<++PJt=qf$9N{ti~y*5{0-rBZzUw2pg%rsMeO4}&VQI&jObWHtx ze-8Ze6Dw|vB`e|vi}?k;Nygnatg#x{b+;s zY^NA_yEqiMzY{j*bmzNAl?+}!;)h>2qcPj{EitVDb`I|CW!siZD%p*+6-ji)6~6LZ z0##HmxjLLD+uJYe;Co)Sl}<|&09Yd<&6JI6uamJ7q6Y#k8S5L)-ysZX-`|37s}Ei4 zSM7XqrL{ffy6G=3c~H5U?2mHEhfs4YZFiSD-+V@MfkC((7_Hv7wuJ}=+*MLnms58B(Qb^fWd4Ik5u+1FvLwa43AwR+#~cbV0jK+g47 z=?(qLw;k`!&}rfOec9gY14dzjw(DQ})%%Q>28AlmP4l-t2@h*x=_j_7WZ5|hXji(< z>muSOxMMJj5`v~nZY>E;3mZ3f{NJgla&;tuz3&AZ>Y#_Ge>S0cTH?r`;XQObTjnSk zdQVM`Hw*Pz1FB23KlcTWd}rRVMm^}-@JPoO%=Z_oX7X-6W|c}bq>U5r+BG`D)U`0J zI4$g5!kVBLZVh!LZ0&utDo@8IsxQOuU5qPM85S}|T_1xqHr;Q{RzGDbITJ6y^)OF? z492rv&6z*LA2%LBB*vWhtNxeO*h}u%rA1PExla+)VKFOT&&L})fl7uWsuBy?zh8>BtvmK!YbF;weAQX8e;EZ9{#cqX5q6Sr}18z3gIHXXc^MhPN}y!W@HtPng7 zyP+TjQV$#m8@RKopOIe;s2k2@Umr^@2BwP(hf)2*9^*orn;lk$rty2ZMOr(M^w66= zN&ZEXIKzYm(WExbkoqMc;bvB~lpmj+glX@f@s0j8mCcG6k=E%(C7y!K(N~Qnt&&b= zqCwb!vVu}m>d%-ZA$f%wOAIV-tqsY@KA*N|uwe-Z6d_T*;I@jQCR}P&P)+VoHS7g? z`xpo{g6t;D!W(Z5|bm4zX`|w#cLssAzHhVm__W{s$)?T-_jZc z7AibBT7Pb=b1xl*IXwu%_btn-Y7uj4N%;}t8*m*+d&yw{oDTs34RO1|9iEn=JgtRn zj_R8Sq%D%Fq&{>O!BfR-9&9}}qAB>TrT^5>HJ5(N|BaH`Jqt*Vij%1*G#)tfQa&yFYI$z6D0{40Xhu~;F{aJevuC9bdB81~Pe zeT@>?Pv|aMS_X?qa}m8@w_mDf`% zo1c>j%?dH*X#0-&lhdU^52H3=fmsL^l_wr~c}jgO!9CnaMBPr(rW|?@ms(w5c)`jY-?#lSyS@7Y-Puk|MPS4n2!*(+U;m#YSy+A)m1v?Hbyf z!B#^VxFNrz_VT{@!kO*@D!GTKe~D^gMq|GnG{&NYG~(#qRw(+#f-uD3kw22e5-UUo z8Y^lztr*qfg*@i^?P7!1vcW8R^UJtnSzbqisDU|!?mB4F|3Is~w698`4Z^n>8{VRY zx|0|Lu7mtVB;jZ5L3$0)Sz>xBk@WA(cYoa48*0mFgh1e z#C~&zA`Dd{yOtc+@6lmvf+R$!8bZt8N$Q&<(M$X(Ti8?PDYdX>f>?0s^Ge9 z7>{Z)L3EY8emss-av+PjVPzmI)mm^DB^F7W)BQJsf^USSwg0EBvkZu`Y5P7PB}g|& zNSC;A(5Vd$wy9u9Nbp$=4?B7bwn3Q(%7(uDrfalL<vsrr1=>JdzY>I3`f#zY zdpkO_Y%CIHKAx*$Hom$~B~tGFers8e15u=&Z<#)P%KEh`zY}v)M@|y+oB!mC{licG z9Ikdf&yByVxUjXINKhBeN<+1jh?=l0*yxpWD_E*6yfT>je9Xt1R_{xuW~hQX6L!Vw zY^dsLzWE%%uXY7P4Ys^-SH=a4TN0GD2DeA}?FOS1RcsX@`%55g)3RN;i-$cqB3A~> z9@q_7J5Q78c!^g#k0)z(^|331u50DCm7D#poLi=McYP|Gs!NG0lwq$*NgIA+Tklfe zx?;-n>p}dbpMyL8Y25)n!_3r&#i=M;ph4adBv}&z%M>!tBQ+~)O|=y<&pTabAu!-H zcgb?E+DQ!SI7kdLsAVB&4`w0o9WGQLvypfe||s-^6=Z?53STEwmGx+z{|wOMk?#~C1T54#7kuAP;Den?hDDP@QYjUSIgg@+a)k?5I+hR_1 zeneE>)2zQ05g*iY(!yc|swb<v z4KdRS%t>&e@|+8Rx&qcmB59NHeHrn*<_W_ITD9v19!hw45PkV{1^{%JBT+&dqa}%z zk%&G)O^nkWp8HN8RX1e)5ie71A7OGqK^j?wRS*EI3D|tHhV1*#4Juu*cF_&f< zKuTtWf^4}O7}%v7(zO!Hap-MaOk*l% z_IB4y%Gp9mHqGzdQSxjJuAP2vL6UNbK2CnjBywzmWgQ9%&&ND;6lOFrLtr=7+xp>l zH7DAxmVwB~j4zX9k`Sy<0qk*Q7t`msB>cnHEo$oa797Nhbx$I1lT>CrUC(J>VdfM~ z*L{8jRUA#j_4$a9=fWD2rdPQ2nDvN8o0IJ*5h%yZa1 zWGF15pbG(u(bARxm#^U|HV^KLY=c)ek}2wy(Uq`=IB`e^py^q&(eZ@}%`PEjoLpKK z7epS6qsQlXgKEEFy%fawXe?N=V}veppolT%{eojAq#>PZ47ip&dd#xfX1 z(urv5i{h=sNV}RyI|NAvBXa^OcO|zX2xm4vl0cps;pn83P!+juk|j?|lz^;-j-e2Z zwp~|HMnNz~WuUTa?Lq%l)gks6(;N)V_@5EZ=a=3@d8M`A^GndgWQVlzZv?W-{3A*Rvj zN21Jo(IlZ`DZG8e2@)owi0OYLYKA)~1$`NpOX~DE8b$0e4L2^O2r(vB4831KVt^vG z;wPjx-PNLY(*pqzLXBun7cY%-w(W z3J{AfNmnj{UW$C(D<%(8F{gQo9(6TuY|IWAnW;{70?1PiJWZr~f=1U3p*c1?JAE&V@M91jZWsev}~XqYRbW><*KK2R2U+iBXC{jzeL_4LC(id@>Ug(2}7-% znTp-_MwmD>WOJELyqY<5_>PRS2R#MZ*JV#KxNTY5&(YltfpCBr0~_^`2@UCUCd&m#7vWSuWNUpdW^Ll zB23e=L0=>1Xd@PgVFgpmJJ8tbD<~jOIdDSWx zupXy3s1iv|R$GyoQGuhUvN8*A;3G#g%X9#k+=)ZU`Q!E+Q9eRZVoS~|k~=6u*|*v! z465I(6~`XWO!&#xjyVu1fFeGrr^)iXo*iTEi#`h1D~h_u>6528$nZ7nu`ms>3*rI#m)C!R>j5VTOH%Vf^j*ts{nE zT9+uv6KoUpJ`4?K@NXATx%UTpGaTLC*pizz_3|2Z^2gze47v;)!n}rGlfrg+Jo=s! zw3j|7AbL*FdYcqhX_q>`Q>Rd8G5m?+gLz(9*Yx}ZGl>AeMP~)iox3ysBy@2FuN7Ws zc}O4Ew9x6+3Ycn7Ql1%C$R)aLiO<>j%`8P$N%=m2Jw68gKpD3l++_}+Phvn#MFJ!XpoR!qOYw6 zip}tVwzm^+{x5(5CkMX+mhtd{Iscx*NBfVVAawjPU>&dXqO|JwwNgkHl~{lXtoLB?DPV=^5@;pA!oI9`KQhC5z_n01q-_Mg;Zv1FPlJ@_I$9ue*l}}m zmwak;@^G&qO8Sf&dj-BBf!-`g^uA2MQwSaC+2bkg=tTp|{krGa{nH394OW!H{PR(# zix*znPyCS?WE0b#Z(AY(N9s;OOr&w34sGyGHg1~4#&wC)2$S3Wt1rY&{wS5Lv_1WN zrJ_9Ose4^KQ5blfs<$v{r zCORw_T$mCu@ucG*Nd>bTP3?J9m36t3ra-^}ZE+V0g;Xs;LbZadk=!r-m^u)chR97Y7| zqxP}avz?E}GIXN8R(vqm*59zp(Bp5lGGYEX<;m-iA^85_9GbXnqHo!Rrzja<%CfJP zXr!*Ej)I@cw38|)+Q!lsK2l#A+%j}d_0*|cCzIc2IGVEYsbYnptBP)m-<29mwco+y z&du8_&bUWCFWFY1Dpc{xUqv7$Gjl!yRNm7|f$doXsO^URjRdjJx;#-?5$(<+NRd(M zdFm|?K13pEQ$j^WF)*wH}{`diANt8VKw4b$SL8InS3yJH;u7pq9~gy~c9NHcl(G zib|cGiFB;)X(Y~>D_cxLIDJW=Pu(NtJ@>g%vt-U=IS6|8T)|J~ zY25GoV;zc=fg{3{7Pz$zLz7C#rTDVDnkJ$-5!&9Q$a9%mjpmGd1fWW`xtD`KAQ-*scJxXVr{_h@z3%{8cZ%m zpOIoqil{fV%&)q%VhE9&AM8G#v7mjc!O=W!`mqo7&py%=x(Oh0Lh(#{LdQTJF>-rJ zn2`ROqD2||C21#?aqav5p@3WS<=q(zVh0-)Vhi66=bE-*ZU@u*4Dc+4);xf2y1_&7 zA|$}*$0rr(CnA2Qn)Sf&Z$<0hM_0rh$y=Hmf7m1I%zpORLheP_??lH{F$kA*C7Q4K z*fLlS9R?Dm)`%Nc_4H;^2TxF&3VXN>Ja0VaOVgdH$3H&fRsJkJiz(FMUZ!1f7dG&k zw!`jfl0nVyiYqetIh3kv;09IMzuIwJcfxf)QRn{R#P_4O8XiY^rf_ZjPR{D~_hY~L zg||W{nF2x%Z^aSX;2W?XXf>r~)*$^X(}MBdQ1s-XCJ*tK*I9ly>5lD}j3+l)iSxK8 zSd1~>FU^+MJh{n^v0AIrz?hx)6zrQ_N1e@fT2Z$yuCiy}zf!+$dMyyVQ7=~qHU7y! zBSOUm>S2Fex?NT#4;vy6YS_vK*) z6iN|o>bF$U^fT)EZEFFQk*}Iup;KRl0L(J>;pz8DE%nATwIoS#K}tF zp=3lU+V>$nx93gA->Hq4=l!Z|`?!{lT-KqM+B1gjN}Z;G45S}N2F|svs>EMV#9aAx zt~H-rqay^@ zoBeUUmR(C*PI$Dkj zhpyCzFNsi+V=Fb$-YJo_K&f=x82Wu4O*sic+R=(NqXyw;`;BK_%7{xY6dBonKNv_M z!}xHy;U37wwl{j96UgLQ)w|RA~SL+EvX`7rT|3@w1k^3I%rC(KD&Ad4?dmXF{< z$k;FVXqW)4$=v>Z>X4>A2d8$byXH^SD=G!cs=Maf!_yWmN?|)ciTigZ^vV3t?t^y| zrIl+NBBsH~bbZN@je#!=!ZCCh)!K{dKIsR4SzbuBq@J+vuJsTJJ`-=l^GrC^YGz?x8F2?wVpr0FB!Abl(bU_pz2Tzuk9-;5@7y z7E-iX;`@VDIA>QqOVOK=NAV7x|I)T)8J(<-B6UG1G6KS!oT%ZdV^g$+V2A)g-aapM zU-31JsA@J{Ua40g2M$j}qZQv*%4t};~t0mMgYl&Ko zt>$7=y$CD{p^EekF3LW^3(hKXh7tXY_Z(_90*9YXXg_iEhb|2;K^q);y_RMPs2y*F zr$wu%-g|x)FcR{)&}>6=d;H&Nd zKQ6C*&hffa?U?!9kMUatNjGB=fdb(NHnmvJ%00u_1{6+@VGHjF!LWt(f+?qziW}Tn zGOxE5N0DvwAd=TX?a*`oHdN{AAKQ-=E;{Y{3wIM{&W*&%wsO)4*pt-po?1$y-GJPN z(|5$rEu?(m;+xihtDO-X6C(Lf^$UB-L=q%yDd%oVE3cW1ris9E;m&62Heaq`U9;(p zc0I`_eolSiMq8=p&VmG;+Kr}?;<(|3lQqQ4f}J08sva8CUqUIeP?gMMtxtlAO;Z`O znR@&r0fSs^qT_3qF%`8O1MkmOy~j3s5zlZ6OQ^>(G*6#O6`@|PkboAaAdJyKnSul{cr2t?jxDs8$)3 z_`qy)hK8H_W4RG-_kHJj!beoL-3?LeC~GD%JHT&RThP43`^(&3{=E{UOxJyL@gF4O zzHcW;S`gG+A7#vbzE({YTg}@E$<^yl+#iGi#x9YGa$Mfl#Yf4@ji}ct;3S!&u3HAE zDL8pCRh4`+wX1-*9^Y+G_C+MioOZ@MTC*)4_}Ou@vxZ|oGqaJ_dQx0EDH1Te2iB`h zVd~^g`~-ckeGOl8KR;?Ya1G89crd?1wG(VOxz3+>U!fbFhTUROGh!#x9|FT2XX72Z zi+$WVp00##VJ@0qxP#ZGIpo8X$-c&Eb9yzE#zd89}fpd}H`O0?{Xe=_qS8DW; z=>_dr(4H%Io28fXDlkLs`kJt0yo;?Okh^!}N}yd5dGprh9SOr#%a%P-$* z+3{9j%Q1355vVY%$T4MB$g4oTcX0mH`{>;C>HDkVw9G12_!4Cy3eNp<+VlR9G+!Qu zb_jX*@zxo9sXEni z7esun>k`AC70jV?-oOu{>y1|qqyvd2u7_j@P?%{17-!_6hh>V=;;SI*7|#ageO$$$ zqrm8mp!H1CiZ=>_ar9&f|2%m2ew)2%wxHQ3P@Nj4i{qR3F>UBsS5{SjHKNp!i4mGy zHwJY%5g$+7DQ=S#VX?%9<<1n3HGdHzQc)MXTZoYCoPh#w8!A(ot5R#k=;hdxBo z7uCu@Mo#XrYAB?b?yy!(k56I6PBXrxuOMZg;7*In#ujVokm#EB$ZWz;mkC+9wpvX8 zgnGvNyus9)=EPBZu3IB1+<=Scy5uo{*dA2>mEL~ z{ApxQRAa^1(_FP9aSS zV*bh+mxnw0d8ISYOIP6MnwJTw)o)jNcEX*Hq_6Iq$h$D!!P8D^P-B)D(m0W0OiFxU zab}UaPKc>8^DkDJWBxc3ejNTHLhznwjcxQi-qZoyFgLcApwB^ljHhvj9)m>fWfiO* z_mdJU8zHjChW?BEa0+yz%Y{6_2+6!Y+|0Y*EBle>Z*W)Jz?B!9a*)wFj%u)6gMS4*sw$`+xxoHHUn`{9)!`)%g4YAUUtd_v|?7M%zpVTmJ!I)ek=H_e}(X-@VD^0$||A*n>3 zjl@=qd2oED0q_$@n6wv2iE~+25VMhes&N(lF8tY@xM@3hZ&%+)eOzS}f8)vb$TRiW z(uNq=4~2U^3OyOC)dX|+54#*_c-j;|A z?=Bb?W#%A>;E4-b244}$+HUW~bNNcvj_-c~YZEEyViPs}VD2b8BMnnNmv^5mpf5!w z!y#yj8Z`{k7p6NSl?O%GoC4NJ_!U7+)<^VSSwvojL*p}0i+Jmp=}q(PgJ-4QO53_t z8Q0BP{vDlOk>5V@Rs0yFJWeK9wARbmF_#;ui{vx%@oF2Wd8Jt5oO2~hy^IwVm=X$d z$;h{%AK3ViVTd$VZ0aN3utJntPsU|Yfb9LY=vJuYGqZ~_e`dB-vqSmv*F7edn$ zs%jMmok8;@C`{jsr)2h2V@4tZ^gJH2gR3-0_1ImSqmS>$J{GK2yFSH*imQtDp#0k1 zqIAl3Cci(lAnRQqx7wG%(W|Cdf=W_q5`Aw~rs+5b|1m^Y!b3jZ<%57S)D-)5kLojl zV}H(=ekD?1ILGv;H4FDLEMdYB1sDn1nLD;&DECByK5v+dZsEfbQ27?{ih~rmSOHi< zI`wd;TvEjWes%iNuNbPCiy^{ve11M}a+AUyUSOCq=Je(L=Weh~e0|S*ihbTPPkYg& z?gP%N=WW8KW<{(;K^f`lmZY4YBQ1nvrhBU9?F8ByyZLbjruyBr3fx^N$u~OkA~NN3 zATQ&Jp;W6&0laz>$S&SsjK~CS1M3ZsSJ&LIyT~KC4!O9I54x#QK#g+Nr0}Ot9-_G| zappQv3=@w|L&#nQB6KeDo@#)u(t8rPXw-ep&724HWR;>P2 zKPBXeTQ2pbEf$Uf$_y@9CgkPV9Qg|Vz+Zh z-8W5;gRL^Z6uI|pLuq_tkq~>rqeaaJw+{@%ecBOp_A3k9*da;%0&_uF%h|dbkAx$t2SCb zQmf?g6*NoG@ZGI^`doJ=y+k;1xk8Y@T)W-hFq@6Xn9Jb(Cof7;d2PnKTZdhRn6mZ+ z$fzsT7CWqVEq?byrX-oJoB<2WCeT?vIuN>hpv=s5I0P6S^9_*~p_aEX@41jKv0b<= z#8d9oeXy*<+D`$EyOEW-4EBq3f2GvU{_ygtiI%diX3OIOp=5J_2|DxZ#zFKl%eEL* zy+|n!B2v_Lo%kE@EHaCbV1EM4@55zN$5rK2h=UU}{aTE^h?=|R{QCM@?A3@rZaZ}F zj>bjnE@xS8HJL%Za4xq(uoe3dLP>lcb@_h3xC8&{p+il}h-J#;XXk=8Etu(;cTStu zOt9iL#kJh4kq$Mf{D>)STFZSB{frKLF{Apb#H)&_kYhIU&F76(ZY@(kE>;+JuJlXj zJM32&f?QhV%{+NIlsv;S5Dn5o)*GR%!xBv~QI!@P{>fo}5v>ZZB$8RamHTqGDs0QQ zDqQ5brw(fGb4^rL3`_8#Qi@*ca#RF0V4WDXt>TeQ?XGE@hDIJzPB@l(N+>M}e7*?i zxL?J)!f4M2PTcwUO6yt(-GyAKNZY8XIXpW_%b}^*Po*1*+n>~A`LzxW)UQ%*M zyptlAd>~Ie;Km(&XP|>;vrRp2nr&;A9Vrh@i5`^?r~Qi8TYc}sCKRFEtz)h3MMI@9 zsX|XBFO!#zieHUh&+tk3Qrwsv=f0#h@w}wf4ix;V$usnEAZy+Skrrvk{FK1X}x z84CxRsXr@y0;iD-g8wJ#Zy#t)HSp;fm1zi3>Asi|UZEa_p%nNBbT(zkL*sF`!cs(b z2*6}ebVAI_0{XZiQ5O)TYox>J^BDaBj%+tX4#|Y}*?YXLSd|>)niBeQ%R`8j#4BBb z6PlqMhKP3|XXT*`R%*xsU5B`#rKKW4JOtQ-{bb|#sySPc*KgJ#`5*ugSuKniKzJnu zjbt<NLHPjdE6__zja756I8cyPjIH`miC2Rb) zfNQuMf6ObuC5G|MOFji32_m?tE>B``0!WO~DKjp^{w%r#^d5E7R1`r=teH6a^_E_MGpYuutXn%g3O{eJU>OLVc3Z0bzcg(xe&`n)^}^ zdxPO3Skgm$f|9uw5jsT5z%0YfOdps>`lUPA+n~Soj+^MR49QZ0L7z{u7pTKShFM#@ zYhfmZZ6G~)nq7Spj^%3I??X`*oXy4f=z3;`qCk|zP`$(bKLcrb)+&;Z!bK$YL z>~RPi2Q`-UP8d7p^nq~nN%X9WdY6uEeyBk<8o=#k#bt4e(2TNuxp%eQFTWbtJG2gn z>pL7;+1onLn~ZLhJ6bzB@ugc)9=o=*)%8sr!jM#}A{;ek!N*im3jxjR+AAthMm^RmEKUe~^AStY zqiDt6wpv9w9lm*v8j#;>U-jeseSi?nL{DFZCs^qF5p>Z6Y1W#Zy`XksR3`ul^iz9` zVe3#p%s^`3$i;Um&y8Qu1GB!FlFA|uzN_`g{JR^E3yu|$Y1@dDokN{x7i)u_ z=ErUaTf`tLMpT8^jQVwh?@_{>9Gq)fZ}eoN1fy7+r+V78WRcc;6jjmn&7*NPAVGth zMbYsqTu?NSK=gCD!<~aiZ4^qh442n85`zJ;)X;PZrO+AQ2w6i5!>NZrmE z%*IV{=KJvSwW(JZhAqJ{`&N8#ULb@vuXJ?dn=CY38Xdy|Q8OiLS>VD#0Ah)uJtehpAbZlY^g}{fxbq;qrLYRR*7= zRG$`V(=0JorcVprJm2fbG~kM}ip=sHlHjl!l9-MU%kmwPkV;ax(3fN6vKW%+lpB(0 zYlxn;HBhkA`v%sOrq92+(tzhIir$A8^sW4Pdm5B+oba5q!ZUcTvl*hYB*NQuAvkv! zAvj>y4e_x&*t0g+Pz7a2TTWcvK)ztQ}@ zR=soI02_gtKqjacaZAy~Y8I`c(6)$d`UQ(bZYB1ih!ppy760bY{}Iyh0s)}^a_C<| zx|a!=d1wg^Svp8?f(j?j39zh8PF}du3k27Vf#B)4|02l0#AJUFWDpM@oFFqJB8t^+ z<&Yr$3LAczJ4*y_<8LV%4{ySH9*F%PK^g|v@0jCoq1~@+V8CCw#Now1X}jTqx)Hzx|;9+jjsD7x-VD0dxJkGdut=e476J5gx984+IS4{8y*JzaHrSR~HJu<^+QO zkILM?LZtusBj8_p$UkkI+}ynXvH`*1zw2^x1ON4~IJx;ap?~*~laH6@@9E;?<^li9 zkDHedj`siPAiOSI&-s@P%n3g<@u!W83k?3BHv;(xV7yuWM{#6-1kbm2L z2~Gd@pyJp`R4+1f&Y)nzl4*&KL70?7d(dl-!>o@AN(lDpMF3f@Lw|s z_xpA3;g9x!+(2GF=)a60xVH6AM{WSmzutas03Y!02H}2Oe?K~IP9C_P_OJFhdEpY= x-!`8A{Bya%@CWd>Bbeu3FBjYo#FxNcMDc4mkS$_-!UNy|0WcUCB$cHw{vWN{un_jgXL;h3VtL#QyOB z#8`lSkKqD$C1xaKAe4upmp8Dpa{B z;K>0XyY&$DMhp+z@jY&iBfe9;U5i|9zHPSm=Dd2mTYnKU@bp9#DuG?C?cKibR=Bi( zuzk>b<9qSs98oO3+>hvAMAJl=*_7(Pth z3rxeGKe4{eRWSn<``5d#wGn~uSr4xc=Uhs(LKg3x?X3ah4{sMsM-NNe)ENf}YaTrA z52dhjXxi_ZxbwOXx3|qM(-BiImlBr>ii%q@z4Pk`#iiJ@hjrNPOmU*>#K}N$v5H)L ziDda79;fprebIHXinK4Brz*q}WlKV4rk>-)01FAzMOwAvzUZdXWrMV}_|LTH+mGz^ zb;Wj0*<%G20ZUaH{Y^=3u6%bt5~f?4^&edDotP1pDIXyuc*o6{0CyV1R9wohf~ZE5 zu%3vO;d=QCmSSk%iCvKZN1(uRUlR@nsD^p?Y~IQ5NBU|Czai#LY%{OQBZG!&ZyMu_ zhg_4N$!_7v^eVqjFNHLjCzSY0U@t7ysC|#stj<&c%txWb(LOFHnXO6=m!wU0&+&H6 zotc|?H1D+C+u;GCrlPqLIgFcn-K-I<@wlxT5YBFU*aVxkELv=xg~@^GUrUl~Qmc8b zrDzckhAnGTdZNCModeEr%E9ORuWH=ys|(RXT?j`$(fpPigwvo8obMv*3qhhi+26JT*iPK|0TUB*KN@Gq>b4lh2oHg zMPQ`x!T7jT;*2J+^5z|=lqj^)jn6Q!v$YK^OCL|ppsDS?24?5w1dWf_H^3(V4KM$~ z3&k;^o(Uxz4to=ZNm+di&a_9qtQO0W>FTAtS$+Dg8VorR`PnFFlQMH;v&#Q-yg>nx zNM2D>Sk`_B6AZnUDekqz;ZeLL@6%`?mf3y(uniDz&ZC$AFyv0sgZd#jR& z41s-WN~m3Mg{Z(cmj$qQRJhE5XcZ zt??NWA?9@{{0=*T&pW7z!qrBPO&MZEm8B)q68U|F&=<(voK-?zu}smr{C;s14?Kx9 zpY>CJ1SNv|K|l9>_LlEH^@CS+cKoa~f{Wt3hFKRps;J7Wq0x`zb)~~M!{&D`z!j`H{D}F+lPoclaAu-McUWI2`EMAT)!RgU+-g)GWbkU=_3n}7-qGn$L2Tt- zR2M0%TGX{pV5BzGPeu1oW;dcZrZBHC8y8WXH3s_tFL}pEgbj^h{5diEZK3)}{ zwmZA|^BazRi8yt`bRl4cBffXKc8y^zEc=NOR#{Pk0vW-m1C?=(OShIRb|s-C{99Ul zQM(e^F{O;N<3dgh;>8I=sP@RW-$GR{QFBKz$HbzNX&Ac6PJBRhdT@h&fze~he$hd6 z&dHmqK?)q(#nRPr#4K1E7Pu+YB~zVN*9fW%iK;ZYdF7NGG`x$7yLbFGUn$XiWuwgd zX74}L4;;Y@6;!?>d2*^ZVMP!w@=0b=!%uJuZlk8=;b7t@v9syqtx}i@M~mKE1Ti&O zpvE6R6LJ&Ks#)Yx9jxOMV~BcP{#+t6mISj_G{zovN}DMbMjgy7LI#=#CPKCy;^uPd zObn~;RlKzXC?BQj?|3bg^Tt{TOfu#H8zKeI04b6U-I)T(V0FK zS)3W{Q~G0`oK(>WL&};z)MBDGQ!*>PVyv-+t-94*Ij!=zx_P>!vORx)+FkS0+JpXB z7Vw~Xboa=d?h56n6NE(6wVRSyH@M1Kjrn~vYVR-iiz5>wlN9p{?qcy+FcQlnU*(3V zcF|3oMNo=j_u*WXvWOzV0{GPQb6FS6#0`8%maf~PJX+Q9qluaX&I$Hghe)V5TM3zj_*nMjAL#cNiAMcs~-2DEsl_biRd2b zcfyqpGK=350XF=a4)jDtVw6?>Uz?O| z8L)2Qa}5aF3(ltF25^AoMFYKg*0ZHP6q422Ft%KapG@jdu4zy)7K z7)^sTwdIC%@UJ=%4aR_~C1Tj^pUS`>^iKcs%L1(+TNlhAm+8!qx;pW%kYvSJ19Z>| zm~BmX5ynRyK9O;p&|kP?sU1><^|lfp;e@9yYz(}%u0-i6FQTwW61GNc2QhApY) zwG2*KdE6U~i`SGWR*DtR0T#T;R$LXVh(|+ZC-+a67ss1tfpAfd`n)W9flKqSwb!5N z4rH$~^XYdR*y-?=CKF$)vvCbTFR&d)=;V(JS4vxl{O95qTCsFaAQJO)*3=xiHqGjD zY-I9)xm{!m{`*X2jPw0WAh^H~AGwNDkC=r=NsjX%k6d1!VCv>1VqYEA6|<2=W(22o zo9o%FJ&ZEem>nNz)Xygb!joc!wa1R-`s8OWj$3OKDMwplf{$gGy@U>(n{HzTtXuxu zQG73$S(eAn+VN?9h~9nD`u>LD%8QS$W9Lqu8GP*(ab^00PpOTbG0VV_uh7Q6>Y!=$ zx@=M;84hdmw`aaqflz9sLox_4O;ohr?A-B;9NvpFhOBYSDck$5tY8!(VHL^WIZQpT zFE2B3nLA|5TZfh`Tpy|)X$(oclocPOLN=GrN`x5ij#U=VZ*{&ksD)T&NQ1t+D`xNQJ^u5t8Me7~cqOzyX$h?DmfX4L|SO3{GjdiJ@29eUk4d z(g~?V?ejo|s^RFvn{$!?tq<@aQFhdfds^H%HlNztu0FMEnL~TF-sDzm(LuClX}HDJ zF5i$oIK0Mh%-?EFYqo!R83EU9jCLb~O&!PTC^*XPQAh`z&I+U!fH$?t&% z!{T+lB-3xaqcW>MWNgdjQL^5aSlS$xp5DvB&}QPse9lXIK(06p{gArer!=_Myd!K$ zq#s@=ZA+wLEdaMAm^wZw7u>bB$QZ7WhA10Kiteswbh-#ploXYE$X&~RvL(5sR!)Ey zRnIv51<>m=bc7E!d&op)W@w_{DnIRz4mn~@{>J(1hplFbdt>>mx~=B2OIO0gU-s89!Vi5l)odKI;52G1PYVN{HEYxlJ7B~fFZo~hpAI^VGyfiT zP#t!dkME#8!($&IE32(zZW4bBtkl}M(FnzRy1JfIO;RXh=hN-~oSKJ`k@k~g9{N|r z739EEvKJB-@4C~lU@fw|hla>m2gf&Kzi2t;j4XY91ncmvfjjrm6s*VepaIERUX|hg zmBcjQw>I3q)>w9U;$v!gO`k#MFvd1oNf2n16=XIddb>r0ZKO_Ptn7U1@RLvdMq`6m z^tcs@>i{w360s#_>X!Bqn8sX>c*4_a?Ql)#5?KXhjueGtM*X;WZEhur|9{xZamp<3LsznU~esP0UHA>Ht1#$%? zGuQ8V=Unea@7C}XRQ1^&*d@**15cn$wHT@0 zMKG*X&Y6OEYZvCDtz*Y>@4<+b0zRWKmjr$D13t}S?>(GPZmg+?i$D>ri-1d%WVeX+ znrw{U=8rkc>6n(R@1oLOZYRjVK8yQFx$uBujjwx^08 zuh9RHJABAT6e|qcs%TyiOcZez@o46p8##ZasZOCvF5lOvC+PcvVX)1S=#6U zz{4X&PT90i9YyZYArW<(DNLY&f=%nBYp5ZZfz6?yNh|mOC&vmFbAI~{yS{Ir5wn$1 z*UV-yWrEiYWfk2GMGL!SGiQ7);GedmxS^Pav_kK)m7$-E{s~8oyRSEj)ohQf#T{M) zhVfLL46G1&@(ntu-#_!g9mAWu3cqyu7!qGn>)7i{X7~-={Iu^Mpc$39tZ9)p_8^f9 z()FZl!+k>>hDwnBz_)hxwg$Qu|Alm!{zbaXY%J{mB?QDou+xz+vi?EE{|i{N|0DSi zu;%y&ShN2Ntf?6P!0CU0^?zgOKehb-SeorGmd4YJSZO%*@bu3>YzS+k8S2R5XB|ZQ zfYRT!?sbbHbiKb&1R_CNZ(kf<9}Zva-n`wcy}u7rYSZmytn5T`n z0fComC&*|EM?XRovPh{SoF+6y&FwU+s9@!}N-;syUC*IGewSkzP*Y_a@ ze(&#?eLSr69sJy)X>af|>p0V$+lBpsa(=)!qP;qgi6N{{zG+k1Z@+4+n(VU@Q!=E{ z@o5GaxqG=0jG1CHyL;O#ru;yq0GKt|^)E<^1%Gjz~!tN?^zy z65|-j5$M#!bWpm;jcJ`MRPPs6*s#H$ z#DHTHKepyREsdM3hB7C9KZwFO8E=lzQgQkcZ`jpki%P4@Ax=8!jsiQ(@VC=Bzgf!3 zXuP}K9E^_WQ% zwIAiZ@er+AbH-2JHSQE)W*Al3?~xXGu$#-QW^b6%72eKYlfS8}EMW1Un81(O0(p8o z?&I)00BjTz;lho{xzlf20np#(YW&*qqWtcpXkNP6GY4gT!n@Xs<1c{qFuqE07xi*0 zd{TWX=kgEgDOeJuOe$tvaG=9TR%s6KAd;3FYCDi9+0g4fJLr9&QUS>Jq-?)wZNWpn zEeEf-_lG9X4wgZ*3fS5Wi@kG3d8N+&C;hDSY+<*( zz6wBdMlX}9?XW__sr>-%>~R^k2#Q&f9pFVT|71G+$s~$x^o{e(R`H@#=yf(P1!duM zM{xLb2f~)i|0{953+}{Eif`jPdw*nZj0Z!fsGNo^;`JzCt$en2dNy1JQ#SfikZ}Dl zB5t_`yO65W2#Cq0CQ2J6AoVre#$_pOh$cejrJ&u1)tio64L|~u<3wF*a~1rWl3?`K zeGjN(%}nJ$BG+dL1UAvxXxwks2c`bQY|O<|0=81}SHu`c{nLxr%}g5*hYZdsd%21l zNt62B7Y;@XgWKqoMVKy9dasFDNHhzs>7U_6b6&D%vnr*-83=`xVc8Z>-RIwOaaX4w zdF!tyISaQUYk_*Qy+r2Sjm5zNoT1>!aAXJ8l~()E0vrwy5Uy~=0xo7BzEUgMrxJMm zdKt*YT`0A|Mr~Gdk9?1LYEF_SjFS(0TDOH8Q{#Fm#aW|r#v7n-x9!4CHRytNj9h?E z&MQbAQ&S{~UxriJTaGjtrkNSx5e_q=at!~L<&>fY4n%;A6c&DT&kM={yH~U~fiphJ zJM=<%o`u_GH~U5n^mgUWQP8a8+>f0bb}!K!EfBO~Q%YeQx52zF2Wh-Z)zlTOg=Y@r zE@CB}i91NW3#lBD4JXarpHPWuZp}iQu;-6p*rB4H_OnqsVjLHPy|3Z4Pi&~j7m-Nm zFRzQN1}>o6PE`4)3P6U~#nGbv<6brXD+^WrD?#5P;%Ik1+@o&_o$A|qHSJFRHEL}& zvlR)Y&yF*?vLof&=63^#=a54UNBUL)dMd43h?)v$ zcx^fi^2X3A53X@f^cvbGyMoR~x>)z+Dy0IB7%4Nrk#7Rt((DE$mq} zxFnvPUP~(db~pC3KcJOaRUMlw>(@!zzs~+4b?9EZY{jhUyOTahyqxlH_2pl$Y-M(t zCHhrHa%b1$*?=GZx2$t|UJiZ5rPng&LG0)2-SnqEy+Z=1W`A|U-A!JJF0&Oh3pa*W zUULYWb4Tm090Y=HT2+!N(R->kPq|*5RT$)p8`f#ef(#%js5ExtPje>6F;m%fuqYiD z#@A{uqOh>UQP|N|YNY2ZC1;=_`q9?|jE2m9Z-ve897U>3AIGzdptDHm@#{;SHTkaAv+w;A%5q?=g zsT{s$Jae+>b>r^8&c6Muj;}kM5&nA@t2E+w9tKN}rl6yF0ZSB<`JtQKV`O6(Si&U? z|8Ub(uo(*xrE6H!Mi zYOgoV&0NQg_$0aD)X(b+30GN^6m`+lmqldM1}BXQc> z9@OPc&xa(C@IG=Ju^8#UM)TSefabZpgrMb32f4n401(LhvP<}AjOJA(>ea^f>lNd^ z3;RAV31-*jrnxNIE4PP1QY_3M6QzShyqK>+5=$)&>_1JT7=CFFpt*jhI;e^^0A`Wv zk;AGgeP7R^iP*DR5DF2xs z%-gHS8#@s*@`E-b`@Af3{zHsXN$n9#cEd9yS=(~sI52W9W~f!PH+y@-4D@WZEsJI@Ib-Yx8?aCkfVfE)&#yufVMPa1yu<112)!#>T znng>+^DdPUKf-AVif}6H;u2+#%A>QRno3Be%N481n!fY?&0P{j><9I)JT-Qrt&voWU;xr z1aO+c_NYNd1Cd?rKT(unmxHXUf2(Mt1$;Q#=F07L*%_NA;zgZ_;5^P`Xt9N%&uIU>D zSX2A?uZ5;5QtRn*DIdx}9L{}R8(wok>Y-HR$WUKTlEMyawR`yJm1?=Jr*yhTNL*lV zhQiV@LhPj3rs1@QlH5C4Y{M8}8#Tm0XLUYv_eaFKY%x2L1Z1zaMVX0lC{teQ$%0v# zv=O{8EUxf$Hk$A>Sm5M$95aT0GlVIFT1}U6TfL9ghghbk94;qr!l|&+xYBPD)2ie* z*a8<;7%51hNt4Zj9>U zf@V?i{UDi*isrDAilzjv65{F6PBdew*2srraW?*>E5}*55|F%_glYOwQzXhTXErz2)#ofXu7P`d1o~}8qdvPBnUsD&{Km(|u}gKU++S0u zkPI)xk0QN}vWf8YE%` zWdf^l)zA&_euu?HIlEdE+a42vrMjtrnqCuuEX}k?)_i!hk3lG1dZ03nHMb-}?VwT` z2Zje}naQHiudN?tiq49Xc}-J)u&V9r>L&4PIO&CE#zQ@D-G6yGZG8{>W_D|U4JiW6 z;HX41tpIm*uPHC5X4pXeJk$OM-TQT%gvjKsZSE6tBzSsrG{)rU zjIImWfkV4DN@|YEbp6IJio`kU+GI?S2^gO(PHYqZNkEgk8wAyxwih1>sJvYq)s@(B zSNWIt0hc`oW=y-dAO=yENyv58?yBepbDZSs_(h(^^COhS;Y#(l=kvh(f_HFZ%5BU4 z3%S|;1;hxXl1tK1*Jn-IY8@nHYE#!bmq3(D{pku&{4>;DUp zGyPf0{*e5O$e93t5jhjfKZqO;8SwAB)CrmXE|U{##%PnG#k7!p24(((!DCLy;DH3l zfe^u9yvvlbnV;Zr1_UMpyS}MIh{=*5zCM!)iT7{XHq_hINKXz1?u5s(XAeBSWv;zE zPVTz@wDz5O^$Ur@1MQ4moO@%FAQbA77!^msa4 zQNV^YL3!uyde4Tq1vGMa3wb}UXanvST(7@x0$&sP{Zc$R;90r%_Yc`9j{m{l8PkaC zX~5g@km;!D*nmmDLvDSTEn~&j;9_Hf5MDk zFGvY`>0pS*|1sG8DSgWM!dnA8S-kIAS)_$LLqGwVCt%IO6%t7LiOo1%3-5{J1`{%H zx70h>?)hS|1eb@D7bN~c#|)VOH-4~9Q}o3eD)TZ@Kn9sWQfkYWGBZVf>p7jBD@Ni4 z?g^i)P4g}__JPG?@%MZ>=bhGry8tZ0hH}Kd7G0-fw{8HRa307aM>r7-1LuL!W;iN(z-1kLjENre2i&>|Y z(tR9(}|0seZ z&k!#8vL{?7q995my!XA$pLZEP5D-oh(S$C7|4{}ydUtd7MOFVX7kjCh&Cid9(r4pgs)phIS3R4!rBVvYg%x&z7e+vBxN*rUq2h-BD zaFt=ST{pC)CQ! zB6iBQ{(Gr48oE6L9I9OO8He3ND47*2`P*DCkz!R2Ir= zCFfJg5df@ffpb@)XH`F^z6tskgz6eZTW5EWBI?Rrs6~m9{B8$M2PL;pe?B>fv!H1$ z_{YCu*Mw(Y(*CN6>#v&5N3zakU2!UBMk5_5CD?X*CY$Cu3hRGe-6+EO%+WNBCC5+; z9}B=|%!s>+ch^gbTg9hWRi9)Duhdz+ifBLf3|61vkN{mc^UPw`M(vsf0<%q0s`+qn zfO$ZwZpc2TGVr6a0#V#U#wzqfMr0A!@68hmKSOVR{;}B&s%ps1!y1??)*l%;<4)?&%m+VO6ey<%0+Vsp+{0XG%08U1p?%=7Z!=oS|<4%K}Q&3LrrRmhCq zOcrw+G>AkszzTn-EoRwiz7*8`hKOC67A7C*mFO76*mAaMUJ8c~7u5%lQwQO8PolL$ zx0Ngz%D8clRQBfDEt?Vi+(M{zs6ma;y68gMPhWt+h+bte!>dvF5@LwA%w*C>1)MkU zthZam@QIM#U9$Nn0|hpFESC(+F$?R5bx%l5EKgp0M4&%9bKhsG^10W4Q(}}n0C!!p zj$(aDw`Ed`v_ojhLKBhhh(Pddb?E z0JS7Ny>c18WpBrx85J^~KAPwO+hLvloZ7QNyP?M1!>F?CT%&gm3JBz>?-RgTewxPf z>JvcVS$sk;t!o1}Kjxya@JJ|qHsDTwuCws?a>c60n7WdNhAYZnf$gETJ=^$E~I z9{PhI-c%@rHaxh4W6CS4c;d@yDk^38fnlx|iy&VAUDc|JqbNQ|p6nJlg{GK0h`)r- zcN}tFNhc6&M2?%p2N0mR5;8$1dll$b6#T*C6|NC^bx$Df69NhWe;9K?0SW=T`!6eY z`)*DPhB=c$-LyUfwk%B@&3}iA(rJD8<6r@FLi{SPbUtBj^}g-KbClznluFCJ)h#L$ zU!*VZU(?SmAJ}0+BXUYNw}Vgy1)4kh8Fe?d{|q(mxIhhff)ITOLVS`)zV&;rf&M=g z5cG4@)y8US*?p51XAXJxzFwZf}Zv5z)pkn~6fEsh}OrYdrYj)3UVS)zr zf6m-L4oVsR@DdNbV$cze{tyq&ikxkjkIaXQy*RuB6(Z&NTQO!G?Q458)1xNK5psfDNf_&8x8o-+l-Eo$H_;w=@wKd6K_={5>t~X-e;+GW=O`(Kr>;uKQUv z^;as9Hk0*+N=0@bBSl&tBed`hf7UwznSTs^5Lj1?-g*6J1o6T6GlF~uY9V+8dK#C+ ze_ngeb7^)C7yLIi0?gbk-!c{H_Kh1~hnf1yPw_qZGQ z$ zJ%&Wp|DaZT7D|~ZV9=M?`&d{1nqNP3lvDFp<>MMy6P=#vDHO%P}bxYg1+8~0BS%N`DtlxIXeY(nELXlaw;l9hQja^HPRB+wJe!|DF9s zgv-^(f^JpngL=^5=6v+mas)RAAr8rMp799(81!D%-8#3P;PA93j-*xdW(>y$Qe-Zz zNN6stGwODtFY5O2@5Bb5=p|q;I{J-0-k(2Oks0LMQ*J0*;6T~4uDmlP^FPZ|L)BP)qubHtqgw^ zv|I%7)F(rrRAl^5F1xfVoXvUu7`Rj;@c;Ol>kaM`{v!tsC49}j|8)`!vH}Oe1n?zo z$V)vdJ$c{zGHW@YeD$_Fr!>OOh8LpeF&2hgW%yxa%axm%ilH`U<%*e*potHd$YV>!RLM`He^jS076Y^m{Xx;6`gJ$mZ0Y5= z(f4ZxS+{D`{n$<3r+j+N%hzWue@gz6=r;Ro3R=6TDX{5;;)gc@`hao`G3_CtV0pR% z`c|X$b|8<(#Js{!eDeAL4c`F6@kbRYBU3y`$ufc7>SH(f{DRKd8O}t}jP68*V+I{l zJgW5733dK?vRWVl=hS|tohjbk$>MDV6jUv*5Oy?Eg&Ho`eW7O5+!14(C!!X zYQ&wVTynE*sbTJ!DXYEdY^;nIT^c!kFUH4&#zhKtz4y;8`L))m$6L)A{g zh!ua}?CLp0fP`M9i=9e zR!Ws14~cs%SQU9L7S$rk)P{Nc zMBgIHzY_yP8PS{%DYCMhj72IB(nmb~i06qCSl7MtV=?R_O#0oawMo)1)A`tjFlvOw z>9Vg;kbr2#_`^CrY|LiwZg(HIgcH`EW(L`lu3S32w{|&q9%PP`84ZZqZ}QIA7^N5E zP`XrBGrKf5vMbm0!e8R*_8u32^E8LnP?$uE!75M@VO(mEtrpzECDI{EjClhv7V8hTRkC^l~Ef(m&mQJs*8j(I|4vNH9(y^A2@RC=B+0=oltu zw0}7g7G_4kf6*~)f9M$GzjO>63(J4_7)It8OVDpIAB;>)AuAm+69?eqBm&z9WdmUN zb0&d(*^%?0|oQHXBGaXYnYin=o$)8#((!uurvQ>H^v8D z^M@spC;T|-@Td5%-4uVT{Qq`SFf;sfGGR4hr49+W-u`_Yl=xa9*DKrWl>HM-jh8OC z3&oQxyM-?y^wD0{yC+%H5(y=I?K4+;d^0)0Ni{`Oc0l(d{#Xj1$CJqQ`FaZ5Ip1r+ z;})>}-F^!m$FprWj5VyX>GA6L(Cqs5=JLko;r`gfGgXSO9r$>9(+6*FOPjFp8r=s1j3&ZA7#P>8X_4Ei zTH)%f-Tpnq(8}}o1^2hdnOY4XTv&I8VOw`zJ4qZa7x${J-dTOWN6h(h=`jckDSyV(5BIQpz*_tZjVgR~7*H-dWI`eN*#= z8xu33kra^9=xxl_a%bq5)4aeB`x#TaZ)GNiXrc|1m_8lwUA|Q%4BZw$Z^aWX+jl~h zPa~Yn;I8vA&6DRD-tIS)f?}8#=L7U)=Y;IRvZPIjY@U$G1q%`txM4&)Lt<>ch#62? zwSADE%b6xFy+e;3)f&AU#mc$^w52od45@q;EqcIYiF{RF?fdIitZ_(qIKcfl;>bv_ z4k887iFj5Rz1jdwulQ9!8AH2CQJD%{=z4HYjsxdthRAeYgYJ$}qB=l~%j}{v7WB6TdXx@hXP;0w_wnnbDgxrKicuHtgk(*Td&P{_rMosFu*#e2WK1o%6 zN%_Q4KjLOA0V_5PWLj64vlQq~&QJ2XAb)fh$+gbu9jEnJmFokmkxWXAr)(A;{z0IS zvdNicu>DVCcxV+?v1t`FnOqa5s5W zAqE(e@T3)Jmbx19bjl~mI_AP;k%M3t^?rC)+vFfT10@jn-e30*KbS?|5EEZafK_C@ z=Va5TCBnjh-$}MV7il{P8|T_V99c_)u@W6OQ}|z))sw|I81Cyl86;S#JG&wUJwg`B zIfRWFNPM6Pn+)#=TdiPoI=tMRyuex{#M1h`B)r7jG?;VCSrUbupmgGmA{h}!JV6by ze-en=0KpmVe%^6fq^vE;%*%n=ion8#3a5l0$Rbq92xEEhtujjV64*{mZDqE3T3)Tv z6wn+{nIN+_yH#X9X44mwijR_z$(dGWlZw-l04!U=<9ZIEQEu5b52VFnlglW6379c) zO2qb5_Kt>s64(3S$*6wGXBcd#ip^;H+(+h00H>K;_d!ANZr(Ukq(Vt-$79BsSs)qA zh~&S(rzOWZ3(5sB_~D1Wq=#zPmvZ^Vn=mz(TwsvwfQo z1N_XsaO3yuDaHEc^6*m4^$hJkZt#G_Dr}ukbe`sfVBBNJ^SrGnGOP%xawe0Q)aM?c z3&t`?;=v#*co;A58b?cl!tW)>Ktcm83j@*7_eF*ox$?71VK9|2njqywHKZUXgy(OU%`(R;HSP`xHZjITHBI zz_4mFf6v&khJ-D{u{f+58V112YwNYDp4W>W5;Qw}0#jT;ix5FSCO{F!l-v-yO^VnA z&qBhjnd%Yj*O0#o<{%Zb;}23@Utu-B!&o#NBr}9l>CAc%+GHXz_RoU_n@X{8{J>va zLL`~YP9SDDsL^!^4+2n;#9WD53Tjwcj8O=~%OCx(a*E25?v znV8&�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 EZ~yAg5dZ)H diff --git a/frontend/public/documents/supported-events-policy-v1.1.pdf b/frontend/public/documents/supported-events-policy-v1.1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..865d848efd541eb5196bce2e11c8cda5c9b0ed1d GIT binary patch literal 40309 zcmdSBWmKI@wbR zWN)nRXlws>P0rrd$jQ+7PxXWR2geV94=f+({(Kn!>1=LmBdqWEE-%apWB@WTumPEX z3=C|{EL5<(ys*YLM!%;4{`+)pcE$jDA$>=ED_c`odO3YlV+R1!dk2Mo6JY)i0wS)C zVv3IMGr`g;3IH7KoqiWS0~qKSfUxw2`T#~chIjP^{`xH-p$IV1w{rN?N8iB`Krdr! zWBf0DSpFVf^L=_pM`L>%0KKrWv$>(Mf|#K8KT0z){0AijY;0^D-{*BQaQw3hX>%J( zSb7CxLq~unGb;lCz{&yy09Y6}-b<`30Bu-$L0fyHcLQqv9*g0kHbt{$*qq4i*4AGf?~Aoav9;Ki)26Yh`P%Xs2&z{AVZR zgcR)ne-HG#_%Ay&N3h54kn0YubsnrtNk; zhIgiJ_TGnN4BH%VbdXt{7JffWwPR2>%11e?Nk{?KeO9EGr{F!yC2HMdIySd%dbR?dxmQ?VPMl(y5d#QuFEQ zjpp0ZVDn39nzzfG56APp_QliCDVq}y?9Qvd4?U!J?_JAM!jyHPrgyHb``yF&=>%pD z4ewiN(rxzB&4Z;!;hFJMpKMR&U=2DSdZrJLQlElq9gFc>e6~n4X7-RIorcm{PE?N7 zbWPN$=CFK%B+XOOPZ2_EW0hRxEicww^|>6QHr(=4&1v~$r_A0uXlj+QD{p-3sXd#* zv97&@#h7KW{J!MXJEpom{gu73bA3;n6~5cD9guqNNDm2SD<&Rw=qS=}FB1(h0U!3k!9kCSEGzN~?s3qU>#lGz;pT836yOxw74Xy^^OQa!46h@$t$%Sxm z0jN)n9}HP&2EGtQv;cmh84{7s;)NQMbQ2kLy5QA@WJ0Z(vX|a)jBUx}Es~%ifs&{w zEw}J4B_N%8ay|MWvUW0^m)(G+f%rSny>b&C_HaTM9EDe=nj)N2{TdTmw~)SYLr}QE1viY^kE|fr8uRX*|wLFD1w@15`YyrveSeEYhSl;&&OmiFmCPPg?57sI%3t5to z0HW5?p!>PgHdt2Gh|Y@WbiX!`qpDSk01S`mw1$xQ6~~!)c!qJWTMPNh#so4+$Z&|} z*BOsibabqmyQ>{euI;*Z2dh~G2E!RSGG)F4Bc(x<;B>Xk>>Y9K$FVSjvJYZc{a}!> z>%8!R3{0-6X`oYPmo#gvq*OSK9rFZVkv@E3$LS@e{>ni7AOR;P^#I+;TNBh5ii}o+ zBk&87&H!wTSCgmj8g0Oc9O~YZAjE@E8O5Me=t8aI3}>J~v{BachcysvlBK2ix3nzKO($6bn(Fgk@Q>yP_RQU zNSBK$mSNap`gPKf(Hki=0tM3b-~t2?si^iHe|GRlA5@J=FF=Oo3%b(W<*?pbA4O_> zrj|FhON%Jt(bPK7bR5Wkib_EFEN`|(t3rHR>aGch@danU20-=Zh$Zb)ak?TvCozmq zDazq8w|+J{b-da`###03J>Ok0kj7MFBj%?R!knlLU4jYj>`Oq|63_;L;b$U2>CY`- z@PN$}E52|WJr4yMAca*`$*>OgqFpn)H)5k0?Pcq5H)KKJP!^)=fRTTX{IYUNCT(=p zf0HbR8st#0up<7+GK}LekxkaH9B8G)MEFgQRUZifES(Cri5tE*n(DhGX=j$;x0rTgb zcH=mr57tF=StFz5b5d=Wi~x14ao@l3hD3Zd)IyK=iOkv^#W)m%vBCcAUkzhi>s@Zf z6KtM-5HX;yF@>u|2+W968mzsq%Dm7rXwsX*Oto^AV%cQMI!!|Bfg3_s`7mH%jHlYJ z{}VJqI~q35zjn8p&tR~p)wdcOvaawnqe1u}x6fX(%@?lVI0o_f6=^V=#}q6#M2!%F z9Grx-3r{eJV|b(i5+EuPl3qpZO4f?0J%tlCkb9%G^k_vDd zbV!A>fj8egwxJF8h}rFHU-V1ZJ1~ux&79G`Vh{a7udVkJ>t#e7iMRu<4!NF{ueS-8 zTk|9o_XZSc*3>B9?3<@oeuy3Yg}!?}uYUXW28~9MTG9=F-{5Bg;VJ%rOV+X!ZAPG6 zO;1ApH*GdnNeTvOf-*yfF%I9TYbp;`O zv=hUv{q&gNbWiwXQHo}U&nBitSgyjEweKxhu2LQUmu3D6s1_Y!wo|UR%km3~4TJjXCcnSjpxnmj&^pR`Smu zOGYvDp|Gl5GaM)iY@jgtSA8*8@>7Mc4=Jpj zxv#vaA-E?!q<7FmCacDD2)%PQWngz|nz2eT2gEjTz7+$-Ll`8b1H3#)>2=U}LQ9nT zY7*TZK4yH6EG(gF+~J^LG`}H@sSW}<0t1&j6A0koaJn8(akkJlrlgnc7XA5{0&_YN zzrlrTOnZo>bj7reuL?rc>veWm`A(396kX<(>qy6We&hm)pCMvRO{NO!0cR((>dLZ@ zgOP%`@fJ2IHw4+ss?6?1w71^r6sRcY+yKm}jJ3_L^ac92+BSrbI`cZ7y*H)VMK`D> z3WewUx3-LrNe$y~hi6xg2~-qf7aap+#{^z$xf%`uJ{o>Y6HPfB_YBj-3W~*)%)Q?_ z=iNd=_i;0#VEWBVYiYnJ{}%U_3r#B0jXMVe7KJcqo4#oYWzzA ztHE%P{GpM63F3UCMm?^Q)(YfY{Ly|sMyLAgxI@O~%?{OW&IbNkQ&Y}{-{k^TDNz~= z1Xw7Am*2`q<@{W%!O2rJ$O@@YDVq)v7|m7^EUb%~u`(Xx6Dmttt^)1cqd@by{oMfb zxg>iVpA%j>=@zdRZO8hnY>%mmiQ544hPGzx=9fl>6KAYPw}oVL7sl(GWakm|eJmBt z*48)Dn(TW_aJ})l&x%iI)A+de#$!!{^0QaAQnBB_8>iDX8@`p3E*`l+e@m`@($2hH zGK?5JuGre4MpmGAHeJ0R(4}kO~3u)zhWVCnd=D@7Q1 zS@Lrvy5F=mfmmXWk;KI$}c=5}6e5!$t%L@CT+1sa zPXXb{LMoK%DUzP#O)KFdoKbopf3mAV>T7qvy4w(bf9ZXp7m+!=kXM#DbtCgJDG{&0 zQog~qv9q@LwL?(c@-fyd-mo}eX`I8WRWjbt>ubU3GU5KWfoy@hu=7w%`c19-u3ySa#S^VFu1IY1?b1(v#-f@oK&wjw@|JPs# z&e5wBsGG`9DKD{>c5a(f_|fJN_*3x90C?#~-`|@Mp9C9qssS zrGM7;H`)RG4XwS~>Hh%jDBW&E@jlbt*b6+Vwn;!BW-z7m;|J}6-zMHBP9uXEI*rjM zy1XM@QfSzA9$3*mDwE~?gz-Pm&lRbhpBtcmsZeHg2D*aC=9z9BZ z@v4)}s0HekFQ~JNG1=)Qu4HG0G3NJb^SBLU()D{kgDbjtWyrc#BMPC9Je{2y2^NGx zYnaDZHl>oYBuTu`>hp*a)`V^~%*4{0rgV_l`5WA%XEGW{%7mh1w>`uU$In9Tpn<%Z zl!t)UF0Po_Q;$hGu~4cQMES*rk$KP6m zcR#s%BExX`j1}67Zcr=f$}L~SkTfN4w?m&CplUdK)pJvOxScL%8S|2~lQN|wfL7QF z&CwqM6cE&@4>%nw_uMSw4!pAoME4{KEASX3AL;8l@5To;o5lPzSJz3I8OnmErV1NXGb{Tf0q4^(kP=ScV2p zFW#>fse`cDzpnl0aPcj|l8<9C1Ob%_L}fK3PKI+1!oi7V16IR{#1hVTnHc}89>+5n z#~w05L;*;7B7hRf`i!`C)JRp78Ri35z&Nikm#`7ZB$$S!LvBZT2e18^7~5i(0y&9p zv$arq)+GuRdHCGNM=$~j;V=S~^!y#+EvK@=Lw-ub$tE4Ag1)I_SJ_KM0O^C?n!{HN zVU=!c@N3k8@0N7jxG4b)q=eM&UilBc8GO(PW~ro9i%vJj#(BggEm>tXdv7J_L^bhOf9$h7@lQ6lq*anKg`fUf##MZ> z0T~*1+LzBV4Q0uqN7WYom}Zu$vv2ru*>R;skJTGq?5Jn_+^})c^`UvI&#t~$3o5>D z?fSl|=~RnBQ?3p!^|ZI}Mb%|wx>9JTYVKWb2nhl=(LQeTQtz4!!CVS1T_u-Zvf=Bu zpRjR#W_FqU4;Y9o;q1c0x}3*P`8pB~+==yh?H$-)5n<3FNd2F>i~5a202>H$mBE7W z88dYX`>UTgUsDd4OPqaxSX_k!>2{G0jhPictYOfz>L9xCnS?yheF2E>D#RNEj+V8h zpwWuvLb4Un);*WO8*pUWx|&ZISOIDi%}C`a!e+8jMs&~=C!C?+y;IM36Sw7Dzu0{j zU;-B>YDJgJK4@W9b8ulSrfD~rI5=}Mz;m@#akMN9UVpM|KUmm3-cA`=7^pIDs^S>= zR;)YOz`^B2#AQs$f|IU1vs=b$TE|g3@{q-98o%vAHvm`nOz|z>1+OV%VDrp< z@8Oav+L8;xz?xsPacFHfnzAT%RYxS4Pvj%)WJB$e+@y_~6drl1Bc3X2d4TA!*>q6G z4RaqUF68Hi+WI$u;F3?YW&K+gDAq3)D}OCnRpG6nd*S{rcOe_lqyl z`U%NKQ>pHywAVGiSIzp(;)x;-YUUP7bvJeCRh;sR@MV4-y&3JzEn!KH*XblBPdQ=B z@e#t9k)Kq)HFveFA2rRnLi>~!{BeX+j7~Ag5rQOQkkx&;iUEjaTKWLI(sj?5vjR&<* zC7Xw=Us5y*snfQ96d`2|nd?JG7Kx+OUdyaCQ~&vNv;d*tSX(X^Bu*MGPzSOwNP35} zsO+VnP*Di7$=M>L36HgnoyDk?@n(pR<)hi-g$x4DHu3U`@v?>NWfmDrpj8P-ox#WN zGA{k=AmBuC-{}uPL)e)~a}s&6zy?S|inv1TeLSv6$`um}5VOclas?(wg2aPHYnhH@ z^y{Qyjq20RFwPqlJNz*aN3{v4R4dQT%d-Z~9z%WYS#1cA9iI1d zAJa$R;YrN3@-0ym^DP-_^CQmL7(bfRZjM2w5bYM^moY82n?w7hz3^51D#OTmA#rle z;R+nlHpddHxmQ}_`)Pe~ppm2uu91#!P`YF8C__Lfaj-ru<2D0$C~@DAUhe4MZ^p$U zCV0zG;*piA0}+G%i{5E^K1QQ)$6t6(^YcPnAP1B%?kHlBa078qwH!An8430@{>B$cC{BuKbLRos05Zo9pxN_oL#E|78peXpqHp+3_ zE}LF$AeWiY7=&ty1q77S#NPEp8a9UmJ(Wdg#BnM}2o4M59P99q*yrIDK*NC}!8-XB z8fQ`E%Phrux7Lz)C3zV&RyqA;s*KC-YSW|s8eE@@D+i7YDH;TaH1k1r4NKXlW=9GH z1MwqVKdt;GP-|bX1X9mvXIYG|Efa%a46?*f${O4BssN=C7-a-7yV^5c7i!#=Xgb8b zTVLHxYo^*kK_;|;(eDx=051N^a4myoBM7IdZ|amEhp+XRiXjzGlL7jxhiyt*#|Yxl zw2w%k2UHyP9@GeDB5gs)>mCVci8w~$z|t6us&426RN}As+qhrzl|mS)>V&J}QW#4O zy-pfzP-uGQkZF3b%CE@2=HExC6C4J6(c}M8pv(KlG_+Vqfj~O$q~R9|_*hH%vTwDp zb1NNifbw0ge9XdYwe7~uR-Wkke%uEC18oGrIE2J5vruI^t-rW|d@}V4g(X2HuR*j$ zj@nMe)9ik7mg~jk-w}*g56LNbBw*L4Fs{ zK7O)|O_qXW<}GBPurDu;I~$es<-3U65f2uz_~wsthhLQQv(v@N07y;yNlP=f!xNVd zQWRTr2R}d!+sWz367_)_MqiF{)oU~{TF9t)YbtzI_V-#Yxn4IToVF%7q`@ATq6+h_ zl{3YcBJ7PV{eVy~6v(HHDF9!@UyiJ`UwW^w!zml6@&3$*z%=*=jSm( zTv-Uq(rICf(cS|EwobSBdtSN3B;qofG4 z3r9dHyr~*>#^4p=3&oZb_6(3G+y8OV)+^G25%NLu{UKhxO+{Bx!o}$F(rUQHg(f{m zNgyK@q?*H`uMF77`KX{@;xy2(1)_RiH1-O=l(ec-tnw0bf?9)yAUSSgZ{~sS3U1Q2 zByWQhrUN9>IZ?X62ZF(c*>-RVKI`hlB}#6wd({UXx( zLmN?TFZmXWF~1BNT09!gl2R|$WAcT%3E0Me3csC}o2Nc(OZ1Xp%|?kF3{wsZZ6h;g zZKTXUJk#Q+uKSBC_MET(?4nP4nMJ*gW=RL0@s?|+D_ z?bDpHh*1B=C?tk=`3S-ZwPM-dF^F;LOEl>w|A?YNGT}wN-e_#(fb^1Idz(5i9b69* zV-K~!8+w0&W@{w@7c#*!f4PkrhA?)hNcuRbC(H-RkPMz@P$Mljvf}tl8?DNk{U`5xW(OCy;qzF_qqS}3{Uq~X9@DIX3vSo zq&%P}pY30llUT>&_cV+x^O4;vtty$#DfLsd1OAB2ykvw=HmLDxwtlItFBws-=OWqq zFzq1qrHx_BpRMGGLDx_soQ0v zMzcKhtikHeFugONMW9M-6NVyqs^PQiZiU;4?(Juz(ewL)PyNzCEYb7DPGf21-L*F> zyr^DyuKOpp{5^|nc-Z4veTj%s;fCrE4fLB%Ro}k|znaZla7F~CXN(KH--o&*p0d}|`B$DWkE+5H$X_I12Ot{zT1Je^h>MP#Q=PxKrc)Afqpb_+S8fJi z?+C5~eG2a*viEi;Jl#*u3e{+i6Gih9Ju)?P<59lp_#$Uh1{7kbMp8XcdD$%_`t!zL zk~*{^wh1L$SV{L0kgvkZq~r*R7n7)nrjXNYW3kz7fhX!UO_#JJ;rpq18O>%TBCLAE z0|S$byZxhf?&!X>*5-Fg2{iVl59iXmV2<}D1(fpJ^V8Ibt0C>@E-c;|!NiObR!sn& z7*F)$-5CACBZ@*S0I`>ZWe(F|9;+-}Atk*FVwoqfDoac}Onyqx`j7xGa!BpKKIC>8h7?nSBn#F(wh{>WVsi412Q*8m0aU+!UAZ zMez#upD|psh_D93v$z<<0w91pIH+_Ezc`v*W~K~so^BWChjvO|Oj0(akP4X6R?PsLex0Q zp!w(RZks^isFuz3)S)yawqVoj<6eGuKIlQIA+D%|#nW3njVaFTk8oEzQuPV+x-|^C zudW1~*#&>yreiXc1GASqsqbeb@!_(M%i-+V^Wohz`vEb-JqyZ7_ZNDb?sPQd2bT6a za!18`oi>WK8E`F<4WKbslb0Vje8NxhP>GvZe8O1Adz2N+gIMRrcke$+TN2Kp*_D3E z(88#s5;S0@1c-z{xg}-pK21Kk9(F|hBGgTxZ+QbNMhPza53uYXpz1ex#moi-{sYSb z|0C1wKO>njGQC5xY;5mHCXnNIiT%IF-THTu*?)!08o1F~>AN`mZ=hJ}h|Nn*0{)4`10{*zI0^pAa{2M;|$4dXK?H_#hAL`qG$wpgwXQQF`thEb{ zfi(Bge@B-?4>=nJ0j=%$1^FmT?mE}Gk6E?eNwlVAGdQSg zW7y7w{rS9Wr9I{CdBXGF^-l8&nU`;sz_n|6Ez@->rFXvG?cUkdiV#T`QFr-`2&tMA z@AcL7{^tCbi{rWMDevou(?z=|Ghg%D>tV+8ym#UHa;bkp2GdMA; zM5AF(<-}v>Ger$cJZHo1c;OdA&a0b*bOiIY($fBG&Y~YBS(j5Ezu>(7I)i~oljjp6 zn)J)A<*x5K_JM1kk%ui6CgptVIe#@@f+;B#+x)Z3f#l$nagcffZ_ zfCK-d%*o+R@yfI};8DuqZAgHqyh^Lqs)!|yL3ff6A~rV0hVr|ZO(ToMK;d|*QVl(J ze282p#+13OJ*B+ZD5p8*>ea)lym_Z%>H$r-aBgJ!t&nW=Lg$7evcD8> z?&`gD60@;#m^7hB>{KWwZs%?vX{2Za8Z`XzNXIH*Ap}~J|FCGpy4%mp-&HLTFa^1Z z(13!8%BAlYLPyu&EO^X)YqD*$+g&)WX?CfUBW$*1x>t5_o|@g=c>zCUZB7M}VZE4f zmW(!rS@F34Yp!c0Tq@Rmc?y9}TD#`FDMsdw7&0CSwq1 z=jJ%W7UB0C~(;Y5l;Yx~;p83%%p>Gh%SZ9WNNx zuPVvvtN~=-oHmY_20C54A~25pTxE#C^H@|Jkx;Un57k}jCqHg@Fa#R)3Uz4e<9EMw zSP_x6G%6;Y5;HhcdJI^!Vx3i0J%?J_AmW``uT6+aF4r1N7DFEgeTFggn7u(Z2O**5 zyY#JL6l`knv2#wFC@Td10O%TPnG>=xy;jL<*n`33O3U%_RGqGh04$1YJ1So4*xly(dbRHsQvt4*~$Rtg|q0faYnZ}$LTIT^J zv*ZUxc0ftDw5-%q*|9VWu+qY5nL?i`-_kj;f^o^sZF}21_6&xmzdB6tq+eH%kM_KV z2FrX)3*TC8IM%XC{w6gO1YdsipS7(P-} zH5@o@ZM#XCP8|(a{BaKO(jR9Ph#xAbJkJ|hE%YTz;5Df4M@fRMqyMLPL_sDL;F-Dq zr*E9@F*0&;*8XAnR4ONw2~RnA(>1p}ruVX}l1e(}Xa*P$n~=cBno*RnDNvzri64Hg z3X&`~8=MUq%@S{=SY<|7lG<nt+gQnzIn?7*h>&XNT_*P+1 zm3hnGqpaqwe}KUckspwZPgV@ePwgxpGAK;gAq+0wTn!r}iX4Rs{4SC+N zAYe0^2G{AvdsenrP{NMQIEk^owM&@xK%~P zxq|2Z@+ouIPV?72KR6nz?A`mY!m&8D1Sy$>5y>2|XT9PABxay11tcJQGGg%^N&xCR) zp6O_myvp=U*QHDGb4H$ho#G%m4A-bajdBJ3$m3xLd+%NXqY7oP7qkRpNxBSqKLIx( zjy0JBmw4o}j z%ZHNfp)x#B-J$uU*{IZ!uJ((^?&pHCF*(iTd-ytKI9?&^rS8(XHyN)WA%xgkwyo8+ z_h;4XOpdY?ZQ-F~RX&^9Xr!4NjdyJOOw+e7J-@6LqTX=1{YB5?Ooka5(gO*O(}MMV zaJV~TE)4ZE(R)loJi3089J_Ur_IT4kr?P)D?d_|+LvRQ9CyEh%9)5I(oSwG~eKDSY zx`j1r|2_fbJt*~wejVO;3L$YtTd}i}(Wii4o4OBswj(S4Bu?`XwbYxeJxU>Dbv0!z zcpGZ>|G(D}r3JzTTC;g}$Q zUW`erCZVC-%w(Vjr9>@pK0>9%x}wsMrn^GB)&67?*bds$C%R#&sUDbkLQBP%iTyQ4 zViopGC`<=T-jYI?LoeOW7YJ7;+Ps^%Q18fS+O4H`tXPI9^5a|lh=O7Qu;gO7M%7v` zik6rM+*?+Z{{8%ou?DU(h!Sh7wt)HZ+vf4;PH0n@%Mh;-Pap=B$J{uBRkK-cE!3AC z-XChk%p!p3mfjV%w)Uz~DSY%l(qQ~(d=cbEx8a=%PeIZRg;|e>`K`_EJG8H}dEMPw zc^p;zm*5KHl%Bnh97q0EL9J1->R-q_H3Y|JnW%nPFOgCGC^vz7|Js#MIC^zS0eTeu zc`didCR=N^L<5(2K6|*dPsJ^~pdpnLW<@*)5C1Ec+NV`*O^V37Sun93G8$(M)>8d2q&W3_3>n+@lG$h z%6&jk|0d6cr%tYsf{>G^UQX?blLmcdlwpmoYnc|kCGcyR;|XTiis1J`Hc8mR8chKA zQe4~@a8>6GJhPz!{p^oCS<6*l$v9Ph!W^&xi%*FO`aiEdu@>nOD2}P)BR_1iW?5!b zHy+P)Te1=9U?z&qSMvBXBrGCVP~|QICBiOquT@wtj}J}xhE~D8H@QdZC2F<(GSm~M z(3yPWcyS4}l^&YKQ7rgDgN7=}yVCy99dY}z{*x&06iOEEOMO{SVG;f3N<=;~Ea+;W z=>e?kMdTC=9SxbDGpZzu4Fb0|c_lUx-~D4j%o-)R;HO|EgyJ~KvV^awbip=z1ItWb zL+!ew(P3NaV^?Z-2W1mkwyfnAe&7U*IEm(V3rn4=U}BQC+j+FI?ZesG@HX z^YlK~_+kyx!h>&3A1wDv3s8G{a0Q0T0~a^d8=F)8;+}l%Vf_f>>dbG1!fp=e-G3n( z3t%96c2<=qi%biaw14kfePM}G^ypmv_-VfIc@aSY0Rd`ZV+(y1Cq;c5hxdn8 z`lb%=IWB*76a15BL(9kjWT0bVU}I+l&@!_E>DW0KSl?p-Mm7#6I%XC&2BzPX8z3Ds zkddA3caSIXp6q3AC}3myo@mDKK9qoi;qR0m4j?-n5C~*tVSR7=tg=rxmsFX`t z_|SIkUzDCs)6U{5F9 zVXtp!BPetjeW{aVz0nXZe~}%*bue!iV^XKmK|`1=N3MqQ{sV^?V%IkfyCPR&9Avdwu6ORj1*7X z52ESuyAVoq1Cii8VPT&I2cf4ev0xX6>ubPJO-J~3KjK_v2g_c4<2_17%-+VME=tNI zlKu|=^G5~Zyg>yXF!Wc6XC=>o<6-20q*sf;oXi;gxWwp|J!aV3D$=7~N)#8DWNk~K zDdf4S+(@j=i(720(-NV^y;wqF9rzkJ&3NY-!f_yEcH?~ad|daua0{x_6ULpBE_!`0 z{PQDqraOG68H1gzk`oDwU?@9W7heJU{VR?q=G)W3y1eq<4ETL~?t8xL08P+a)9 zT^xK3;%EE>1{w;cy?LM zT~DHZ-dZ4V9ojvGi>i1=Fk~+Ga#k7nP*Cvba>GsNZF~D#-GyrB!DVt0z2~w~=>57{ ze|R{UJO)DT2yLYRpZ04KJERb_E4zB2T3v`}*o^_MTU-v^VIcR^XVi?>)owCv!EzHd z=tcVCF}lTop?<*!&-1f-!&(Lhp<#ZE+|{*~96p4Fx-gs|q7gv}pMiSTrwT$6@rXz3X`C-DE7zh5VLQ zp?RZa%t6Q;qV@8fGov3Qn+-gJHYdNR=T4KG@%-Tco+HtY<%HQGh zZ1&@=>DGAzZo{YHtix4|E3)h2`W@EN7NWTvbWm~B@2L*&UO);--S;sDX6K}cz{1Hw`2LR=wRNOF80)B7FIkL zCIY_1Zq*og-C1oc@6u|rZlOm%M$2U{gE@zYk)lY#^Z=4l$E6@045=QCUG(_6jb?^L z3KQrx>z}7{l9h*r=G9)O$#WO1mamnXzUbPur<_!oL@u>y-fP^u-`S)k`?a%A9N)2J zvP-0qJT&8O`q}pYJnZW=;1xHuItiqfYbZjNF#!gAgJhlm zEGQ~ccfR_%9fK&Vcsxe<-j+z`p*$&AFp|q?(!^}RB5~^v#zsqRi^JQR$tmd-QErTc zTPuuXSG4Y)54c#}ZdFNY=l3ukTY)iRDtvLdhpjad_Z~-`kq1+2Afxm*j#Q?fj>HkW zdnV;_4#->l#jD;rrm3V@$7rD9uc%8?)~YY>k$<~;S?c+pE?50w6vFO~F{&S3C%{M;{&rH=7 z6d3~c4>iQ5o@dF$W(uQt65_Zm?+;lB2nc8?B4wNt(6Ji!3n|EV({b6Jb&hR$flFqW zugBF09Zq6n$j@{}*Ov^Q z)p{7^>Si181{vs>Y8w)9;EhjIXSpBuQ>aymwEZtq#FUN4xT!q>Y3`5e5t&}NvK{JU zyg!a!3|V(KENYNujuk1%3vPja~h0pjGGhdM(jn1oJ&Ze<`?Xz-?a>ZK%EjY zzrdCx;Y#jyxCM_6czDFnl>9V`%*%a0NF5&^JaaJ?K{%ziGM}D(Z&Ma$E z>|12p0d9FD(rI)!^LQD*csfG0D_iI!`y&zsHTnPs)T{f&u`WF!@@V?Yld5UF(~2gB z!@${$c3Am}Lulb0HLqeLpk1km4_R_Fa!8?QpG!wT5Y(39ENo1tGYVQvC+92%k&(|o zg$a}HV=@}QAB?^>`E~Uhb)VUhg=(9YrazKQ+Wd3ggrnVNUINAX*7|hGU|@OtPMA|T zg=}Y|(*#7$afO0^5zP<727xG{RJ32viUm5PT;I0PA0y?}oRulQ9b)Cr_xeUPqbKs; z3d5+%g-XO@ll#5Df(?i(VC)sNzJ}1f)M4nf(*^F+F{bQ7r#7q?HmoOI;usGeWA%~4 z_voxa`CLER33_Vu^%Dy@pLTrUuQSi*ped}1{i}%qLOkE)2R#G3odt)f9eqr zUJ>jB9|-F!6{8^C9M*siCrD?Y33BE4BdTkR=>3ZVJjY_y{*{oHMdjh ztP?I(h2Bhl#$`4_s_%p=;74aWNW!pqC6^+z{m0jHT{|!v-@A`BV)VhDwqO@xmpfYE-k4g@L5^DD1OYTRc32^pt}H zLA`R)q)H>vN zV_RiART*-^&kJ&LSI9$%UrZJ?!O>tQm*^<<&_60WM)g%%U7fJb&p0TQxL5Qt`G>$-4`ac=gbekQsk2d$Tu}0tW zk3dC?iYOA@5NL7%I^6@(?UCzq1SO-kTIW_sa(5xqTSnc;u{6ZxJT3Jy6!A`vv)ZK& zh5FpIsyy4_aN0f`KG{cC;o4Yq+MGUw5*SWA<7Y(j@*8)JoAK**yJmJIS59|I3Mz1% zU$sA$T1M|_<;dZBoyGZc$*<+>8;0k12}EycDm6e+gZ_r{x>sBUG=EDeH`1<%yhr)9zhqGQB@`%q&tQBl{-^c}2f%fP+HTUxq z`Qcv%DPKweY>pXwGfnURmwx616q*&Q+8G|tm|49~HRwa;VMQ9Su64Z@Q3JGom?>IK;soO>d&_dpQ8 zi6P~DwTld51r~2kpb;*#R-=R1yO6&lv3yj~_E$jxQHNcF7s<(6)I&^tQDZbd6_B^< zx4Od_{+4^kt&dI+aTcyBFut~)Dor`osxCKlJ*%g)dlr_v)2H(+mWccrg;f>z6Uxm8 zQ%q%ta_-QJiRg6$FG_ZZ-rRbC5sBsZOc}2Cv=M8ZH24^+ z9!KXJ4NC6M&x9K}b{7vk9vOXi8&9{~Z=DBxFkDpA>|VHYhC`V$XqCrcmEr_EF)Mm0 zUSVrc^l85Y8Kh>^zZgTXN9Bm^Y}GDKU4hd6m`(~+Kp|y7wM8YQ2MH*nchho(CTgjP z38}vfvlEO*dB)Nzv((fsTY{s!S=Md6`ugO1D9R72Sv6&74Fm~27DVI4K!z4F>J_vD zW6B-C!CO)O`Cijl^l{NC^Udi6@&Fy$1cw>gDA!bR@e7HQ>@oWU+96I28Fg&nx;o4d z^*A4#X&haVmEngkJkq1|;A)B=zw;xid_;7p`4JRj32SAzGguiCcn2Ofy#1buZPSGq zY*?`}vHmjOD-@7cGg4f}ocyWO1ce6j_9?UeL)tpUE=?WnlyoXkncbhL;||_q-DxC5 zSkAymH)UZn z&;vA-uc&g62i+1eOHJ{+NWFZ_-~w!2haR!!{xLUUnS8#Z3l;DF=pw~&r_Is7!GgA(B7Px9Q1-OW$J&`G0rYq%da4M|+@F@bWn=Q3a?!K&BQ_ ziUq~rksz`l<0|$q5{6U4J{qb(2MpLg+f@*(0l!hzYk#UgG_v zf9BPEW(k1Yw+d|H-mHQ5T1i1vgv!p>iK33DGW8yn+yu{*;=Wi6j-+YG-6<&_M6_2! z((rLg8wEdXEztCfEFI|N$r_V6S?|Q170qO-~N>WC_?9^E)y99UFtp5WuM@KI$+m!Z;fP9wx zWf|yeqH9b@Ri3g*nt4h-B`w8Bl`ru%3ET-m@w&y+ zA6-lGOO#9G=QzJ~Jn}l4j9w)BB_AixC$lnjgu9aL=O%aD;>=pBbd-6Kz0j}sttB`n zJybZKp)9KZ)c?ukq~=}l8vG0E1@?)5y+bGbnniq-#irS8CyYoi{SZeQ@$nG9 zKmfZ`k!L5i|3v}iIskAMMb30CxdTcShxSSu0iDw?sVlwHWxBX)In9A_oA!(`ER4S^ zT0R(ryLl~!27=3st&x3ZPl-z1%Te@-TM~qYI~>Rfx*McRaNpynMG1d)9F4PI*dyWp z?V^Y1b8up&&gI2WPb!8>Lzm1?@j_m;esK%*zCawKOTMaEw znxvC=_uzc%+fq9YR_0uVwp^SfDSHRut(kXq7xfN5Q}YpH^Npp$%qs@gI`=fOD{B}t zGtG-l_sb$MoWaizX!$bi8#%4*+h+9lEbx>1wxEV`J^~aWUu-^US$uEYBF2or%p(8b z!XwMxuxq@pqG0~iC5Hc{OQy;d<3U;!^8A{c$BLeXmxdx$g+a*k^1Jev9C>i1-XV`4 z`0UA)AQlM+F7`1d!y6s}Se;+`1@4zB9{*x;b&dEsz4NS0=D zckZd4s_SQ$tQSXCd;-UE>R_B=yBuw7ID;%G&O8y?_{4+$`#oAH#m?lv-sKCqOux6s zK9YjwxmIce1I&lac{o50AqdswCy}|IAdgq>7d+6TH_79&RkEB_#8wtHzei5`JpBOoT-s{}4}J zl`E<@TSB`)z&PxCSoP>k0On@~Dq^YFqJu$AoR=Hrrn0Jj;-i6S+A5)dX37K*PvVsU z1d_sd$y{OPubj~(qPvI!&!JQD9A7Pk&Ropq7k&H_DiZUn72$z*d%R`l!-wu##l9I$ zZd8L#YF?lsk~Uh%G$~Q4B=9{vY&~pNV!jI#Jt3!dZ1$@e@;cFH%-h04bG976dws`c z#~TUQqZC1!cj8oG4}{ZB5~>kDe?`7Ng45LRjSBYI0^J=m8364W?mmgb6 z3iJ8pMzo{io882z8_(a>^XmgB70$Dw{hk)gC))2&A{9GD;~3PO(&qLKWg+uOcPJz9&qvuUgcJ|! zqWnF#JH{T!S=`7=8g#K@M~aEfQ3 z(p&vC4F+1aNCo;H9yXT8bL3c4b71ZZa>$AK> zXY?J@t9NZgh=!U#6Zyzl(f9#j#iRf*{eEIfzJruRp5(~QmUyAL{Yyi{8HCmGorL?X z(MPs!yBNOKIj!575~}mLEsHpo5JG5^ckcIj=u>EIfSk0=Ho>dpMuONP1L2RiPh~0# z3neA+$O%yn;NdN`9O#-6xb+Ins2F5i* zq^26BKfr*By0BIRTg-)`wsaFAdu+cF-P6O9WL`B6Ntj@-H(xzfp`RHXEG8{~p0e=KtO!qvDoBefN=#eeqwH=`~@u3#F*N)nTW=v5$Bex{dYEaY)aHuac=u>O9<{%GN4UJ@xFu#9M2 z&sspOOj~ntq3q@x>btoghw0oXtY4>0NzY`$it1t{1j@Pt9V$u}S}(LOYe~;Ewrb=^ zolZ^y=rSWkX&G|Y86T0%8(hdkMcUXxCq&^65wlSc`+PHym{a64zuq}i&T?Ohq+h=? zfn9r=5o+CSqm+^EO~44nc*pKdFyHzMp-;!2`DXe>XO}rM5*&q@=#f?0e&{8zO|Hl8 z^+1!r#`95NKA&M1$;_MJwn2?cnzJYnCPOCa@G;th9(E-_UEs8($<37)*E3+5bhf2b zz+w`Ks3~GORn!16>cY^hE!JI&-)rGW?yk&R>V=T4gkToO)zkZhuztb|=??tPe=+SC zT9m}qJV0hkCy3{IpR35zQGJo1ys}q&M$O>WTbC-Q677ufxnoJqAlGS;pt7>}r>*7_ z)lI@8-;qi zqJwks`B^{WjJAQbo;H2AAO8<}RO!#Bnt1S$(m8k#w*Z{K@ARyz4je4Atdu)?0DmD)L_8um=Ln-V ze*FbNI|Ee3BQ{Bi7x{PzhIxF9@K~a|dEv0C%{*vwTR%$SCr@t)VW`iy4;)vu&ds!M zY{l30X|Q$59OyIi@CdshV@!d5A=a+B7j2ecqs7_R>3X95MyYwY;&KYk?oqwqWqn@I zaW!zeeR@%YLBCnE=#td8(Cd2IR$OI)b#Bl3d?Rg-z`ro~4^)u3A z(gn}#hvfOzw>IqRnn{4+atyA=1fAU3ts!WNVGM=sx+JGsIsC2;69*OrkPJJG3m-aRTBjXF97&1B` z8ibWR$m%BMIZCBV4>BR&&T|AtVO;qES*h=bXtG2~US6wUSb~GA`+L5*eXw$!bt_P@ zqa1}PdF@2iK@4>(`$as`N!oFc0DL%~qCVr?)UW~)m@k*UT4QoyQDos3ts7ID1qOiN zruShI0h(n3z4EGqSNHDr#H1Q}0`SJRKV=0pNk)(hpthUR%fFEjk80#ZMp3+$5^*KL zJ@-cUGT6CYAlbJ@(WjnYEjwV6pINp9i!Tpa7{Ur?cwlz^kxrBzN9>+E=MJ7wPF^`gv2z?Wc}F>qaU@*Kns~v zY-b$5J_F>qYetJ$Qx=s-3TdcjPHJuBO$KL@4o=_#wdl)O;!`=>Dnv}6a`u&)RfzLv zQr}ghlrvSnqi1d6Y8%%|=*Ku5h022I#^QumD_}}>blr1{h@qijPfSRy6(AuP#CG@! zMq)FSXetOp7_X+OYBYPJYKnovO%U_b}ce8pYIR`Th4r zmAt8wCav@(L$)uhWQO$Ba@pCnA|n{_i8xoR#@fZcBXfS#sakES@$f1`Gv*FtW?Jn9 zBFYl8F)7hzIb8boRfdAu^I5E4Zp^+F%cK>OfLG;?7mcyZr0BU<1!RP#seNHIGl}nk zPo}7m_)HU48xKjD&V_m@;aiQ?OZJPFE(=)! z;V0=hi^LTQL5%x?81yJ{DH-H-9X2l#0GVkM3WpUlN4lkR*d3g-K7SWOnuIRb;D=1E zA`J%UyDcGh(h8R-1pQBbqd6^+>TBINY)g?dz0=Yo&?4-oA_hlwbr%YtFM07U9%Vsj zaSsUmV-Aa8+W58;JI@#tjQ$@}lic^)qW_72zAJpaP^DIfAdATsknFsKjB?I&6zl zb+RgKv&sA1-eXU5Cgum9)Mw9({h~m0hJvmpM%cE3gsujHc-M##3@ZBsm0}u{q`X`w z4#Bg&g2K9UtB1r@qdd)YN|hZ3ox{^q8+5N@s2ZFTsv7jDhqQ>6^@?rzed?4ty{$rV zzE%&3=#+{%!huZE;}0UXE!;$*=^{I;-$cP7qvvH`HyiA2=3TWECjS{JM6T*5vsx}p zUe9g_jDWe?Q;7VmMSy(1teBFDp3J~J)CvZ#T7S$M8n2p}YugGaVh)2_$Q*iqhD0{5 z2#S-c=c157cr2cP5u9;@5d7@#3~GVd>`~f8jlgTin}pbXn4vV)o7p0Har%|k1-IN_ z?zaKA%w03pahyNXQR%j&bE6Au{jB@Jc+?rd$&9N|hLPuv(}tzg*P8H}c>N02f`F;` zU%*R$@Hf9PI-HCwEdK&8{ljki@8G3>V_+7R6!{Hj`VDMi2C^;d+Z+91-36kF{(&$7 zb(CH0frueVD`RUQ$1Wjo6^Dr#kTc1ZkWvuHPi;g+$RPilrWwdyOh_qd2t*;7Ik*B( zDm&WPSp4B50s@NuX7v3BIYsyfTLoMc0&GCVT3k{@Rv$%N=PW>?Up630>9=GDE}~!qdj9hU>a%cg z0vG$R{L%ew#|ng0{jK|3{`m|5`Um>r0MY}q0_l!9*?@XL$qE4a1=_O$nVi^u`}nQ@ zJC?uw1LdE#fj};HHlRMx_wP1XSbw+6{ubNs_L$iTIe|K?Kysnqv9PiO+W;~vy~X$z z6DJU_^&1fOyA4)Ojz9AEz5N{{D=Y9i0B8g32R7h+X}|w>j%JpB*5eTV4awpFu>bD$ zzsRkA_p+pwnFApMke2+jvXKL!v6+>j-Cyj`ga*JzYV{sS8f|C>BvO7m`t$d*rM}Id zNA$lj20jWa|JTP)XlP^%bOe0JZ(zAULx=9~$4v*c`A6dq&<+?2(1PhLnBVNn_P=ST z?ewjHtk*n@z!x7Oj~MXvhwk}5U1xr?GBEy+>VH}N5r2Fz0evts0$BM7KLI5x+n+-= z;34pco%v0$yq)BH6Jl>d^p9W>{396OuCcs%V}85F`j?mAVKOqZ0p7%$3j5m;;LV)< zO_NRdj|%%=&fZ#QemlwX=7r_2SpJHW6Cfi>=|5EwO{4Hwszgm9_p82gI=C@dw-@1qSFT1xJWBu(6*q?6( zfVXRGLVr#I-foQjuOR+v;V)-z=72Y!EN@;||LTdiAXwhKFu&Qc{MD^*Jpp)o4x(@E zi308Z(0>0tCV*4upRxU~5&7BC?l+VApD)0lar%4wnOPbA>pNm&ZS#9({rmkNS>yf& zkN%z?|G|m=+f@7eB#>kO|9y@XwE_;{-}C3c=07@#zcHPL`c@9VXJvcBPb_~}%z%hc z73+^yX1~WgaE|$n*8GR_9JoO6Z;r2j59FU|_dfturT!COl}_Hk!p!#f<^cZ-;3^X< zJrJr2T#87?!V26xfRp_<`jm-{m6INbUS;C|@~pG5({r#h0Xh8t?*mug78(8OhK4LG?Zm5>q|6-opyo@&Bkhm{}77)0ax!Z6ciGw z3_S6L1@41tmRZ9yvYvpC0j%n$r?w6E0dA#uV(ITYpr~Y*Yb_gh3r}nEXo~NMS_YFO zlcQy<^e*N*ejQ_OBvOw}Kj}VAe^h_tSCGq=u5LoWE^luY?0s#@4_5yYK>h+hSNmKhKI_~_<` z7lu@CUJ*YTBD8q?<-CgGw(V}f%A#qh@SX~(*YgHM~7QMsbaSL&>>G=kh#usI9!4>>>$@>b%<$ zhJJFB7uUB(qyLH!70JWr@d(h$aPx3+Ff_dw+qg7z7tYf2#@UkNuX*Ln*T?gh zZT7nEE10$-&#k?{=MKEai`%ec8ePvj*s$vuSnnzC3!kf|E?3V+@g;tq$AF*0Cy+)P z>v8;U&oS~;2Lly6-t8vmA%)}ocS#GQK?G1souM&mZiunsg7p`d;3T;uxk}yb7q&)} za5%zB!xB6B4LXnN@*;{~#VdYo-7e>jeH!j8PY@}0+o@aKlaN1jZ}6tMNxvUL4Y~ri z6=h#uGO`$xCpb|?xe54PVvRy;c71oJkw+MaBQES zwd1)ju(AX*VK0H8<9XVeq1{9Aqt|19zQ$fu$5U6SJVk=Nf1tElS9-6uC&iUo%t6yH zXau-G->Gb!tsuol9=`WD15NRp;Txd0&Oz?+13{Tj{!)93VGY0b=7&b>q^|2M#yJzPaAAm`tGPpG<-*VqXbiDMixIG@P}1mfmeb zpZjW8RQzf^pj>@|;1nN}9IsOg0BI+Li^SceL}C^8H;BVIaH(XJyHAmBzTCd6>wc)l zj8)5|`)IdR!@k~p{qs}9242Tva!0&}!KsT%6UP~?jud<*zti(m-~>GN8Lao+K2Bw& zA^wTlR|0Q7mHSQJJ?M?(mS=TuHr-NHFZOiRM*``+QjDz!IR3NDU+xq3i2M&U8LQ^) zk*ltFdukHa=7=_rCC-s3SCb8@L8?J+k;M6%YP!1w5>!_jc6lcJDIw3XT7h?BhwOtg z6N265y+lf+8|3GdnJRKLBf)FpUpqBpA5$yE;|n#PtSSBN%A?nYx$W?XJ%>xQf`)u2 zeYC{&Jhdy_2M2^V;!kwG^8!Lpcd+gfMaN%_mPlA4W7rsvHxglcly$Uz2OFQu& z4K+pG@IIJr7K!jdeL9Hd)}`64y1D~8b&r3IKVjrVKaM+jS4Oeh9OOZKL)LUgMj_-) zywD;6xM68pm+kKk+I`H9`>ZcraTk5{kf(J{7Bta8v+y*SLBTIa9xQsCCuw02OQu9l zub)S7>J7CHO+-E6yN5*u0zt9^vV#KcWnq96p&|+A6qg5eVXI!82gV@wolX-$2kXKL zWSseV9yHd-=B?gQjEp;biN(+&u_gJxL?%AvtswE#QTa z!#p^=8@|U$rnDbwM>zKfEf17Q3(MxsLr{BC~%~h-Fo40 zozh8wL|-vn8#T$!DZK-wIHUywm2}YF|*iV0!lL$hoR8v7zrt;Vxr7E6SiS zty$M#-j;5c?mW@(GEm_0b%XCauO>HAeD>oDw&YOthJ($z+qjPR46bZSmx8-yB9yhy zstgP9y}H?!QJi=!DO;P5=naJZKTduzmxc~hSbPk#D#88XfqZ&qt!sjMrl8f-*ppio zTHlV~j^VP|W4M(%M$|^FbX_wlk}~Wv5$#4tl$3hoCiAH6B5i}pM83`Y)lTE^1$%qJ zh#VFHL&4D~Jcao^AdiSvmP{5i|1i9excia=ZI<^vuI3=U!BVFXp#cMSa4e-;xhyFrqFYtZ84dP^h$7?{x3ti>Mm`8ghILVg(aiy)JdOl+>p!QZ(q=hnxz_DG7 z#x&}|JsDyl{%dZ_wxacn8MYPN=f)T*x>(zWo< zW?NK)dFQ3~XA4nd_uYMQ!I@>Lvy|(`#Su15vZ+@V$g53b(v-RMB*lKVUmBbO@>UDn zIuE*vuH_WqmQ~L>RlJwefuCb^6FGI`;rg-TQ6vXs{r|El zp8S<>xfSAv2iK1&+4|%gXUNM@U=7UDb)cWCRA2k@$cWSbOh3~ zaZbyz>WiC6U8bcD`Q>=_^f9kR$dp`lB(f)-7lUL}$aS1F zVxwZLSOGq)*snC>6yR#E-`{x}Vw{udM+p)n1#-jMu)?&&9b%%NUpy&}_KT|9hhi~D z)j~wjKJV97B7LpJ(zz~`2FZld#AO%E5X6VcN(3KbuG+6P(PxJ|hk+SjBG)s)uXu1v zy`WdQkOo)9w-4H})d40rJo^uQ)nlez$!x?}50E9m1r;4HpktMccvfq1&^k$ z{jl`lhsT%`mXP~zCu9LAu||1G56gupN%d%UHct$-90v-oXssWPGlSB39>pLZ@wFM8 z3Sz*L(sEe$75UMBL<=J9yc;MV{E_lSREuph0j3u74kyV2g|pZ+MoUeW=ZoOELm0yH zHe3SDoCcqk6;&>oC?(GdB1{ScVyIJA4duW@w26oPFAANQlcw$=3Otf zz$BgKJH(=^JCRP~_Pd$smJA-(-EZdx38JHY5JJU=Ct5V(1&rP%`McNU@2<@|Tf--0 zq`x~oxw-CkSr$0G)5Je_LXmQmGK_<3r?UAuC_GkBRUBg9X;GV-PA z5HwvCNZ>?ZTE`WK-g=UGcxPx&VN4-57Mf24ab5ytVKTmTtn1b?vUXA>-Gg_NhzOuc5(K<-QZ z3fOwx*9xgmuOe8}3UPAPbVu5ksy)#fS~&bQns5jO1gx>B(8d0ljqqy>)CAUT_EiMe)8Q1lHimIweQ2Hm9f=VDpXIOLYdmn z!@K+^>l0L{FOyWLE!N89ZkWpCP7?((XqHtVDw$$tfps4nyw z+;+-XquF4wFsU(AUm{Z%Ve~-67zORcTuH>2f@vsRJmJ|@#Y!$>?%5iZv33zw@j|#+ zz%M+=#gT?Emuzm{tT=aiGD_{JlwAIqZsS2&;9G8zhNCVt#*Ra?a=!xhQ=@g5A zj7jQ_x~MX^mr6ruM2Vt3Yto1^GtFk6mmD&(`Z#qHjoz7@tFN9ErA@c==AN?DvH0HiXRD5A+&|sIsW(8`VRwST#m7$&@Y-wbcssZL$ZP38XL-oyULQ|Nea+ zL^OBa7!}{q%i*L>Q?DT4#sSPh0NDSlB}7dc}p%}DvATjFhn>-%rQ!F zHB4;9<0Ug%cu_FWsK@vFS-ARKF>;1;D&c$kD5#R{Al&3NAt5|Mem}ZUsL-5=gY;s+!ky`$-X?qU$e%*WePeR+xdrBiZ zp)69>JIhWdwM(zriz$4;p?txX`G`4Q1ikf(&{K7u(X>~hdAlwqVo6YQ*6N2&Ze;tn zQa4?P2}Kt@yeA1o5{s6%QV!7WWXE?>7GZ5DmM5_FlQdJeZe;ZjIw4SQ`FfA_b<#E& z!ZC}*P9eiiA(o}uIhNbo_B(P7GPTClmJKov;-AQ=KatnpCWbiG%UICRq5fEAu5K|) zG1bvd_T=j6Q#Gld#Z%P1{^1}#dlI?m)J%eX8o8L*OtM_ZZLo3_=~7isCRKWweZt0f zN{>y@Y`fFLHg&IH;j!!5M7=7XYT8H|Ze=KpQ}gxy^-aASC9H#gZf=B`nv}8ryd2Y1^uU*%s*Rg{HrDdU}XFMYcl_% znhYZ_!T-A^!~R!Y;;kgW_Ern{j}?>OwUz&qsr|o)^#7OC{y)R^f12X|!}s82B(261;-jp$ps6M!8OrovyVr309xvgxeKZuA?V*GsLJtCetml=aJ`h zPE`N%@rd%esOjsg+kxvw(zrV{)`N`~V zl+s3PAb2pd-*oVr=T&NYEKV?7|0Q5*hs3*-*w7ROgYAs;&n;SXH=(mnWBT~||mFo#d=kBI2k7VpW30^obdUUKMf+Q9TYW#YLVe{$A{Dy^Iy%M79^^(Y;omKsSEee}AS>P&Yz zTh%@vIFeMU7Ae7dy)%IMo+Z^O; z8&m~79iv@vsaW6yj42>)2b+xSj}}A!JayevF}_axJbYYdu10gUJXgAakMA`l7WrN} z{eF9VXy>dmY{sqt6S(1jRcWd?=yvH~jt{6M#xIKF=(=!{Y9g%9~XCZ6H zsaBf!O(ttxT8i^U85&$qZqK`dTA@GWJ)e%UtwrX`L5m<1Ho#^JmyOMoK9f7r<$kJ| zDu_>OOi_exxvPD01{J|KI;fEgQMl~91cCv~eS0}f0OvVKGugS7%;A^=eo|H1cQe5^Gtv-H) zGaQqcA-v1vhV>ZkX+8DSc3yRt>7c(US?>{mE%M_Y^GU#nFmn3km2o-dMaz5el@M6+ zFk+E7ft!5hvAWjehGplal)mQO;1XW5P6L#?YzZCUooFQ!ec5Oxd)Sd!yg9Wg49N7b zFnYP&>tnGMU+~>(pyOR#d2$A0`1G;CvBU^zHwag?xCJe2e@|~@dYQSUcu>`N1ktso z0{`r}GyH+$x?0&C-$ietc(mXwLNBVrQ;xSu`w-r8rPb_Y1M=BK$$Y+|T~xCCH#0#U zga6g#R<^wfA|j``TU2I4DFNRVWxYH@PyVg_etjK2%gVE_r@Y&WZD)tIZs)`e66pEH zdyQh51I0V`L|ZBNC`0^i*Y8$qL^Qfe1a40a9iBLM-jXrSy-ztu$}iv_5N|T2#Gkf* zCD};<{cRT<2)rdZk5F8Cu{`TH!a4qP_mp}GLe5il>oO!URlcjdIA`oO$EuHer}0bA z6IOOy6xltqRt6_g*0Tp%MttIB{4w#d;*sFuy6lmj8=R|V+;`OAvk4=8j}fd5#FZt? znR413sPx1`jqyqokQH13|*Alyp~jest{c6^*{97nxybbv*UT&I&O*-KW|r zXS|H58u;_|@{EK>XD_psZ%PJrG#A~XmyWMXGxi6YHrC9bu9pnbCKDMf&VjjxY!BT+ zx=;2S8?CPWH-Rp0KfawDOnj80F9OZQ#RuH~?Ram#lc6h*kv*byRuYvZSdBZ|FOFQd#XBQ6DZ zQ08i7MR+`A>*injJ|gl4+bWNIZg(`-vMz}sC@br5O>rjSpRRGY0VVm)TlIv&}6#x-{>-uhYY z{HzZ5*|7sANzH`>Y3JCh)#owymPQ|0djl)HfZaJQ>aM)Z|MYQSOHO$tzF2wxCy-34 zYjdWjgSD{(qVT%z-YW{b(H6LSX`W%g7c5xjfH>NXm z;J)2zNN&2FQwy8c@CUA+)|TXN*@zdPr;?t0OM+VFabZ$gE$Jk)L0bCT7(1K#NamDE9`lPL@FN zlTXjOM{wY*kMP*T-k6q^Tr_`?Fa(6NTw`PA4#%hHOuM6`EG%$eKVg)Y6g`cBYf9%N zENUI87(LStHPvmW$s~``m+D5Cc`5Ye*D`Ty|ZVi^LJeQhG$)aPyVvnV&%|0sB>;lqVtd78-ta%^%^}Jb78!T zfdZ=^eH}zC0!K!Tk~_u{3$}I|N}bb6E=vo(+@5WnZ-ZBE9Ubc?tI8yh7j+qz6E71h zASZp-*-|p!mIP#qb$a0P>}=A9X-@&@zL+qjv~d$T zy585#X_^OhnAVKKQ1|ky|Fj`W@sQ#MfXLKd^ zT)H@adfH&=vun>Iq>oYPfO8-l(VS?Ho(};xAu&H(}KI3TSLG`tB9_A z%H@wf_uE^Q+U-Q~+gk^~L!$Fd9iE2O0}`bHtO%#haB&T*7}@x+C@}g6psDVyZ>_%uF zmm|s7u1scqNaKb4CB&F!gK{K%3!nNZ14_2+v3fU@4y7oMA>W10gNOS~UyzU>!%+I- zR-Fh+`Z#wF2X0>!3}*Hv?5h!bgxVAkcm;vRYC+63)6Nkp97AiaY{{TxVG)3RYXXEu zR4pSMa4A9&3W3nrSP=6Q*@RH)Np_#3b>4ujf9O=?U;uUW-SF3%C(MW1Q`c3=4ilbp zSenisF*_&JCQzOZrF{4VcN{uUoGF-JtSb{{*YUwAmP!0%aVl#vbCI6x>Clac ztE)@Qwq-IUJG&_Q6m>==S`=G)TBU#;A9kuL9?3v*vrM5E1d|bdWqHddIw0(pPzF~- z=p^68C5Hq6o#>pb^D{=yDhyz%u>GhFg`p97y!Dl`@Uv1Zy*+&;L$AfAHZwMZaEl?2 z95HUwK1k?U1{4D_70jbbCr>bU2pG8zWYi~CAGMw-M2>GZs($iVqx5zj%+5#@o9J6` zq0~}eKFZ2|i2iBv&5Vj9s5hAOE@V9KT|?Rx2P5vV&2e>h&lwX1dQ)x~VQv5vNMh6N zoUQ8DVyrVbFq!zw@UAwrBg@+w81xQ`p0uA+;;rBV2bwEZib2#&v>a_QJ-MrSC}FSTt>h z+GgZDXB3Uh4HT0)mU26^n9olanei1owD@0>*`825JjCO7Vnf1IQ8!2RIWQn`Ajr;$ z3>4eYi#;g^_b~C#R^fd3P}|?KKSCVkJ$5&I-3p|=jZBBXo&X%sK$t*i^L6JELg1%v zs-t-gOv*#3+VaL?n7EEA>TyO~R{FetS)ZWXcj$If;`!1oK-4Rbvl`F@@&2w(r?K>+ z1smQD^gRM^s&J>q*UwW9%$=Tu!!@xv=Hy*>S7gkF(Xg#bJ8V6Uhl4c;pC}r6SwF?K z!o_}_iGKajfP@4GGrRgh`j@!XZ!dOTAOj0iLt=;0yE)KvTn#zs!M7K z#}$fu6MAp0a5^-d5OpJThmdcOsm+rb1#yCH^`^5a<0Rh(s?H>B&kF6F#CPJ40N+fm zJt|qKi#llx!VkhZI*2twy1ywKR~lxpJ-$CK5gQuJ2D`%_bB4#xy^Z@Nk^)B`LN7Sp z17VdLc90c4Zt596kS5&V{4Fy~HhN5Qo{M>+25f?cv$bE2>m)|3HM{~pC*webK2Xri zM;d+qU}T^;XiuX_JX5cSFLycdz%>Pfr9Agonjy-WDrzAdANp(NP0!jQ2R7=IT*W~i z{t%Um`JD77*2mF|!G@Opnrh+xhM|{yUNz{jsn3MjIHGLhJ*wwR#M{N00 zQhECaw$@d3*^?LUIWnf4v0&19&fc1~pt4NL-sElkHgK=IBaE42qHF5dv64*Vf>iYq z9bPfCHhi(~sb2)Grc0v!ZUU-SHQ5CkGz3Tj@n;57+;)?sh}I5%P$JF zei5ERG+Ao-Y;>C6%dre}-ji$L;A!z;F8D_&t50ktW2EqXs=+^)sF4C+z^uX9X^l~~ zvyFi0Pw4GTv`)Wl^*5vf*gvdlDVO7Nfw(zG_GaHbqBZfXw9@v^BrL?m6{peW!C1o`?z6-j z?3X}|+F(n+jw}n>vl9q9%WS7L34CPT9`tERUd`TOHpSGeig{8l9oHu;g@^ak0;x=F zSyfmNdgc@#+W*l#oW8-j-#qo)J`$swPPye$?8T?@* z8>1msrTySS$LNpr>CAist)8+>hhrBbL!P8Phi*XD*cwW1S;jTrS4(tk-j8}*ha)>Y zqmHuCY(1X=FcWJ1;U_hjT-rZC?+(oHMc(fV=5klcTjPuLr$bMf^B@vqvLaHS?h3o| z>>1-h?e@tk45U>>Pgqol42&iWzD^`u?MpSm^t_HWp->f7WdbYb;n%f4U6W~IY!9S3 zLn_9!LbUXBY%KSsAheIQsO~!C)a)zb!y3AqrbXtQw~u0fdQ>=~WHub32nNpNUl!sl z7&nX1XKAMvc1_&Hhu9F{tc+r|fu2B(mls%Ku68)pkT6$_@s}Pi&nY1WE_lR{XO2HL3VN(RfNa=|gYcF* ztNKHcKo*f+Do7p*Iy`TnkP*RvcB6r^5hIxx1mW&%GIeVj5)_fFSNYSBy-$Hw}@Nhdi*@R4Ys^rYVXKzbBl4DQJj zNiNk%RYs5Y3xK2zy?pn%q)#@@W1SHGKGjc~z9Y>Itak1EiA&h z9@MdhX#*Z9CUA1=lJ+dnx3&*O1fu9)=^3{%vx?%-nN4WHB{6ya#i60;83zw7`a!^u ze~(aZ6U9csnSvYF)V8jE`Zhz4@X)zs`2+2YT+PD5KDlf=f^{y<;ic=58+-7!=Em{7 z3%DY-rgjD!w53B`Q)&ta6f#snNSrdXK6L7uPQ%9Bah9)>vwsksKoovQ3(+8v;9XXT z>bRBv1dh$dJSYx`NwiIL1qM3>C|KjBF8D!s*g2#vRz}tY!RYttJ(xzk*}Xf6WYN@T zKE0%+nT1~7EbyD5@PoMrBQ^u~&u!pYi)PxLVhyF}NKhYess!Kbb+xQ=3mZu3x0gdV zBx1W_&)F6FyO$?IbOxryAvG@J>k4W34Q_uFAF*ok8yl_`mTu$m^l=s@n^v-J)D3`3 zHZB&44e5;?5}+L;!IRPxn*M?>3u{XVRj7_;OF5Vzgd3S(V}SvI#uTbA71qa(yz9ib^Lw>Hnf*$p?$d zcb@BL%Gq3;ZysyEHuQFBdEUuAh5r~&PW_Nw^0=wAu;q{D)X5vE7p<3v#`f;Nl{Gjp zws+%COL`N-S)Hd_zw3DrSYCGLc;2Xb{K7Y1SCu4#--hC`wU)Pc_^+}@UHjiURdI7o zXW#8LomI(T!P$xxi(4<&KHXH)8;XZw$>0;~$EgWlUE*j@;QRBRkLL{D^;$*aIjgrP z*6E?~?s&e}O8IgxobcriR<5+3`*QO}l)-`e!+)Ol<^FcCJO1jnBMr-99Ss!&wapvy zS3U2FZn%tXNpQ;l{lnhG(7TO~uV$}`8OaCX*LF?bYs{LuIWhd%q3LALf$8ZlrN5==pC>N0Rewse z?=J0&uRn8VY)es@W?lKUf8A8@VcVj%_8n{=b~kKfJGGeO%Wuf)jF%m7;C$rI90X|r zUUtVh_|jbLw(D{s$fpkc5)=_|OJI*UYuIdFhx43WQ`9nh&5%#vl76`34aK7Z*HnR5 z`gLdkAT<-Vz%N-D_L*UtG67e~_Q%(B`0-(AHw3ndq7nmsd==Mr0|1&>#T0gK-#!Y@ zK5K_80-5>0Z+~IDCByY>-qP{y>kiV#vCA1!l7Gk9NRB0PcF-aFY)BC-rz3Kz(eIFi zGl2q5xf$Nlsf+`RJhFfTg>L$i1CusP2|koZ9dLlrK@T~ysB+klcY^nfBa%+g0w*jP zfyg*bSia0?g}G5D{}n{^Im3T}p$hhdQ|by;u*bz*8ZkXgz%1I?Ggz8Ho>>hM9qjNlrZt(Rmvm{=MEVUuBSgk@;I<<~!JHy$eu_8_SA7c7 zHi~u#ufWvewxdJ`hVIq~p(ImNb+OMF3z*J?vZ{u8QP7AEL|xQOwydyY_PMBLW*fK< zyeGlV$kbS75y4I-3=9>@Y6K{}s3{ruArlSrzuOM=VY(JIn(^LbVjx|nU`KVV4T6Sf zmkc|CHCD8vY^wmFtcn*WXvpHie%kCvKU0OWrA5?aY;z!JSjNQuG4fXIAM%3EqbZu$ zXT>zJ6@j}AN(@bGm&)^u1%s$!pQ)i@Ef(rC2$IR9wP>Uo8D%08OA=aEZ`HDKSzzxX kfd^%$0}Y3x9`?7TRI+y}sE$PK5ll@=iRASbZ7r7m1x$pPa{vGU literal 0 HcmV?d00001 diff --git a/frontend/public/documents/supported-events-policy.pdf b/frontend/public/documents/supported-events-policy.pdf index 1b56b47a6ec9372224f68d93cfc308485ecc0cb5..865d848efd541eb5196bce2e11c8cda5c9b0ed1d 100644 GIT binary patch delta 34671 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 z%0D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 D8t1o~ delta 25059 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 diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt index e9e57dc..3ba988d 100644 --- a/frontend/public/robots.txt +++ b/frontend/public/robots.txt @@ -1,3 +1,4 @@ # https://www.robotstxt.org/robotstxt.html User-agent: * Disallow: +/admin/* \ No newline at end of file diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 2f85447..96e1c2b 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -13,8 +13,7 @@ import {Rankings} from "./pages/Rankings"; import {Account} from "./pages/Account"; import {AdminPage} from "./pages/AdminPage"; import * as React from "react"; -import simpleRestProvider from "ra-data-simple-rest"; - +import {Quebec} from "./pages/Quebec"; i18n.use(initReactI18next).init({ resources, @@ -43,6 +42,9 @@ const App = () => { + {/* Admin page without the navigation bar */} + }/> + {/* Normal pages */} }> }/> @@ -51,8 +53,9 @@ const App = () => { }/> }/> }/> + }/> - {["about", "organization", "faq", "rankings", "account"].map((route) => ( + {["about", "organization", "faq", "rankings", "account","quebec"].map((route) => ( { ))} }/> - - {/* Admin page without the navigation bar */} - }/> - diff --git a/frontend/src/components/AdminDashboard.tsx b/frontend/src/components/AdminDashboard.tsx new file mode 100644 index 0000000..336b07a --- /dev/null +++ b/frontend/src/components/AdminDashboard.tsx @@ -0,0 +1,13 @@ +import { Card, CardContent, CardHeader } from "@mui/material"; +import {useTranslate} from "react-admin"; + +export const AdminDashboard = () => { + const t = useTranslate(); + return ( + + + {t("admin.body")} + + + ); +} \ No newline at end of file diff --git a/frontend/src/components/Api.tsx b/frontend/src/components/Api.tsx index 9b7fe52..1be58f9 100644 --- a/frontend/src/components/Api.tsx +++ b/frontend/src/components/Api.tsx @@ -1,7 +1,8 @@ export const PRODUCTION = process.env.NODE_ENV === 'production'; + export const API_BASE_URL = - process.env.API_BASE_URL || "http://localhost:8083"; // doesn't seem to work, don't know why + process.env.REACT_APP_API_BASE_URL || "https://api.speedcubingcanara.org"; export const signIn = () => { diff --git a/frontend/src/components/MyCubingIcon.tsx b/frontend/src/components/MyCubingIcon.tsx new file mode 100644 index 0000000..88f432e --- /dev/null +++ b/frontend/src/components/MyCubingIcon.tsx @@ -0,0 +1,22 @@ +import '../cubingicon.css' +import React from 'react' +import {Icon, Tooltip} from "@mui/material"; +import {useTranslation} from "react-i18next"; +import {eventID, IconSize} from "./Types"; + +export const MyCubingIcon: React.FC<{ event: eventID, selected: boolean, size?: IconSize}> = (data) => { + const {t} = useTranslation(); + + const {event, selected, size = 'medium'} = data; + + return ( + + + + ) +} \ No newline at end of file diff --git a/frontend/src/components/Provinces.tsx b/frontend/src/components/Provinces.tsx index 761b95f..ad9db3c 100644 --- a/frontend/src/components/Provinces.tsx +++ b/frontend/src/components/Provinces.tsx @@ -1,26 +1,26 @@ import {Province} from "./Types"; const provinces: Province[] = [ - {label: 'Alberta', id: 'ab', region: 'Prairies', region_id: 'pr'}, - {label: 'British Columbia', id: 'bc', region: 'British Columbia', region_id: 'bc'}, - {label: 'Manitoba', id: 'mb', region: 'Prairies', region_id: 'pr'}, - {label: 'New Brunswick', id: 'nb', region: 'Atlantic', region_id: 'at'}, - {label: 'Newfoundland and Labrador', id: 'nl', region: 'Atlantic', region_id: 'at'}, - {label: 'Northwest Territories', id: 'nt', region: 'Territories', region_id: 'te'}, - {label: 'Nova Scotia', id: 'ns', region: 'Atlantic', region_id: 'at'}, - {label: 'Nunavut', id: 'nu', region: 'Territories', region_id: 'te'}, - {label: 'Ontario', id: 'on', region: 'Ontario', region_id: 'on'}, - {label: 'Prince Edward Island', id: 'pe', region: 'Atlantic', region_id: 'at'}, - {label: 'Quebec', id: 'qc', region: 'Quebec', region_id: 'qc'}, - {label: 'Saskatchewan', id: 'sk', region: 'Prairies', region_id: 'pr'}, - {label: 'Yukon', id: 'yt', region: 'Territories', region_id: 'te'}, + {label: 'Alberta', id: 'ab', region: 'Prairies', region_id: 'pr'}, + {label: 'British Columbia', id: 'bc', region: 'British Columbia', region_id: 'bc'}, + {label: 'Manitoba', id: 'mb', region: 'Prairies', region_id: 'pr'}, + {label: 'New Brunswick', id: 'nb', region: 'Atlantic', region_id: 'at'}, + {label: 'Newfoundland and Labrador', id: 'nl', region: 'Atlantic', region_id: 'at'}, + {label: 'Northwest Territories', id: 'nt', region: 'Territories', region_id: 'te'}, + {label: 'Nova Scotia', id: 'ns', region: 'Atlantic', region_id: 'at'}, + {label: 'Nunavut', id: 'nu', region: 'Territories', region_id: 'te'}, + {label: 'Ontario', id: 'on', region: 'Ontario', region_id: 'on'}, + {label: 'Prince Edward Island', id: 'pe', region: 'Atlantic', region_id: 'at'}, + {label: 'Quebec', id: 'qc', region: 'Quebec', region_id: 'qc'}, + {label: 'Saskatchewan', id: 'sk', region: 'Prairies', region_id: 'pr'}, + {label: 'Yukon', id: 'yt', region: 'Territories', region_id: 'te'}, - ]; +]; -export const getProvincesWithNA: () => Province[]= () => { +export const getProvincesWithNA: () => Province[] = () => { return provinces.concat({label: 'N/A', id: 'na', region: 'N/A', region_id: 'na'}); } export const getProvinces = () => { return provinces; -} \ No newline at end of file +} diff --git a/frontend/src/components/RankList.tsx b/frontend/src/components/RankList.tsx index 8f18ccc..cf41240 100644 --- a/frontend/src/components/RankList.tsx +++ b/frontend/src/components/RankList.tsx @@ -1,26 +1,31 @@ import React from 'react'; -import {DataGrid, GridColDef} from '@mui/x-data-grid'; -import {Link} from '@mui/material'; +import {DataGrid, GridColDef, frFR, enUS} from '@mui/x-data-grid'; +import {Link, Theme, useMediaQuery} from '@mui/material'; import {Ranking} from "./Types"; import {useTranslation} from "react-i18next"; +import {getLocaleOrFallback, SAVED_LOCALE} from "../locale"; export const RankList: React.FC<{ data: Ranking[] }> = ({data}) => { const {t} = useTranslation(); + const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); + + const savedLocale = localStorage.getItem(SAVED_LOCALE) as string; + const locale = getLocaleOrFallback(savedLocale); const columns: GridColDef[] = [ - {field: 'rank', headerName: t('ranklist.rank'), width: 90}, + {field: 'rank', headerName: t('ranklist.rank'), width: isSmall ? 50 : 90}, { field: 'name', headerName: t('ranklist.name'), - width: 300, + width: isSmall ? 210 : 300, renderCell: (params) => ( {params.value} ), }, - {field: 'time', headerName: t('ranklist.time'), width: 120}, + {field: 'time', headerName: t('ranklist.time'), width: isSmall ? 90 : 120}, ]; const rows = data.map((person: any) => ({ @@ -32,9 +37,16 @@ export const RankList: React.FC<{ data: Ranking[] }> = ({data}) => { })); return ( +

+ ); }; diff --git a/frontend/src/components/Roles.ts b/frontend/src/components/Roles.ts new file mode 100644 index 0000000..e8c695e --- /dev/null +++ b/frontend/src/components/Roles.ts @@ -0,0 +1,14 @@ +import {Role} from "./Types"; + +export const roles: Role[] = [ + { id: "GLOBAL_ADMIN", name: "Global Admin" }, + { id: "DIRECTOR", name: "Director" }, + { id: "WEBMASTER", name: "Webmaster" }, + { id: "SENIOR_DELEGATE", name: "Senior Delegate"}, + { id: "DELEGATE", name: "Delegate" }, + { id: "CANDIDATE_DELEGATE", name: "Junior Delegate" }, +] + +export const getRoles = () => { + return roles; +} \ No newline at end of file diff --git a/frontend/src/components/Types.ts b/frontend/src/components/Types.ts index 92cd956..49afef6 100644 --- a/frontend/src/components/Types.ts +++ b/frontend/src/components/Types.ts @@ -7,6 +7,7 @@ export interface User { province: string; wca_person: string; dob: string; + email: string; } export interface Province { @@ -16,6 +17,11 @@ export interface Province { region_id: regionID; } +export interface Role { + id: roleID; + name: string; +} + export interface ProfileEditData { province: string; } @@ -56,4 +62,8 @@ export type regionID = "at" | "qc" | "on" | "pr" | "bc" | "te" | "na"; export type useAverage = "1" | "0"; -export type chipColor = "default" | "error" | "primary" | "secondary" | "info" | "success" | "warning"; \ No newline at end of file +export type chipColor = "default" | "error" | "primary" | "secondary" | "info" | "success" | "warning"; + +export type roleID = "GLOBAL_ADMIN" | "DIRECTOR" | "WEBMASTER" | "SENIOR_DELEGATE" | "DELEGATE" | "CANDIDATE_DELEGATE" | null; + +export type IconSize = '1x' | '2x' | '3x' | '4x' | '5x' \ No newline at end of file diff --git a/frontend/src/components/UserEdit.tsx b/frontend/src/components/UserEdit.tsx new file mode 100644 index 0000000..043dedd --- /dev/null +++ b/frontend/src/components/UserEdit.tsx @@ -0,0 +1,29 @@ +import {AutocompleteArrayInput, choices, Edit, SelectInput, SimpleForm, useTranslate} from 'react-admin'; +import {Province, provinceID} from "./Types"; +import {getProvincesWithNA} from "./Provinces"; +import {roles} from "./Roles"; + +const provinces: Province[] = getProvincesWithNA(); +const provincesIds: provinceID[] = provinces.map(province => province.id); +const validateProvince = choices(provincesIds, 'Please choose one of the values'); +export const UserEdit = () => { + const t = useTranslate(); + + return ( + + + t('translation.provinces.' + option.id)} + optionValue="id" + validate={validateProvince}/> + + t('translation.account.role.' + option.id)}/> + + + ); +} \ No newline at end of file diff --git a/frontend/src/components/UserList.tsx b/frontend/src/components/UserList.tsx new file mode 100644 index 0000000..69621d4 --- /dev/null +++ b/frontend/src/components/UserList.tsx @@ -0,0 +1,42 @@ +import {useMediaQuery, Theme} from "@mui/material"; +import { + Datagrid, + List, + SimpleList, + TextField, + TextInput, + EditButton, + ArrayField +} from 'react-admin'; +import {ProvinceField, UserRoleChip} from "./UserShow"; + +export const UserList = () => { + const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); + + const userFilters = [ + , + ]; + + return ( + + {isSmall ? ( + record.name} + secondaryText={(record) => record.id} + tertiaryText={(record) => record.province} + /> + ) : ( + + + + + + + + + + + )} + + ); +} \ No newline at end of file diff --git a/frontend/src/components/UserShow.tsx b/frontend/src/components/UserShow.tsx new file mode 100644 index 0000000..f4656da --- /dev/null +++ b/frontend/src/components/UserShow.tsx @@ -0,0 +1,59 @@ +import { + ArrayField, + ChipField, + DateField, EmailField, + Show, + SimpleShowLayout, + TextField, useListContext, useRecordContext, useTranslate, +} from 'react-admin'; +import {Link} from "@mui/material"; +import {WCA_PROFILE_URL} from "../pages/Organization"; + + +export const UserRoleChip = () => { + const t = useTranslate(); + const {data} = useListContext(); + return ( +
+ {data.map((roleId, index) => { + const roleName = t('translation.account.role.' + roleId); + return ; + })} +
+ ); +}; + + +const WcaProfileUrlField = ({source}: { source: string }) => { + const record = useRecordContext(); + return record ? ( + + {record[source]} + + ) : null; +}; + + +export const ProvinceField = ({source}: { source: string }) => { + const t = useTranslate(); + const record = useRecordContext(); + const translatedLabel = t('translation.provinces.' + record[source]); + + return ; +}; + +export const UserShow = () => ( + + + + + + + + + + + + + +); \ No newline at end of file diff --git a/frontend/src/cubingicon.css b/frontend/src/cubingicon.css new file mode 100644 index 0000000..9238d10 --- /dev/null +++ b/frontend/src/cubingicon.css @@ -0,0 +1,84 @@ +@font-face { + font-family: "cubing-icons"; + src: url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), + url('data:application/x-font-ttf;charset=utf-8;base64,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cmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBjAHUAYgBpAG4AZwAtAGkAYwBvAG4AcwBSAGUAZwB1AGwAYQByAGMAdQBiAGkAbgBnAC0AaQBjAG8AbgBzAGMAdQBiAGkAbgBnAC0AaQBjAG8AbgBzAFYAZQByAHMAaQBvAG4AIAAxAC4AMABjAHUAYgBpAG4AZwAtAGkAYwBvAG4AcwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEACWV2ZW50LTIyMglldmVudC0zMzMLZXZlbnQtMzMzYmYLZXZlbnQtMzMzZm0LZXZlbnQtMzMzZnQMZXZlbnQtMzMzbWJmDGV2ZW50LTMzM21ibwtldmVudC0zMzNvaAlldmVudC00NDQLZXZlbnQtNDQ0YmYJZXZlbnQtNTU1C2V2ZW50LTU1NWJmCWV2ZW50LTY2NglldmVudC03NzcLZXZlbnQtY2xvY2sLZXZlbnQtbWFnaWMKZXZlbnQtbWlueAxldmVudC1tbWFnaWMLZXZlbnQtcHlyYW0LZXZlbnQtc2tld2IJZXZlbnQtc3ExDHBlbmFsdHktMTBlMwxwZW5hbHR5LUEzZDELcGVuYWx0eS1BNGIMcGVuYWx0eS1BNGIxDHBlbmFsdHktQTRkMQtwZW5hbHR5LUE2ZAtwZW5hbHR5LUE2ZRB1bm9mZmljaWFsLTIyMmJmFnVub2ZmaWNpYWwtMjM0NTY3cmVsYXkVdW5vZmZpY2lhbC0yMzQ1NnJlbGF5FHVub2ZmaWNpYWwtMjM0NXJlbGF5E3Vub2ZmaWNpYWwtMjM0cmVsYXkRdW5vZmZpY2lhbC0zMzNtdHMQdW5vZmZpY2lhbC02NjZiZhB1bm9mZmljaWFsLTc3N2JmFnVub2ZmaWNpYWwtY3Vydnljb3B0ZXIRdW5vZmZpY2lhbC1maXNoZXIOdW5vZmZpY2lhbC1mdG8VdW5vZmZpY2lhbC1oZWxpY29wdGVyE3Vub2ZmaWNpYWwta2lsb21pbngUdW5vZmZpY2lhbC1taW5pZ3VpbGQRdW5vZmZpY2lhbC1tcHlyYW0RdW5vZmZpY2lhbC1tc2tld2ISdW5vZmZpY2lhbC1tdGV0cmFtFnVub2ZmaWNpYWwtcHlyYW1vcnBoaXgPdW5vZmZpY2lhbC1yZWRpAAAAAAA=') format('truetype'); + font-weight: normal; + font-style: normal; +} + +.cubing-icon { + vertical-align: middle; +} + +.cubing-icon:before { + display: inline-block; + font-family: "cubing-icons"; + font-style: normal; + font-weight: normal; + line-height: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: -15%; +} + +.cubing-icon-lg { + font-size: 1.3333333333333333em; + line-height: 0.75em; +} +.cubing-icon-2x { font-size: 2em !important; } +.cubing-icon-3x { font-size: 3em !important; } +.cubing-icon-4x { font-size: 4em !important; } +.cubing-icon-5x { font-size: 5em !important; } +.cubing-icon-fw { + width: 1.2857142857142858em; + text-align: center; +} + +.cubing-icon.event-222:before { content: "\EA01" } +.cubing-icon.event-333:before { content: "\EA02" } +.cubing-icon.event-333bf:before { content: "\EA03" } +.cubing-icon.event-333fm:before { content: "\EA04" } +.cubing-icon.event-333ft:before { content: "\EA05" } +.cubing-icon.event-333mbf:before { content: "\EA06" } +.cubing-icon.event-333mbo:before { content: "\EA07" } +.cubing-icon.event-333oh:before { content: "\EA08" } +.cubing-icon.event-444:before { content: "\EA09" } +.cubing-icon.event-444bf:before { content: "\EA0A" } +.cubing-icon.event-555:before { content: "\EA0B" } +.cubing-icon.event-555bf:before { content: "\EA0C" } +.cubing-icon.event-666:before { content: "\EA0D" } +.cubing-icon.event-777:before { content: "\EA0E" } +.cubing-icon.event-clock:before { content: "\EA0F" } +.cubing-icon.event-magic:before { content: "\EA10" } +.cubing-icon.event-minx:before { content: "\EA11" } +.cubing-icon.event-mmagic:before { content: "\EA12" } +.cubing-icon.event-pyram:before { content: "\EA13" } +.cubing-icon.event-skewb:before { content: "\EA14" } +.cubing-icon.event-sq1:before { content: "\EA15" } +.cubing-icon.penalty-10e3:before { content: "\EA16" } +.cubing-icon.penalty-A3d1:before { content: "\EA17" } +.cubing-icon.penalty-A4b:before { content: "\EA18" } +.cubing-icon.penalty-A4b1:before { content: "\EA19" } +.cubing-icon.penalty-A4d1:before { content: "\EA1A" } +.cubing-icon.penalty-A6c:before { content: "\EA1B" } +.cubing-icon.penalty-A6d:before { content: "\EA1C" } +.cubing-icon.penalty-A6e:before { content: "\EA1D" } +.cubing-icon.unofficial-222bf:before { content: "\EA1E" } +.cubing-icon.unofficial-234567relay:before { content: "\EA1F" } +.cubing-icon.unofficial-23456relay:before { content: "\EA20" } +.cubing-icon.unofficial-2345relay:before { content: "\EA21" } +.cubing-icon.unofficial-234relay:before { content: "\EA22" } +.cubing-icon.unofficial-333mts:before { content: "\EA23" } +.cubing-icon.unofficial-666bf:before { content: "\EA24" } +.cubing-icon.unofficial-777bf:before { content: "\EA25" } +.cubing-icon.unofficial-curvycopter:before { content: "\EA26" } +.cubing-icon.unofficial-fisher:before { content: "\EA27" } +.cubing-icon.unofficial-fto:before { content: "\EA28" } +.cubing-icon.unofficial-helicopter:before { content: "\EA29" } +.cubing-icon.unofficial-kilominx:before { content: "\EA2A" } +.cubing-icon.unofficial-miniguild:before { content: "\EA2B" } +.cubing-icon.unofficial-mpyram:before { content: "\EA2C" } +.cubing-icon.unofficial-mskewb:before { content: "\EA2D" } +.cubing-icon.unofficial-mtetram:before { content: "\EA2E" } +.cubing-icon.unofficial-pyramorphix:before { content: "\EA2F" } +.cubing-icon.unofficial-redi:before { content: "\EA30" } \ No newline at end of file diff --git a/frontend/src/dataProvider.ts b/frontend/src/dataProvider.ts new file mode 100644 index 0000000..c7d8341 --- /dev/null +++ b/frontend/src/dataProvider.ts @@ -0,0 +1,130 @@ +import {fetchUtils} from 'react-admin'; +import {stringify} from 'query-string'; +import {API_BASE_URL} from "./components/Api"; +import {DataProvider} from "ra-core/dist/cjs/types"; + +const apiUrl = API_BASE_URL +const httpClient = (url: string, options: any = {}) => { + if (!options.headers) { + options.headers = new Headers({ + Accept: 'application/json' + }); + } + options.credentials = 'include'; + return fetchUtils.fetchJson(url, options); +} + +const convertResponseToDataProviderFormat = (response: any) => { + return { + data: response.data, + pageInfo: { + hasPreviousPage: response.pageInfo.hasPreviousPage, + hasNextPage: response.pageInfo.hasNextPage, + }, + }; +}; + +const dataProvider: DataProvider = { + getList: (resource: any, params: { + pagination: { page: any; perPage: any; }; + sort: { field: any; order: any; }; + filter: any; + }) => { + const {page, perPage} = params.pagination; + const {field, order} = params.sort; + const query = { + sort_field: JSON.stringify(field), + sort_order: JSON.stringify(order), + page: JSON.stringify(page), + per_page: JSON.stringify(perPage), + filter: JSON.stringify(params.filter), + cursor: page === 1 ? null : localStorage.getItem('cursor'), + }; + const url = `${apiUrl}/admin/get_users?${stringify(query)}`; + + return httpClient(url) + .then(({headers, json}) => { + localStorage.setItem('cursor', json.cursor); + return convertResponseToDataProviderFormat(json); + }); + }, + + + getOne: (resource: any, params: { id: any; }) => + httpClient(`${apiUrl}/user_info/${params.id}`).then(({json}) => ({ + data: json, + })), + + getMany: (resource: any, params: { ids: any; }) => { + const query = { + filter: JSON.stringify({ids: params.ids}), + }; + const url = `${apiUrl}/admin/get_users_by_id?${stringify(query)}`; + return httpClient(url).then(({json}) => ({data: json})); + }, + + getManyReference: (resource: any, params: {//not setup + pagination: { page: any; perPage: any; }; + sort: { field: any; order: any; }; + filter: any; + target: any; + id: any; + }) => { + const {page, perPage} = params.pagination; + const {field, order} = params.sort; + const query = { + sort: JSON.stringify([field, order]), + range: JSON.stringify([(page - 1) * perPage, page * perPage - 1]), + filter: JSON.stringify({ + ...params.filter, + [params.target]: params.id, + }), + }; + const url = `${apiUrl}/${resource}?${stringify(query)}`; + + return httpClient(url).then(({headers, json}) => ( + Promise.resolve(convertResponseToDataProviderFormat(json)) + )); + }, + + create: (resource: any, params: { data: any; }) =>//not setup + httpClient(`${apiUrl}/${resource}`, { + method: 'POST', + body: JSON.stringify(params.data), + }).then(({json}) => ({ + data: {...params.data, id: json.id}, + })), + + update: (resource: any, params: { id: any; data: any; }) => + httpClient(`${apiUrl}/edit/${params.id}`, { + method: 'POST', + body: JSON.stringify(params.data), + }).then(({json}) => ({data: json})), + + updateMany: (resource: any, params: { ids: any; data: any; }) => { //not setup + const query = { + filter: JSON.stringify({id: params.ids}), + }; + return httpClient(`${apiUrl}/${resource}?${stringify(query)}`, { + method: 'PUT', + body: JSON.stringify(params.data), + }).then(({json}) => ({data: json})); + }, + + delete: (resource: any, params: { id: any; }) => + httpClient(`${apiUrl}/${resource}/${params.id}`, { + method: 'DELETE', + }).then(({json}) => ({data: json})), + + deleteMany: (resource, params) => { + const query = { + filter: JSON.stringify({id: params.ids}), + }; + return httpClient(`${apiUrl}/${resource}?${stringify(query)}`, { + method: 'DELETE', + body: JSON.stringify(params), + }).then(({json}) => ({data: json})); + }, +}; + +export default dataProvider; diff --git a/frontend/src/i18nProvider.ts b/frontend/src/i18nProvider.ts new file mode 100644 index 0000000..f5ec5a3 --- /dev/null +++ b/frontend/src/i18nProvider.ts @@ -0,0 +1,17 @@ +import {resolveBrowserLocale, TranslationMessages} from 'react-admin'; +import polyglotI18nProvider from 'ra-i18n-polyglot'; +import {resources} from './locale'; + +interface Translations { + [locale: string]: TranslationMessages; +} + +const translations: Translations = resources; +export const i18nProvider = polyglotI18nProvider( + (locale) => translations[locale] ? translations[locale] : translations.en, + resolveBrowserLocale(), + [ + {locale: 'en', name: 'English'}, + {locale: 'fr', name: 'Français'} + ], +); diff --git a/frontend/src/locale.ts b/frontend/src/locale.ts index 3b17e62..48013e5 100644 --- a/frontend/src/locale.ts +++ b/frontend/src/locale.ts @@ -1,3 +1,6 @@ +import englishMessages from "ra-language-english"; +import frenchMessages from "ra-language-french"; + export const LOCALES = {en: "en", fr: "fr"} as const; export const INVERTED_LOCALES = {en: "fr", fr: "en"} as const; export const LOCALE_TO_LANGUAGE = {en: "English", fr: "Français"} as const; @@ -96,6 +99,17 @@ export const resources = { q: "Is Speedcubing Canada affiliated with the World Cube Association?", a: "Speedcubing Canada operates independently of the World Cube Association, with a separate Board of Directors. Speedcubing Canada is recognized as Canada’s official WCA regional organization.", }, + "why-doesnt-my-name-appear-on-the-rankings": { + q: "Why doesn’t my name appear on the rankings?", + a: "Province residence is self-reported, so you'll need to tell us your province:\n" + + "- Create an account on the WCA website and link it with your WCA ID.\n" + + "- Log in to the Speedcubing Canada website through the account tab.\n" + + "- Edit your profile and set your home province. Since this also affects Regional Championship eligibility, you can only do this once per year.", + }, + "why-does-this-person-appear-in-my-province": { + q: "Why does this person appear in my province? They don’t live here!", + a: "Please contact us and we'll be happy to investigate. ", + }, }, provinces: { ab: "Alberta", @@ -112,6 +126,7 @@ export const resources = { sk: "Saskatchewan", yt: "Yukon", na: "N/A", + null: "N/A", }, province_with_pronouns: { ab: "Alberta", @@ -160,20 +175,67 @@ export const resources = { error: "There was an error updating your account.", dob: "Date of Birth", region: "Region", + admin: "Admin Section", + email: "Email", }, rankings: { title: "Rankings", single: "Single", average: "Average", rankfor: "Rankings for", + event: "Event", unavailable: "Ranking Unavailable", choose: "Choose a province", + in: "in", + for: "for", }, ranklist: { rank: "Rank", name: "Name", time: "Time", }, + events: { + _333: "3x3x3", + _222: "2x2x2", + _444: "4x4x4", + _555: "5x5x5", + _666: "6x6x6", + _777: "7x7x7", + _333bf: "3x3x3 Blindfolded", + _333oh: "3x3x3 One-Handed", + _333fm: "3x3x3 Fewest Moves", + _skewb: "Skewb", + _pyram: "Pyraminx", + _clock: "Clock", + _minx: "Megaminx", + _sq1: "Square-1", + _444bf: "4x4x4 Blindfolded", + _555bf: "5x5x5 Blindfolded", + _333mbf: "3x3x3 Multi-Blind", + }, + quebec: { + body: "If you are not redirected automatically, click the link below.", + } + }, + ...englishMessages, + resources: { + Users: { + name: 'User |||| Users', + fields: { + id: 'Id', + name: 'Name', + province: 'Province', + roles: 'Role(s)', + wca_person: 'WCAID', + dob: 'Date of Birth', + }, + }, + }, + admin: { + title: "Welcome to the Admin Section", + body: "Please note that you can filter users using the start of their first name. If you want to use the family name, you must write the first name first. You may also use exact WCAID to filter.\n" + + " It's also important to know that you may move pages forward but not backwards. If you want to see a previous results, you need to go back to page one and then move forward again (or juste search the user).\n" + + "Sorting or removing people does not work currently. If you want to make someone disappear from the rankings, put his/her province to N/A.", }, }, [LOCALES.fr]: { @@ -191,7 +253,7 @@ export const resources = { organization: "Organisation", faq: "FAQ", account: "Compte", - rankings: "Classement", + rankings: "Classements", }, about: { title: "À propos", @@ -259,6 +321,17 @@ export const resources = { q: "Speedcubing Canada est-elle affiliée à la World Cube Association ?", a: "Speedcubing Canada fonctionne indépendamment de la World Cube Association, avec un conseil d'administration distinct. Speedcubing Canada est reconnue comme l'organisation régionale officielle du Canada par la WCA.", }, + "why-doesnt-my-name-appear-on-the-rankings": { + q : "Pourquoi mon nom n'apparaît-il pas dans les classements ?", + a: "La province de résidence est auto-déclarée, vous devez donc nous indiquer votre province:\n" + + "- Créez un compte sur le site de la WCA et reliez-le à votre WCAID.\n" + + "- Connectez-vous au site web de Speedcubing Canada via l'onglet compte.\n" + + "- Modifiez votre profil et définissez votre province d'origine. Comme cela affecte également l'éligibilité aux championnats régionaux, vous ne pouvez le faire qu'une seule fois par an.", + }, + "why-does-this-person-appear-in-my-province": { + q : "Pourquoi cette personne apparaît-elle dans ma province ? Elle ne vit pas ici !", + a : "Veuillez nous contacter et nous nous ferons un plaisir d'enquêter. ", + }, }, provinces: { ab: "Alberta", @@ -275,6 +348,7 @@ export const resources = { sk: "Saskatchewan", yt: "Yukon", na: "N/A", + null: "N/A", }, province_with_pronouns: { ab: "l'Alberta", @@ -323,20 +397,67 @@ export const resources = { error: "Une erreur s'est produite lors de la mise à jour de votre compte.", dob: "Date de naissance", region: "Région", + admin: "Section d'administration", + email: "Courriel", }, rankings: { title: "Classements", single: "Single", average: "Moyenne", rankfor: "Classement pour", + event: "Épreuve", unavailable: "Classement indisponible", choose: "Choisissez une province", + in: "au", + for: "en", }, ranklist: { rank: "Rang", name: "Nom", time: "Temps", }, + events: { + _333: "3x3x3", + _222: "2x2x2", + _444: "4x4x4", + _555: "5x5x5", + _666: "6x6x6", + _777: "7x7x7", + _333bf: "3x3x3 à l'aveugle", + _333oh: "3x3x3 à une main", + _333fm: "3x3x3 résolution optimisée", + _skewb: "Skewb", + _pyram: "Pyraminx", + _clock: "Clock", + _minx: "Mégaminx", + _sq1: "Square-1", + _444bf: "4x4x4 à l'aveugle", + _555bf: "5x5x5 à l'aveugle", + _333mbf: "3x3x3 Multi-Blind", + }, + quebec: { + body: "Si vous n'êtes pas redirigés, cliquez sur le lien ci-dessous." + } + }, + ...frenchMessages, + resources: { + Users: { + name: 'Utilisateur |||| Utilisateurs', + fields: { + id: 'Id', + name: 'Nom', + province: 'Province', + roles: 'Rôle(s)', + wca_person: 'WCAID', + dob: 'Date de naissance', + }, + }, + }, + admin: { + title: "Bienvenue dans la section d'administration", + body: "Veuillez noter que vous pouvez filtrer les utilisateurs en utilisant le début de leur prénom. Si vous voulez utiliser le nom de famille, vous devez écrire le prénom en premier. Vous pouvez également utiliser le WCAID exact pour filtrer.\n" + + " Il est également important de savoir que vous pouvez avancer dans les pages mais pas aller en arrière. Si vous voulez voir un résultat précédent, vous devez revenir à la page une et avancer à nouveau (ou simplement rechercher l'utilisateur)." + + " Il n'est pas possible d'utiliser la fonctionnalité permettant de ranger les colonnes ni de supprimer des utilisateurs. Si vous voulez faire disparaitre un utilisateur des classements, changez sa province pour N/A.", }, }, }; \ No newline at end of file diff --git a/frontend/src/pages/Account.tsx b/frontend/src/pages/Account.tsx index 88e9f3a..3b2f6d6 100644 --- a/frontend/src/pages/Account.tsx +++ b/frontend/src/pages/Account.tsx @@ -1,12 +1,7 @@ import {Trans, useTranslation} from "react-i18next"; import {useEffect, useReducer, useState} from "react"; -import { - AlertColor, - Box, - Container, Typography, -} from "@mui/material"; +import {AlertColor, Box, Container, Theme, Typography, useMediaQuery,} from "@mui/material"; import Button from '@mui/material/Button'; -import Grid from '@mui/material/Unstable_Grid2'; import TextField from '@mui/material/TextField'; import Autocomplete from '@mui/material/Autocomplete'; import {DateField} from "@mui/x-date-pickers"; @@ -23,9 +18,10 @@ import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; import dayjs from "dayjs"; import {API_BASE_URL, signIn, signOut} from '../components/Api'; -import {Province, ChipData, chipColor, User, State, Action} from "../components/Types"; +import {Action, chipColor, ChipData, Province, State, User} from "../components/Types"; import httpClient from "../httpClient"; import {getProvincesWithNA} from "../components/Provinces"; +import {checkAdmin} from "./AdminPage"; const initialState: State = { @@ -56,6 +52,7 @@ const reducer = (state: State, action: Action) => { export const Account = () => { const {t} = useTranslation(); + const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); const [province, setProvince] = useState(null); const [chipData, setChipData] = useState([]); @@ -75,7 +72,7 @@ export const Account = () => { } const defaultDOB = user?.dob ? dayjs(user.dob) : dayjs('2022-01-01'); const defaultWCAID = user?.wca_person || ""; - + const defaultEmail: string = user?.email || ""; const showAlert = (alertType: AlertColor, alertContent: string) => { alertDispatch({ @@ -126,19 +123,13 @@ export const Account = () => { const resp = await httpClient.post(API_BASE_URL + "/edit", { province: province ? province.id : 'na', }); - if (resp.data.success === true) { + if (resp.status === 200) { showAlert("success", t("account.success")); } else { showAlert("error", t("account.error")); } } catch (error: any) { - if (error.response.status === 401) { - console.log("Invalid credentials" + error.response.status); - } else if (error.response.status === 403) { - console.log("Forbidden" + error.response.status); - } else if (error.response.status === 404) { - console.log("Not found" + error.response.status); - } + console.log(error); } }; @@ -147,6 +138,12 @@ export const Account = () => { signIn(); } + const handleAdmin = () => { + window.location.assign('/admin'); + } + + const isAdmin = checkAdmin(user); + return ( @@ -168,28 +165,25 @@ export const Account = () => { {t("account.hi")}{user.name}! - { - setProvince(newValue); - if (newValue?.id === "qc") { - console.log("Vive le Québec libre!"); - } - }} - renderInput={(params) => } - getOptionLabel={(option) => t('provinces.' + option.id)} - isOptionEqualToValue={(option, value) => option.id === value.id} - /> - - {t("account.policy")} - - - + + { + setProvince(newValue); + if (newValue?.id === "qc") { + console.log("Vive le Québec libre!"); + } + }} + renderInput={(params) => } + getOptionLabel={(option) => t('provinces.' + option.id)} + isOptionEqualToValue={(option, value) => option.id === value.id} + /> { value={province ? t('regions.' + province?.region_id) : t('regions.' + defaultProvince.region_id)} variant="outlined" /> + + + {t("account.policy")} + + + { label={t("account.dob")} defaultValue={defaultDOB} format="DD-MM-YYYY" + InputProps={{ + style: {width: `${defaultEmail.length * 10 > 280 ? 145 : 280}px`}, + }} /> + + + + {t("account.roles")} @@ -228,7 +245,8 @@ export const Account = () => { component="ul" > {chipData.map((data) => { - const color: chipColor | undefined = data.label === 'GLOBAL_ADMIN' ? "primary" : "default" + const color: chipColor | undefined = data.label === 'GLOBAL_ADMIN' + || data.label === "DIRECTOR" || data.label === 'WEBMASTER' ? "primary" : "default" return ( @@ -242,26 +260,33 @@ export const Account = () => { - - - - - + onClick={handleSaveProfile}> + {t("account.save")} + + {isAdmin && ( - - + ) + } + + {alertState.alert && ( { + return !!(user?.roles.includes("GLOBAL_ADMIN") + || user?.roles.includes("DIRECTOR") + || user?.roles.includes("WEBMASTER")); +} + +const SettingsButton = () => ( + + + +); + +const MyAppBar = () => ( + + + + +); +const MyLayout = (props: JSX.IntrinsicAttributes & LayoutProps) => ; export const AdminPage = () => { - const {t} = useTranslation(); + + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + (async () => { + try { + const resp = await httpClient.get(API_BASE_URL + "/user_info"); + setUser(resp.data); + + } catch (error) { + console.log("Not authenticated"); + } + setLoading(false); + })(); + }, []); + + + const isAdmin = checkAdmin(user); return ( - - +
+ {loading ? + + + + + : isAdmin ? ( + + - + ) + : + + + You are not authorized to access this page. + + + } +
); -} \ No newline at end of file +} diff --git a/frontend/src/pages/FAQ.tsx b/frontend/src/pages/FAQ.tsx index e78ca20..2551035 100644 --- a/frontend/src/pages/FAQ.tsx +++ b/frontend/src/pages/FAQ.tsx @@ -1,63 +1,71 @@ -import { Box, Container, Typography } from "@mui/material"; -import { useTranslation, Trans } from "react-i18next"; -import { Link } from "../components/Link"; -import { LINKS } from "./links"; +import {Box, Container, Typography} from "@mui/material"; +import {useTranslation, Trans} from "react-i18next"; +import {Link} from "../components/Link"; +import {LINKS} from "./links"; const QUESTIONS = [ - "when-is-the-next-wca-competition-in-my-area", - "im-going-to-my-first-wca-competition-what-do-i-need-to-know", - "who-are-the-wca-delegates-in-my-area", - "how-can-i-volunteer-with-speedcubing-canada", - "affiliated-with-the-wca", - "why-the-change-from-canadiancubing-to-speedcubing-canada", + "when-is-the-next-wca-competition-in-my-area", + "im-going-to-my-first-wca-competition-what-do-i-need-to-know", + "who-are-the-wca-delegates-in-my-area", + "why-doesnt-my-name-appear-on-the-rankings", + "why-does-this-person-appear-in-my-province", + "how-can-i-volunteer-with-speedcubing-canada", + "affiliated-with-the-wca", + "why-the-change-from-canadiancubing-to-speedcubing-canada", ] as const; const INTERPOLATE = { - "when-is-the-next-wca-competition-in-my-area": { - wcaComps: , - mailingList: , - }, - "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { - regs: , - firstComp: , - compBasics: , - }, - "who-are-the-wca-delegates-in-my-area": { - delegates: , - }, - "how-can-i-volunteer-with-speedcubing-canada": {}, - "affiliated-with-the-wca": { - regionalOrg: , - }, - "why-the-change-from-canadiancubing-to-speedcubing-canada": {}, + "when-is-the-next-wca-competition-in-my-area": { + wcaComps: , + mailingList: , + }, + "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { + regs: , + firstComp: , + compBasics: , + }, + "who-are-the-wca-delegates-in-my-area": { + delegates: , + }, + "why-doesnt-my-name-appear-on-the-rankings": { + wca: , + }, + "why-does-this-person-appear-in-my-province": { + report: , + }, + "how-can-i-volunteer-with-speedcubing-canada": {}, + "affiliated-with-the-wca": { + regionalOrg: , + }, + "why-the-change-from-canadiancubing-to-speedcubing-canada": {}, } as const; export const FAQ = () => { - const { t } = useTranslation(); + const {t} = useTranslation(); - return ( - - - - {t("faq.title")} - + return ( + + + + {t("faq.title")} + - {QUESTIONS.map((key) => ( - - - {t(`faq.${key}.q`)} - - - {t(`faq.${key}.a`)} - - - ))} - - - ); + {QUESTIONS.map((key) => ( + + + {t(`faq.${key}.q`)} + + + {t(`faq.${key}.a`)} + + + ))} + + + ); }; diff --git a/frontend/src/pages/Organization.tsx b/frontend/src/pages/Organization.tsx index 4314b4d..d6ca66e 100644 --- a/frontend/src/pages/Organization.tsx +++ b/frontend/src/pages/Organization.tsx @@ -23,7 +23,7 @@ const DIRECTORS = [ { name: "Liam Orovec", wcaId: "2014OROV01" }, ] as const; -const WCA_PROFILE_URL = "https://www.worldcubeassociation.org/persons/"; +export const WCA_PROFILE_URL = "https://www.worldcubeassociation.org/persons/"; export const Organization = () => { const { t } = useTranslation(); diff --git a/frontend/src/pages/Quebec.tsx b/frontend/src/pages/Quebec.tsx new file mode 100644 index 0000000..18d0084 --- /dev/null +++ b/frontend/src/pages/Quebec.tsx @@ -0,0 +1,24 @@ +import {useTranslation} from "react-i18next"; +import {Box, Container, Typography} from "@mui/material"; +import {Link} from "../components/Link"; +import {LINKS} from "./links"; +export const Quebec = () => { + const {t} = useTranslation(); + window.location.href = LINKS.DISCORD_QC; + + return ( + + + + {t("provinces.qc")} + + + {t("quebec.body")} + + Discord + + + + ); + } +; \ No newline at end of file diff --git a/frontend/src/pages/Rankings.tsx b/frontend/src/pages/Rankings.tsx index 10726d8..3abb513 100644 --- a/frontend/src/pages/Rankings.tsx +++ b/frontend/src/pages/Rankings.tsx @@ -1,26 +1,33 @@ import {useTranslation} from "react-i18next"; import { Box, - Container, Typography, + Container, Theme, ToggleButton, ToggleButtonGroup, Typography, useMediaQuery, } from "@mui/material"; import * as React from 'react'; +import {useEffect, useState} from "react"; import TextField from "@mui/material/TextField"; import Autocomplete from "@mui/material/Autocomplete"; import Stack from '@mui/material/Stack'; import Switch from '@mui/material/Switch'; import CircularProgress from "@mui/material/CircularProgress"; -import {eventID, Province, provinceID, useAverage} from "../components/Types"; +import {eventID, Province} from "../components/Types"; import {getProvinces} from "../components/Provinces"; -import {useEffect, useState} from "react"; -import {API_BASE_URL} from "../components/Api"; +import {API_BASE_URL, PRODUCTION} from "../components/Api"; import httpClient from "../httpClient"; import {RankList} from "../components/RankList"; +import {MyCubingIcon} from "../components/MyCubingIcon"; const provinces: Province[] = getProvinces(); +const events: eventID[] = [ + '333', '222', '444', '555', '666', '777', '333bf', '333fm', + '333oh', 'clock', 'minx', 'pyram', 'skewb', 'sq1', '444bf', '555bf', + '333mbf', +] export const Rankings = () => { const {t} = useTranslation(); + const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); const [province, setProvince] = useState(provinces[0]); const [eventId, setEventId] = useState("333"); @@ -29,7 +36,6 @@ export const Rankings = () => { const switchHandler = (event: { target: { checked: boolean | ((prevState: boolean) => boolean); }; }) => { setUseAverage(event.target.checked); - console.log(ranking); }; const handleProvinceChange = (event: any, newValue: React.SetStateAction) => { @@ -43,6 +49,19 @@ export const Rankings = () => { } }; + const handleEventChange = (event: React.MouseEvent, newEvent: eventID | null) => { + if (newEvent === null) { + return; + } + setEventId(newEvent); + } + const handleEventChangeMobile = (event: any, newValue: React.SetStateAction) => { + if (newValue === null) { + return; + } + setEventId(newValue as eventID); + } + const [ranking, setRanking] = useState(null); @@ -56,19 +75,19 @@ export const Rankings = () => { return null; } - //const resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + province?.id + "/" + use_average_str); - const resp = await httpClient.get(API_BASE_URL + "/test_rankings"); + let resp; + if (!PRODUCTION) { + resp = await httpClient.get(API_BASE_URL + "/test_rankings?event=" + eventId + "&province=" + province?.id + "&use_average=" + use_average_str + "&test=1");//allows to not have the WCA DB locally + } else { + resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + province?.id + "/" + use_average_str); + } setRanking(resp.data); } catch (error: any) { if (error?.code === "ERR_NETWORK") { console.log("Network error" + error); - } else if (error?.response.status === 500) { - console.log("Internal server error" + error.response.data); - } else if (error?.response.status === 404) { - console.log("Not found" + error.response.data); } else { - console.log("Unknown error" + error); + console.log("Error" + error); } } setLoading(false); @@ -79,41 +98,72 @@ export const Rankings = () => { return ( - + {t("rankings.title")} - - } - getOptionLabel={(option) => t('provinces.' + option.id)} - isOptionEqualToValue={(option, value) => option.id === value.id} - /> - - - {t("rankings.single")} - - {t("rankings.average")} + + {isSmall ? ( + } + getOptionLabel={(option) => t('events._' + option)} + /> + ) : ( + + + {events.map((wcaEvent) => ( + + + + ))} + + )} + + + } + getOptionLabel={(option) => t('provinces.' + option.id)} + isOptionEqualToValue={(option, value) => option.id === value.id} + /> + + + {t("rankings.single")} + + {t("rankings.average")} + + {loading ? - + : (ranking != null && province != null) ? (
{t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)} + marginY="1rem">{t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)} {t('rankings.in')} {t('events._' + eventId)} {t('rankings.for')} {useAverage ? t("rankings.average") : t("rankings.single")}
@@ -121,7 +171,7 @@ export const Rankings = () => {
{t("rankings.choose")}
- ): ( + ) : (
{t("rankings.unavailable")}
diff --git a/frontend/src/pages/documents.ts b/frontend/src/pages/documents.ts index 654df4b..0be8316 100644 --- a/frontend/src/pages/documents.ts +++ b/frontend/src/pages/documents.ts @@ -14,7 +14,15 @@ export const DOCUMENTS = { { name: "By-laws (v1.3)", id: "by-laws-v1.3" }, { name: "By-laws (v1.4)", id: "by-laws-v1.4" }, ], - minutes: [ + minutes: [ + { + name: "Directors' Meeting July 20, 2023", + id: "directors-meeting-jul-20-2023", + }, + { + name: "Directors' Meeting May 16, 2023", + id: "directors-meeting-may-16-2023", + }, { name: "Directors' Meeting April 19, 2023", id: "directors-meeting-apr-19-2023", @@ -53,6 +61,10 @@ export const DOCUMENTS = { name: "Speedcubing Canada Supported Events Policy", id: "supported-events-policy", }, + { + name: "Speedcubing Canada Major Championship Reimbursement Transfer Policy", + id: "major-championship-reimbursement-transfer-policy", + }, { name: "Speedcubing Canada Reimbursement Policy (v1.0)", id: "reimbursement-policy-v1.0", @@ -61,10 +73,22 @@ export const DOCUMENTS = { name: "Speedcubing Canada Reimbursement Policy (v1.1)", id: "reimbursement-policy-v1.1", }, + { + name: "Speedcubing Canada Reimbursement Policy (v1.2)", + id: "reimbursement-policy-v1.2", + }, { name: "Speedcubing Canada Supported Events Policy (v1.0)", id: "supported-events-policy-v1.0", }, + { + name: "Speedcubing Canada Supported Events Policy (v1.1)", + id: "supported-events-policy-v1.1", + }, + { + name: "Speedcubing Canada Major Championship Reimbursement Transfer Policy (v1.0)", + id: "major-championship-reimbursement-transfer-policy", + }, ], corporate: [ { diff --git a/frontend/src/pages/links.ts b/frontend/src/pages/links.ts index 69dcd67..0bdd079 100644 --- a/frontend/src/pages/links.ts +++ b/frontend/src/pages/links.ts @@ -16,4 +16,6 @@ export const LINKS = { }, FIRST_COMP: "https://youtu.be/xK2ycvTfgUY", COMP_BASICS: "https://youtu.be/vz1V0Gv0qX0", + DISCORD_QC: "https://discord.gg/BTwYPg4qcJ", + REPORT: "mailto:software@speedcubingcanada.org" } as const; From db92c5452ec22eaf25fb1c2b76764dfb6c34887f Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 5 Sep 2023 22:53:12 -0400 Subject: [PATCH 55/72] renaming frontend directory to app to ease the merging process --- {frontend => app}/.gcloudignore | 0 {frontend => app}/.gitignore | 0 {frontend => app}/app.yaml | 0 {frontend => app}/package-lock.json | 0 {frontend => app}/package.json | 0 {frontend => app}/public/android-chrome-192x192.png | Bin {frontend => app}/public/android-chrome-512x512.png | Bin {frontend => app}/public/apple-touch-icon.png | Bin {frontend => app}/public/browserconfig.xml | 0 .../annual-members-meeting-jan-29-2023.pdf | Bin {frontend => app}/public/documents/by-laws-v1.0.pdf | Bin {frontend => app}/public/documents/by-laws-v1.1.pdf | Bin {frontend => app}/public/documents/by-laws-v1.2.pdf | Bin {frontend => app}/public/documents/by-laws-v1.3.pdf | Bin {frontend => app}/public/documents/by-laws-v1.4.pdf | Bin {frontend => app}/public/documents/by-laws.pdf | Bin .../documents/certificate-of-incorporation.pdf | Bin .../documents/directors-meeting-apr-19-2023.pdf | Bin .../documents/directors-meeting-apr-9-2022.pdf | Bin .../documents/directors-meeting-aug-12-2022.pdf | Bin .../documents/directors-meeting-jul-20-2023.pdf | Bin .../documents/directors-meeting-may-16-2023.pdf | Bin .../documents/directors-meeting-may-25-2022.pdf | Bin .../first-directors-meeting-feb-26-2022.pdf | Bin .../documents/first-members-meeting-may-7-2022.pdf | Bin ...mpionship-reimbursement-transfer-policy-v1.0.pdf | Bin ...r-championship-reimbursement-transfer-policy.pdf | Bin .../public/documents/reimbursement-policy-v1.0.pdf | Bin .../public/documents/reimbursement-policy-v1.1.pdf | Bin .../public/documents/reimbursement-policy-v1.2.pdf | Bin .../public/documents/reimbursement-policy.pdf | Bin .../documents/supported-events-policy-v1.0.pdf | Bin .../documents/supported-events-policy-v1.1.pdf | Bin .../public/documents/supported-events-policy.pdf | Bin {frontend => app}/public/favicon-16x16.png | Bin {frontend => app}/public/favicon-32x32.png | Bin {frontend => app}/public/favicon.ico | Bin {frontend => app}/public/index.html | 0 {frontend => app}/public/logo.svg | 0 {frontend => app}/public/mstile-150x150.png | Bin {frontend => app}/public/robots.txt | 0 {frontend => app}/public/safari-pinned-tab.svg | 0 {frontend => app}/public/site.webmanifest | 0 {frontend => app}/src/App.tsx | 0 {frontend => app}/src/components/AdminDashboard.tsx | 0 {frontend => app}/src/components/Api.tsx | 0 {frontend => app}/src/components/Base.tsx | 0 {frontend => app}/src/components/Link.tsx | 0 {frontend => app}/src/components/MyCubingIcon.tsx | 0 {frontend => app}/src/components/Provinces.tsx | 0 {frontend => app}/src/components/RankList.tsx | 0 {frontend => app}/src/components/Roles.ts | 0 {frontend => app}/src/components/Types.ts | 0 {frontend => app}/src/components/UserEdit.tsx | 0 {frontend => app}/src/components/UserList.tsx | 0 {frontend => app}/src/components/UserShow.tsx | 0 {frontend => app}/src/cubingicon.css | 0 {frontend => app}/src/dataProvider.ts | 0 {frontend => app}/src/httpClient.tsx | 0 {frontend => app}/src/i18nProvider.ts | 0 {frontend => app}/src/index.css | 0 {frontend => app}/src/index.tsx | 0 {frontend => app}/src/locale.ts | 0 {frontend => app}/src/pages/About.tsx | 0 {frontend => app}/src/pages/Account.tsx | 0 {frontend => app}/src/pages/AdminPage.tsx | 0 {frontend => app}/src/pages/FAQ.tsx | 0 {frontend => app}/src/pages/Home.tsx | 0 {frontend => app}/src/pages/Organization.tsx | 0 {frontend => app}/src/pages/Quebec.tsx | 0 {frontend => app}/src/pages/Rankings.tsx | 0 {frontend => app}/src/pages/documents.ts | 0 {frontend => app}/src/pages/links.ts | 0 {frontend => app}/src/react-app-env.d.ts | 0 {frontend => app}/src/setupTests.ts | 0 {frontend => app}/tsconfig.json | 0 76 files changed, 0 insertions(+), 0 deletions(-) rename {frontend => app}/.gcloudignore (100%) rename {frontend => app}/.gitignore (100%) rename {frontend => app}/app.yaml (100%) rename {frontend => app}/package-lock.json (100%) rename {frontend => app}/package.json (100%) rename {frontend => app}/public/android-chrome-192x192.png (100%) rename {frontend => app}/public/android-chrome-512x512.png (100%) rename {frontend => app}/public/apple-touch-icon.png (100%) rename {frontend => app}/public/browserconfig.xml (100%) rename {frontend => app}/public/documents/annual-members-meeting-jan-29-2023.pdf (100%) rename {frontend => app}/public/documents/by-laws-v1.0.pdf (100%) rename {frontend => app}/public/documents/by-laws-v1.1.pdf (100%) rename {frontend => app}/public/documents/by-laws-v1.2.pdf (100%) rename {frontend => app}/public/documents/by-laws-v1.3.pdf (100%) rename {frontend => app}/public/documents/by-laws-v1.4.pdf (100%) rename {frontend => app}/public/documents/by-laws.pdf (100%) rename {frontend => app}/public/documents/certificate-of-incorporation.pdf (100%) rename {frontend => app}/public/documents/directors-meeting-apr-19-2023.pdf (100%) rename {frontend => app}/public/documents/directors-meeting-apr-9-2022.pdf (100%) rename {frontend => app}/public/documents/directors-meeting-aug-12-2022.pdf (100%) rename {frontend => app}/public/documents/directors-meeting-jul-20-2023.pdf (100%) rename {frontend => app}/public/documents/directors-meeting-may-16-2023.pdf (100%) rename {frontend => app}/public/documents/directors-meeting-may-25-2022.pdf (100%) rename {frontend => app}/public/documents/first-directors-meeting-feb-26-2022.pdf (100%) rename {frontend => app}/public/documents/first-members-meeting-may-7-2022.pdf (100%) rename {frontend => app}/public/documents/major-championship-reimbursement-transfer-policy-v1.0.pdf (100%) rename {frontend => app}/public/documents/major-championship-reimbursement-transfer-policy.pdf (100%) rename {frontend => app}/public/documents/reimbursement-policy-v1.0.pdf (100%) rename {frontend => app}/public/documents/reimbursement-policy-v1.1.pdf (100%) rename {frontend => app}/public/documents/reimbursement-policy-v1.2.pdf (100%) rename {frontend => app}/public/documents/reimbursement-policy.pdf (100%) rename {frontend => app}/public/documents/supported-events-policy-v1.0.pdf (100%) rename {frontend => app}/public/documents/supported-events-policy-v1.1.pdf (100%) rename {frontend => app}/public/documents/supported-events-policy.pdf (100%) rename {frontend => app}/public/favicon-16x16.png (100%) rename {frontend => app}/public/favicon-32x32.png (100%) rename {frontend => app}/public/favicon.ico (100%) rename {frontend => app}/public/index.html (100%) rename {frontend => app}/public/logo.svg (100%) rename {frontend => app}/public/mstile-150x150.png (100%) rename {frontend => app}/public/robots.txt (100%) rename {frontend => app}/public/safari-pinned-tab.svg (100%) rename {frontend => app}/public/site.webmanifest (100%) rename {frontend => app}/src/App.tsx (100%) rename {frontend => app}/src/components/AdminDashboard.tsx (100%) rename {frontend => app}/src/components/Api.tsx (100%) rename {frontend => app}/src/components/Base.tsx (100%) rename {frontend => app}/src/components/Link.tsx (100%) rename {frontend => app}/src/components/MyCubingIcon.tsx (100%) rename {frontend => app}/src/components/Provinces.tsx (100%) rename {frontend => app}/src/components/RankList.tsx (100%) rename {frontend => app}/src/components/Roles.ts (100%) rename {frontend => app}/src/components/Types.ts (100%) rename {frontend => app}/src/components/UserEdit.tsx (100%) rename {frontend => app}/src/components/UserList.tsx (100%) rename {frontend => app}/src/components/UserShow.tsx (100%) rename {frontend => app}/src/cubingicon.css (100%) rename {frontend => app}/src/dataProvider.ts (100%) rename {frontend => app}/src/httpClient.tsx (100%) rename {frontend => app}/src/i18nProvider.ts (100%) rename {frontend => app}/src/index.css (100%) rename {frontend => app}/src/index.tsx (100%) rename {frontend => app}/src/locale.ts (100%) rename {frontend => app}/src/pages/About.tsx (100%) rename {frontend => app}/src/pages/Account.tsx (100%) rename {frontend => app}/src/pages/AdminPage.tsx (100%) rename {frontend => app}/src/pages/FAQ.tsx (100%) rename {frontend => app}/src/pages/Home.tsx (100%) rename {frontend => app}/src/pages/Organization.tsx (100%) rename {frontend => app}/src/pages/Quebec.tsx (100%) rename {frontend => app}/src/pages/Rankings.tsx (100%) rename {frontend => app}/src/pages/documents.ts (100%) rename {frontend => app}/src/pages/links.ts (100%) rename {frontend => app}/src/react-app-env.d.ts (100%) rename {frontend => app}/src/setupTests.ts (100%) rename {frontend => app}/tsconfig.json (100%) diff --git a/frontend/.gcloudignore b/app/.gcloudignore similarity index 100% rename from frontend/.gcloudignore rename to app/.gcloudignore diff --git a/frontend/.gitignore b/app/.gitignore similarity index 100% rename from frontend/.gitignore rename to app/.gitignore diff --git a/frontend/app.yaml b/app/app.yaml similarity index 100% rename from frontend/app.yaml rename to app/app.yaml diff --git a/frontend/package-lock.json b/app/package-lock.json similarity index 100% rename from frontend/package-lock.json rename to app/package-lock.json diff --git a/frontend/package.json b/app/package.json similarity index 100% rename from frontend/package.json rename to app/package.json diff --git a/frontend/public/android-chrome-192x192.png b/app/public/android-chrome-192x192.png similarity index 100% rename from frontend/public/android-chrome-192x192.png rename to app/public/android-chrome-192x192.png diff --git a/frontend/public/android-chrome-512x512.png b/app/public/android-chrome-512x512.png similarity index 100% rename from frontend/public/android-chrome-512x512.png rename to app/public/android-chrome-512x512.png diff --git a/frontend/public/apple-touch-icon.png b/app/public/apple-touch-icon.png similarity index 100% rename from frontend/public/apple-touch-icon.png rename to app/public/apple-touch-icon.png diff --git a/frontend/public/browserconfig.xml b/app/public/browserconfig.xml similarity index 100% rename from frontend/public/browserconfig.xml rename to app/public/browserconfig.xml diff --git a/frontend/public/documents/annual-members-meeting-jan-29-2023.pdf b/app/public/documents/annual-members-meeting-jan-29-2023.pdf similarity index 100% rename from frontend/public/documents/annual-members-meeting-jan-29-2023.pdf rename to app/public/documents/annual-members-meeting-jan-29-2023.pdf diff --git a/frontend/public/documents/by-laws-v1.0.pdf b/app/public/documents/by-laws-v1.0.pdf similarity index 100% rename from frontend/public/documents/by-laws-v1.0.pdf rename to app/public/documents/by-laws-v1.0.pdf diff --git a/frontend/public/documents/by-laws-v1.1.pdf b/app/public/documents/by-laws-v1.1.pdf similarity index 100% rename from frontend/public/documents/by-laws-v1.1.pdf rename to app/public/documents/by-laws-v1.1.pdf diff --git a/frontend/public/documents/by-laws-v1.2.pdf b/app/public/documents/by-laws-v1.2.pdf similarity index 100% rename from frontend/public/documents/by-laws-v1.2.pdf rename to app/public/documents/by-laws-v1.2.pdf diff --git a/frontend/public/documents/by-laws-v1.3.pdf b/app/public/documents/by-laws-v1.3.pdf similarity index 100% rename from frontend/public/documents/by-laws-v1.3.pdf rename to app/public/documents/by-laws-v1.3.pdf diff --git a/frontend/public/documents/by-laws-v1.4.pdf b/app/public/documents/by-laws-v1.4.pdf similarity index 100% rename from frontend/public/documents/by-laws-v1.4.pdf rename to app/public/documents/by-laws-v1.4.pdf diff --git a/frontend/public/documents/by-laws.pdf b/app/public/documents/by-laws.pdf similarity index 100% rename from frontend/public/documents/by-laws.pdf rename to app/public/documents/by-laws.pdf diff --git a/frontend/public/documents/certificate-of-incorporation.pdf b/app/public/documents/certificate-of-incorporation.pdf similarity index 100% rename from frontend/public/documents/certificate-of-incorporation.pdf rename to app/public/documents/certificate-of-incorporation.pdf diff --git a/frontend/public/documents/directors-meeting-apr-19-2023.pdf b/app/public/documents/directors-meeting-apr-19-2023.pdf similarity index 100% rename from frontend/public/documents/directors-meeting-apr-19-2023.pdf rename to app/public/documents/directors-meeting-apr-19-2023.pdf diff --git a/frontend/public/documents/directors-meeting-apr-9-2022.pdf b/app/public/documents/directors-meeting-apr-9-2022.pdf similarity index 100% rename from frontend/public/documents/directors-meeting-apr-9-2022.pdf rename to app/public/documents/directors-meeting-apr-9-2022.pdf diff --git a/frontend/public/documents/directors-meeting-aug-12-2022.pdf b/app/public/documents/directors-meeting-aug-12-2022.pdf similarity index 100% rename from frontend/public/documents/directors-meeting-aug-12-2022.pdf rename to app/public/documents/directors-meeting-aug-12-2022.pdf diff --git a/frontend/public/documents/directors-meeting-jul-20-2023.pdf b/app/public/documents/directors-meeting-jul-20-2023.pdf similarity index 100% rename from frontend/public/documents/directors-meeting-jul-20-2023.pdf rename to app/public/documents/directors-meeting-jul-20-2023.pdf diff --git a/frontend/public/documents/directors-meeting-may-16-2023.pdf b/app/public/documents/directors-meeting-may-16-2023.pdf similarity index 100% rename from frontend/public/documents/directors-meeting-may-16-2023.pdf rename to app/public/documents/directors-meeting-may-16-2023.pdf diff --git a/frontend/public/documents/directors-meeting-may-25-2022.pdf b/app/public/documents/directors-meeting-may-25-2022.pdf similarity index 100% rename from frontend/public/documents/directors-meeting-may-25-2022.pdf rename to app/public/documents/directors-meeting-may-25-2022.pdf diff --git a/frontend/public/documents/first-directors-meeting-feb-26-2022.pdf b/app/public/documents/first-directors-meeting-feb-26-2022.pdf similarity index 100% rename from frontend/public/documents/first-directors-meeting-feb-26-2022.pdf rename to app/public/documents/first-directors-meeting-feb-26-2022.pdf diff --git a/frontend/public/documents/first-members-meeting-may-7-2022.pdf b/app/public/documents/first-members-meeting-may-7-2022.pdf similarity index 100% rename from frontend/public/documents/first-members-meeting-may-7-2022.pdf rename to app/public/documents/first-members-meeting-may-7-2022.pdf diff --git a/frontend/public/documents/major-championship-reimbursement-transfer-policy-v1.0.pdf b/app/public/documents/major-championship-reimbursement-transfer-policy-v1.0.pdf similarity index 100% rename from frontend/public/documents/major-championship-reimbursement-transfer-policy-v1.0.pdf rename to app/public/documents/major-championship-reimbursement-transfer-policy-v1.0.pdf diff --git a/frontend/public/documents/major-championship-reimbursement-transfer-policy.pdf b/app/public/documents/major-championship-reimbursement-transfer-policy.pdf similarity index 100% rename from frontend/public/documents/major-championship-reimbursement-transfer-policy.pdf rename to app/public/documents/major-championship-reimbursement-transfer-policy.pdf diff --git a/frontend/public/documents/reimbursement-policy-v1.0.pdf b/app/public/documents/reimbursement-policy-v1.0.pdf similarity index 100% rename from frontend/public/documents/reimbursement-policy-v1.0.pdf rename to app/public/documents/reimbursement-policy-v1.0.pdf diff --git a/frontend/public/documents/reimbursement-policy-v1.1.pdf b/app/public/documents/reimbursement-policy-v1.1.pdf similarity index 100% rename from frontend/public/documents/reimbursement-policy-v1.1.pdf rename to app/public/documents/reimbursement-policy-v1.1.pdf diff --git a/frontend/public/documents/reimbursement-policy-v1.2.pdf b/app/public/documents/reimbursement-policy-v1.2.pdf similarity index 100% rename from frontend/public/documents/reimbursement-policy-v1.2.pdf rename to app/public/documents/reimbursement-policy-v1.2.pdf diff --git a/frontend/public/documents/reimbursement-policy.pdf b/app/public/documents/reimbursement-policy.pdf similarity index 100% rename from frontend/public/documents/reimbursement-policy.pdf rename to app/public/documents/reimbursement-policy.pdf diff --git a/frontend/public/documents/supported-events-policy-v1.0.pdf b/app/public/documents/supported-events-policy-v1.0.pdf similarity index 100% rename from frontend/public/documents/supported-events-policy-v1.0.pdf rename to app/public/documents/supported-events-policy-v1.0.pdf diff --git a/frontend/public/documents/supported-events-policy-v1.1.pdf b/app/public/documents/supported-events-policy-v1.1.pdf similarity index 100% rename from frontend/public/documents/supported-events-policy-v1.1.pdf rename to app/public/documents/supported-events-policy-v1.1.pdf diff --git a/frontend/public/documents/supported-events-policy.pdf b/app/public/documents/supported-events-policy.pdf similarity index 100% rename from frontend/public/documents/supported-events-policy.pdf rename to app/public/documents/supported-events-policy.pdf diff --git a/frontend/public/favicon-16x16.png b/app/public/favicon-16x16.png similarity index 100% rename from frontend/public/favicon-16x16.png rename to app/public/favicon-16x16.png diff --git a/frontend/public/favicon-32x32.png b/app/public/favicon-32x32.png similarity index 100% rename from frontend/public/favicon-32x32.png rename to app/public/favicon-32x32.png diff --git a/frontend/public/favicon.ico b/app/public/favicon.ico similarity index 100% rename from frontend/public/favicon.ico rename to app/public/favicon.ico diff --git a/frontend/public/index.html b/app/public/index.html similarity index 100% rename from frontend/public/index.html rename to app/public/index.html diff --git a/frontend/public/logo.svg b/app/public/logo.svg similarity index 100% rename from frontend/public/logo.svg rename to app/public/logo.svg diff --git a/frontend/public/mstile-150x150.png b/app/public/mstile-150x150.png similarity index 100% rename from frontend/public/mstile-150x150.png rename to app/public/mstile-150x150.png diff --git a/frontend/public/robots.txt b/app/public/robots.txt similarity index 100% rename from frontend/public/robots.txt rename to app/public/robots.txt diff --git a/frontend/public/safari-pinned-tab.svg b/app/public/safari-pinned-tab.svg similarity index 100% rename from frontend/public/safari-pinned-tab.svg rename to app/public/safari-pinned-tab.svg diff --git a/frontend/public/site.webmanifest b/app/public/site.webmanifest similarity index 100% rename from frontend/public/site.webmanifest rename to app/public/site.webmanifest diff --git a/frontend/src/App.tsx b/app/src/App.tsx similarity index 100% rename from frontend/src/App.tsx rename to app/src/App.tsx diff --git a/frontend/src/components/AdminDashboard.tsx b/app/src/components/AdminDashboard.tsx similarity index 100% rename from frontend/src/components/AdminDashboard.tsx rename to app/src/components/AdminDashboard.tsx diff --git a/frontend/src/components/Api.tsx b/app/src/components/Api.tsx similarity index 100% rename from frontend/src/components/Api.tsx rename to app/src/components/Api.tsx diff --git a/frontend/src/components/Base.tsx b/app/src/components/Base.tsx similarity index 100% rename from frontend/src/components/Base.tsx rename to app/src/components/Base.tsx diff --git a/frontend/src/components/Link.tsx b/app/src/components/Link.tsx similarity index 100% rename from frontend/src/components/Link.tsx rename to app/src/components/Link.tsx diff --git a/frontend/src/components/MyCubingIcon.tsx b/app/src/components/MyCubingIcon.tsx similarity index 100% rename from frontend/src/components/MyCubingIcon.tsx rename to app/src/components/MyCubingIcon.tsx diff --git a/frontend/src/components/Provinces.tsx b/app/src/components/Provinces.tsx similarity index 100% rename from frontend/src/components/Provinces.tsx rename to app/src/components/Provinces.tsx diff --git a/frontend/src/components/RankList.tsx b/app/src/components/RankList.tsx similarity index 100% rename from frontend/src/components/RankList.tsx rename to app/src/components/RankList.tsx diff --git a/frontend/src/components/Roles.ts b/app/src/components/Roles.ts similarity index 100% rename from frontend/src/components/Roles.ts rename to app/src/components/Roles.ts diff --git a/frontend/src/components/Types.ts b/app/src/components/Types.ts similarity index 100% rename from frontend/src/components/Types.ts rename to app/src/components/Types.ts diff --git a/frontend/src/components/UserEdit.tsx b/app/src/components/UserEdit.tsx similarity index 100% rename from frontend/src/components/UserEdit.tsx rename to app/src/components/UserEdit.tsx diff --git a/frontend/src/components/UserList.tsx b/app/src/components/UserList.tsx similarity index 100% rename from frontend/src/components/UserList.tsx rename to app/src/components/UserList.tsx diff --git a/frontend/src/components/UserShow.tsx b/app/src/components/UserShow.tsx similarity index 100% rename from frontend/src/components/UserShow.tsx rename to app/src/components/UserShow.tsx diff --git a/frontend/src/cubingicon.css b/app/src/cubingicon.css similarity index 100% rename from frontend/src/cubingicon.css rename to app/src/cubingicon.css diff --git a/frontend/src/dataProvider.ts b/app/src/dataProvider.ts similarity index 100% rename from frontend/src/dataProvider.ts rename to app/src/dataProvider.ts diff --git a/frontend/src/httpClient.tsx b/app/src/httpClient.tsx similarity index 100% rename from frontend/src/httpClient.tsx rename to app/src/httpClient.tsx diff --git a/frontend/src/i18nProvider.ts b/app/src/i18nProvider.ts similarity index 100% rename from frontend/src/i18nProvider.ts rename to app/src/i18nProvider.ts diff --git a/frontend/src/index.css b/app/src/index.css similarity index 100% rename from frontend/src/index.css rename to app/src/index.css diff --git a/frontend/src/index.tsx b/app/src/index.tsx similarity index 100% rename from frontend/src/index.tsx rename to app/src/index.tsx diff --git a/frontend/src/locale.ts b/app/src/locale.ts similarity index 100% rename from frontend/src/locale.ts rename to app/src/locale.ts diff --git a/frontend/src/pages/About.tsx b/app/src/pages/About.tsx similarity index 100% rename from frontend/src/pages/About.tsx rename to app/src/pages/About.tsx diff --git a/frontend/src/pages/Account.tsx b/app/src/pages/Account.tsx similarity index 100% rename from frontend/src/pages/Account.tsx rename to app/src/pages/Account.tsx diff --git a/frontend/src/pages/AdminPage.tsx b/app/src/pages/AdminPage.tsx similarity index 100% rename from frontend/src/pages/AdminPage.tsx rename to app/src/pages/AdminPage.tsx diff --git a/frontend/src/pages/FAQ.tsx b/app/src/pages/FAQ.tsx similarity index 100% rename from frontend/src/pages/FAQ.tsx rename to app/src/pages/FAQ.tsx diff --git a/frontend/src/pages/Home.tsx b/app/src/pages/Home.tsx similarity index 100% rename from frontend/src/pages/Home.tsx rename to app/src/pages/Home.tsx diff --git a/frontend/src/pages/Organization.tsx b/app/src/pages/Organization.tsx similarity index 100% rename from frontend/src/pages/Organization.tsx rename to app/src/pages/Organization.tsx diff --git a/frontend/src/pages/Quebec.tsx b/app/src/pages/Quebec.tsx similarity index 100% rename from frontend/src/pages/Quebec.tsx rename to app/src/pages/Quebec.tsx diff --git a/frontend/src/pages/Rankings.tsx b/app/src/pages/Rankings.tsx similarity index 100% rename from frontend/src/pages/Rankings.tsx rename to app/src/pages/Rankings.tsx diff --git a/frontend/src/pages/documents.ts b/app/src/pages/documents.ts similarity index 100% rename from frontend/src/pages/documents.ts rename to app/src/pages/documents.ts diff --git a/frontend/src/pages/links.ts b/app/src/pages/links.ts similarity index 100% rename from frontend/src/pages/links.ts rename to app/src/pages/links.ts diff --git a/frontend/src/react-app-env.d.ts b/app/src/react-app-env.d.ts similarity index 100% rename from frontend/src/react-app-env.d.ts rename to app/src/react-app-env.d.ts diff --git a/frontend/src/setupTests.ts b/app/src/setupTests.ts similarity index 100% rename from frontend/src/setupTests.ts rename to app/src/setupTests.ts diff --git a/frontend/tsconfig.json b/app/tsconfig.json similarity index 100% rename from frontend/tsconfig.json rename to app/tsconfig.json From 95932b4a5912cc9dd843fb0ed40f4178bd840b9e Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 6 Sep 2023 04:07:26 -0400 Subject: [PATCH 56/72] removed axios from the project --- app/package-lock.json | 29 ------------------------- app/package.json | 1 - app/src/httpClient.tsx | 43 +++++++++++++++++++++++++++++++++---- app/src/pages/Account.tsx | 4 ++-- app/src/pages/AdminPage.tsx | 2 +- app/src/pages/Rankings.tsx | 2 +- docker-compose.yaml | 2 +- 7 files changed, 44 insertions(+), 39 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index dee0aa9..2d7d4e5 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -22,7 +22,6 @@ "@types/node": "^16.11.22", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.11", - "axios": "^1.4.0", "dayjs": "^1.11.9", "i18next": "^21.6.16", "ra-data-simple-rest": "^4.12.2", @@ -5256,16 +5255,6 @@ "node": ">=4" } }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", @@ -8406,19 +8395,6 @@ "node": ">=6" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -13323,11 +13299,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", diff --git a/app/package.json b/app/package.json index e494cf6..29578b2 100644 --- a/app/package.json +++ b/app/package.json @@ -17,7 +17,6 @@ "@types/node": "^16.11.22", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.11", - "axios": "^1.4.0", "dayjs": "^1.11.9", "i18next": "^21.6.16", "ra-data-simple-rest": "^4.12.2", diff --git a/app/src/httpClient.tsx b/app/src/httpClient.tsx index 040cd3b..f9c8965 100644 --- a/app/src/httpClient.tsx +++ b/app/src/httpClient.tsx @@ -1,5 +1,40 @@ -import axios from "axios"; +class httpClient { -export default axios.create({ - withCredentials: true, -}); \ No newline at end of file + static async request(method: string, endpoint: string, data: any, customConfig = {}) { + const credentials: RequestCredentials = 'include'; + const headers = {'Content-Type': 'application/json'} + const config = { + method: method, + body: data ? JSON.stringify(data) : undefined, + ...customConfig, + headers: { + ...headers, + }, + credentials: credentials, + } + + return window + .fetch(endpoint, config) + .then(response => response.json()) + .then(data => { + console.log(data); + return data + }) + .catch(error => { + const errorMessage = error.text() + return Promise.reject(new Error(errorMessage)) + }) + } + + static get(endpoint: string, customConfig = {}) { + return this.request('GET', endpoint, undefined, customConfig) + } + + static post(endpoint: string, data: any, customConfig = {}) { + return this.request('POST', endpoint, data, customConfig) + } + +} + + +export default httpClient; diff --git a/app/src/pages/Account.tsx b/app/src/pages/Account.tsx index 3b2f6d6..4cabfda 100644 --- a/app/src/pages/Account.tsx +++ b/app/src/pages/Account.tsx @@ -92,7 +92,7 @@ export const Account = () => { (async () => { try { const resp = await httpClient.get(API_BASE_URL + "/user_info"); - setUser(resp.data); + setUser(resp); } catch (error) { console.log("Not authenticated"); @@ -123,7 +123,7 @@ export const Account = () => { const resp = await httpClient.post(API_BASE_URL + "/edit", { province: province ? province.id : 'na', }); - if (resp.status === 200) { + if (!resp.hasOwnProperty("error")) { showAlert("success", t("account.success")); } else { showAlert("error", t("account.error")); diff --git a/app/src/pages/AdminPage.tsx b/app/src/pages/AdminPage.tsx index 82a6d3b..693418a 100644 --- a/app/src/pages/AdminPage.tsx +++ b/app/src/pages/AdminPage.tsx @@ -49,7 +49,7 @@ export const AdminPage = () => { (async () => { try { const resp = await httpClient.get(API_BASE_URL + "/user_info"); - setUser(resp.data); + setUser(resp); } catch (error) { console.log("Not authenticated"); diff --git a/app/src/pages/Rankings.tsx b/app/src/pages/Rankings.tsx index 3abb513..cb5cd61 100644 --- a/app/src/pages/Rankings.tsx +++ b/app/src/pages/Rankings.tsx @@ -82,7 +82,7 @@ export const Rankings = () => { resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + province?.id + "/" + use_average_str); } - setRanking(resp.data); + setRanking(resp); } catch (error: any) { if (error?.code === "ERR_NETWORK") { console.log("Network error" + error); diff --git a/docker-compose.yaml b/docker-compose.yaml index cdf2e03..ef36152 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -7,7 +7,7 @@ services: context: . target: development volumes: - - ./frontend:/frontend + - ./app:/frontend env_file: ./.env ports: - ${NODE_LOCAL_PORT}:${NODE_DOCKER_PORT} From 26e151f2c6ee83b36907ed5dc14e5683d6035647 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 6 Sep 2023 04:27:00 -0400 Subject: [PATCH 57/72] updated deploy script to reflect change in dir name --- deploy.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy.sh b/deploy.sh index 2ba804a..5721858 100644 --- a/deploy.sh +++ b/deploy.sh @@ -89,8 +89,8 @@ then fi echo "Recompiling react." -rm -rf frontend/build -cd frontend +rm -rf app/build +cd app if [ "$IS_PROD" == "0" ] then echo "Setting REACT_APP_API_BASE_URL to staging." @@ -105,10 +105,10 @@ cd .. if [ $FRONTEND_ONLY -eq 1 ] then echo "Deploying frontend only." - CMD="gcloud app deploy frontend/app.yaml --project $PROJECT" + CMD="gcloud app deploy app/app.yaml --project $PROJECT" else echo "Deploying to App Engine." - CMD="gcloud app deploy frontend/app.yaml dispatch.yaml back/api.yaml --project $PROJECT" + CMD="gcloud app deploy app/app.yaml dispatch.yaml back/api.yaml --project $PROJECT" fi if [ ! -z "$VERSION" ] From d9f34081c90b3da7dd22904a6c05a4eaa7a77fbe Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 6 Sep 2023 21:00:22 -0400 Subject: [PATCH 58/72] fixed error when not logged in --- app/src/httpClient.tsx | 1 - app/src/pages/Account.tsx | 4 +++- app/src/pages/AdminPage.tsx | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/httpClient.tsx b/app/src/httpClient.tsx index f9c8965..c83ea85 100644 --- a/app/src/httpClient.tsx +++ b/app/src/httpClient.tsx @@ -17,7 +17,6 @@ class httpClient { .fetch(endpoint, config) .then(response => response.json()) .then(data => { - console.log(data); return data }) .catch(error => { diff --git a/app/src/pages/Account.tsx b/app/src/pages/Account.tsx index 4cabfda..42643f8 100644 --- a/app/src/pages/Account.tsx +++ b/app/src/pages/Account.tsx @@ -92,7 +92,9 @@ export const Account = () => { (async () => { try { const resp = await httpClient.get(API_BASE_URL + "/user_info"); - setUser(resp); + if (!resp.hasOwnProperty("error")) { + setUser(resp); + } } catch (error) { console.log("Not authenticated"); diff --git a/app/src/pages/AdminPage.tsx b/app/src/pages/AdminPage.tsx index 693418a..609c127 100644 --- a/app/src/pages/AdminPage.tsx +++ b/app/src/pages/AdminPage.tsx @@ -49,7 +49,9 @@ export const AdminPage = () => { (async () => { try { const resp = await httpClient.get(API_BASE_URL + "/user_info"); - setUser(resp); + if (!resp.hasOwnProperty("error")) { + setUser(resp); + } } catch (error) { console.log("Not authenticated"); From c6697c112fac9ad2c3fdecc036019b47eecec6c1 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sat, 9 Sep 2023 13:24:25 -0400 Subject: [PATCH 59/72] formatting with prettier --- app/src/App.tsx | 124 ++-- app/src/components/AdminDashboard.tsx | 19 +- app/src/components/Api.tsx | 15 +- app/src/components/Base.tsx | 18 +- app/src/components/MyCubingIcon.tsx | 44 +- app/src/components/Provinces.tsx | 62 +- app/src/components/RankList.tsx | 105 +-- app/src/components/Roles.ts | 20 +- app/src/components/Types.ts | 89 ++- app/src/components/UserEdit.tsx | 62 +- app/src/components/UserList.tsx | 72 +-- app/src/components/UserShow.tsx | 102 +-- app/src/dataProvider.ts | 227 +++---- app/src/httpClient.tsx | 66 +- app/src/i18nProvider.ts | 20 +- app/src/locale.ts | 895 +++++++++++++------------- app/src/pages/Account.tsx | 666 ++++++++++--------- app/src/pages/AdminPage.tsx | 177 ++--- app/src/pages/FAQ.tsx | 120 ++-- app/src/pages/Rankings.tsx | 401 +++++++----- app/src/pages/links.ts | 2 +- 21 files changed, 1783 insertions(+), 1523 deletions(-) diff --git a/app/src/App.tsx b/app/src/App.tsx index 96e1c2b..4369468 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -1,74 +1,80 @@ import i18n from "i18next"; -import {initReactI18next} from "react-i18next"; -import {createTheme, ThemeProvider} from "@mui/material/styles"; -import {red} from "@mui/material/colors"; -import {BrowserRouter, Navigate, Route, Routes} from "react-router-dom"; -import {Base} from "./components/Base"; -import {getLocaleOrFallback, resources, SAVED_LOCALE} from "./locale"; -import {Home} from "./pages/Home"; -import {About} from "./pages/About"; -import {Organization} from "./pages/Organization"; -import {FAQ} from "./pages/FAQ"; -import {Rankings} from "./pages/Rankings"; -import {Account} from "./pages/Account"; -import {AdminPage} from "./pages/AdminPage"; +import { initReactI18next } from "react-i18next"; +import { createTheme, ThemeProvider } from "@mui/material/styles"; +import { red } from "@mui/material/colors"; +import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom"; +import { Base } from "./components/Base"; +import { getLocaleOrFallback, resources, SAVED_LOCALE } from "./locale"; +import { Home } from "./pages/Home"; +import { About } from "./pages/About"; +import { Organization } from "./pages/Organization"; +import { FAQ } from "./pages/FAQ"; +import { Rankings } from "./pages/Rankings"; +import { Account } from "./pages/Account"; +import { AdminPage } from "./pages/AdminPage"; import * as React from "react"; -import {Quebec} from "./pages/Quebec"; +import { Quebec } from "./pages/Quebec"; i18n.use(initReactI18next).init({ - resources, - interpolation: { - escapeValue: false, - }, + resources, + interpolation: { + escapeValue: false, + }, }); const theme = createTheme({ - typography: { - fontFamily: "'Montserrat', 'Arial', 'Helvetica', sans-serif", - body1: { - whiteSpace: "pre-wrap", - }, - }, - palette: { - primary: red, + typography: { + fontFamily: "'Montserrat', 'Arial', 'Helvetica', sans-serif", + body1: { + whiteSpace: "pre-wrap", }, + }, + palette: { + primary: red, + }, }); const App = () => { - const savedLocale = localStorage.getItem(SAVED_LOCALE) as string; - const locale = getLocaleOrFallback(savedLocale); - - return ( - - - - {/* Admin page without the navigation bar */} - }/> - {/* Normal pages */} - }> - - }/> - }/> - }/> - }/> - }/> - }/> - }/> - - {["about", "organization", "faq", "rankings", "account","quebec"].map((route) => ( - } - /> - ))} - }/> - - - + const savedLocale = localStorage.getItem(SAVED_LOCALE) as string; + const locale = getLocaleOrFallback(savedLocale); - - ); + return ( + + + + {/* Admin page without the navigation bar */} + } /> + {/* Normal pages */} + }> + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + {[ + "about", + "organization", + "faq", + "rankings", + "account", + "quebec", + ].map((route) => ( + } + /> + ))} + } /> + + + + + ); }; export default App; diff --git a/app/src/components/AdminDashboard.tsx b/app/src/components/AdminDashboard.tsx index 336b07a..cd62acb 100644 --- a/app/src/components/AdminDashboard.tsx +++ b/app/src/components/AdminDashboard.tsx @@ -1,13 +1,12 @@ import { Card, CardContent, CardHeader } from "@mui/material"; -import {useTranslate} from "react-admin"; +import { useTranslate } from "react-admin"; export const AdminDashboard = () => { - const t = useTranslate(); - return ( - - - {t("admin.body")} - - - ); -} \ No newline at end of file + const t = useTranslate(); + return ( + + + {t("admin.body")} + + ); +}; diff --git a/app/src/components/Api.tsx b/app/src/components/Api.tsx index 1be58f9..abe4673 100644 --- a/app/src/components/Api.tsx +++ b/app/src/components/Api.tsx @@ -1,15 +1,12 @@ -export const PRODUCTION = - process.env.NODE_ENV === 'production'; +export const PRODUCTION = process.env.NODE_ENV === "production"; export const API_BASE_URL = - process.env.REACT_APP_API_BASE_URL || "https://api.speedcubingcanara.org"; - + process.env.REACT_APP_API_BASE_URL || "https://api.speedcubingcanara.org"; export const signIn = () => { - window.location.assign(API_BASE_URL + "/login"); -} + window.location.assign(API_BASE_URL + "/login"); +}; export const signOut = () => { - window.location.assign(API_BASE_URL + "/logout"); -} - + window.location.assign(API_BASE_URL + "/logout"); +}; diff --git a/app/src/components/Base.tsx b/app/src/components/Base.tsx index 795e3be..0fdf672 100644 --- a/app/src/components/Base.tsx +++ b/app/src/components/Base.tsx @@ -7,11 +7,25 @@ import { BottomNavigation, BottomNavigationAction, } from "@mui/material"; -import { Home, Info, CorporateFare, QuestionAnswer, AccountCircle, Leaderboard } from "@mui/icons-material"; +import { + Home, + Info, + CorporateFare, + QuestionAnswer, + AccountCircle, + Leaderboard, +} from "@mui/icons-material"; import { Link, Outlet, useLocation, useParams } from "react-router-dom"; import { getLocaleOrFallback, SAVED_LOCALE } from "../locale"; -const ROUTES = ["home", "about", "organization", "faq","rankings", "account"] as const; +const ROUTES = [ + "home", + "about", + "organization", + "faq", + "rankings", + "account", +] as const; const ICONS = { home: Home, diff --git a/app/src/components/MyCubingIcon.tsx b/app/src/components/MyCubingIcon.tsx index 88f432e..b589ed4 100644 --- a/app/src/components/MyCubingIcon.tsx +++ b/app/src/components/MyCubingIcon.tsx @@ -1,22 +1,28 @@ -import '../cubingicon.css' -import React from 'react' -import {Icon, Tooltip} from "@mui/material"; -import {useTranslation} from "react-i18next"; -import {eventID, IconSize} from "./Types"; +import "../cubingicon.css"; +import React from "react"; +import { Icon, Tooltip } from "@mui/material"; +import { useTranslation } from "react-i18next"; +import { eventID, IconSize } from "./Types"; -export const MyCubingIcon: React.FC<{ event: eventID, selected: boolean, size?: IconSize}> = (data) => { - const {t} = useTranslation(); +export const MyCubingIcon: React.FC<{ + event: eventID; + selected: boolean; + size?: IconSize; +}> = (data) => { + const { t } = useTranslation(); - const {event, selected, size = 'medium'} = data; + const { event, selected, size = "medium" } = data; - return ( - - - - ) -} \ No newline at end of file + return ( + + + + ); +}; diff --git a/app/src/components/Provinces.tsx b/app/src/components/Provinces.tsx index ad9db3c..0c7cd19 100644 --- a/app/src/components/Provinces.tsx +++ b/app/src/components/Provinces.tsx @@ -1,26 +1,50 @@ -import {Province} from "./Types"; +import { Province } from "./Types"; const provinces: Province[] = [ - {label: 'Alberta', id: 'ab', region: 'Prairies', region_id: 'pr'}, - {label: 'British Columbia', id: 'bc', region: 'British Columbia', region_id: 'bc'}, - {label: 'Manitoba', id: 'mb', region: 'Prairies', region_id: 'pr'}, - {label: 'New Brunswick', id: 'nb', region: 'Atlantic', region_id: 'at'}, - {label: 'Newfoundland and Labrador', id: 'nl', region: 'Atlantic', region_id: 'at'}, - {label: 'Northwest Territories', id: 'nt', region: 'Territories', region_id: 'te'}, - {label: 'Nova Scotia', id: 'ns', region: 'Atlantic', region_id: 'at'}, - {label: 'Nunavut', id: 'nu', region: 'Territories', region_id: 'te'}, - {label: 'Ontario', id: 'on', region: 'Ontario', region_id: 'on'}, - {label: 'Prince Edward Island', id: 'pe', region: 'Atlantic', region_id: 'at'}, - {label: 'Quebec', id: 'qc', region: 'Quebec', region_id: 'qc'}, - {label: 'Saskatchewan', id: 'sk', region: 'Prairies', region_id: 'pr'}, - {label: 'Yukon', id: 'yt', region: 'Territories', region_id: 'te'}, - + { label: "Alberta", id: "ab", region: "Prairies", region_id: "pr" }, + { + label: "British Columbia", + id: "bc", + region: "British Columbia", + region_id: "bc", + }, + { label: "Manitoba", id: "mb", region: "Prairies", region_id: "pr" }, + { label: "New Brunswick", id: "nb", region: "Atlantic", region_id: "at" }, + { + label: "Newfoundland and Labrador", + id: "nl", + region: "Atlantic", + region_id: "at", + }, + { + label: "Northwest Territories", + id: "nt", + region: "Territories", + region_id: "te", + }, + { label: "Nova Scotia", id: "ns", region: "Atlantic", region_id: "at" }, + { label: "Nunavut", id: "nu", region: "Territories", region_id: "te" }, + { label: "Ontario", id: "on", region: "Ontario", region_id: "on" }, + { + label: "Prince Edward Island", + id: "pe", + region: "Atlantic", + region_id: "at", + }, + { label: "Quebec", id: "qc", region: "Quebec", region_id: "qc" }, + { label: "Saskatchewan", id: "sk", region: "Prairies", region_id: "pr" }, + { label: "Yukon", id: "yt", region: "Territories", region_id: "te" }, ]; export const getProvincesWithNA: () => Province[] = () => { - return provinces.concat({label: 'N/A', id: 'na', region: 'N/A', region_id: 'na'}); -} + return provinces.concat({ + label: "N/A", + id: "na", + region: "N/A", + region_id: "na", + }); +}; export const getProvinces = () => { - return provinces; -} + return provinces; +}; diff --git a/app/src/components/RankList.tsx b/app/src/components/RankList.tsx index cf41240..91d89b3 100644 --- a/app/src/components/RankList.tsx +++ b/app/src/components/RankList.tsx @@ -1,52 +1,55 @@ -import React from 'react'; -import {DataGrid, GridColDef, frFR, enUS} from '@mui/x-data-grid'; -import {Link, Theme, useMediaQuery} from '@mui/material'; -import {Ranking} from "./Types"; -import {useTranslation} from "react-i18next"; -import {getLocaleOrFallback, SAVED_LOCALE} from "../locale"; - - -export const RankList: React.FC<{ data: Ranking[] }> = ({data}) => { - const {t} = useTranslation(); - const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); - - const savedLocale = localStorage.getItem(SAVED_LOCALE) as string; - const locale = getLocaleOrFallback(savedLocale); - - const columns: GridColDef[] = [ - {field: 'rank', headerName: t('ranklist.rank'), width: isSmall ? 50 : 90}, - { - field: 'name', - headerName: t('ranklist.name'), - width: isSmall ? 210 : 300, - renderCell: (params) => ( - - {params.value} - - ), - }, - {field: 'time', headerName: t('ranklist.time'), width: isSmall ? 90 : 120}, - ]; - - const rows = data.map((person: any) => ({ - id: person.rank, - rank: person.rank, - name: person.name, - time: person.time, - url: person.url, - })); - - return ( - -
- - -
- - ); +import React from "react"; +import { DataGrid, GridColDef, frFR, enUS } from "@mui/x-data-grid"; +import { Link, Theme, useMediaQuery } from "@mui/material"; +import { Ranking } from "./Types"; +import { useTranslation } from "react-i18next"; +import { getLocaleOrFallback, SAVED_LOCALE } from "../locale"; + +export const RankList: React.FC<{ data: Ranking[] }> = ({ data }) => { + const { t } = useTranslation(); + const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); + + const savedLocale = localStorage.getItem(SAVED_LOCALE) as string; + const locale = getLocaleOrFallback(savedLocale); + + const columns: GridColDef[] = [ + { field: "rank", headerName: t("ranklist.rank"), width: isSmall ? 50 : 90 }, + { + field: "name", + headerName: t("ranklist.name"), + width: isSmall ? 210 : 300, + renderCell: (params) => ( + + {params.value} + + ), + }, + { + field: "time", + headerName: t("ranklist.time"), + width: isSmall ? 90 : 120, + }, + ]; + + const rows = data.map((person: any) => ({ + id: person.rank, + rank: person.rank, + name: person.name, + time: person.time, + url: person.url, + })); + + return ( +
+ +
+ ); }; - diff --git a/app/src/components/Roles.ts b/app/src/components/Roles.ts index e8c695e..bcbc2c4 100644 --- a/app/src/components/Roles.ts +++ b/app/src/components/Roles.ts @@ -1,14 +1,14 @@ -import {Role} from "./Types"; +import { Role } from "./Types"; export const roles: Role[] = [ - { id: "GLOBAL_ADMIN", name: "Global Admin" }, - { id: "DIRECTOR", name: "Director" }, - { id: "WEBMASTER", name: "Webmaster" }, - { id: "SENIOR_DELEGATE", name: "Senior Delegate"}, - { id: "DELEGATE", name: "Delegate" }, - { id: "CANDIDATE_DELEGATE", name: "Junior Delegate" }, -] + { id: "GLOBAL_ADMIN", name: "Global Admin" }, + { id: "DIRECTOR", name: "Director" }, + { id: "WEBMASTER", name: "Webmaster" }, + { id: "SENIOR_DELEGATE", name: "Senior Delegate" }, + { id: "DELEGATE", name: "Delegate" }, + { id: "CANDIDATE_DELEGATE", name: "Junior Delegate" }, +]; export const getRoles = () => { - return roles; -} \ No newline at end of file + return roles; +}; diff --git a/app/src/components/Types.ts b/app/src/components/Types.ts index 49afef6..736e7b2 100644 --- a/app/src/components/Types.ts +++ b/app/src/components/Types.ts @@ -1,29 +1,29 @@ -import {AlertColor} from "@mui/material"; +import { AlertColor } from "@mui/material"; export interface User { - id: number; - name: string; - roles: string[]; - province: string; - wca_person: string; - dob: string; - email: string; + id: number; + name: string; + roles: string[]; + province: string; + wca_person: string; + dob: string; + email: string; } export interface Province { - id: provinceID; - label: string; - region: string; - region_id: regionID; + id: provinceID; + label: string; + region: string; + region_id: regionID; } export interface Role { - id: roleID; - name: string; + id: roleID; + name: string; } export interface ProfileEditData { - province: string; + province: string; } export interface ChipData { @@ -54,16 +54,65 @@ export type Action = type: "HIDE_ALERT"; }; -export type eventID = "333" | "222" | "444" | "555" | "666" | "777" | "333bf" | "333fm" | "333oh" | "333ft" | "minx" | "pyram" | "skewb" | "sq1" | "clock" | "444bf" | "555bf" | "333mbf" | "333mbo" | "magic" | "mmagic"; +export type eventID = + | "333" + | "222" + | "444" + | "555" + | "666" + | "777" + | "333bf" + | "333fm" + | "333oh" + | "333ft" + | "minx" + | "pyram" + | "skewb" + | "sq1" + | "clock" + | "444bf" + | "555bf" + | "333mbf" + | "333mbo" + | "magic" + | "mmagic"; -export type provinceID = "ab" | "bc" | "mb" | "nb" | "nl" | "ns" | "nt" | "nu" | "on" | "pe" | "qc" | "sk" | "yt" | "na"; +export type provinceID = + | "ab" + | "bc" + | "mb" + | "nb" + | "nl" + | "ns" + | "nt" + | "nu" + | "on" + | "pe" + | "qc" + | "sk" + | "yt" + | "na"; export type regionID = "at" | "qc" | "on" | "pr" | "bc" | "te" | "na"; export type useAverage = "1" | "0"; -export type chipColor = "default" | "error" | "primary" | "secondary" | "info" | "success" | "warning"; +export type chipColor = + | "default" + | "error" + | "primary" + | "secondary" + | "info" + | "success" + | "warning"; -export type roleID = "GLOBAL_ADMIN" | "DIRECTOR" | "WEBMASTER" | "SENIOR_DELEGATE" | "DELEGATE" | "CANDIDATE_DELEGATE" | null; +export type roleID = + | "GLOBAL_ADMIN" + | "DIRECTOR" + | "WEBMASTER" + | "SENIOR_DELEGATE" + | "DELEGATE" + | "CANDIDATE_DELEGATE" + | null; -export type IconSize = '1x' | '2x' | '3x' | '4x' | '5x' \ No newline at end of file +export type IconSize = "1x" | "2x" | "3x" | "4x" | "5x"; diff --git a/app/src/components/UserEdit.tsx b/app/src/components/UserEdit.tsx index 043dedd..1bc7e2d 100644 --- a/app/src/components/UserEdit.tsx +++ b/app/src/components/UserEdit.tsx @@ -1,29 +1,43 @@ -import {AutocompleteArrayInput, choices, Edit, SelectInput, SimpleForm, useTranslate} from 'react-admin'; -import {Province, provinceID} from "./Types"; -import {getProvincesWithNA} from "./Provinces"; -import {roles} from "./Roles"; +import { + AutocompleteArrayInput, + choices, + Edit, + SelectInput, + SimpleForm, + useTranslate, +} from "react-admin"; +import { Province, provinceID } from "./Types"; +import { getProvincesWithNA } from "./Provinces"; +import { roles } from "./Roles"; const provinces: Province[] = getProvincesWithNA(); -const provincesIds: provinceID[] = provinces.map(province => province.id); -const validateProvince = choices(provincesIds, 'Please choose one of the values'); +const provincesIds: provinceID[] = provinces.map((province) => province.id); +const validateProvince = choices( + provincesIds, + "Please choose one of the values", +); export const UserEdit = () => { - const t = useTranslate(); + const t = useTranslate(); - return ( - - - t('translation.provinces.' + option.id)} - optionValue="id" - validate={validateProvince}/> + return ( + + + t("translation.provinces." + option.id)} + optionValue="id" + validate={validateProvince} + /> - t('translation.account.role.' + option.id)}/> - - - ); -} \ No newline at end of file + t("translation.account.role." + option.id)} + /> + + + ); +}; diff --git a/app/src/components/UserList.tsx b/app/src/components/UserList.tsx index 69621d4..aaf50e5 100644 --- a/app/src/components/UserList.tsx +++ b/app/src/components/UserList.tsx @@ -1,42 +1,40 @@ -import {useMediaQuery, Theme} from "@mui/material"; +import { useMediaQuery, Theme } from "@mui/material"; import { - Datagrid, - List, - SimpleList, - TextField, - TextInput, - EditButton, - ArrayField -} from 'react-admin'; -import {ProvinceField, UserRoleChip} from "./UserShow"; + Datagrid, + List, + SimpleList, + TextField, + TextInput, + EditButton, + ArrayField, +} from "react-admin"; +import { ProvinceField, UserRoleChip } from "./UserShow"; export const UserList = () => { - const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); + const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); - const userFilters = [ - , - ]; + const userFilters = []; - return ( - - {isSmall ? ( - record.name} - secondaryText={(record) => record.id} - tertiaryText={(record) => record.province} - /> - ) : ( - - - - - - - - - - - )} - - ); -} \ No newline at end of file + return ( + + {isSmall ? ( + record.name} + secondaryText={(record) => record.id} + tertiaryText={(record) => record.province} + /> + ) : ( + + + + + + + + + + + )} + + ); +}; diff --git a/app/src/components/UserShow.tsx b/app/src/components/UserShow.tsx index f4656da..ec31d57 100644 --- a/app/src/components/UserShow.tsx +++ b/app/src/components/UserShow.tsx @@ -1,59 +1,65 @@ import { - ArrayField, - ChipField, - DateField, EmailField, - Show, - SimpleShowLayout, - TextField, useListContext, useRecordContext, useTranslate, -} from 'react-admin'; -import {Link} from "@mui/material"; -import {WCA_PROFILE_URL} from "../pages/Organization"; - + ArrayField, + ChipField, + DateField, + EmailField, + Show, + SimpleShowLayout, + TextField, + useListContext, + useRecordContext, + useTranslate, +} from "react-admin"; +import { Link } from "@mui/material"; +import { WCA_PROFILE_URL } from "../pages/Organization"; export const UserRoleChip = () => { - const t = useTranslate(); - const {data} = useListContext(); - return ( -
- {data.map((roleId, index) => { - const roleName = t('translation.account.role.' + roleId); - return ; - })} -
- ); + const t = useTranslate(); + const { data } = useListContext(); + return ( +
+ {data.map((roleId, index) => { + const roleName = t("translation.account.role." + roleId); + return ( + + ); + })} +
+ ); }; - -const WcaProfileUrlField = ({source}: { source: string }) => { - const record = useRecordContext(); - return record ? ( - - {record[source]} - - ) : null; +const WcaProfileUrlField = ({ source }: { source: string }) => { + const record = useRecordContext(); + return record ? ( + + {record[source]} + + ) : null; }; +export const ProvinceField = ({ source }: { source: string }) => { + const t = useTranslate(); + const record = useRecordContext(); + const translatedLabel = t("translation.provinces." + record[source]); -export const ProvinceField = ({source}: { source: string }) => { - const t = useTranslate(); - const record = useRecordContext(); - const translatedLabel = t('translation.provinces.' + record[source]); - - return ; + return ; }; export const UserShow = () => ( - - - - - - - - - - - - - -); \ No newline at end of file + + + + + + + + + + + + + +); diff --git a/app/src/dataProvider.ts b/app/src/dataProvider.ts index c7d8341..3d9e878 100644 --- a/app/src/dataProvider.ts +++ b/app/src/dataProvider.ts @@ -1,130 +1,139 @@ -import {fetchUtils} from 'react-admin'; -import {stringify} from 'query-string'; -import {API_BASE_URL} from "./components/Api"; -import {DataProvider} from "ra-core/dist/cjs/types"; +import { fetchUtils } from "react-admin"; +import { stringify } from "query-string"; +import { API_BASE_URL } from "./components/Api"; +import { DataProvider } from "ra-core/dist/cjs/types"; -const apiUrl = API_BASE_URL +const apiUrl = API_BASE_URL; const httpClient = (url: string, options: any = {}) => { - if (!options.headers) { - options.headers = new Headers({ - Accept: 'application/json' - }); - } - options.credentials = 'include'; - return fetchUtils.fetchJson(url, options); -} + if (!options.headers) { + options.headers = new Headers({ + Accept: "application/json", + }); + } + options.credentials = "include"; + return fetchUtils.fetchJson(url, options); +}; const convertResponseToDataProviderFormat = (response: any) => { - return { - data: response.data, - pageInfo: { - hasPreviousPage: response.pageInfo.hasPreviousPage, - hasNextPage: response.pageInfo.hasNextPage, - }, - }; + return { + data: response.data, + pageInfo: { + hasPreviousPage: response.pageInfo.hasPreviousPage, + hasNextPage: response.pageInfo.hasNextPage, + }, + }; }; const dataProvider: DataProvider = { - getList: (resource: any, params: { - pagination: { page: any; perPage: any; }; - sort: { field: any; order: any; }; - filter: any; - }) => { - const {page, perPage} = params.pagination; - const {field, order} = params.sort; - const query = { - sort_field: JSON.stringify(field), - sort_order: JSON.stringify(order), - page: JSON.stringify(page), - per_page: JSON.stringify(perPage), - filter: JSON.stringify(params.filter), - cursor: page === 1 ? null : localStorage.getItem('cursor'), - }; - const url = `${apiUrl}/admin/get_users?${stringify(query)}`; - - return httpClient(url) - .then(({headers, json}) => { - localStorage.setItem('cursor', json.cursor); - return convertResponseToDataProviderFormat(json); - }); + getList: ( + resource: any, + params: { + pagination: { page: any; perPage: any }; + sort: { field: any; order: any }; + filter: any; }, + ) => { + const { page, perPage } = params.pagination; + const { field, order } = params.sort; + const query = { + sort_field: JSON.stringify(field), + sort_order: JSON.stringify(order), + page: JSON.stringify(page), + per_page: JSON.stringify(perPage), + filter: JSON.stringify(params.filter), + cursor: page === 1 ? null : localStorage.getItem("cursor"), + }; + const url = `${apiUrl}/admin/get_users?${stringify(query)}`; + return httpClient(url).then(({ headers, json }) => { + localStorage.setItem("cursor", json.cursor); + return convertResponseToDataProviderFormat(json); + }); + }, - getOne: (resource: any, params: { id: any; }) => - httpClient(`${apiUrl}/user_info/${params.id}`).then(({json}) => ({ - data: json, - })), - - getMany: (resource: any, params: { ids: any; }) => { - const query = { - filter: JSON.stringify({ids: params.ids}), - }; - const url = `${apiUrl}/admin/get_users_by_id?${stringify(query)}`; - return httpClient(url).then(({json}) => ({data: json})); - }, + getOne: (resource: any, params: { id: any }) => + httpClient(`${apiUrl}/user_info/${params.id}`).then(({ json }) => ({ + data: json, + })), - getManyReference: (resource: any, params: {//not setup - pagination: { page: any; perPage: any; }; - sort: { field: any; order: any; }; - filter: any; - target: any; - id: any; - }) => { - const {page, perPage} = params.pagination; - const {field, order} = params.sort; - const query = { - sort: JSON.stringify([field, order]), - range: JSON.stringify([(page - 1) * perPage, page * perPage - 1]), - filter: JSON.stringify({ - ...params.filter, - [params.target]: params.id, - }), - }; - const url = `${apiUrl}/${resource}?${stringify(query)}`; + getMany: (resource: any, params: { ids: any }) => { + const query = { + filter: JSON.stringify({ ids: params.ids }), + }; + const url = `${apiUrl}/admin/get_users_by_id?${stringify(query)}`; + return httpClient(url).then(({ json }) => ({ data: json })); + }, - return httpClient(url).then(({headers, json}) => ( - Promise.resolve(convertResponseToDataProviderFormat(json)) - )); + getManyReference: ( + resource: any, + params: { + //not setup + pagination: { page: any; perPage: any }; + sort: { field: any; order: any }; + filter: any; + target: any; + id: any; }, + ) => { + const { page, perPage } = params.pagination; + const { field, order } = params.sort; + const query = { + sort: JSON.stringify([field, order]), + range: JSON.stringify([(page - 1) * perPage, page * perPage - 1]), + filter: JSON.stringify({ + ...params.filter, + [params.target]: params.id, + }), + }; + const url = `${apiUrl}/${resource}?${stringify(query)}`; - create: (resource: any, params: { data: any; }) =>//not setup - httpClient(`${apiUrl}/${resource}`, { - method: 'POST', - body: JSON.stringify(params.data), - }).then(({json}) => ({ - data: {...params.data, id: json.id}, - })), + return httpClient(url).then(({ headers, json }) => + Promise.resolve(convertResponseToDataProviderFormat(json)), + ); + }, - update: (resource: any, params: { id: any; data: any; }) => - httpClient(`${apiUrl}/edit/${params.id}`, { - method: 'POST', - body: JSON.stringify(params.data), - }).then(({json}) => ({data: json})), + create: ( + resource: any, + params: { data: any }, //not setup + ) => + httpClient(`${apiUrl}/${resource}`, { + method: "POST", + body: JSON.stringify(params.data), + }).then(({ json }) => ({ + data: { ...params.data, id: json.id }, + })), - updateMany: (resource: any, params: { ids: any; data: any; }) => { //not setup - const query = { - filter: JSON.stringify({id: params.ids}), - }; - return httpClient(`${apiUrl}/${resource}?${stringify(query)}`, { - method: 'PUT', - body: JSON.stringify(params.data), - }).then(({json}) => ({data: json})); - }, + update: (resource: any, params: { id: any; data: any }) => + httpClient(`${apiUrl}/edit/${params.id}`, { + method: "POST", + body: JSON.stringify(params.data), + }).then(({ json }) => ({ data: json })), - delete: (resource: any, params: { id: any; }) => - httpClient(`${apiUrl}/${resource}/${params.id}`, { - method: 'DELETE', - }).then(({json}) => ({data: json})), + updateMany: (resource: any, params: { ids: any; data: any }) => { + //not setup + const query = { + filter: JSON.stringify({ id: params.ids }), + }; + return httpClient(`${apiUrl}/${resource}?${stringify(query)}`, { + method: "PUT", + body: JSON.stringify(params.data), + }).then(({ json }) => ({ data: json })); + }, - deleteMany: (resource, params) => { - const query = { - filter: JSON.stringify({id: params.ids}), - }; - return httpClient(`${apiUrl}/${resource}?${stringify(query)}`, { - method: 'DELETE', - body: JSON.stringify(params), - }).then(({json}) => ({data: json})); - }, + delete: (resource: any, params: { id: any }) => + httpClient(`${apiUrl}/${resource}/${params.id}`, { + method: "DELETE", + }).then(({ json }) => ({ data: json })), + + deleteMany: (resource, params) => { + const query = { + filter: JSON.stringify({ id: params.ids }), + }; + return httpClient(`${apiUrl}/${resource}?${stringify(query)}`, { + method: "DELETE", + body: JSON.stringify(params), + }).then(({ json }) => ({ data: json })); + }, }; export default dataProvider; diff --git a/app/src/httpClient.tsx b/app/src/httpClient.tsx index c83ea85..5eeaad1 100644 --- a/app/src/httpClient.tsx +++ b/app/src/httpClient.tsx @@ -1,39 +1,41 @@ class httpClient { + static async request( + method: string, + endpoint: string, + data: any, + customConfig = {}, + ) { + const credentials: RequestCredentials = "include"; + const headers = { "Content-Type": "application/json" }; + const config = { + method: method, + body: data ? JSON.stringify(data) : undefined, + ...customConfig, + headers: { + ...headers, + }, + credentials: credentials, + }; - static async request(method: string, endpoint: string, data: any, customConfig = {}) { - const credentials: RequestCredentials = 'include'; - const headers = {'Content-Type': 'application/json'} - const config = { - method: method, - body: data ? JSON.stringify(data) : undefined, - ...customConfig, - headers: { - ...headers, - }, - credentials: credentials, - } + return window + .fetch(endpoint, config) + .then((response) => response.json()) + .then((data) => { + return data; + }) + .catch((error) => { + const errorMessage = error.text(); + return Promise.reject(new Error(errorMessage)); + }); + } - return window - .fetch(endpoint, config) - .then(response => response.json()) - .then(data => { - return data - }) - .catch(error => { - const errorMessage = error.text() - return Promise.reject(new Error(errorMessage)) - }) - } - - static get(endpoint: string, customConfig = {}) { - return this.request('GET', endpoint, undefined, customConfig) - } - - static post(endpoint: string, data: any, customConfig = {}) { - return this.request('POST', endpoint, data, customConfig) - } + static get(endpoint: string, customConfig = {}) { + return this.request("GET", endpoint, undefined, customConfig); + } + static post(endpoint: string, data: any, customConfig = {}) { + return this.request("POST", endpoint, data, customConfig); + } } - export default httpClient; diff --git a/app/src/i18nProvider.ts b/app/src/i18nProvider.ts index f5ec5a3..7bd3cb0 100644 --- a/app/src/i18nProvider.ts +++ b/app/src/i18nProvider.ts @@ -1,17 +1,17 @@ -import {resolveBrowserLocale, TranslationMessages} from 'react-admin'; -import polyglotI18nProvider from 'ra-i18n-polyglot'; -import {resources} from './locale'; +import { resolveBrowserLocale, TranslationMessages } from "react-admin"; +import polyglotI18nProvider from "ra-i18n-polyglot"; +import { resources } from "./locale"; interface Translations { - [locale: string]: TranslationMessages; + [locale: string]: TranslationMessages; } const translations: Translations = resources; export const i18nProvider = polyglotI18nProvider( - (locale) => translations[locale] ? translations[locale] : translations.en, - resolveBrowserLocale(), - [ - {locale: 'en', name: 'English'}, - {locale: 'fr', name: 'Français'} - ], + (locale) => (translations[locale] ? translations[locale] : translations.en), + resolveBrowserLocale(), + [ + { locale: "en", name: "English" }, + { locale: "fr", name: "Français" }, + ], ); diff --git a/app/src/locale.ts b/app/src/locale.ts index 48013e5..2d58a26 100644 --- a/app/src/locale.ts +++ b/app/src/locale.ts @@ -1,463 +1,472 @@ import englishMessages from "ra-language-english"; import frenchMessages from "ra-language-french"; -export const LOCALES = {en: "en", fr: "fr"} as const; -export const INVERTED_LOCALES = {en: "fr", fr: "en"} as const; -export const LOCALE_TO_LANGUAGE = {en: "English", fr: "Français"} as const; +export const LOCALES = { en: "en", fr: "fr" } as const; +export const INVERTED_LOCALES = { en: "fr", fr: "en" } as const; +export const LOCALE_TO_LANGUAGE = { en: "English", fr: "Français" } as const; export const DEFAULT_LOCALE = LOCALES.en; export const SAVED_LOCALE = "savedLocale"; const SUPPORTED_LOCALES = new Set(Object.values(LOCALES)); export function getLocaleOrFallback(givenLocale: string): "en" | "fr" { - return SUPPORTED_LOCALES.has(givenLocale) - ? (givenLocale as "en" | "fr") - : DEFAULT_LOCALE; + return SUPPORTED_LOCALES.has(givenLocale) + ? (givenLocale as "en" | "fr") + : DEFAULT_LOCALE; } export const resources = { - [LOCALES.en]: { - translation: { - main: { - sc: "Speedcubing Canada", - mailingList: "Mailing list", - facebook: "Facebook", - instagram: "Instagram", - twitter: "Twitter", - }, - routes: { - home: "Home", - about: "About", - organization: "Organization", - faq: "FAQ", - account: "Account", - rankings: "Rankings", - }, - about: { - title: "About", - body: - "Speedcubing Canada exists to promote and support the speedcubing community in Canada. Speedcubing is the act of solving twisty puzzles, such as the Rubik's Cube, as quickly as possible.\n\n" + - "Globally, official speedcubing competitions are governed by the World Cube Association (WCA). Speedcubing Canada is Canada’s official WCA regional organization. Since the WCA was founded in 2004, over 100,000 individuals from more than 140 countries have competed in official WCA competitions, including over 4,700 competitors representing the country of Canada. Almost 200 official WCA competitions have been held in Canada across seven provinces.\n\n" + - "Speedcubing Canada contributes to the WCA’s mission to “have more competitions in more countries with more people and more fun, under fair and equal conditions” by running more competitions in Canada that are fun, fair and equitable. Speedcubing Canada also works to promote speedcubing in Canada by raising awareness for the sport and the speedcubing community.\n\n" + - "The speedcubing community is a positive and friendly environment for people of all ages, including youth, students, adults and families. All speedcubing activities globally are run by volunteers. The speedcubing community provides opportunities for competitors (known as “speedcubers”) and other members to engage in a positive, competitive community, build interpersonal and leadership skills, and achieve personal success by setting official national, continental and world records.", - }, - history: { - title: "History", - body1: - "Canada plays an important part in speedcubing history as host to one of the world’s earliest World Championships, World Rubik’s Games Championship 2003, held at the Ontario Science Centre in Toronto, Ontario.\n\n", - quote: - "“In 2003, Ron [van Bruchem] managed to get in touch with Dan Gosbee to organize a speedcubing World Championship in Toronto, Canada. The team managed to secure sponsors and get extensive media coverage for the event. With 89 competitors in total alongside a team of competition staff, the World Rubik’s Games Championship 2003 (WC2003) took place and was a major success, marking an incredible milestone since WC1982 [the world’s first major speedcubing competition].” (World Cube Association)", - body2: - "\nFollowing the success of WC2003 and several subsequent competitions, the World Cube Association was founded in 2004.\n\n" + - "Speedcubing competitions returned to Canada with Canadian Open 2007. Around this time, canadianCUBING was established and would become Canada’s first WCA regional organization. Through the hard work of dedicated volunteers, canadianCUBING led the growth of speedcubing in Canada for many years, holding competitions across the country, including in Vancouver, Calgary, Toronto, Ottawa, Montreal, Halifax and more.\n\n" + - "In 2021, Speedcubing Canada was established as a not-for-profit organization and Canada’s new speedcubing organization, signalling further growth for speedcubing in Canada. Notably, Speedcubing Canada served to host the inaugural Rubik’s WCA North American Championship in Toronto, Ontario in July 2022.", - }, - comps: { - title: "Competitions", - body: "Find all upcoming competitions in Canada on the World Cube Association website.", - cta: "See All", - }, - organization: { - title: "Organization", - }, - directors: { - title: "Directors", - boardMember: "Board Member", - }, - documents: { - title: "Documents", - byLaws: "By-laws", - minutes: "Meeting minutes", - policies: "Policies", - corporate: "Corporate documents", - }, - faq: { - title: "Frequently Asked Questions", - "when-is-the-next-wca-competition-in-my-area": { - q: "When is the next WCA competition in my area?", - a: "You can find a list of all upcoming competitions in Canada on the World Cube Association website. Follow Speedcubing Canada on social media and join our mailing list to be the first to know when competitions are announced!", - }, - "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { - q: "I’m going to my first WCA competition! What do I need to know?", - a: "We are so excited for you to experience your first competition! Please familiarize yourself with the WCA Regulations before the competition. We also have two videos that we recommend watching before the competition: What to expect at your first competition and The basics of an official WCA competition.", - }, - "who-are-the-wca-delegates-in-my-area": { - q: "Who are the WCA Delegates in my area?", - a: "You can find a list of all WCA Delegates on the World Cube Association website.", - }, - "how-can-i-volunteer-with-speedcubing-canada": { - q: "How can I volunteer with Speedcubing Canada?", - a: "Speedcubing Canada and the World Cube Association are 100% volunteer-run organizations. We are always looking for volunteers to help our competitions run smoothly and welcome competitors, friends, family and community members to jump in and help. To learn more about volunteering at a competition, contact the organizer or WCA Delegate in advance or at the competition.", - }, - "why-the-change-from-canadiancubing-to-speedcubing-canada": { - q: "Why the change from canadianCUBING to Speedcubing Canada?", - a: - "After many years of running canadianCUBING as a grassroots community organization, the need emerged for a regional speedcubing organization that is officially registered as a not-for-profit, in order to meet the growing needs of the speedcubing community in Canada. Due to busy schedules and other factors, the canadianCUBING team was not structured in a way that enabled the organization to register as a not-for-profit. As a result, Speedcubing Canada was established as a not-for-profit organization and Canada’s new speedcubing organization in 2021, with a new Board of Directors.\n\n" + - "The speedcubing community in Canada owes so much of its growth to canadianCUBING, and we are thankful to the many volunteers who invested into the community through canadianCUBING over many years. We are looking forward to the future of speedcubing in Canada!", - }, - "affiliated-with-the-wca": { - q: "Is Speedcubing Canada affiliated with the World Cube Association?", - a: "Speedcubing Canada operates independently of the World Cube Association, with a separate Board of Directors. Speedcubing Canada is recognized as Canada’s official WCA regional organization.", - }, - "why-doesnt-my-name-appear-on-the-rankings": { - q: "Why doesn’t my name appear on the rankings?", - a: "Province residence is self-reported, so you'll need to tell us your province:\n" + - "- Create an account on the WCA website and link it with your WCA ID.\n" + - "- Log in to the Speedcubing Canada website through the account tab.\n" + - "- Edit your profile and set your home province. Since this also affects Regional Championship eligibility, you can only do this once per year.", - }, - "why-does-this-person-appear-in-my-province": { - q: "Why does this person appear in my province? They don’t live here!", - a: "Please contact us and we'll be happy to investigate. ", - }, - }, - provinces: { - ab: "Alberta", - bc: "British Columbia", - mb: "Manitoba", - nb: "New Brunswick", - nl: "Newfoundland and Labrador", - ns: "Nova Scotia", - nt: "Northwest Territories", - nu: "Nunavut", - on: "Ontario", - pe: "Prince Edward Island", - qc: "Quebec", - sk: "Saskatchewan", - yt: "Yukon", - na: "N/A", - null: "N/A", - }, - province_with_pronouns: { - ab: "Alberta", - bc: "British Columbia", - mb: "Manitoba", - nb: "New Brunswick", - nl: "Newfoundland and Labrador", - ns: "Nova Scotia", - nt: "Northwest Territories", - nu: "Nunavut", - on: "Ontario", - pe: "Prince Edward Island", - qc: "Quebec", - sk: "Saskatchewan", - yt: "Yukon", - na: "N/A", - }, - regions: { - at: "Atlantic", - bc: "British Columbia", - qc: "Quebec", - on: "Ontario", - pr: "Prairies", - te: "Territories", - na: "N/A", - }, - account: { - title: "Account", - hi: "Hi, ", - policy: "Province determine your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select \"N/A\".", - save: "Save", - signin: "Sign in with the WCA", - signout: "Sign Out", - welcome: "Welcome to Speedcubing Canada account page. \n\n" + - "To access it, please sign in with your WCA account.", - roles: "Roles", - role: { - GLOBAL_ADMIN: "Global Admin", - DIRECTOR: "Director", - WEBMASTER: "Webmaster", - SENIOR_DELEGATE: "Senior Delegate", - DELEGATE: "Delegate", - CANDIDATE_DELEGATE: "Junior Delegate", - }, - success: "Your account has been successfully updated.", - error: "There was an error updating your account.", - dob: "Date of Birth", - region: "Region", - admin: "Admin Section", - email: "Email", - }, - rankings: { - title: "Rankings", - single: "Single", - average: "Average", - rankfor: "Rankings for", - event: "Event", - unavailable: "Ranking Unavailable", - choose: "Choose a province", - in: "in", - for: "for", - }, - ranklist: { - rank: "Rank", - name: "Name", - time: "Time", - }, - events: { - _333: "3x3x3", - _222: "2x2x2", - _444: "4x4x4", - _555: "5x5x5", - _666: "6x6x6", - _777: "7x7x7", - _333bf: "3x3x3 Blindfolded", - _333oh: "3x3x3 One-Handed", - _333fm: "3x3x3 Fewest Moves", - _skewb: "Skewb", - _pyram: "Pyraminx", - _clock: "Clock", - _minx: "Megaminx", - _sq1: "Square-1", - _444bf: "4x4x4 Blindfolded", - _555bf: "5x5x5 Blindfolded", - _333mbf: "3x3x3 Multi-Blind", - }, - quebec: { - body: "If you are not redirected automatically, click the link below.", - } + [LOCALES.en]: { + translation: { + main: { + sc: "Speedcubing Canada", + mailingList: "Mailing list", + facebook: "Facebook", + instagram: "Instagram", + twitter: "Twitter", + }, + routes: { + home: "Home", + about: "About", + organization: "Organization", + faq: "FAQ", + account: "Account", + rankings: "Rankings", + }, + about: { + title: "About", + body: + "Speedcubing Canada exists to promote and support the speedcubing community in Canada. Speedcubing is the act of solving twisty puzzles, such as the Rubik's Cube, as quickly as possible.\n\n" + + "Globally, official speedcubing competitions are governed by the World Cube Association (WCA). Speedcubing Canada is Canada’s official WCA regional organization. Since the WCA was founded in 2004, over 100,000 individuals from more than 140 countries have competed in official WCA competitions, including over 4,700 competitors representing the country of Canada. Almost 200 official WCA competitions have been held in Canada across seven provinces.\n\n" + + "Speedcubing Canada contributes to the WCA’s mission to “have more competitions in more countries with more people and more fun, under fair and equal conditions” by running more competitions in Canada that are fun, fair and equitable. Speedcubing Canada also works to promote speedcubing in Canada by raising awareness for the sport and the speedcubing community.\n\n" + + "The speedcubing community is a positive and friendly environment for people of all ages, including youth, students, adults and families. All speedcubing activities globally are run by volunteers. The speedcubing community provides opportunities for competitors (known as “speedcubers”) and other members to engage in a positive, competitive community, build interpersonal and leadership skills, and achieve personal success by setting official national, continental and world records.", + }, + history: { + title: "History", + body1: + "Canada plays an important part in speedcubing history as host to one of the world’s earliest World Championships, World Rubik’s Games Championship 2003, held at the Ontario Science Centre in Toronto, Ontario.\n\n", + quote: + "“In 2003, Ron [van Bruchem] managed to get in touch with Dan Gosbee to organize a speedcubing World Championship in Toronto, Canada. The team managed to secure sponsors and get extensive media coverage for the event. With 89 competitors in total alongside a team of competition staff, the World Rubik’s Games Championship 2003 (WC2003) took place and was a major success, marking an incredible milestone since WC1982 [the world’s first major speedcubing competition].” (World Cube Association)", + body2: + "\nFollowing the success of WC2003 and several subsequent competitions, the World Cube Association was founded in 2004.\n\n" + + "Speedcubing competitions returned to Canada with Canadian Open 2007. Around this time, canadianCUBING was established and would become Canada’s first WCA regional organization. Through the hard work of dedicated volunteers, canadianCUBING led the growth of speedcubing in Canada for many years, holding competitions across the country, including in Vancouver, Calgary, Toronto, Ottawa, Montreal, Halifax and more.\n\n" + + "In 2021, Speedcubing Canada was established as a not-for-profit organization and Canada’s new speedcubing organization, signalling further growth for speedcubing in Canada. Notably, Speedcubing Canada served to host the inaugural Rubik’s WCA North American Championship in Toronto, Ontario in July 2022.", + }, + comps: { + title: "Competitions", + body: "Find all upcoming competitions in Canada on the World Cube Association website.", + cta: "See All", + }, + organization: { + title: "Organization", + }, + directors: { + title: "Directors", + boardMember: "Board Member", + }, + documents: { + title: "Documents", + byLaws: "By-laws", + minutes: "Meeting minutes", + policies: "Policies", + corporate: "Corporate documents", + }, + faq: { + title: "Frequently Asked Questions", + "when-is-the-next-wca-competition-in-my-area": { + q: "When is the next WCA competition in my area?", + a: "You can find a list of all upcoming competitions in Canada on the World Cube Association website. Follow Speedcubing Canada on social media and join our mailing list to be the first to know when competitions are announced!", }, - ...englishMessages, - resources: { - Users: { - name: 'User |||| Users', - fields: { - id: 'Id', - name: 'Name', - province: 'Province', - roles: 'Role(s)', - wca_person: 'WCAID', - dob: 'Date of Birth', - }, - }, + "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { + q: "I’m going to my first WCA competition! What do I need to know?", + a: "We are so excited for you to experience your first competition! Please familiarize yourself with the WCA Regulations before the competition. We also have two videos that we recommend watching before the competition: What to expect at your first competition and The basics of an official WCA competition.", }, - admin: { - title: "Welcome to the Admin Section", - body: "Please note that you can filter users using the start of their first name. If you want to use the family name, you must write the first name first. You may also use exact WCAID to filter.\n" + - " It's also important to know that you may move pages forward but not backwards. If you want to see a previous results, you need to go back to page one and then move forward again (or juste search the user).\n" + - "Sorting or removing people does not work currently. If you want to make someone disappear from the rankings, put his/her province to N/A.", + "who-are-the-wca-delegates-in-my-area": { + q: "Who are the WCA Delegates in my area?", + a: "You can find a list of all WCA Delegates on the World Cube Association website.", }, + "how-can-i-volunteer-with-speedcubing-canada": { + q: "How can I volunteer with Speedcubing Canada?", + a: "Speedcubing Canada and the World Cube Association are 100% volunteer-run organizations. We are always looking for volunteers to help our competitions run smoothly and welcome competitors, friends, family and community members to jump in and help. To learn more about volunteering at a competition, contact the organizer or WCA Delegate in advance or at the competition.", + }, + "why-the-change-from-canadiancubing-to-speedcubing-canada": { + q: "Why the change from canadianCUBING to Speedcubing Canada?", + a: + "After many years of running canadianCUBING as a grassroots community organization, the need emerged for a regional speedcubing organization that is officially registered as a not-for-profit, in order to meet the growing needs of the speedcubing community in Canada. Due to busy schedules and other factors, the canadianCUBING team was not structured in a way that enabled the organization to register as a not-for-profit. As a result, Speedcubing Canada was established as a not-for-profit organization and Canada’s new speedcubing organization in 2021, with a new Board of Directors.\n\n" + + "The speedcubing community in Canada owes so much of its growth to canadianCUBING, and we are thankful to the many volunteers who invested into the community through canadianCUBING over many years. We are looking forward to the future of speedcubing in Canada!", + }, + "affiliated-with-the-wca": { + q: "Is Speedcubing Canada affiliated with the World Cube Association?", + a: "Speedcubing Canada operates independently of the World Cube Association, with a separate Board of Directors. Speedcubing Canada is recognized as Canada’s official WCA regional organization.", + }, + "why-doesnt-my-name-appear-on-the-rankings": { + q: "Why doesn’t my name appear on the rankings?", + a: + "Province residence is self-reported, so you'll need to tell us your province:\n" + + "- Create an account on the WCA website and link it with your WCA ID.\n" + + "- Log in to the Speedcubing Canada website through the account tab.\n" + + "- Edit your profile and set your home province. Since this also affects Regional Championship eligibility, you can only do this once per year.", + }, + "why-does-this-person-appear-in-my-province": { + q: "Why does this person appear in my province? They don’t live here!", + a: "Please contact us and we'll be happy to investigate. ", + }, + }, + provinces: { + ab: "Alberta", + bc: "British Columbia", + mb: "Manitoba", + nb: "New Brunswick", + nl: "Newfoundland and Labrador", + ns: "Nova Scotia", + nt: "Northwest Territories", + nu: "Nunavut", + on: "Ontario", + pe: "Prince Edward Island", + qc: "Quebec", + sk: "Saskatchewan", + yt: "Yukon", + na: "N/A", + null: "N/A", + }, + province_with_pronouns: { + ab: "Alberta", + bc: "British Columbia", + mb: "Manitoba", + nb: "New Brunswick", + nl: "Newfoundland and Labrador", + ns: "Nova Scotia", + nt: "Northwest Territories", + nu: "Nunavut", + on: "Ontario", + pe: "Prince Edward Island", + qc: "Quebec", + sk: "Saskatchewan", + yt: "Yukon", + na: "N/A", + }, + regions: { + at: "Atlantic", + bc: "British Columbia", + qc: "Quebec", + on: "Ontario", + pr: "Prairies", + te: "Territories", + na: "N/A", + }, + account: { + title: "Account", + hi: "Hi, ", + policy: + 'Province determine your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select "N/A".', + save: "Save", + signin: "Sign in with the WCA", + signout: "Sign Out", + welcome: + "Welcome to Speedcubing Canada account page. \n\n" + + "To access it, please sign in with your WCA account.", + roles: "Roles", + role: { + GLOBAL_ADMIN: "Global Admin", + DIRECTOR: "Director", + WEBMASTER: "Webmaster", + SENIOR_DELEGATE: "Senior Delegate", + DELEGATE: "Delegate", + CANDIDATE_DELEGATE: "Junior Delegate", + }, + success: "Your account has been successfully updated.", + error: "There was an error updating your account.", + dob: "Date of Birth", + region: "Region", + admin: "Admin Section", + email: "Email", + }, + rankings: { + title: "Rankings", + single: "Single", + average: "Average", + rankfor: "Rankings for", + event: "Event", + unavailable: "Ranking Unavailable", + choose: "Choose a province", + in: "in", + for: "for", + }, + ranklist: { + rank: "Rank", + name: "Name", + time: "Time", + }, + events: { + _333: "3x3x3", + _222: "2x2x2", + _444: "4x4x4", + _555: "5x5x5", + _666: "6x6x6", + _777: "7x7x7", + _333bf: "3x3x3 Blindfolded", + _333oh: "3x3x3 One-Handed", + _333fm: "3x3x3 Fewest Moves", + _skewb: "Skewb", + _pyram: "Pyraminx", + _clock: "Clock", + _minx: "Megaminx", + _sq1: "Square-1", + _444bf: "4x4x4 Blindfolded", + _555bf: "5x5x5 Blindfolded", + _333mbf: "3x3x3 Multi-Blind", + }, + quebec: { + body: "If you are not redirected automatically, click the link below.", + }, + }, + ...englishMessages, + resources: { + Users: { + name: "User |||| Users", + fields: { + id: "Id", + name: "Name", + province: "Province", + roles: "Role(s)", + wca_person: "WCAID", + dob: "Date of Birth", + }, + }, + }, + admin: { + title: "Welcome to the Admin Section", + body: + "Please note that you can filter users using the start of their first name. If you want to use the family name, you must write the first name first. You may also use exact WCAID to filter.\n" + + " It's also important to know that you may move pages forward but not backwards. If you want to see a previous results, you need to go back to page one and then move forward again (or juste search the user).\n" + + "Sorting or removing people does not work currently. If you want to make someone disappear from the rankings, put his/her province to N/A.", }, - [LOCALES.fr]: { - translation: { - main: { - sc: "Speedcubing Canada", - mailingList: "Liste de diffusion", - facebook: "Facebook", - instagram: "Instagram", - twitter: "Twitter", - }, - routes: { - home: "Accueil", - about: "À propos", - organization: "Organisation", - faq: "FAQ", - account: "Compte", - rankings: "Classements", - }, - about: { - title: "À propos", - body: - "Speedcubing Canada existe pour promouvoir et aider la communauté du speedcubing au Canada. Le speedcubing consiste à résoudre des casse-tête rotatifs, comme le Rubik's Cube, le plus rapidement possible.\n\n" + - "À l'échelle mondiale, les compétitions officielles de speedcubing sont régies par la World Cube Association (WCA). Speedcubing Canada est l'organisation régionale officielle de la WCA au Canada. Depuis la fondation de la WCA en 2004, plus de 100 000 personnes de plus de 140 pays ont participé aux compétitions officielles de la WCA, dont plus de 4 700 compétiteurs représentant le Canada. Près de 200 compétitions officielles de la WCA ont été organisées au Canada dans sept provinces.\n\n" + - "Speedcubing Canada contribue à la mission de la WCA qui est \"d'avoir plus de compétitions dans plus de pays avec plus de personnes et d'amusement, dans des conditions égales et équitables\" en organisant plus de compétitions au Canada qui sont amusantes, justes et équitables. Speedcubing Canada travaille également à la promotion du speedcubing au Canada en sensibilisant le public à ce sport et à la communauté du speedcubing.\n\n" + - "La communauté du speedcubing est un environnement positif et amical pour les personnes de tout âge, y compris les plus jeunes, les étudiants, les adultes et les familles. Toutes les activités de speedcubing dans le monde sont gérées par des bénévoles. La communauté du speedcubing offre aux compétiteurs (appelés \" speedcubeurs \") et aux autres membres la possibilité de s'engager dans une communauté positive et compétitive, de développer des compétences interpersonnelles et de leadership, et d'atteindre la réussite personnelle en établissant des records officiels nationaux, continentaux et mondiaux.", - }, - history: { - title: "Historique", - body1: - "Le Canada a joué un rôle important dans l'histoire du speedcubing en accueillant l'un des premiers championnats mondiaux, le World Rubik's Games Championship 2003, qui s'est tenu au Centre des Sciences de l'Ontario à Toronto, en Ontario.\n\n", - quote: - "\"En 2003, Ron [van Bruchem] a réussi à entrer en contact avec Dan Gosbee pour organiser un championnat du monde de speedcubing à Toronto, au Canada. L'équipe a réussi à trouver des sponsors et à obtenir une large couverture médiatique pour l'événement. Avec 89 concurrents au total aux côtés d'une équipe en charge d'aider au bon déroulement de la compétition, le Championnat du monde des jeux de Rubik 2003 (WC2003) a eu lieu et a été un succès majeur, marquant une étape incroyable depuis le WC1982 [la première grande compétition de speedcubing au monde].\" (World Cube Association)", - body2: - "\nSuite au succès des Championnats du Monde 2003 et de plusieurs compétitions ultérieures, la World Cube Association a été fondée en 2004.\n\n" + - "Les compétitions de speedcubing sont revenues au Canada avec le Canadian Open 2007. À peu près à la même époque, canadianCUBING a été créé et est devenu la première organisation régionale de la WCA au Canada. Grâce au travail acharné de bénévoles dévoués, canadianCUBING a mené la croissance du speedcubing au Canada pendant de nombreuses années, organisant des compétitions à travers le pays, notamment à Vancouver, Calgary, Toronto, Ottawa, Montréal, Halifax et plus encore.\n\n" + - "En 2021, Speedcubing Canada a été créé en tant qu'organisme à but non lucratif et nouvelle organisation de speedcubing au Canada, signalant une nouvelle croissance pour le speedcubing au Canada. Notamment, Speedcubing Canada a servi à accueillir le premier championnat nord-américain Rubik's WCA à Toronto, en Ontario, en juillet 2022.", - }, - comps: { - title: "Compétitions", - body: "Trouvez toutes les compétitions à venir au Canada sur le site Web de la World Cube Association.", - cta: "Voir tout", - }, - organization: { - title: "Organisation", - }, - directors: { - title: "Directeurs", - boardMember: "Membre du bureau", - }, - documents: { - title: "Documents", - byLaws: "Règlement intérieur", - minutes: "Compte rendu de réunion", - policies: "Politiques", - corporate: "Documents administratifs", - }, - faq: { - title: "Foire Aux Questions", - "when-is-the-next-wca-competition-in-my-area": { - q: "Quand aura lieu la prochaine compétition de la WCA dans ma région ?", - a: "Vous pouvez trouver une liste de toutes les compétitions à venir au Canada sur le site Web de la World Cube Association. Suivez Speedcubing Canada sur les réseaux sociaux et inscrivez-vous sur notre liste de diffusion pour être les premiers à être informés de l'annonce des compétitions !", - }, - "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { - q: "Je vais participer à ma première compétition de la WCA ! Que dois-je savoir ?", - a: "Nous sommes très enthousiastes à l'idée de vous voir participer à votre première compétition ! Familiarisez-vous avec le règlement de la WCA avant la compétition. Nous avons également deux vidéos que nous recommandons de regarder avant la compétition : À quoi s'attendre lors de votre première compétition et Les bases d'une compétition officielle de la WCA.", - }, - "who-are-the-wca-delegates-in-my-area": { - q: "Qui sont les délégués de la WCA dans ma région ?", - a: "Vous pouvez trouver une liste de tous les Délégués de la WCA sur le site de la World Cube Association.", - }, - "how-can-i-volunteer-with-speedcubing-canada": { - q: "Comment puis-je devenir bénévole pour Speedcubing Canada ?", - a: "Speedcubing Canada et la World Cube Association sont des organisations gérées à 100% par des bénévoles. Nous sommes toujours à la recherche de bénévoles pour aider au bon déroulement de nos compétitions et nous invitons les compétiteurs, les amis, les familles et les membres de la communauté à se joindre à nous et à nous aider. Pour en savoir plus sur le bénévolat lors d'une compétition, contactez l'organisateur ou le délégué de la WCA à l'avance ou lors de la compétition.", - }, - "why-the-change-from-canadiancubing-to-speedcubing-canada": { - q: "Pourquoi le changement de canadianCUBING à Speedcubing Canada ?", - a: - "Après de nombreuses années de fonctionnement de canadianCUBING en tant qu'organisation communautaire de proximité, le besoin est apparu d'une organisation régionale de speedcubing officiellement enregistrée en tant qu'organisme à but non lucratif, afin de répondre aux besoins croissants de la communauté du speedcubing au Canada. En raison d'un emploi du temps chargé et d'autres facteurs, l'équipe de canadianCUBING n'était pas structurée de manière à permettre à l'organisation de s'enregistrer en tant qu'organisme à but non lucratif. Par conséquent, Speedcubing Canada a été établi en tant qu'organisation à but non lucratif et nouvelle organisation de speedcubing au Canada en 2021, avec un nouveau conseil d'administration.\n\n" + - "La communauté du speedcubing au Canada doit une grande partie de sa croissance à canadianCUBING, et nous sommes reconnaissants aux nombreux bénévoles qui ont investi dans la communauté à travers canadianCUBING pendant de nombreuses années. Nous nous réjouissons de l'avenir du speedcubing au Canada !", - }, - "affiliated-with-the-wca": { - q: "Speedcubing Canada est-elle affiliée à la World Cube Association ?", - a: "Speedcubing Canada fonctionne indépendamment de la World Cube Association, avec un conseil d'administration distinct. Speedcubing Canada est reconnue comme l'organisation régionale officielle du Canada par la WCA.", - }, - "why-doesnt-my-name-appear-on-the-rankings": { - q : "Pourquoi mon nom n'apparaît-il pas dans les classements ?", - a: "La province de résidence est auto-déclarée, vous devez donc nous indiquer votre province:\n" + - "- Créez un compte sur le site de la WCA et reliez-le à votre WCAID.\n" + - "- Connectez-vous au site web de Speedcubing Canada via l'onglet compte.\n" + - "- Modifiez votre profil et définissez votre province d'origine. Comme cela affecte également l'éligibilité aux championnats régionaux, vous ne pouvez le faire qu'une seule fois par an.", - }, - "why-does-this-person-appear-in-my-province": { - q : "Pourquoi cette personne apparaît-elle dans ma province ? Elle ne vit pas ici !", - a : "Veuillez nous contacter et nous nous ferons un plaisir d'enquêter. ", - }, - }, - provinces: { - ab: "Alberta", - bc: "Colombie-Britannique", - mb: "Manitoba", - nb: "Nouveau-Brunswick", - nl: "Terre-Neuve-et-Labrador", - ns: "Nouvelle-Écosse", - nt: "Territoires du Nord-Ouest", - nu: "Nunavut", - on: "Ontario", - pe: "Île-du-Prince-Édouard", - qc: "Québec", - sk: "Saskatchewan", - yt: "Yukon", - na: "N/A", - null: "N/A", - }, - province_with_pronouns: { - ab: "l'Alberta", - bc: "la Colombie-Britannique", - mb: "le Manitoba", - nb: "le Nouveau-Brunswick", - nl: "Terre-Neuve-et-Labrador", - ns: "la Nouvelle-Écosse", - nt: "les Territoires du Nord-Ouest", - nu: "le Nunavut", - on: "l'Ontario", - pe: "l'Île-du-Prince-Édouard", - qc: "le Québec", - sk: "la Saskatchewan", - yt: "le Yukon", - na: "N/A", - }, - regions: { - at: "Atlantique", - bc: "Colombie-Britannique", - qc: "Québec", - on: "Ontario", - pr: "Prairies", - te: "Territoires", - na: "N/A", - }, - account: { - title: "Compte", - hi: "Salut, ", - policy: "Votre province détermine votre admissibilité aux championnats régionaux. Vous ne pouvez représenter qu'une province où vous résidez au moins 50 % de l'année. Nous nous réservons le droit de demander une preuve de résidence. Si vous n'êtes pas résident canadien ou si vous préférez ne pas indiquer votre province de résidence, veuillez sélectionner \"N/A\".", - save: "Sauvegarder", - signin: "Se connecter avec la WCA", - signout: "Déconnexion", - welcome: "Bienvenue sur la page du compte de Speedcubing Canada. \n" + - "Pour y accéder, veuillez vous connecter avec votre compte WCA.", - roles: "Rôles", - role: { - GLOBAL_ADMIN: "Administrateur.ice global", - DIRECTOR: "Directeur.ice", - WEBMASTER: "Webmaster", - SENIOR_DELEGATE: "Délégué.e senior", - DELEGATE: "Délégué.e", - CANDIDATE_DELEGATE: "Délégué.e junior", - }, - success: "Votre compte a été mis à jour avec succès.", - error: "Une erreur s'est produite lors de la mise à jour de votre compte.", - dob: "Date de naissance", - region: "Région", - admin: "Section d'administration", - email: "Courriel", - }, - rankings: { - title: "Classements", - single: "Single", - average: "Moyenne", - rankfor: "Classement pour", - event: "Épreuve", - unavailable: "Classement indisponible", - choose: "Choisissez une province", - in: "au", - for: "en", - }, - ranklist: { - rank: "Rang", - name: "Nom", - time: "Temps", - }, - events: { - _333: "3x3x3", - _222: "2x2x2", - _444: "4x4x4", - _555: "5x5x5", - _666: "6x6x6", - _777: "7x7x7", - _333bf: "3x3x3 à l'aveugle", - _333oh: "3x3x3 à une main", - _333fm: "3x3x3 résolution optimisée", - _skewb: "Skewb", - _pyram: "Pyraminx", - _clock: "Clock", - _minx: "Mégaminx", - _sq1: "Square-1", - _444bf: "4x4x4 à l'aveugle", - _555bf: "5x5x5 à l'aveugle", - _333mbf: "3x3x3 Multi-Blind", - }, - quebec: { - body: "Si vous n'êtes pas redirigés, cliquez sur le lien ci-dessous." - } + }, + [LOCALES.fr]: { + translation: { + main: { + sc: "Speedcubing Canada", + mailingList: "Liste de diffusion", + facebook: "Facebook", + instagram: "Instagram", + twitter: "Twitter", + }, + routes: { + home: "Accueil", + about: "À propos", + organization: "Organisation", + faq: "FAQ", + account: "Compte", + rankings: "Classements", + }, + about: { + title: "À propos", + body: + "Speedcubing Canada existe pour promouvoir et aider la communauté du speedcubing au Canada. Le speedcubing consiste à résoudre des casse-tête rotatifs, comme le Rubik's Cube, le plus rapidement possible.\n\n" + + "À l'échelle mondiale, les compétitions officielles de speedcubing sont régies par la World Cube Association (WCA). Speedcubing Canada est l'organisation régionale officielle de la WCA au Canada. Depuis la fondation de la WCA en 2004, plus de 100 000 personnes de plus de 140 pays ont participé aux compétitions officielles de la WCA, dont plus de 4 700 compétiteurs représentant le Canada. Près de 200 compétitions officielles de la WCA ont été organisées au Canada dans sept provinces.\n\n" + + "Speedcubing Canada contribue à la mission de la WCA qui est \"d'avoir plus de compétitions dans plus de pays avec plus de personnes et d'amusement, dans des conditions égales et équitables\" en organisant plus de compétitions au Canada qui sont amusantes, justes et équitables. Speedcubing Canada travaille également à la promotion du speedcubing au Canada en sensibilisant le public à ce sport et à la communauté du speedcubing.\n\n" + + "La communauté du speedcubing est un environnement positif et amical pour les personnes de tout âge, y compris les plus jeunes, les étudiants, les adultes et les familles. Toutes les activités de speedcubing dans le monde sont gérées par des bénévoles. La communauté du speedcubing offre aux compétiteurs (appelés \" speedcubeurs \") et aux autres membres la possibilité de s'engager dans une communauté positive et compétitive, de développer des compétences interpersonnelles et de leadership, et d'atteindre la réussite personnelle en établissant des records officiels nationaux, continentaux et mondiaux.", + }, + history: { + title: "Historique", + body1: + "Le Canada a joué un rôle important dans l'histoire du speedcubing en accueillant l'un des premiers championnats mondiaux, le World Rubik's Games Championship 2003, qui s'est tenu au Centre des Sciences de l'Ontario à Toronto, en Ontario.\n\n", + quote: + "\"En 2003, Ron [van Bruchem] a réussi à entrer en contact avec Dan Gosbee pour organiser un championnat du monde de speedcubing à Toronto, au Canada. L'équipe a réussi à trouver des sponsors et à obtenir une large couverture médiatique pour l'événement. Avec 89 concurrents au total aux côtés d'une équipe en charge d'aider au bon déroulement de la compétition, le Championnat du monde des jeux de Rubik 2003 (WC2003) a eu lieu et a été un succès majeur, marquant une étape incroyable depuis le WC1982 [la première grande compétition de speedcubing au monde].\" (World Cube Association)", + body2: + "\nSuite au succès des Championnats du Monde 2003 et de plusieurs compétitions ultérieures, la World Cube Association a été fondée en 2004.\n\n" + + "Les compétitions de speedcubing sont revenues au Canada avec le Canadian Open 2007. À peu près à la même époque, canadianCUBING a été créé et est devenu la première organisation régionale de la WCA au Canada. Grâce au travail acharné de bénévoles dévoués, canadianCUBING a mené la croissance du speedcubing au Canada pendant de nombreuses années, organisant des compétitions à travers le pays, notamment à Vancouver, Calgary, Toronto, Ottawa, Montréal, Halifax et plus encore.\n\n" + + "En 2021, Speedcubing Canada a été créé en tant qu'organisme à but non lucratif et nouvelle organisation de speedcubing au Canada, signalant une nouvelle croissance pour le speedcubing au Canada. Notamment, Speedcubing Canada a servi à accueillir le premier championnat nord-américain Rubik's WCA à Toronto, en Ontario, en juillet 2022.", + }, + comps: { + title: "Compétitions", + body: "Trouvez toutes les compétitions à venir au Canada sur le site Web de la World Cube Association.", + cta: "Voir tout", + }, + organization: { + title: "Organisation", + }, + directors: { + title: "Directeurs", + boardMember: "Membre du bureau", + }, + documents: { + title: "Documents", + byLaws: "Règlement intérieur", + minutes: "Compte rendu de réunion", + policies: "Politiques", + corporate: "Documents administratifs", + }, + faq: { + title: "Foire Aux Questions", + "when-is-the-next-wca-competition-in-my-area": { + q: "Quand aura lieu la prochaine compétition de la WCA dans ma région ?", + a: "Vous pouvez trouver une liste de toutes les compétitions à venir au Canada sur le site Web de la World Cube Association. Suivez Speedcubing Canada sur les réseaux sociaux et inscrivez-vous sur notre liste de diffusion pour être les premiers à être informés de l'annonce des compétitions !", }, - ...frenchMessages, - resources: { - Users: { - name: 'Utilisateur |||| Utilisateurs', - fields: { - id: 'Id', - name: 'Nom', - province: 'Province', - roles: 'Rôle(s)', - wca_person: 'WCAID', - dob: 'Date de naissance', - }, - }, + "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { + q: "Je vais participer à ma première compétition de la WCA ! Que dois-je savoir ?", + a: "Nous sommes très enthousiastes à l'idée de vous voir participer à votre première compétition ! Familiarisez-vous avec le règlement de la WCA avant la compétition. Nous avons également deux vidéos que nous recommandons de regarder avant la compétition : À quoi s'attendre lors de votre première compétition et Les bases d'une compétition officielle de la WCA.", }, - admin: { - title: "Bienvenue dans la section d'administration", - body: "Veuillez noter que vous pouvez filtrer les utilisateurs en utilisant le début de leur prénom. Si vous voulez utiliser le nom de famille, vous devez écrire le prénom en premier. Vous pouvez également utiliser le WCAID exact pour filtrer.\n" + - " Il est également important de savoir que vous pouvez avancer dans les pages mais pas aller en arrière. Si vous voulez voir un résultat précédent, vous devez revenir à la page une et avancer à nouveau (ou simplement rechercher l'utilisateur)." + - " Il n'est pas possible d'utiliser la fonctionnalité permettant de ranger les colonnes ni de supprimer des utilisateurs. Si vous voulez faire disparaitre un utilisateur des classements, changez sa province pour N/A.", + "who-are-the-wca-delegates-in-my-area": { + q: "Qui sont les délégués de la WCA dans ma région ?", + a: "Vous pouvez trouver une liste de tous les Délégués de la WCA sur le site de la World Cube Association.", }, + "how-can-i-volunteer-with-speedcubing-canada": { + q: "Comment puis-je devenir bénévole pour Speedcubing Canada ?", + a: "Speedcubing Canada et la World Cube Association sont des organisations gérées à 100% par des bénévoles. Nous sommes toujours à la recherche de bénévoles pour aider au bon déroulement de nos compétitions et nous invitons les compétiteurs, les amis, les familles et les membres de la communauté à se joindre à nous et à nous aider. Pour en savoir plus sur le bénévolat lors d'une compétition, contactez l'organisateur ou le délégué de la WCA à l'avance ou lors de la compétition.", + }, + "why-the-change-from-canadiancubing-to-speedcubing-canada": { + q: "Pourquoi le changement de canadianCUBING à Speedcubing Canada ?", + a: + "Après de nombreuses années de fonctionnement de canadianCUBING en tant qu'organisation communautaire de proximité, le besoin est apparu d'une organisation régionale de speedcubing officiellement enregistrée en tant qu'organisme à but non lucratif, afin de répondre aux besoins croissants de la communauté du speedcubing au Canada. En raison d'un emploi du temps chargé et d'autres facteurs, l'équipe de canadianCUBING n'était pas structurée de manière à permettre à l'organisation de s'enregistrer en tant qu'organisme à but non lucratif. Par conséquent, Speedcubing Canada a été établi en tant qu'organisation à but non lucratif et nouvelle organisation de speedcubing au Canada en 2021, avec un nouveau conseil d'administration.\n\n" + + "La communauté du speedcubing au Canada doit une grande partie de sa croissance à canadianCUBING, et nous sommes reconnaissants aux nombreux bénévoles qui ont investi dans la communauté à travers canadianCUBING pendant de nombreuses années. Nous nous réjouissons de l'avenir du speedcubing au Canada !", + }, + "affiliated-with-the-wca": { + q: "Speedcubing Canada est-elle affiliée à la World Cube Association ?", + a: "Speedcubing Canada fonctionne indépendamment de la World Cube Association, avec un conseil d'administration distinct. Speedcubing Canada est reconnue comme l'organisation régionale officielle du Canada par la WCA.", + }, + "why-doesnt-my-name-appear-on-the-rankings": { + q: "Pourquoi mon nom n'apparaît-il pas dans les classements ?", + a: + "La province de résidence est auto-déclarée, vous devez donc nous indiquer votre province:\n" + + "- Créez un compte sur le site de la WCA et reliez-le à votre WCAID.\n" + + "- Connectez-vous au site web de Speedcubing Canada via l'onglet compte.\n" + + "- Modifiez votre profil et définissez votre province d'origine. Comme cela affecte également l'éligibilité aux championnats régionaux, vous ne pouvez le faire qu'une seule fois par an.", + }, + "why-does-this-person-appear-in-my-province": { + q: "Pourquoi cette personne apparaît-elle dans ma province ? Elle ne vit pas ici !", + a: "Veuillez nous contacter et nous nous ferons un plaisir d'enquêter. ", + }, + }, + provinces: { + ab: "Alberta", + bc: "Colombie-Britannique", + mb: "Manitoba", + nb: "Nouveau-Brunswick", + nl: "Terre-Neuve-et-Labrador", + ns: "Nouvelle-Écosse", + nt: "Territoires du Nord-Ouest", + nu: "Nunavut", + on: "Ontario", + pe: "Île-du-Prince-Édouard", + qc: "Québec", + sk: "Saskatchewan", + yt: "Yukon", + na: "N/A", + null: "N/A", + }, + province_with_pronouns: { + ab: "l'Alberta", + bc: "la Colombie-Britannique", + mb: "le Manitoba", + nb: "le Nouveau-Brunswick", + nl: "Terre-Neuve-et-Labrador", + ns: "la Nouvelle-Écosse", + nt: "les Territoires du Nord-Ouest", + nu: "le Nunavut", + on: "l'Ontario", + pe: "l'Île-du-Prince-Édouard", + qc: "le Québec", + sk: "la Saskatchewan", + yt: "le Yukon", + na: "N/A", + }, + regions: { + at: "Atlantique", + bc: "Colombie-Britannique", + qc: "Québec", + on: "Ontario", + pr: "Prairies", + te: "Territoires", + na: "N/A", + }, + account: { + title: "Compte", + hi: "Salut, ", + policy: + "Votre province détermine votre admissibilité aux championnats régionaux. Vous ne pouvez représenter qu'une province où vous résidez au moins 50 % de l'année. Nous nous réservons le droit de demander une preuve de résidence. Si vous n'êtes pas résident canadien ou si vous préférez ne pas indiquer votre province de résidence, veuillez sélectionner \"N/A\".", + save: "Sauvegarder", + signin: "Se connecter avec la WCA", + signout: "Déconnexion", + welcome: + "Bienvenue sur la page du compte de Speedcubing Canada. \n" + + "Pour y accéder, veuillez vous connecter avec votre compte WCA.", + roles: "Rôles", + role: { + GLOBAL_ADMIN: "Administrateur.ice global", + DIRECTOR: "Directeur.ice", + WEBMASTER: "Webmaster", + SENIOR_DELEGATE: "Délégué.e senior", + DELEGATE: "Délégué.e", + CANDIDATE_DELEGATE: "Délégué.e junior", + }, + success: "Votre compte a été mis à jour avec succès.", + error: + "Une erreur s'est produite lors de la mise à jour de votre compte.", + dob: "Date de naissance", + region: "Région", + admin: "Section d'administration", + email: "Courriel", + }, + rankings: { + title: "Classements", + single: "Single", + average: "Moyenne", + rankfor: "Classement pour", + event: "Épreuve", + unavailable: "Classement indisponible", + choose: "Choisissez une province", + in: "au", + for: "en", + }, + ranklist: { + rank: "Rang", + name: "Nom", + time: "Temps", + }, + events: { + _333: "3x3x3", + _222: "2x2x2", + _444: "4x4x4", + _555: "5x5x5", + _666: "6x6x6", + _777: "7x7x7", + _333bf: "3x3x3 à l'aveugle", + _333oh: "3x3x3 à une main", + _333fm: "3x3x3 résolution optimisée", + _skewb: "Skewb", + _pyram: "Pyraminx", + _clock: "Clock", + _minx: "Mégaminx", + _sq1: "Square-1", + _444bf: "4x4x4 à l'aveugle", + _555bf: "5x5x5 à l'aveugle", + _333mbf: "3x3x3 Multi-Blind", + }, + quebec: { + body: "Si vous n'êtes pas redirigés, cliquez sur le lien ci-dessous.", + }, + }, + ...frenchMessages, + resources: { + Users: { + name: "Utilisateur |||| Utilisateurs", + fields: { + id: "Id", + name: "Nom", + province: "Province", + roles: "Rôle(s)", + wca_person: "WCAID", + dob: "Date de naissance", + }, + }, + }, + admin: { + title: "Bienvenue dans la section d'administration", + body: + "Veuillez noter que vous pouvez filtrer les utilisateurs en utilisant le début de leur prénom. Si vous voulez utiliser le nom de famille, vous devez écrire le prénom en premier. Vous pouvez également utiliser le WCAID exact pour filtrer.\n" + + " Il est également important de savoir que vous pouvez avancer dans les pages mais pas aller en arrière. Si vous voulez voir un résultat précédent, vous devez revenir à la page une et avancer à nouveau (ou simplement rechercher l'utilisateur)." + + " Il n'est pas possible d'utiliser la fonctionnalité permettant de ranger les colonnes ni de supprimer des utilisateurs. Si vous voulez faire disparaitre un utilisateur des classements, changez sa province pour N/A.", }, -}; \ No newline at end of file + }, +}; diff --git a/app/src/pages/Account.tsx b/app/src/pages/Account.tsx index 42643f8..c3c0c78 100644 --- a/app/src/pages/Account.tsx +++ b/app/src/pages/Account.tsx @@ -1,333 +1,363 @@ -import {Trans, useTranslation} from "react-i18next"; -import {useEffect, useReducer, useState} from "react"; -import {AlertColor, Box, Container, Theme, Typography, useMediaQuery,} from "@mui/material"; -import Button from '@mui/material/Button'; -import TextField from '@mui/material/TextField'; -import Autocomplete from '@mui/material/Autocomplete'; -import {DateField} from "@mui/x-date-pickers"; -import Chip from '@mui/material/Chip'; -import Paper from '@mui/material/Paper'; -import {styled} from '@mui/material/styles'; -import Alert from '@mui/material/Alert'; -import IconButton from '@mui/material/IconButton'; -import CloseIcon from '@mui/icons-material/Close'; -import CircularProgress from '@mui/material/CircularProgress'; -import Stack from '@mui/material/Stack'; -import {AdapterDayjs} from '@mui/x-date-pickers/AdapterDayjs'; -import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'; +import { Trans, useTranslation } from "react-i18next"; +import { useEffect, useReducer, useState } from "react"; +import { + AlertColor, + Box, + Container, + Theme, + Typography, + useMediaQuery, +} from "@mui/material"; +import Button from "@mui/material/Button"; +import TextField from "@mui/material/TextField"; +import Autocomplete from "@mui/material/Autocomplete"; +import { DateField } from "@mui/x-date-pickers"; +import Chip from "@mui/material/Chip"; +import Paper from "@mui/material/Paper"; +import { styled } from "@mui/material/styles"; +import Alert from "@mui/material/Alert"; +import IconButton from "@mui/material/IconButton"; +import CloseIcon from "@mui/icons-material/Close"; +import CircularProgress from "@mui/material/CircularProgress"; +import Stack from "@mui/material/Stack"; +import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; +import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import dayjs from "dayjs"; -import {API_BASE_URL, signIn, signOut} from '../components/Api'; -import {Action, chipColor, ChipData, Province, State, User} from "../components/Types"; +import { API_BASE_URL, signIn, signOut } from "../components/Api"; +import { + Action, + chipColor, + ChipData, + Province, + State, + User, +} from "../components/Types"; import httpClient from "../httpClient"; -import {getProvincesWithNA} from "../components/Provinces"; -import {checkAdmin} from "./AdminPage"; - +import { getProvincesWithNA } from "../components/Provinces"; +import { checkAdmin } from "./AdminPage"; const initialState: State = { - alert: false, - alertType: "error", - alertContent: "" + alert: false, + alertType: "error", + alertContent: "", }; const reducer = (state: State, action: Action) => { - switch (action.type) { - case "SHOW_ALERT": - return { - ...state, - alert: true, - alertType: action.alertType, - alertContent: action.alertContent - }; - case "HIDE_ALERT": - return { - ...state, - alert: false - }; - default: - return state; - } + switch (action.type) { + case "SHOW_ALERT": + return { + ...state, + alert: true, + alertType: action.alertType, + alertContent: action.alertContent, + }; + case "HIDE_ALERT": + return { + ...state, + alert: false, + }; + default: + return state; + } }; - export const Account = () => { - const {t} = useTranslation(); - const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); - - const [province, setProvince] = useState(null); - const [chipData, setChipData] = useState([]); - - const [alertState, alertDispatch] = useReducer(reducer, initialState); - - const provinces: Province[] = getProvincesWithNA(); - - const [user, setUser] = useState(null); - const [loading, setLoading] = useState(true); - - const defaultProvince: Province = provinces.find(({id}) => id === user?.province) || { - label: 'N/A', - id: 'na', - region: 'N/A', - region_id: 'na' - } - const defaultDOB = user?.dob ? dayjs(user.dob) : dayjs('2022-01-01'); - const defaultWCAID = user?.wca_person || ""; - const defaultEmail: string = user?.email || ""; - - const showAlert = (alertType: AlertColor, alertContent: string) => { - alertDispatch({ - type: "SHOW_ALERT", - alertType, - alertContent - }); - }; - - const hideAlert = () => { - alertDispatch({ - type: "HIDE_ALERT" - }); - }; - - useEffect(() => { - (async () => { - try { - const resp = await httpClient.get(API_BASE_URL + "/user_info"); - if (!resp.hasOwnProperty("error")) { - setUser(resp); - } - - } catch (error) { - console.log("Not authenticated"); - } - setLoading(false); - })(); - }, []); - - useEffect(() => { - if (user && user.roles && user.roles.length > 0) { - let tmpChipData = []; - for (let i = 0; i < user.roles.length; i++) { - tmpChipData.push({key: i, label: user.roles[i]}); - } - setChipData(tmpChipData); - } - }, [user]); - - - const ListItem = styled('li')(({theme}) => ({ - margin: theme.spacing(0.5), - })); - - - const handleSaveProfile = async () => { - hideAlert(); - try { - const resp = await httpClient.post(API_BASE_URL + "/edit", { - province: province ? province.id : 'na', - }); - if (!resp.hasOwnProperty("error")) { - showAlert("success", t("account.success")); - } else { - showAlert("error", t("account.error")); - } - } catch (error: any) { - console.log(error); + const { t } = useTranslation(); + const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); + + const [province, setProvince] = useState(null); + const [chipData, setChipData] = useState([]); + + const [alertState, alertDispatch] = useReducer(reducer, initialState); + + const provinces: Province[] = getProvincesWithNA(); + + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + + const defaultProvince: Province = provinces.find( + ({ id }) => id === user?.province, + ) || { + label: "N/A", + id: "na", + region: "N/A", + region_id: "na", + }; + const defaultDOB = user?.dob ? dayjs(user.dob) : dayjs("2022-01-01"); + const defaultWCAID = user?.wca_person || ""; + const defaultEmail: string = user?.email || ""; + + const showAlert = (alertType: AlertColor, alertContent: string) => { + alertDispatch({ + type: "SHOW_ALERT", + alertType, + alertContent, + }); + }; + + const hideAlert = () => { + alertDispatch({ + type: "HIDE_ALERT", + }); + }; + + useEffect(() => { + (async () => { + try { + const resp = await httpClient.get(API_BASE_URL + "/user_info"); + if (!resp.hasOwnProperty("error")) { + setUser(resp); } - }; - - const handleSignIn = async () => { - setLoading(true); - signIn(); + } catch (error) { + console.log("Not authenticated"); + } + setLoading(false); + })(); + }, []); + + useEffect(() => { + if (user && user.roles && user.roles.length > 0) { + let tmpChipData = []; + for (let i = 0; i < user.roles.length; i++) { + tmpChipData.push({ key: i, label: user.roles[i] }); + } + setChipData(tmpChipData); } - - const handleAdmin = () => { - window.location.assign('/admin'); + }, [user]); + + const ListItem = styled("li")(({ theme }) => ({ + margin: theme.spacing(0.5), + })); + + const handleSaveProfile = async () => { + hideAlert(); + try { + const resp = await httpClient.post(API_BASE_URL + "/edit", { + province: province ? province.id : "na", + }); + if (!resp.hasOwnProperty("error")) { + showAlert("success", t("account.success")); + } else { + showAlert("error", t("account.error")); + } + } catch (error: any) { + console.log(error); } - - const isAdmin = checkAdmin(user); - - return ( - - - - {t("account.title")} - - - {loading ? - : user != null ? ( -
- - - {t("account.hi")}{user.name}! - - - - { - setProvince(newValue); - if (newValue?.id === "qc") { - console.log("Vive le Québec libre!"); - } - }} - renderInput={(params) => } - getOptionLabel={(option) => t('provinces.' + option.id)} - isOptionEqualToValue={(option, value) => option.id === value.id} - /> - - - - {t("account.policy")} - - - - - - 280 ? 145 : 280}px`}, - }} - /> - - - - - - - - {t("account.roles")} - - - {chipData.map((data) => { - const color: chipColor | undefined = data.label === 'GLOBAL_ADMIN' - || data.label === "DIRECTOR" || data.label === 'WEBMASTER' ? "primary" : "default" - - return ( - - - - ); - })} - - - - - - {isAdmin && ( - - ) - } - - - {alertState.alert && ( - - - - - } - variant="outlined" - severity={alertState.alertType} - > - {alertState.alertContent} - - - )} - -
- ) : ( -
- - - {t("account.welcome")} - - - -
+ }; + + const handleSignIn = async () => { + setLoading(true); + signIn(); + }; + + const handleAdmin = () => { + window.location.assign("/admin"); + }; + + const isAdmin = checkAdmin(user); + + return ( + + + + {t("account.title")} + + + {loading ? ( + + ) : user != null ? ( +
+ + + {t("account.hi")} + {user.name}! + + + + { + setProvince(newValue); + if (newValue?.id === "qc") { + console.log("Vive le Québec libre!"); + } + }} + renderInput={(params) => ( + )} - - - ); -}; \ No newline at end of file + getOptionLabel={(option) => t("provinces." + option.id)} + isOptionEqualToValue={(option, value) => option.id === value.id} + /> + + + + {t("account.policy")} + + + + + + 280 ? 145 : 280}px`, + }, + }} + /> + + + + + + + + {t("account.roles")} + + + {chipData.map((data) => { + const color: chipColor | undefined = + data.label === "GLOBAL_ADMIN" || + data.label === "DIRECTOR" || + data.label === "WEBMASTER" + ? "primary" + : "default"; + + return ( + + + + ); + })} + + + + + + {isAdmin && ( + + )} + + + {alertState.alert && ( + + + + + } + variant="outlined" + severity={alertState.alertType} + > + {alertState.alertContent} + + + )} +
+ ) : ( +
+ + + {t("account.welcome")} + + + +
+ )} +
+ ); +}; diff --git a/app/src/pages/AdminPage.tsx b/app/src/pages/AdminPage.tsx index 609c127..20a588b 100644 --- a/app/src/pages/AdminPage.tsx +++ b/app/src/pages/AdminPage.tsx @@ -1,96 +1,119 @@ -import {useEffect, useState} from "react"; -import {Admin, Resource, AppBar, TitlePortal, Layout, LayoutProps} from "react-admin"; +import { useEffect, useState } from "react"; +import { + Admin, + Resource, + AppBar, + TitlePortal, + Layout, + LayoutProps, +} from "react-admin"; import UserIcon from "@mui/icons-material/Group"; import CircularProgress from "@mui/material/CircularProgress"; import Alert from "@mui/material/Alert"; -import { - Box, - Container, -} from "@mui/material"; -import HomeIcon from '@mui/icons-material/Home'; -import {IconButton} from '@mui/material'; +import { Box, Container } from "@mui/material"; +import HomeIcon from "@mui/icons-material/Home"; +import { IconButton } from "@mui/material"; -import {UserList} from "../components/UserList"; +import { UserList } from "../components/UserList"; import dataProvider from "../dataProvider"; import httpClient from "../httpClient"; -import {API_BASE_URL} from "../components/Api"; -import {User} from "../components/Types"; -import {AdminDashboard} from "../components/AdminDashboard"; -import {UserEdit} from "../components/UserEdit"; -import {UserShow} from "../components/UserShow"; -import {i18nProvider} from "../i18nProvider"; +import { API_BASE_URL } from "../components/Api"; +import { User } from "../components/Types"; +import { AdminDashboard } from "../components/AdminDashboard"; +import { UserEdit } from "../components/UserEdit"; +import { UserShow } from "../components/UserShow"; +import { i18nProvider } from "../i18nProvider"; export const checkAdmin = (user: User | null) => { - return !!(user?.roles.includes("GLOBAL_ADMIN") - || user?.roles.includes("DIRECTOR") - || user?.roles.includes("WEBMASTER")); -} + return !!( + user?.roles.includes("GLOBAL_ADMIN") || + user?.roles.includes("DIRECTOR") || + user?.roles.includes("WEBMASTER") + ); +}; const SettingsButton = () => ( - - - + + + ); const MyAppBar = () => ( - - - - + + + + +); +const MyLayout = (props: JSX.IntrinsicAttributes & LayoutProps) => ( + ); -const MyLayout = (props: JSX.IntrinsicAttributes & LayoutProps) => ; export const AdminPage = () => { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); - const [user, setUser] = useState(null); - const [loading, setLoading] = useState(true); - - useEffect(() => { - (async () => { - try { - const resp = await httpClient.get(API_BASE_URL + "/user_info"); - if (!resp.hasOwnProperty("error")) { - setUser(resp); - } - - } catch (error) { - console.log("Not authenticated"); - } - setLoading(false); - })(); - }, []); - - - const isAdmin = checkAdmin(user); + useEffect(() => { + (async () => { + try { + const resp = await httpClient.get(API_BASE_URL + "/user_info"); + if (!resp.hasOwnProperty("error")) { + setUser(resp); + } + } catch (error) { + console.log("Not authenticated"); + } + setLoading(false); + })(); + }, []); - return ( -
- {loading ? - - - - - : isAdmin ? ( - - + const isAdmin = checkAdmin(user); - ) - : - - - You are not authorized to access this page. - - - } -
- ); -} + return ( +
+ {loading ? ( + + + + + + ) : isAdmin ? ( + + + + ) : ( + + + + You are not authorized to access this page. + + + + )} +
+ ); +}; diff --git a/app/src/pages/FAQ.tsx b/app/src/pages/FAQ.tsx index 2551035..f796ad6 100644 --- a/app/src/pages/FAQ.tsx +++ b/app/src/pages/FAQ.tsx @@ -1,71 +1,71 @@ -import {Box, Container, Typography} from "@mui/material"; -import {useTranslation, Trans} from "react-i18next"; -import {Link} from "../components/Link"; -import {LINKS} from "./links"; +import { Box, Container, Typography } from "@mui/material"; +import { useTranslation, Trans } from "react-i18next"; +import { Link } from "../components/Link"; +import { LINKS } from "./links"; const QUESTIONS = [ - "when-is-the-next-wca-competition-in-my-area", - "im-going-to-my-first-wca-competition-what-do-i-need-to-know", - "who-are-the-wca-delegates-in-my-area", - "why-doesnt-my-name-appear-on-the-rankings", - "why-does-this-person-appear-in-my-province", - "how-can-i-volunteer-with-speedcubing-canada", - "affiliated-with-the-wca", - "why-the-change-from-canadiancubing-to-speedcubing-canada", + "when-is-the-next-wca-competition-in-my-area", + "im-going-to-my-first-wca-competition-what-do-i-need-to-know", + "who-are-the-wca-delegates-in-my-area", + "why-doesnt-my-name-appear-on-the-rankings", + "why-does-this-person-appear-in-my-province", + "how-can-i-volunteer-with-speedcubing-canada", + "affiliated-with-the-wca", + "why-the-change-from-canadiancubing-to-speedcubing-canada", ] as const; const INTERPOLATE = { - "when-is-the-next-wca-competition-in-my-area": { - wcaComps: , - mailingList: , - }, - "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { - regs: , - firstComp: , - compBasics: , - }, - "who-are-the-wca-delegates-in-my-area": { - delegates: , - }, - "why-doesnt-my-name-appear-on-the-rankings": { - wca: , - }, - "why-does-this-person-appear-in-my-province": { - report: , - }, - "how-can-i-volunteer-with-speedcubing-canada": {}, - "affiliated-with-the-wca": { - regionalOrg: , - }, - "why-the-change-from-canadiancubing-to-speedcubing-canada": {}, + "when-is-the-next-wca-competition-in-my-area": { + wcaComps: , + mailingList: , + }, + "im-going-to-my-first-wca-competition-what-do-i-need-to-know": { + regs: , + firstComp: , + compBasics: , + }, + "who-are-the-wca-delegates-in-my-area": { + delegates: , + }, + "why-doesnt-my-name-appear-on-the-rankings": { + wca: , + }, + "why-does-this-person-appear-in-my-province": { + report: , + }, + "how-can-i-volunteer-with-speedcubing-canada": {}, + "affiliated-with-the-wca": { + regionalOrg: , + }, + "why-the-change-from-canadiancubing-to-speedcubing-canada": {}, } as const; export const FAQ = () => { - const {t} = useTranslation(); + const { t } = useTranslation(); - return ( - - - - {t("faq.title")} - + return ( + + + + {t("faq.title")} + - {QUESTIONS.map((key) => ( - - - {t(`faq.${key}.q`)} - - - {t(`faq.${key}.a`)} - - - ))} - - - ); + {QUESTIONS.map((key) => ( + + + {t(`faq.${key}.q`)} + + + {t(`faq.${key}.a`)} + + + ))} + + + ); }; diff --git a/app/src/pages/Rankings.tsx b/app/src/pages/Rankings.tsx index cb5cd61..ffb51f6 100644 --- a/app/src/pages/Rankings.tsx +++ b/app/src/pages/Rankings.tsx @@ -1,181 +1,252 @@ -import {useTranslation} from "react-i18next"; +import { useTranslation } from "react-i18next"; import { - Box, - Container, Theme, ToggleButton, ToggleButtonGroup, Typography, useMediaQuery, + Box, + Container, + Theme, + ToggleButton, + ToggleButtonGroup, + Typography, + useMediaQuery, } from "@mui/material"; -import * as React from 'react'; -import {useEffect, useState} from "react"; +import * as React from "react"; +import { useEffect, useState } from "react"; import TextField from "@mui/material/TextField"; import Autocomplete from "@mui/material/Autocomplete"; -import Stack from '@mui/material/Stack'; -import Switch from '@mui/material/Switch'; +import Stack from "@mui/material/Stack"; +import Switch from "@mui/material/Switch"; import CircularProgress from "@mui/material/CircularProgress"; -import {eventID, Province} from "../components/Types"; -import {getProvinces} from "../components/Provinces"; -import {API_BASE_URL, PRODUCTION} from "../components/Api"; +import { eventID, Province } from "../components/Types"; +import { getProvinces } from "../components/Provinces"; +import { API_BASE_URL, PRODUCTION } from "../components/Api"; import httpClient from "../httpClient"; -import {RankList} from "../components/RankList"; -import {MyCubingIcon} from "../components/MyCubingIcon"; +import { RankList } from "../components/RankList"; +import { MyCubingIcon } from "../components/MyCubingIcon"; const provinces: Province[] = getProvinces(); const events: eventID[] = [ - '333', '222', '444', '555', '666', '777', '333bf', '333fm', - '333oh', 'clock', 'minx', 'pyram', 'skewb', 'sq1', '444bf', '555bf', - '333mbf', -] + "333", + "222", + "444", + "555", + "666", + "777", + "333bf", + "333fm", + "333oh", + "clock", + "minx", + "pyram", + "skewb", + "sq1", + "444bf", + "555bf", + "333mbf", +]; export const Rankings = () => { - const {t} = useTranslation(); - const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); - - const [province, setProvince] = useState(provinces[0]); - const [eventId, setEventId] = useState("333"); - const [useAverage, setUseAverage] = useState(false); - const [loading, setLoading] = useState(true); - - const switchHandler = (event: { target: { checked: boolean | ((prevState: boolean) => boolean); }; }) => { - setUseAverage(event.target.checked); - }; - - const handleProvinceChange = (event: any, newValue: React.SetStateAction) => { - setProvince(newValue); - - if (province != null) { - console.log(ranking); - if (province.id === "qc") { - console.log("Vive le Québec libre!"); - } - } - }; - - const handleEventChange = (event: React.MouseEvent, newEvent: eventID | null) => { - if (newEvent === null) { - return; - } - setEventId(newEvent); + const { t } = useTranslation(); + const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); + + const [province, setProvince] = useState(provinces[0]); + const [eventId, setEventId] = useState("333"); + const [useAverage, setUseAverage] = useState(false); + const [loading, setLoading] = useState(true); + + const switchHandler = (event: { + target: { checked: boolean | ((prevState: boolean) => boolean) }; + }) => { + setUseAverage(event.target.checked); + }; + + const handleProvinceChange = ( + event: any, + newValue: React.SetStateAction, + ) => { + setProvince(newValue); + + if (province != null) { + console.log(ranking); + if (province.id === "qc") { + console.log("Vive le Québec libre!"); + } } - const handleEventChangeMobile = (event: any, newValue: React.SetStateAction) => { - if (newValue === null) { - return; - } - setEventId(newValue as eventID); + }; + + const handleEventChange = ( + event: React.MouseEvent, + newEvent: eventID | null, + ) => { + if (newEvent === null) { + return; } + setEventId(newEvent); + }; + const handleEventChangeMobile = ( + event: any, + newValue: React.SetStateAction, + ) => { + if (newValue === null) { + return; + } + setEventId(newValue as eventID); + }; + + const [ranking, setRanking] = useState(null); + + useEffect(() => { + setLoading(true); + let use_average_str = useAverage ? "1" : "0"; + + (async () => { + try { + if ( + eventId === null || + province?.id === null || + useAverage === null || + province === undefined + ) { + return null; + } + let resp; + if (!PRODUCTION) { + resp = await httpClient.get( + API_BASE_URL + + "/test_rankings?event=" + + eventId + + "&province=" + + province?.id + + "&use_average=" + + use_average_str + + "&test=1", + ); //allows to not have the WCA DB locally + } else { + resp = await httpClient.get( + API_BASE_URL + + "/province_rankings/" + + eventId + + "/" + + province?.id + + "/" + + use_average_str, + ); + } - const [ranking, setRanking] = useState(null); - - useEffect(() => { - setLoading(true); - let use_average_str = useAverage ? "1" : "0"; - - (async () => { - try { - if (eventId === null || province?.id === null || useAverage === null || province === undefined) { - return null; - } - - let resp; - if (!PRODUCTION) { - resp = await httpClient.get(API_BASE_URL + "/test_rankings?event=" + eventId + "&province=" + province?.id + "&use_average=" + use_average_str + "&test=1");//allows to not have the WCA DB locally - } else { - resp = await httpClient.get(API_BASE_URL + "/province_rankings/" + eventId + "/" + province?.id + "/" + use_average_str); - } - - setRanking(resp); - } catch (error: any) { - if (error?.code === "ERR_NETWORK") { - console.log("Network error" + error); - } else { - console.log("Error" + error); - } - } - setLoading(false); - })(); - }, [eventId, province, useAverage]); - - - return ( - - - - - {t("rankings.title")} - - - - - {isSmall ? ( - } - getOptionLabel={(option) => t('events._' + option)} - /> - ) : ( - - - {events.map((wcaEvent) => ( - - - - ))} - - )} - - - } - getOptionLabel={(option) => t('provinces.' + option.id)} - isOptionEqualToValue={(option, value) => option.id === value.id} - /> - - - {t("rankings.single")} - - {t("rankings.average")} - - - - - {loading ? - - - - : (ranking != null && province != null) ? ( -
- {t('rankings.rankfor')} {t("province_with_pronouns." + province?.id)} {t('rankings.in')} {t('events._' + eventId)} {t('rankings.for')} {useAverage ? t("rankings.average") : t("rankings.single")} - -
- - ) : (province == null) ? ( -
- {t("rankings.choose")} -
- ) : ( -
- {t("rankings.unavailable")} -
- )} -
- ); -}; \ No newline at end of file + setRanking(resp); + } catch (error: any) { + if (error?.code === "ERR_NETWORK") { + console.log("Network error" + error); + } else { + console.log("Error" + error); + } + } + setLoading(false); + })(); + }, [eventId, province, useAverage]); + + return ( + + + + {t("rankings.title")} + + + + + {isSmall ? ( + ( + + )} + getOptionLabel={(option) => t("events._" + option)} + /> + ) : ( + + {events.map((wcaEvent) => ( + + + + ))} + + )} + + + } + getOptionLabel={(option) => t("provinces." + option.id)} + isOptionEqualToValue={(option, value) => option.id === value.id} + /> + + + {t("rankings.single")} + + {t("rankings.average")} + + + + {loading ? ( + + + + ) : ranking != null && province != null ? ( +
+ + {t("rankings.rankfor")}{" "} + {t("province_with_pronouns." + province?.id)} {t("rankings.in")}{" "} + {t("events._" + eventId)} {t("rankings.for")}{" "} + {useAverage ? t("rankings.average") : t("rankings.single")} + + +
+ ) : province == null ? ( +
+ {t("rankings.choose")} +
+ ) : ( +
+ {t("rankings.unavailable")} +
+ )} +
+ ); +}; diff --git a/app/src/pages/links.ts b/app/src/pages/links.ts index 0bdd079..ba640d5 100644 --- a/app/src/pages/links.ts +++ b/app/src/pages/links.ts @@ -17,5 +17,5 @@ export const LINKS = { FIRST_COMP: "https://youtu.be/xK2ycvTfgUY", COMP_BASICS: "https://youtu.be/vz1V0Gv0qX0", DISCORD_QC: "https://discord.gg/BTwYPg4qcJ", - REPORT: "mailto:software@speedcubingcanada.org" + REPORT: "mailto:software@speedcubingcanada.org", } as const; From 9a33b78e7aadaec3abb832a57952c2336548e87e Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sat, 9 Sep 2023 13:31:15 -0400 Subject: [PATCH 60/72] removing web-vitals package (already removed from the code a while ago) --- app/package.json | 3 +-- package-lock.json | 8 +------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/app/package.json b/app/package.json index fc5fc48..3d408ca 100644 --- a/app/package.json +++ b/app/package.json @@ -27,8 +27,7 @@ "react-i18next": "^11.16.7", "react-router-dom": "^6.3.0", "react-scripts": "5.0.0", - "typescript": "^4.5.5", - "web-vitals": "^2.1.4" + "typescript": "^4.5.5" }, "scripts": { "start": "PORT=2003 react-scripts start", diff --git a/package-lock.json b/package-lock.json index 466a0eb..79ba72a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,8 +43,7 @@ "react-i18next": "^11.16.7", "react-router-dom": "^6.3.0", "react-scripts": "5.0.0", - "typescript": "^4.5.5", - "web-vitals": "^2.1.4" + "typescript": "^4.5.5" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -18356,11 +18355,6 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/web-vitals": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", - "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" - }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", From 9786fcb6b21e05cdf6dac5e79fc19fe01d10b8b1 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sat, 9 Sep 2023 13:58:16 -0400 Subject: [PATCH 61/72] changes from review (front part) --- app/src/components/{Api.tsx => Api.ts} | 2 +- app/src/components/UserShow.tsx | 4 +++- app/src/pages/Organization.tsx | 3 ++- app/src/pages/links.ts | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) rename app/src/components/{Api.tsx => Api.ts} (96%) diff --git a/app/src/components/Api.tsx b/app/src/components/Api.ts similarity index 96% rename from app/src/components/Api.tsx rename to app/src/components/Api.ts index abe4673..20d4f90 100644 --- a/app/src/components/Api.tsx +++ b/app/src/components/Api.ts @@ -1,7 +1,7 @@ export const PRODUCTION = process.env.NODE_ENV === "production"; export const API_BASE_URL = - process.env.REACT_APP_API_BASE_URL || "https://api.speedcubingcanara.org"; + process.env.REACT_APP_API_BASE_URL || "https://api.speedcubingcanada.org"; export const signIn = () => { window.location.assign(API_BASE_URL + "/login"); diff --git a/app/src/components/UserShow.tsx b/app/src/components/UserShow.tsx index ec31d57..0894511 100644 --- a/app/src/components/UserShow.tsx +++ b/app/src/components/UserShow.tsx @@ -11,7 +11,9 @@ import { useTranslate, } from "react-admin"; import { Link } from "@mui/material"; -import { WCA_PROFILE_URL } from "../pages/Organization"; +import { LINKS } from "../pages/links"; + +const WCA_PROFILE_URL = LINKS.WCA.PROFILE; export const UserRoleChip = () => { const t = useTranslate(); diff --git a/app/src/pages/Organization.tsx b/app/src/pages/Organization.tsx index d6ca66e..69b51f6 100644 --- a/app/src/pages/Organization.tsx +++ b/app/src/pages/Organization.tsx @@ -14,6 +14,7 @@ import { import { useTranslation } from "react-i18next"; import { Link } from "../components/Link"; import { DOCUMENT_TYPES, DOCUMENTS } from "./documents"; +import { LINKS } from "./links"; const DIRECTORS = [ { name: "Kristopher De Asis", wcaId: "2008ASIS01" }, @@ -23,7 +24,7 @@ const DIRECTORS = [ { name: "Liam Orovec", wcaId: "2014OROV01" }, ] as const; -export const WCA_PROFILE_URL = "https://www.worldcubeassociation.org/persons/"; +const WCA_PROFILE_URL = LINKS.WCA.PROFILE; export const Organization = () => { const { t } = useTranslation(); diff --git a/app/src/pages/links.ts b/app/src/pages/links.ts index ba640d5..c8471f3 100644 --- a/app/src/pages/links.ts +++ b/app/src/pages/links.ts @@ -13,6 +13,7 @@ export const LINKS = { WC2003: "https://www.worldcubeassociation.org/competitions/WC2003", CO2007: "https://www.worldcubeassociation.org/competitions/CanadianOpen2007", + PROFILE: "https://www.worldcubeassociation.org/persons/", }, FIRST_COMP: "https://youtu.be/xK2ycvTfgUY", COMP_BASICS: "https://youtu.be/vz1V0Gv0qX0", From cf11637a34d0bbe50b3d35117dfdfaae62f9d619 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sat, 9 Sep 2023 14:19:59 -0400 Subject: [PATCH 62/72] method renaming --- .../handlers/admin/edit_championships.py | 10 ++-- back/backend/handlers/admin/provinces.py | 20 ++++---- back/backend/handlers/province_rankings.py | 4 +- back/backend/handlers/user.py | 12 ++--- back/backend/lib/formatters.py | 50 +++++++++---------- back/backend/lib/permissions.py | 8 +-- back/backend/load_db/load_db.py | 14 +++--- back/backend/load_db/update_champions.py | 10 ++-- back/backend/models/champion.py | 2 +- back/backend/models/championship.py | 8 +-- back/backend/models/region.py | 2 +- back/backend/models/wca/base.py | 10 ++-- back/backend/models/wca/competition.py | 10 ++-- back/backend/models/wca/continent.py | 4 +- back/backend/models/wca/country.py | 4 +- back/backend/models/wca/event.py | 6 +-- back/backend/models/wca/format.py | 6 +-- back/backend/models/wca/person.py | 8 +-- back/backend/models/wca/rank.py | 12 ++--- back/backend/models/wca/result.py | 6 +-- back/backend/models/wca/round.py | 4 +- 21 files changed, 105 insertions(+), 105 deletions(-) diff --git a/back/backend/handlers/admin/edit_championships.py b/back/backend/handlers/admin/edit_championships.py index 8de657a..110513e 100644 --- a/back/backend/handlers/admin/edit_championships.py +++ b/back/backend/handlers/admin/edit_championships.py @@ -21,13 +21,13 @@ def add_championship(competition_id, championship_type): abort(403) competition = Competition.get_by_id(competition_id) if championship_type == 'national': - championship_id = Championship.NationalsId(competition.year) + championship_id = Championship.nationals_id(competition.year) elif championship_type == 'regional': - championship_id = Championship.RegionalsId(competition.year, - competition.province.get().region.get()) + championship_id = Championship.regionals_id(competition.year, + competition.province.get().region.get()) elif championship_type == 'province': - championship_id = Championship.ProvinceChampionshipId(competition.year, - competition.province.get()) + championship_id = Championship.province_championship_id(competition.year, + competition.province.get()) championship = (Championship.get_by_id(championship_id) or Championship(id=championship_id)) diff --git a/back/backend/handlers/admin/provinces.py b/back/backend/handlers/admin/provinces.py index 6961e25..5186728 100644 --- a/back/backend/handlers/admin/provinces.py +++ b/back/backend/handlers/admin/provinces.py @@ -9,7 +9,7 @@ bp = Blueprint('provinces', __name__) client = ndb.Client() -def MakeRegion(region_id, region_name, championship_name, all_regions, futures): +def make_region(region_id, region_name, championship_name, all_regions, futures): region = Region.get_by_id(region_id) or Region(id=region_id) region.name = region_name region.championship_name = championship_name @@ -17,7 +17,7 @@ def MakeRegion(region_id, region_name, championship_name, all_regions, futures): all_regions[region_id] = region return region -def MakeProvince(province_id, province_name, region, is_province, all_provinces, futures): +def make_province(province_id, province_name, region, is_province, all_provinces, futures): province = Province.get_by_id(province_id) or Province(id=province_id) province.name = province_name province.region = region.key @@ -37,12 +37,12 @@ def update_provinces(): futures = [] all_regions = {} - ATLANTIC = MakeRegion('at', 'Atlantic', 'Atlantic',all_regions, futures) - QUEBEC = MakeRegion('qc', 'Quebec', 'Quebec', all_regions, futures) - ONTARIO = MakeRegion('on', 'Ontario', 'Ontario', all_regions, futures) - PRAIRIES = MakeRegion('pr', 'Prairies', 'Prairies', all_regions, futures) - BRITISH_COLUMBIA = MakeRegion('bc', 'British Columbia', 'British Columbia', all_regions, futures) - TERRITORIES = MakeRegion('te', 'Territories', 'Territories', all_regions, futures) + ATLANTIC = make_region('at', 'Atlantic', 'Atlantic', all_regions, futures) + QUEBEC = make_region('qc', 'Quebec', 'Quebec', all_regions, futures) + ONTARIO = make_region('on', 'Ontario', 'Ontario', all_regions, futures) + PRAIRIES = make_region('pr', 'Prairies', 'Prairies', all_regions, futures) + BRITISH_COLUMBIA = make_region('bc', 'British Columbia', 'British Columbia', all_regions, futures) + TERRITORIES = make_region('te', 'Territories', 'Territories', all_regions, futures) for future in futures: @@ -61,13 +61,13 @@ def update_provinces(): ('sk', 'Saskatchewan', PRAIRIES), ('ab', 'Alberta', PRAIRIES), ('bc', 'British Columbia', BRITISH_COLUMBIA)): - MakeProvince(province_id, province_name, region, True, all_provinces, futures) + make_province(province_id, province_name, region, True, all_provinces, futures) for territory_id, territory_name, region in ( ('yt', 'Yukon', TERRITORIES), ('nt', 'Northwest Territories', TERRITORIES), ('nu', 'Nunavut', TERRITORIES)): - MakeProvince(territory_id, territory_name, region, False, all_provinces, futures) + make_province(territory_id, territory_name, region, False, all_provinces, futures) for future in futures: future.wait() diff --git a/back/backend/handlers/province_rankings.py b/back/backend/handlers/province_rankings.py index 9235fe6..1c0780c 100644 --- a/back/backend/handlers/province_rankings.py +++ b/back/backend/handlers/province_rankings.py @@ -41,7 +41,7 @@ def province_rankings_table(event_id, province_id, use_average): output.append({ "rank": rank, "name": rankings[i].person.get().name, - "url": rankings[i].person.get().GetWCALink(), - "time": common.Common().formatters.FormatTime(rankings[i].best, rankings[i].event, use_average == '1') + "url": rankings[i].person.get().get_wca_link(), + "time": common.Common().formatters.format_time(rankings[i].best, rankings[i].event, use_average == '1') }) return jsonify(output) diff --git a/back/backend/handlers/user.py b/back/backend/handlers/user.py index 766aec2..cedbc7d 100644 --- a/back/backend/handlers/user.py +++ b/back/backend/handlers/user.py @@ -24,14 +24,14 @@ def user_info(user_id=-1): user = User.get_by_id(user_id) if not user: return jsonify({"error": "Unrecognized user ID %s" % user_id}), 404 - if not permissions.CanViewUser(user, me): + if not permissions.can_view_user(user, me): return jsonify({"error": "You're not authorized to view this user."}), 403 return user.toJson() # After updating the user's province, write the RankSingle and RankAverage to the # datastore again to update their provinces. -def RewriteRanks(wca_person): +def rewrite_ranks(wca_person): if not wca_person: return for rank_class in (RankSingle, RankAverage): @@ -51,7 +51,7 @@ def edit(user_id=-1): user = User.get_by_id(user_id) if not user: return jsonify({"error": "Unrecognized user ID %s" % user_id}), 404 - if not permissions.CanViewUser(user, me): + if not permissions.can_view_user(user, me): return jsonify( {"error": "You're not authorized to view this user. So you can't edit their location either."}), 403 @@ -62,7 +62,7 @@ def edit(user_id=-1): old_province_id = user.province.id() if user.province else '' changed_location = old_province_id != province_id user_modified = False - if permissions.CanEditLocation(user, me) and changed_location: + if permissions.can_edit_location(user, me) and changed_location: if province_id: user.province = ndb.Key(Province, province_id) else: @@ -72,7 +72,7 @@ def edit(user_id=-1): if wca_person: wca_person.province = user.province wca_person.put() - RewriteRanks(wca_person) + rewrite_ranks(wca_person) user_modified = True if changed_location: @@ -88,7 +88,7 @@ def edit(user_id=-1): return jsonify({"error": "You're not authorized to edit this user's location."}), 403 if "roles" in request.json: - for role in permissions.EditableRoles(user, me): + for role in permissions.editable_roles(user, me): if role in request.json["roles"] and role not in user.roles: user.roles.append(role) user_modified = True diff --git a/back/backend/lib/formatters.py b/back/backend/lib/formatters.py index b6d2637..05ec576 100644 --- a/back/backend/lib/formatters.py +++ b/back/backend/lib/formatters.py @@ -8,7 +8,7 @@ def parse_time(time): return (hours, minutes, seconds, centiseconds) -def FormatStandard(time, trim_zeros): +def format_standard(time, trim_zeros): hours, minutes, seconds, centiseconds = parse_time(time) centiseconds_section = '' if trim_zeros and not centiseconds else '.%02d' % centiseconds if hours > 0: @@ -21,9 +21,9 @@ def FormatStandard(time, trim_zeros): return '%01d%s' % (seconds, centiseconds_section) -def FormatVerbose(time, trim_zeros, short_units): +def format_verbose(time, trim_zeros, short_units): if time >= 6000: - return FormatStandard(time, trim_zeros) + return format_standard(time, trim_zeros) else: if short_units: unit = 'sec' @@ -31,10 +31,10 @@ def FormatVerbose(time, trim_zeros, short_units): unit = 'second' else: unit = 'seconds' - return '%s %s' % (FormatStandard(time, trim_zeros), unit) + return '%s %s' % (format_standard(time, trim_zeros), unit) -def FormatMultiBlindOld(time, verbose, trim_zeros, short_units): +def format_multi_blind_old(time, verbose, trim_zeros, short_units): time_in_seconds = time % 100000 res = time // 100000 attempted = res % 100 @@ -43,13 +43,13 @@ def FormatMultiBlindOld(time, verbose, trim_zeros, short_units): if verbose: return '%d out of %d cubes in %s' % ( solved, attempted, - FormatStandard(time_in_seconds * 100, trim_zeros)) + format_standard(time_in_seconds * 100, trim_zeros)) else: return '%d/%d %s' % (solved, attempted, - FormatStandard(time_in_seconds * 100, trim_zeros)) + format_standard(time_in_seconds * 100, trim_zeros)) -def FormatMultiBlind(time, verbose, trim_zeros, short_units): +def format_multi_blind(time, verbose, trim_zeros, short_units): missed = time % 100 res = time // 100 time_in_seconds = res % 100000 @@ -60,13 +60,13 @@ def FormatMultiBlind(time, verbose, trim_zeros, short_units): if verbose: return '%d out of %d cubes in %s' % ( solved, attempted, - FormatStandard(time_in_seconds * 100, trim_zeros)) + format_standard(time_in_seconds * 100, trim_zeros)) else: return '%d/%d %s' % (solved, attempted, - FormatStandard(time_in_seconds * 100, trim_zeros)) + format_standard(time_in_seconds * 100, trim_zeros)) -def FormatFewestMoves(time, is_average, verbose, short_units): +def format_fewest_moves(time, is_average, verbose, short_units): result = str(time) if is_average: result = '%d.%02d' % (time // 100, time % 100) @@ -78,43 +78,43 @@ def FormatFewestMoves(time, is_average, verbose, short_units): return result -def FormatTime(time, event_key, is_average, verbose=False, - trim_zeros=False, short_units=False): +def format_time(time, event_key, is_average, verbose=False, + trim_zeros=False, short_units=False): if time == -1: return 'DNF' elif time == -2: return 'DNS' elif event_key.id() == '333fm': - return FormatFewestMoves(time, is_average, verbose, short_units) + return format_fewest_moves(time, is_average, verbose, short_units) elif event_key.id() in ('333mbf', '333mbo'): if time > 1000000000: - return FormatMultiBlindOld(time, verbose, trim_zeros, short_units) + return format_multi_blind_old(time, verbose, trim_zeros, short_units) else: - return FormatMultiBlind(time, verbose, trim_zeros, short_units) + return format_multi_blind(time, verbose, trim_zeros, short_units) elif verbose: - return FormatVerbose(time, trim_zeros, short_units) + return format_verbose(time, trim_zeros, short_units) else: - return FormatStandard(time, trim_zeros) + return format_standard(time, trim_zeros) -def FormatQualifying(time, event_key, is_average, short_units=False): +def format_qualifying(time, event_key, is_average, short_units=False): if event_key.id() == '333fm': - return FormatFewestMoves(time, is_average, verbose=False, short_units=short_units) + return format_fewest_moves(time, is_average, verbose=False, short_units=short_units) elif event_key.id() == '333mbf': return '%d %s' % (99 - time // 10000000, 'pts' if short_units else 'points') else: - return FormatVerbose(time, trim_zeros=True, short_units=short_units) + return format_verbose(time, trim_zeros=True, short_units=short_units) -def FormatResult(result, verbose=False): +def format_result(result, verbose=False): is_average = result.fmt.id() in ('a', 'm') if is_average: - return FormatTime(result.average, result.event, True, verbose) + return format_time(result.average, result.event, True, verbose) else: - return FormatTime(result.best, result.event, False, verbose) + return format_time(result.best, result.event, False, verbose) -def FormatDate(date): +def format_date(date): return '%s, %s %d' % (date.strftime('%A'), date.strftime('%B'), date.day) diff --git a/back/backend/lib/permissions.py b/back/backend/lib/permissions.py index 964d735..f9b8f2d 100644 --- a/back/backend/lib/permissions.py +++ b/back/backend/lib/permissions.py @@ -1,7 +1,7 @@ from backend.models.user import Roles -def CanEditLocation(user, editor): +def can_edit_location(user, editor): if not editor: return False if editor.HasAnyRole(Roles.AdminRoles()): @@ -9,7 +9,7 @@ def CanEditLocation(user, editor): return user == editor -def CanViewUser(user, viewer): +def can_view_user(user, viewer): if not viewer: return False return (user == viewer or @@ -17,14 +17,14 @@ def CanViewUser(user, viewer): viewer.HasAnyRole(Roles.AdminRoles())) -def CanViewRoles(user, viewer): +def can_view_roles(user, viewer): if not viewer: return False return (viewer.HasAnyRole(Roles.DelegateRoles()) or viewer.HasAnyRole(Roles.AdminRoles())) -def EditableRoles(user, editor): +def editable_roles(user, editor): if not editor: return [] if editor.HasAnyRole([Roles.GLOBAL_ADMIN]): diff --git a/back/backend/load_db/load_db.py b/back/backend/load_db/load_db.py index 9ad1783..997b835 100644 --- a/back/backend/load_db/load_db.py +++ b/back/backend/load_db/load_db.py @@ -5,7 +5,7 @@ from absl import logging from google.cloud import ndb -from backend.load_db.update_champions import UpdateChampions +from backend.load_db.update_champions import update_champions from backend.models.user import User from backend.models.wca.competition import Competition from backend.models.wca.continent import Continent @@ -60,21 +60,21 @@ def modify(person): def read_table(path, cls, apply_filter): filter_fn = lambda row: True if apply_filter: - filter_fn = cls.Filter() + filter_fn = cls.filter() out = {} try: with open(path) as csvfile: reader = csv.DictReader(csvfile, dialect='excel-tab') for row in reader: if filter_fn(row): - fields_to_write = cls.ColumnsUsed() + fields_to_write = cls.columns_used() if 'id' in row: fields_to_write += ['id'] to_write = {} for field in fields_to_write: if field in row: to_write[field] = row[field] - out[cls.GetId(row)] = to_write + out[cls.get_id(row)] = to_write except: # This is fine, the file might just not exist. pass @@ -87,7 +87,7 @@ def write_table(path, rows, cls): reader = csv.DictReader(csvfile, dialect='excel-tab') use_id = 'id' in reader.fieldnames with open(path, 'w') as csvfile: - fields_to_write = cls.ColumnsUsed() + fields_to_write = cls.columns_used() if use_id: fields_to_write += ['id'] writer = csv.DictWriter(csvfile, dialect='excel-tab', fieldnames=fields_to_write) @@ -118,7 +118,7 @@ def process_export(old_export_path, new_export_path): continue else: obj = cls(id=key) - obj.ParseFromDict(row) + obj.parse_from_dict(row) if modifier: modifier(obj) objects_to_put += [obj] @@ -156,7 +156,7 @@ def main(argv): client = ndb.Client() with client.context(): set_latest_export(FLAGS.new_export_id) - UpdateChampions() + update_champions() if __name__ == '__main__': diff --git a/back/backend/load_db/update_champions.py b/back/backend/load_db/update_champions.py index 2eeb760..f741c56 100644 --- a/back/backend/load_db/update_champions.py +++ b/back/backend/load_db/update_champions.py @@ -16,7 +16,7 @@ from backend.models.wca.result import RoundType -def ComputeEligibleCompetitors(championship, competition, results): +def compute_eligible_competitors(championship, competition, results): if championship.national_championship: # We don't save this in the datastore because it's easy enough to compute. return set([r.person.id() for r in results @@ -42,7 +42,7 @@ def eligibility_field(user): user.province_eligibilities = [] return user.province_eligibilities - valid_province_keys = championship.GetEligibleProvinceKeys() + valid_province_keys = championship.get_eligible_province_keys() residency_deadline = (championship.residency_deadline or datetime.datetime.combine(competition.start_date, datetime.time(0, 0, 0))) @@ -84,7 +84,7 @@ class Resolution: return eligible_competitors -def UpdateChampions(): +def update_champions(): champions_to_write = [] champions_to_delete = [] final_round_keys = set(r.key for r in RoundType.query(RoundType.final == True).iter()) @@ -111,7 +111,7 @@ def UpdateChampions(): if not results: logging.info('Results are not uploaded yet. Not computing champions yet.') continue - eligible_competitors = ComputeEligibleCompetitors(championship, competition, results) + eligible_competitors = compute_eligible_competitors(championship, competition, results) champions = collections.defaultdict(list) events_held_with_successes = set() for result in results: @@ -138,7 +138,7 @@ def UpdateChampions(): if result.pos > 1 and len(champions) >= len(events_held_with_successes): break for event_key in all_event_keys: - champion_id = Champion.Id(championship.key.id(), event_key.id()) + champion_id = Champion.id(championship.key.id(), event_key.id()) if event_key in champions: champion = Champion.get_by_id(champion_id) or Champion(id=champion_id) champion.championship = championship.key diff --git a/back/backend/models/champion.py b/back/backend/models/champion.py index de2c462..9acb7d3 100644 --- a/back/backend/models/champion.py +++ b/back/backend/models/champion.py @@ -16,5 +16,5 @@ class Champion(ndb.Model): year = ndb.ComputedProperty(lambda e: e.championship.get().year) @staticmethod - def Id(championship_id, event_id): + def id(championship_id, event_id): return '%s_%s' % (championship_id, event_id) diff --git a/back/backend/models/championship.py b/back/backend/models/championship.py index 224d88b..ab68e9d 100644 --- a/back/backend/models/championship.py +++ b/back/backend/models/championship.py @@ -18,18 +18,18 @@ class Championship(ndb.Model): residency_timezone = ndb.StringProperty() @staticmethod - def NationalsId(year): + def nationals_id(year): return str(year) @staticmethod - def RegionalsId(year, region): + def regionals_id(year, region): return '%s_%d' % (region.key.id(), year) @staticmethod - def ProvinceChampionshipId(year, province): + def province_championship_id(year, province): return '%s_%d' % (province.key.id(), year) - def GetEligibleProvinceKeys(self): + def get_eligible_province_keys(self): if self.province: return [self.province] if self.region: diff --git a/back/backend/models/region.py b/back/backend/models/region.py index 6ade7fa..b9604e0 100644 --- a/back/backend/models/region.py +++ b/back/backend/models/region.py @@ -6,5 +6,5 @@ class Region(ndb.Model): championship_name = ndb.StringProperty() obsolete = ndb.BooleanProperty() - def CssClass(self): + def css_class(self): return 'region-%s' % self.key.id() diff --git a/back/backend/models/wca/base.py b/back/backend/models/wca/base.py index fe46412..008d594 100644 --- a/back/backend/models/wca/base.py +++ b/back/backend/models/wca/base.py @@ -3,22 +3,22 @@ class BaseModel(ndb.Model): @staticmethod - def GetId(row): + def get_id(row): return row['id'] - def ParseFromDict(self, row): + def parse_from_dict(self, row): raise Exception('ParseFromDict is unimplemented.') @staticmethod - def ColumnsUsed(): + def columns_used(): raise Exception('ColumnsUsed is unimplemented.') @staticmethod - def Filter(): + def filter(): return lambda row: True # If any entities need to be fetched from the datastore before writing, # this method should return their keys. This is used when we have a # ComputedProperty. - def ObjectsToGet(self): + def objects_to_get(self): return [] diff --git a/back/backend/models/wca/competition.py b/back/backend/models/wca/competition.py index a45261c..dc23ab5 100644 --- a/back/backend/models/wca/competition.py +++ b/back/backend/models/wca/competition.py @@ -25,7 +25,7 @@ class Competition(BaseModel): city_name = ndb.StringProperty() province = ndb.KeyProperty(kind=Province) - def ParseFromDict(self, row): + def parse_from_dict(self, row): self.start_date = datetime.date(int(row['year']), int(row['month']), int(row['day'])) self.end_date = datetime.date(int(row['year']), int(row['endMonth']), int(row['endDay'])) self.year = int(row['year']) @@ -51,7 +51,7 @@ def ParseFromDict(self, row): self.country = ndb.Key(Country, row['countryId']) @staticmethod - def Filter(): + def filter(): # Only load Canada competitions that haven't been cancelled. def filter_row(row): return row['countryId'] == 'Canada' and int(row['cancelled']) != 1 @@ -59,12 +59,12 @@ def filter_row(row): return filter_row @staticmethod - def ColumnsUsed(): + def columns_used(): return ['year', 'month', 'day', 'endMonth', 'endDay', 'cellName', 'eventSpecs', 'latitude', 'longitude', 'cityName', 'countryId', 'name'] - def GetWCALink(self): + def get_wca_link(self): return 'https://worldcubeassociation.org/competitions/%s' % self.key.id() - def GetEventsString(self): + def get_events_string(self): return ','.join([e.id() for e in self.events]) diff --git a/back/backend/models/wca/continent.py b/back/backend/models/wca/continent.py index 574d77a..89466be 100644 --- a/back/backend/models/wca/continent.py +++ b/back/backend/models/wca/continent.py @@ -7,10 +7,10 @@ class Continent(BaseModel): name = ndb.StringProperty() recordName = ndb.StringProperty() - def ParseFromDict(self, row): + def parse_from_dict(self, row): self.name = row['name'] self.recordName = row['recordName'] @staticmethod - def ColumnsUsed(): + def columns_used(): return ['name', 'recordName'] diff --git a/back/backend/models/wca/country.py b/back/backend/models/wca/country.py index 2bf6be5..53d6697 100644 --- a/back/backend/models/wca/country.py +++ b/back/backend/models/wca/country.py @@ -9,11 +9,11 @@ class Country(BaseModel): continent = ndb.KeyProperty(kind=Continent) iso2 = ndb.StringProperty() - def ParseFromDict(self, row): + def parse_from_dict(self, row): self.name = row['name'] self.continent = ndb.Key(Continent, row['continentId']) self.iso2 = row['iso2'] @staticmethod - def ColumnsUsed(): + def columns_used(): return ['name', 'continentId', 'iso2'] diff --git a/back/backend/models/wca/event.py b/back/backend/models/wca/event.py index 5b1e377..8a2f0e6 100644 --- a/back/backend/models/wca/event.py +++ b/back/backend/models/wca/event.py @@ -7,13 +7,13 @@ class Event(BaseModel): name = ndb.StringProperty() rank = ndb.IntegerProperty() - def ParseFromDict(self, row): + def parse_from_dict(self, row): self.name = row['name'] self.rank = int(row['rank']) @staticmethod - def ColumnsUsed(): + def columns_used(): return ['name', 'rank'] - def IconURL(self): + def icon_url(self): return '/static/img/events/%s.svg' % self.key.id() diff --git a/back/backend/models/wca/format.py b/back/backend/models/wca/format.py index 607a3f7..97b44c2 100644 --- a/back/backend/models/wca/format.py +++ b/back/backend/models/wca/format.py @@ -6,13 +6,13 @@ class Format(BaseModel): name = ndb.StringProperty() - def ParseFromDict(self, row): + def parse_from_dict(self, row): self.name = row['name'] @staticmethod - def ColumnsUsed(): + def columns_used(): return ['name'] - def GetShortName(self): + def get_short_name(self): # Average of 5 -> Ao5 return self.name[0] + 'o' + self.name[-1] diff --git a/back/backend/models/wca/person.py b/back/backend/models/wca/person.py index 519add9..f48e7b8 100644 --- a/back/backend/models/wca/person.py +++ b/back/backend/models/wca/person.py @@ -15,18 +15,18 @@ class Person(BaseModel): # the database import. province = ndb.KeyProperty(kind=Province) - def ParseFromDict(self, row): + def parse_from_dict(self, row): self.name = row['name'] self.country = ndb.Key(Country, row['countryId']) self.gender = row['gender'] @staticmethod - def Filter(): + def filter(): return lambda row: int(row['subid']) == 1 @staticmethod - def ColumnsUsed(): + def columns_used(): return ['name', 'countryId', 'gender'] - def GetWCALink(self): + def get_wca_link(self): return 'https://worldcubeassociation.org/persons/%s' % self.key.id() diff --git a/back/backend/models/wca/rank.py b/back/backend/models/wca/rank.py index 26f1760..d01c285 100644 --- a/back/backend/models/wca/rank.py +++ b/back/backend/models/wca/rank.py @@ -9,27 +9,27 @@ class RankBase(BaseModel): person = ndb.KeyProperty(kind=Person) event = ndb.KeyProperty(kind=Event) best = ndb.IntegerProperty() - province = ndb.ComputedProperty(lambda self: self.GetProvince()) + province = ndb.ComputedProperty(lambda self: self.get_province()) - def GetProvince(self): + def get_province(self): if not self.person or not self.person.get(): return None return self.person.get().province @staticmethod - def GetId(row): + def get_id(row): return '%s_%s' % (row['personId'], row['eventId']) - def ParseFromDict(self, row): + def parse_from_dict(self, row): self.person = ndb.Key(Person, row['personId']) self.event = ndb.Key(Event, row['eventId']) self.best = int(row['best']) @staticmethod - def ColumnsUsed(): + def columns_used(): return ['personId', 'eventId', 'best'] - def ObjectsToGet(self): + def objects_to_get(self): return [self.person] diff --git a/back/backend/models/wca/result.py b/back/backend/models/wca/result.py index e03e660..ef7d800 100644 --- a/back/backend/models/wca/result.py +++ b/back/backend/models/wca/result.py @@ -27,7 +27,7 @@ class Result(BaseModel): regional_single_record = ndb.StringProperty() regional_average_record = ndb.StringProperty() - def ParseFromDict(self, row): + def parse_from_dict(self, row): self.competition = ndb.Key(Competition, row['competitionId']) self.event = ndb.Key(Event, row['eventId']) self.round_type = ndb.Key(RoundType, row['roundTypeId']) @@ -46,11 +46,11 @@ def ParseFromDict(self, row): self.regional_average_record = row['regionalAverageRecord'] @staticmethod - def GetId(row): + def get_id(row): return '%s_%s_%s_%s' % (row['competitionId'], row['eventId'], row['roundTypeId'], row['personId']) @staticmethod - def ColumnsUsed(): + def columns_used(): return ['competitionId', 'eventId', 'roundTypeId', 'personId', 'formatId', 'personName', 'personCountryId', 'pos', 'best', 'average', 'value1', 'value2', 'value3', 'value4', 'value5', 'regionalSingleRecord', 'regionalAverageRecord'] diff --git a/back/backend/models/wca/round.py b/back/backend/models/wca/round.py index be34240..74e1f26 100644 --- a/back/backend/models/wca/round.py +++ b/back/backend/models/wca/round.py @@ -8,11 +8,11 @@ class RoundType(BaseModel): name = ndb.StringProperty() final = ndb.BooleanProperty() - def ParseFromDict(self, row): + def parse_from_dict(self, row): self.rank = int(row['rank']) self.name = row['cellName'] self.final = int(row['final']) == 1 @staticmethod - def ColumnsUsed(): + def columns_used(): return ['rank', 'cellName', 'final'] From 23002c581d82c72c616d7e7969dadd88a9385bdd Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sat, 9 Sep 2023 14:51:31 -0400 Subject: [PATCH 63/72] better requirements --- back/requirements.txt | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/back/requirements.txt b/back/requirements.txt index 89a87ea..1f729fd 100644 --- a/back/requirements.txt +++ b/back/requirements.txt @@ -1,10 +1,9 @@ -Flask==2.3.2 +Flask==2.3.3 gunicorn==20.1.0 python-dotenv==0.19.2 Authlib==0.15.5 -google-cloud-logging -google-cloud-ndb -google-cloud-recaptcha-enterprise -google-cloud-secret-manager -absl-py -flask-cors \ No newline at end of file +google-cloud-logging==3.6.0 +google-cloud-ndb==2.2.0 +google-cloud-secret-manager==2.16.3 +absl-py==1.4.0 +flask-cors==4.0.0 \ No newline at end of file From 9da98ea3c248dd9b6a1e6cb38c70edfff2a212e7 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 10 Sep 2023 16:32:03 -0400 Subject: [PATCH 64/72] review changes part 1 --- app/src/components/{Api.ts => api.ts} | 0 app/src/dataProvider.ts | 2 +- app/src/pages/Account.tsx | 2 +- app/src/pages/AdminPage.tsx | 2 +- app/src/pages/Rankings.tsx | 2 +- back/backend/__init__.py | 10 ++++----- .../handlers/admin/edit_championships.py | 6 +++--- back/backend/handlers/admin/provinces.py | 6 +++--- back/backend/handlers/admin/show_users.py | 21 ++++++++----------- back/backend/handlers/user.py | 4 ++-- back/backend/lib/auth.py | 2 +- back/backend/lib/common.py | 4 ++-- back/backend/lib/permissions.py | 14 ++++++------- back/backend/models/champion.py | 2 +- back/backend/models/championship.py | 4 ++-- back/backend/models/region.py | 2 -- back/backend/models/user.py | 4 ++-- back/backend/models/wca/base.py | 4 ++-- back/backend/models/wca/event.py | 3 --- back/backend/models/wca/format.py | 4 ---- 20 files changed, 43 insertions(+), 55 deletions(-) rename app/src/components/{Api.ts => api.ts} (100%) diff --git a/app/src/components/Api.ts b/app/src/components/api.ts similarity index 100% rename from app/src/components/Api.ts rename to app/src/components/api.ts diff --git a/app/src/dataProvider.ts b/app/src/dataProvider.ts index 3d9e878..e67e06a 100644 --- a/app/src/dataProvider.ts +++ b/app/src/dataProvider.ts @@ -1,6 +1,6 @@ import { fetchUtils } from "react-admin"; import { stringify } from "query-string"; -import { API_BASE_URL } from "./components/Api"; +import { API_BASE_URL } from "./components/api"; import { DataProvider } from "ra-core/dist/cjs/types"; const apiUrl = API_BASE_URL; diff --git a/app/src/pages/Account.tsx b/app/src/pages/Account.tsx index c3c0c78..f7e9c48 100644 --- a/app/src/pages/Account.tsx +++ b/app/src/pages/Account.tsx @@ -24,7 +24,7 @@ import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import dayjs from "dayjs"; -import { API_BASE_URL, signIn, signOut } from "../components/Api"; +import { API_BASE_URL, signIn, signOut } from "../components/api"; import { Action, chipColor, diff --git a/app/src/pages/AdminPage.tsx b/app/src/pages/AdminPage.tsx index 20a588b..aaf7f29 100644 --- a/app/src/pages/AdminPage.tsx +++ b/app/src/pages/AdminPage.tsx @@ -17,7 +17,7 @@ import { IconButton } from "@mui/material"; import { UserList } from "../components/UserList"; import dataProvider from "../dataProvider"; import httpClient from "../httpClient"; -import { API_BASE_URL } from "../components/Api"; +import { API_BASE_URL } from "../components/api"; import { User } from "../components/Types"; import { AdminDashboard } from "../components/AdminDashboard"; import { UserEdit } from "../components/UserEdit"; diff --git a/app/src/pages/Rankings.tsx b/app/src/pages/Rankings.tsx index ffb51f6..91c26cf 100644 --- a/app/src/pages/Rankings.tsx +++ b/app/src/pages/Rankings.tsx @@ -18,7 +18,7 @@ import CircularProgress from "@mui/material/CircularProgress"; import { eventID, Province } from "../components/Types"; import { getProvinces } from "../components/Provinces"; -import { API_BASE_URL, PRODUCTION } from "../components/Api"; +import { API_BASE_URL, PRODUCTION } from "../components/api"; import httpClient from "../httpClient"; import { RankList } from "../components/RankList"; import { MyCubingIcon } from "../components/MyCubingIcon"; diff --git a/back/backend/__init__.py b/back/backend/__init__.py index 51a624a..cf88986 100644 --- a/back/backend/__init__.py +++ b/back/backend/__init__.py @@ -7,6 +7,7 @@ from dotenv import load_dotenv from flask import Flask, redirect, request from flask_cors import CORS +from urllib.parse import urljoin import google.cloud.logging from backend.lib.secrets import get_secret @@ -44,8 +45,7 @@ def before_request(): url = request.url.replace('http://', 'https://', 1) is_changed = True if is_changed: - code = 301 - return redirect(url, code=code) + return redirect(url, code=301) wca_host = os.environ.get('WCA_HOST') @@ -54,11 +54,11 @@ def before_request(): name='wca', client_id=get_secret('WCA_CLIENT_ID'), client_secret=get_secret('WCA_CLIENT_SECRET'), - access_token_url=wca_host + '/oauth/token', + access_token_url=urljoin(wca_host, '/oauth/token'), access_token_params=None, - authorize_url=wca_host + '/oauth/authorize', + authorize_url=urljoin(wca_host, '/oauth/authorize'), authorize_params=None, - api_base_url=wca_host + '/api/v0/', + api_base_url=urljoin(wca_host, '/api/v0/'), token_endpoint_auth_method='client_secret_post', client_kwargs={'scope': 'public email dob'}, ) diff --git a/back/backend/handlers/admin/edit_championships.py b/back/backend/handlers/admin/edit_championships.py index 110513e..82544ef 100644 --- a/back/backend/handlers/admin/edit_championships.py +++ b/back/backend/handlers/admin/edit_championships.py @@ -17,7 +17,7 @@ def add_championship(competition_id, championship_type): with client.context(): me = auth.user() - if not me or not me.HasAnyRole(Roles.AdminRoles()): + if not me or not me.has_any_of_given_roles(Roles.AdminRoles()): abort(403) competition = Competition.get_by_id(competition_id) if championship_type == 'national': @@ -47,7 +47,7 @@ def add_championship(competition_id, championship_type): def delete_championship(championship_id): with client.context(): me = auth.user() - if not me or not me.HasAnyRole(Roles.AdminRoles()): + if not me or not me.has_any_of_given_roles(Roles.AdminRoles()): abort(403) championship = Championship.get_by_id(championship_id) championship.key.delete() @@ -59,7 +59,7 @@ def delete_championship(championship_id): def edit_championships(): with client.context(): me = auth.user() - if not me or not me.HasAnyRole(Roles.AdminRoles()): + if not me or not me.has_any_of_given_roles(Roles.AdminRoles()): abort(403) all_us_competitions = ( diff --git a/back/backend/handlers/admin/provinces.py b/back/backend/handlers/admin/provinces.py index 5186728..bb3b32c 100644 --- a/back/backend/handlers/admin/provinces.py +++ b/back/backend/handlers/admin/provinces.py @@ -1,4 +1,4 @@ -from flask import abort, Blueprint +from flask import abort, Blueprint, jsonify from google.cloud import ndb from backend.lib import auth @@ -32,8 +32,8 @@ def make_province(province_id, province_name, region, is_province, all_provinces def update_provinces(): with client.context(): me = auth.user() - if not me or not me.HasAnyRole([Roles.GLOBAL_ADMIN, Roles.WEBMASTER]): - abort(403) + if not me or not me.has_any_of_given_roles([Roles.GLOBAL_ADMIN, Roles.WEBMASTER]): + return jsonify({"error": "Forbidden"}), 403 futures = [] all_regions = {} diff --git a/back/backend/handlers/admin/show_users.py b/back/backend/handlers/admin/show_users.py index 366fa05..1c62858 100644 --- a/back/backend/handlers/admin/show_users.py +++ b/back/backend/handlers/admin/show_users.py @@ -14,7 +14,7 @@ def get_users(): with client.context(): me = auth.user() - if not me or not me.HasAnyRole(Roles.AdminRoles()): + if not me or not me.has_any_of_given_roles(Roles.AdminRoles()): return jsonify({"error": "Forbidden"}), 403 # Pagination @@ -25,25 +25,22 @@ def get_users(): cursor = ndb.Cursor(urlsafe=cursor) if page < 1: page = 1 - if per_page not in [10, 20, 30, 40, 50]: + if per_page not in (10, 20, 30, 40, 50): per_page = 30 # Sort sort_field = request.args.get('sort_field', 'name') sort_order = request.args.get('sort_order', 'asc') - if sort_field not in ['id', 'name', 'wca_person', 'roles', 'province']: + if sort_field not in ('id', 'name', 'wca_person', 'roles', 'province'): sort_field = 'name' - if sort_order.lower() not in ['asc', 'desc']: + if sort_order.lower() not in ('asc', 'desc'): sort_order = 'asc' # Filter - filter_text = loads(request.args.get('filter', '')).get("q") + filter_text = loads(request.args.get('filter', '{}')).get("q") # Query - if sort_order == 'asc': - order_field = getattr(User, sort_field) - else: - order_field = -getattr(User, sort_field) + order_field = getattr(User, sort_field) if sort_order == 'asc' else -getattr(User, sort_field) if filter_text: text = filter_text.lower() limit = text[:-1] + chr(ord(text[-1]) + 1) @@ -60,7 +57,7 @@ def get_users(): users_to_show, cursor, has_more = User.query(order_by=[order_field]).fetch_page(per_page, start_cursor=cursor) return jsonify({ - 'data': [user.toJson() for user in users_to_show], + 'data': [user.to_json() for user in users_to_show], 'cursor': cursor.urlsafe().decode() if cursor else '', 'pageInfo': { 'hasPreviousPage': page > 1, @@ -73,7 +70,7 @@ def get_users(): def get_users_by_id(): with client.context(): me = auth.user() - if not me or not me.HasAnyRole(Roles.AdminRoles()): + if not me or not me.has_any_of_given_roles(Roles.AdminRoles()): return jsonify({"error": "Forbidden"}), 403 user_ids = request.args.get('ids', "[]", type=str).strip("[]").split(",") @@ -83,7 +80,7 @@ def get_users_by_id(): else: user_id = int(user_id) users = User.query(User.key.IN([ndb.Key(User, user_id) for user_id in user_ids])).fetch() - data = [user.toJson() for user in users] + data = [user.to_json() for user in users] return jsonify( {'data': data} ) diff --git a/back/backend/handlers/user.py b/back/backend/handlers/user.py index cedbc7d..eadcc0e 100644 --- a/back/backend/handlers/user.py +++ b/back/backend/handlers/user.py @@ -26,7 +26,7 @@ def user_info(user_id=-1): return jsonify({"error": "Unrecognized user ID %s" % user_id}), 404 if not permissions.can_view_user(user, me): return jsonify({"error": "You're not authorized to view this user."}), 403 - return user.toJson() + return user.to_json() # After updating the user's province, write the RankSingle and RankAverage to the @@ -99,4 +99,4 @@ def edit(user_id=-1): if user_modified: user.put() - return user.toJson() + return user.to_json() diff --git a/back/backend/lib/auth.py b/back/backend/lib/auth.py index 9e74ffa..192a2c0 100644 --- a/back/backend/lib/auth.py +++ b/back/backend/lib/auth.py @@ -9,7 +9,7 @@ def logged_in(): def user(): if not logged_in(): - return False + return None wca_account_number = session['wca_account_number'] diff --git a/back/backend/lib/common.py b/back/backend/lib/common.py index 7b56109..9258c91 100644 --- a/back/backend/lib/common.py +++ b/back/backend/lib/common.py @@ -37,7 +37,7 @@ def uri_matches_any(self, path_list): return False def wca_profile(self, wca_id): - return 'https://www.worldcubeassociation.org/persons/%s' % wca_id + return f"https://www.worldcubeassociation.org/persons/{wca_id}" def format_date_range(self, start_date, end_date, include_year=True, full_months=False): year_chunk = ', %d' % start_date.year if include_year else '' @@ -82,7 +82,7 @@ def is_prod(self): return os.environ['ENV'] == 'PROD' def IconUrl(self, event_id): - return '/static/img/events/%s.svg' % event_id + return f"/static/img/events/{event_id}.svg" def get_secret(self, name): return secrets.get_secret(name) diff --git a/back/backend/lib/permissions.py b/back/backend/lib/permissions.py index f9b8f2d..9048c33 100644 --- a/back/backend/lib/permissions.py +++ b/back/backend/lib/permissions.py @@ -4,7 +4,7 @@ def can_edit_location(user, editor): if not editor: return False - if editor.HasAnyRole(Roles.AdminRoles()): + if editor.has_any_of_given_roles(Roles.AdminRoles()): return True return user == editor @@ -13,23 +13,23 @@ def can_view_user(user, viewer): if not viewer: return False return (user == viewer or - viewer.HasAnyRole(Roles.DelegateRoles()) or - viewer.HasAnyRole(Roles.AdminRoles())) + viewer.has_any_of_given_roles(Roles.DelegateRoles()) or + viewer.has_any_of_given_roles(Roles.AdminRoles())) def can_view_roles(user, viewer): if not viewer: return False - return (viewer.HasAnyRole(Roles.DelegateRoles()) or - viewer.HasAnyRole(Roles.AdminRoles())) + return (viewer.has_any_of_given_roles(Roles.DelegateRoles()) or + viewer.has_any_of_given_roles(Roles.AdminRoles())) def editable_roles(user, editor): if not editor: return [] - if editor.HasAnyRole([Roles.GLOBAL_ADMIN]): + if editor.has_any_of_given_roles([Roles.GLOBAL_ADMIN]): return Roles.AllRoles() - elif editor.HasAnyRole([Roles.WEBMASTER, Roles.DIRECTOR]): + elif editor.has_any_of_given_roles([Roles.WEBMASTER, Roles.DIRECTOR]): return [Roles.WEBMASTER, Roles.DIRECTOR] else: return [] diff --git a/back/backend/models/champion.py b/back/backend/models/champion.py index 9acb7d3..35446a3 100644 --- a/back/backend/models/champion.py +++ b/back/backend/models/champion.py @@ -17,4 +17,4 @@ class Champion(ndb.Model): @staticmethod def id(championship_id, event_id): - return '%s_%s' % (championship_id, event_id) + return f"{championship_id}_{event_id}" \ No newline at end of file diff --git a/back/backend/models/championship.py b/back/backend/models/championship.py index ab68e9d..b00af89 100644 --- a/back/backend/models/championship.py +++ b/back/backend/models/championship.py @@ -23,11 +23,11 @@ def nationals_id(year): @staticmethod def regionals_id(year, region): - return '%s_%d' % (region.key.id(), year) + return f"{region.key.id()}_{year}" @staticmethod def province_championship_id(year, province): - return '%s_%d' % (province.key.id(), year) + return f"{province.key.id()}_{year}" def get_eligible_province_keys(self): if self.province: diff --git a/back/backend/models/region.py b/back/backend/models/region.py index b9604e0..295904f 100644 --- a/back/backend/models/region.py +++ b/back/backend/models/region.py @@ -6,5 +6,3 @@ class Region(ndb.Model): championship_name = ndb.StringProperty() obsolete = ndb.BooleanProperty() - def css_class(self): - return 'region-%s' % self.key.id() diff --git a/back/backend/models/user.py b/back/backend/models/user.py index 76afc96..3172727 100644 --- a/back/backend/models/user.py +++ b/back/backend/models/user.py @@ -52,13 +52,13 @@ class User(ndb.Model): regional_eligibilities = ndb.StructuredProperty(RegionalChampionshipEligibility, repeated=True) province_eligibilities = ndb.StructuredProperty(ProvinceChampionshipEligibility, repeated=True) - def HasAnyRole(self, roles): + def has_any_of_given_roles(self, roles): for role in self.roles: if role in roles: return True return False - def toJson(self): + def to_json(self): return { "id": self.key.id(), "name": self.name, diff --git a/back/backend/models/wca/base.py b/back/backend/models/wca/base.py index 008d594..e13fb2f 100644 --- a/back/backend/models/wca/base.py +++ b/back/backend/models/wca/base.py @@ -7,11 +7,11 @@ def get_id(row): return row['id'] def parse_from_dict(self, row): - raise Exception('ParseFromDict is unimplemented.') + raise NotImplementedError('ParseFromDict is unimplemented.') @staticmethod def columns_used(): - raise Exception('ColumnsUsed is unimplemented.') + raise NotImplementedError('ColumnsUsed is unimplemented.') @staticmethod def filter(): diff --git a/back/backend/models/wca/event.py b/back/backend/models/wca/event.py index 8a2f0e6..5250f43 100644 --- a/back/backend/models/wca/event.py +++ b/back/backend/models/wca/event.py @@ -14,6 +14,3 @@ def parse_from_dict(self, row): @staticmethod def columns_used(): return ['name', 'rank'] - - def icon_url(self): - return '/static/img/events/%s.svg' % self.key.id() diff --git a/back/backend/models/wca/format.py b/back/backend/models/wca/format.py index 97b44c2..6f66b70 100644 --- a/back/backend/models/wca/format.py +++ b/back/backend/models/wca/format.py @@ -12,7 +12,3 @@ def parse_from_dict(self, row): @staticmethod def columns_used(): return ['name'] - - def get_short_name(self): - # Average of 5 -> Ao5 - return self.name[0] + 'o' + self.name[-1] From 079985f8dad50818a04b269f9577ead1c11da1f5 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 10 Sep 2023 17:50:25 -0400 Subject: [PATCH 65/72] review changes part 2 --- .../handlers/admin/edit_championships.py | 28 ++++++++++--------- back/backend/models/champion.py | 2 +- back/exports/splitter.py | 12 -------- 3 files changed, 16 insertions(+), 26 deletions(-) delete mode 100644 back/exports/splitter.py diff --git a/back/backend/handlers/admin/edit_championships.py b/back/backend/handlers/admin/edit_championships.py index 82544ef..ef40f65 100644 --- a/back/backend/handlers/admin/edit_championships.py +++ b/back/backend/handlers/admin/edit_championships.py @@ -1,4 +1,4 @@ -from flask import abort, Blueprint, redirect, render_template +from flask import abort, Blueprint, redirect, render_template, jsonify from google.cloud import ndb from backend.lib import auth, common @@ -18,7 +18,7 @@ def add_championship(competition_id, championship_type): with client.context(): me = auth.user() if not me or not me.has_any_of_given_roles(Roles.AdminRoles()): - abort(403) + return jsonify({"error": "Forbidden"}), 403 competition = Competition.get_by_id(competition_id) if championship_type == 'national': championship_id = Championship.nationals_id(competition.year) @@ -48,7 +48,7 @@ def delete_championship(championship_id): with client.context(): me = auth.user() if not me or not me.has_any_of_given_roles(Roles.AdminRoles()): - abort(403) + return jsonify({"error": "Forbidden"}), 403 championship = Championship.get_by_id(championship_id) championship.key.delete() # TODO: if we changed a championship we should update champions and eligibilities. @@ -60,9 +60,9 @@ def edit_championships(): with client.context(): me = auth.user() if not me or not me.has_any_of_given_roles(Roles.AdminRoles()): - abort(403) + return jsonify({"error": "Forbidden"}), 403 - all_us_competitions = ( + all_ca_competitions = ( Competition.query(Competition.country == ndb.Key(Country, 'Canada')) .order(Competition.name) .fetch()) @@ -85,11 +85,13 @@ def edit_championships(): provinces = Province.query().fetch() regions = Region.query().fetch() - return render_template('admin/edit_championships.html', - c=common.Common(), - all_us_competitions=all_us_competitions, - national_championships=national_championships, - regional_championships=regional_championships, - province_championships=province_championships, - provinces=provinces, - regions=regions) \ No newline at end of file + return jsonify( + { + "all_ca_competitions": all_ca_competitions, + "national_championships": national_championships, + "regional_championships": regional_championships, + "province_championships": province_championships, + "provinces": provinces, + "regions": regions + } + ) diff --git a/back/backend/models/champion.py b/back/backend/models/champion.py index 35446a3..a7c8679 100644 --- a/back/backend/models/champion.py +++ b/back/backend/models/champion.py @@ -10,7 +10,7 @@ class Champion(ndb.Model): event = ndb.KeyProperty(kind=Event) champions = ndb.KeyProperty(kind=Result, repeated=True) - national_champion = ndb.ComputedProperty(lambda e: e.championship.get().national_championship) + is_national_champion = ndb.ComputedProperty(lambda e: e.championship.get().national_championship) region = ndb.ComputedProperty(lambda e: e.championship.get().region) province = ndb.ComputedProperty(lambda e: e.championship.get().province) year = ndb.ComputedProperty(lambda e: e.championship.get().year) diff --git a/back/exports/splitter.py b/back/exports/splitter.py deleted file mode 100644 index 128b28b..0000000 --- a/back/exports/splitter.py +++ /dev/null @@ -1,12 +0,0 @@ -MAXLINES = 1000000 - -csvfile = open('./WCA_export_Results.tsv', mode='r', encoding='utf-8') -# or 'Latin-1' or 'CP-1252' -filename = 0 -for rownum, line in enumerate(csvfile): - if rownum % MAXLINES == 0: - filename += 1 - outfile = open(str(filename) + '.tsv', mode='w', encoding='utf-8') - outfile.write(line) -outfile.close() -csvfile.close() \ No newline at end of file From 9bd2b48f7c2dd2f9d4904e820311d3a00d10bd79 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Sun, 10 Sep 2023 18:46:01 -0400 Subject: [PATCH 66/72] update project name in deploy script --- deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy.sh b/deploy.sh index 5721858..80b1a0e 100644 --- a/deploy.sh +++ b/deploy.sh @@ -18,7 +18,7 @@ BACKEND_ONLY=0 while getopts "psfbv:" opt; do case $opt in p) - PROJECT="scc-UNKNOWN-YET" + PROJECT="scc-production-398617" IS_PROD=1 ;; s) From 8d463570319fe58139fb24ad7b419ad589ec89bd Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 12 Sep 2023 22:26:17 -0400 Subject: [PATCH 67/72] better URL handling --- app/src/components/api.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/components/api.ts b/app/src/components/api.ts index 20d4f90..c0a91cd 100644 --- a/app/src/components/api.ts +++ b/app/src/components/api.ts @@ -4,9 +4,9 @@ export const API_BASE_URL = process.env.REACT_APP_API_BASE_URL || "https://api.speedcubingcanada.org"; export const signIn = () => { - window.location.assign(API_BASE_URL + "/login"); + window.location.assign(new URL("/login", API_BASE_URL)); }; export const signOut = () => { - window.location.assign(API_BASE_URL + "/logout"); + window.location.assign(new URL("/logout", API_BASE_URL)); }; From 73b9ee96717382f9dc5a0c7cc02f57dec9ddf36c Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Tue, 12 Sep 2023 23:04:49 -0400 Subject: [PATCH 68/72] renamed round property --- back/backend/load_db/update_champions.py | 2 +- back/backend/models/wca/round.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/back/backend/load_db/update_champions.py b/back/backend/load_db/update_champions.py index f741c56..d52be36 100644 --- a/back/backend/load_db/update_champions.py +++ b/back/backend/load_db/update_champions.py @@ -87,7 +87,7 @@ class Resolution: def update_champions(): champions_to_write = [] champions_to_delete = [] - final_round_keys = set(r.key for r in RoundType.query(RoundType.final == True).iter()) + final_round_keys = set(r.key for r in RoundType.query(RoundType.is_final == True).iter()) all_event_keys = set(e.key for e in Event.query().iter()) championships_already_computed = set() for champion in Champion.query().iter(): diff --git a/back/backend/models/wca/round.py b/back/backend/models/wca/round.py index 74e1f26..73a2c07 100644 --- a/back/backend/models/wca/round.py +++ b/back/backend/models/wca/round.py @@ -6,12 +6,12 @@ class RoundType(BaseModel): rank = ndb.IntegerProperty() name = ndb.StringProperty() - final = ndb.BooleanProperty() + is_final = ndb.BooleanProperty() def parse_from_dict(self, row): self.rank = int(row['rank']) self.name = row['cellName'] - self.final = int(row['final']) == 1 + self.is_final = int(row['final']) == 1 @staticmethod def columns_used(): From 74d41b617b0faa9fa69b81afe36c1fab17eb7317 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 20 Sep 2023 00:10:36 -0400 Subject: [PATCH 69/72] fix display bug in case of tie --- app/src/components/RankList.tsx | 4 ++-- back/backend/handlers/province_rankings.py | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/components/RankList.tsx b/app/src/components/RankList.tsx index 91d89b3..9a6cb18 100644 --- a/app/src/components/RankList.tsx +++ b/app/src/components/RankList.tsx @@ -31,8 +31,8 @@ export const RankList: React.FC<{ data: Ranking[] }> = ({ data }) => { }, ]; - const rows = data.map((person: any) => ({ - id: person.rank, + const rows = data.map((person: any, index: number) => ({ + id: `${index}_${person.rank}`, // We can't use the rank as the id because it's not unique all the time rank: person.rank, name: person.name, time: person.time, diff --git a/back/backend/handlers/province_rankings.py b/back/backend/handlers/province_rankings.py index 1c0780c..fd552a7 100644 --- a/back/backend/handlers/province_rankings.py +++ b/back/backend/handlers/province_rankings.py @@ -1,4 +1,4 @@ -from flask import Blueprint, jsonify +from flask import Blueprint, jsonify, request from google.cloud import ndb from backend.lib import common @@ -12,7 +12,11 @@ @bp.route('/test_rankings') def test_rankings(): - data=[{"name":"Jonathan Esparaz","rank":1,"time":"5.52","url":"https://worldcubeassociation.org/persons/2013ESPA01"},{"name":"Wilson Alvis (\u9648\u667a\u80dc)","rank":2,"time":"7.10","url":"https://worldcubeassociation.org/persons/2011ALVI01"},{"name":"Sarah Strong","rank":3,"time":"9.18","url":"https://worldcubeassociation.org/persons/2007STRO01"},{"name":"Alexandre Ondet","rank":4,"time":"9.84","url":"https://worldcubeassociation.org/persons/2017ONDE01"},{"name":"Abdullah Gulab","rank":5,"time":"10.86","url":"https://worldcubeassociation.org/persons/2014GULA02"},{"name":"Nicholas McKee","rank":6,"time":"11.30","url":"https://worldcubeassociation.org/persons/2015MCKE02"},{"name":"Alyssa Esparaz","rank":7,"time":"16.11","url":"https://worldcubeassociation.org/persons/2014ESPA01"},{"name":"Daniel Daoust","rank":8,"time":"23.40","url":"https://worldcubeassociation.org/persons/2017DAOU01"}] + event= request.args.get('event', '333', type=str) + if event=='333fm': + data=[{"name":"Kevin Matthews","rank":1,"time":"21","url":"https://worldcubeassociation.org/persons/2010MATT02"},{"name":"Wilson Alvis (\u9648\u667a\u80dc)","rank":2,"time":"22","url":"https://worldcubeassociation.org/persons/2011ALVI01"},{"name":"Jonathan Esparaz","rank":3,"time":"27","url":"https://worldcubeassociation.org/persons/2013ESPA01"},{"name":"Sarah Strong","rank":4,"time":"31","url":"https://worldcubeassociation.org/persons/2007STRO01"},{"name":"Abdullah Gulab","rank":4,"time":"31","url":"https://worldcubeassociation.org/persons/2014GULA02"},{"name":"Kristopher De Asis","rank":6,"time":"36","url":"https://worldcubeassociation.org/persons/2008ASIS01"},{"name":"Daniel Daoust","rank":7,"time":"39","url":"https://worldcubeassociation.org/persons/2017DAOU01"},{"name":"Nicholas McKee","rank":8,"time":"40","url":"https://worldcubeassociation.org/persons/2015MCKE02"},{"name":"Michael Zheng","rank":8,"time":"40","url":"https://worldcubeassociation.org/persons/2015ZHEN17"},{"name":"Liam Orovec","rank":10,"time":"42","url":"https://worldcubeassociation.org/persons/2014OROV01"},{"name":"Alyssa Esparaz","rank":11,"time":"45","url":"https://worldcubeassociation.org/persons/2014ESPA01"}] + else: + data=[{"name":"Jonathan Esparaz","rank":1,"time":"5.52","url":"https://worldcubeassociation.org/persons/2013ESPA01"},{"name":"Wilson Alvis (\u9648\u667a\u80dc)","rank":2,"time":"7.10","url":"https://worldcubeassociation.org/persons/2011ALVI01"},{"name":"Sarah Strong","rank":3,"time":"9.18","url":"https://worldcubeassociation.org/persons/2007STRO01"},{"name":"Alexandre Ondet","rank":4,"time":"9.84","url":"https://worldcubeassociation.org/persons/2017ONDE01"},{"name":"Abdullah Gulab","rank":5,"time":"10.86","url":"https://worldcubeassociation.org/persons/2014GULA02"},{"name":"Nicholas McKee","rank":6,"time":"11.30","url":"https://worldcubeassociation.org/persons/2015MCKE02"},{"name":"Alyssa Esparaz","rank":7,"time":"16.11","url":"https://worldcubeassociation.org/persons/2014ESPA01"},{"name":"Daniel Daoust","rank":8,"time":"23.40","url":"https://worldcubeassociation.org/persons/2017DAOU01"}] return jsonify(data) @bp.route('/province_rankings///') From 1af8cbdaa10f744994041acbe6e8b2531b212348 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Mon, 25 Sep 2023 21:34:03 -0400 Subject: [PATCH 70/72] fixes and improvements from Kevin's review --- app/src/App.tsx | 11 ++-------- app/src/components/Base.tsx | 2 +- app/src/components/RankList.tsx | 5 +++-- app/src/components/Roles.ts | 4 ---- app/src/components/Types.ts | 2 ++ app/src/components/useResponsiveQuery.tsx | 13 ++++++++++++ app/src/locale.ts | 6 +++--- app/src/pages/Account.tsx | 16 ++++++--------- app/src/pages/AdminPage.tsx | 2 +- app/src/pages/Rankings.tsx | 25 ++++++++++++----------- back/backend/handlers/admin/show_users.py | 4 ++-- 11 files changed, 46 insertions(+), 44 deletions(-) create mode 100644 app/src/components/useResponsiveQuery.tsx diff --git a/app/src/App.tsx b/app/src/App.tsx index 4369468..fd036af 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -3,7 +3,7 @@ import { initReactI18next } from "react-i18next"; import { createTheme, ThemeProvider } from "@mui/material/styles"; import { red } from "@mui/material/colors"; import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom"; -import { Base } from "./components/Base"; +import { Base, ROUTES } from "./components/Base"; import { getLocaleOrFallback, resources, SAVED_LOCALE } from "./locale"; import { Home } from "./pages/Home"; import { About } from "./pages/About"; @@ -55,14 +55,7 @@ const App = () => { } /> } /> - {[ - "about", - "organization", - "faq", - "rankings", - "account", - "quebec", - ].map((route) => ( + {ROUTES.map((route) => ( = ({ data }) => { const { t } = useTranslation(); - const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); + const isSmall = useResponsiveQuery("sm"); const savedLocale = localStorage.getItem(SAVED_LOCALE) as string; const locale = getLocaleOrFallback(savedLocale); @@ -32,7 +33,7 @@ export const RankList: React.FC<{ data: Ranking[] }> = ({ data }) => { ]; const rows = data.map((person: any, index: number) => ({ - id: `${index}_${person.rank}`, // We can't use the rank as the id because it's not unique all the time + id: index, rank: person.rank, name: person.name, time: person.time, diff --git a/app/src/components/Roles.ts b/app/src/components/Roles.ts index bcbc2c4..5dcd3a8 100644 --- a/app/src/components/Roles.ts +++ b/app/src/components/Roles.ts @@ -8,7 +8,3 @@ export const roles: Role[] = [ { id: "DELEGATE", name: "Delegate" }, { id: "CANDIDATE_DELEGATE", name: "Junior Delegate" }, ]; - -export const getRoles = () => { - return roles; -}; diff --git a/app/src/components/Types.ts b/app/src/components/Types.ts index 736e7b2..ed159b0 100644 --- a/app/src/components/Types.ts +++ b/app/src/components/Types.ts @@ -116,3 +116,5 @@ export type roleID = | null; export type IconSize = "1x" | "2x" | "3x" | "4x" | "5x"; + +export type Breakpoint = "xs" | "sm" | "md" | "lg" | "xl"; diff --git a/app/src/components/useResponsiveQuery.tsx b/app/src/components/useResponsiveQuery.tsx new file mode 100644 index 0000000..7fa589f --- /dev/null +++ b/app/src/components/useResponsiveQuery.tsx @@ -0,0 +1,13 @@ +import { Theme, useMediaQuery } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; +import { Breakpoint } from "./Types"; + +const useResponsiveQuery = (breakpoint: Breakpoint | string) => { + const theme = useTheme(); + const query = + typeof breakpoint === "string" ? (breakpoint as Breakpoint) : breakpoint; + + return useMediaQuery((theme) => theme.breakpoints.down(query)); +}; + +export default useResponsiveQuery; diff --git a/app/src/locale.ts b/app/src/locale.ts index 2d58a26..1c06b7f 100644 --- a/app/src/locale.ts +++ b/app/src/locale.ts @@ -109,7 +109,7 @@ export const resources = { }, "why-does-this-person-appear-in-my-province": { q: "Why does this person appear in my province? They don’t live here!", - a: "Please contact us and we'll be happy to investigate. ", + a: "Please contact us and we'll be happy to investigate.", }, }, provinces: { @@ -158,7 +158,7 @@ export const resources = { title: "Account", hi: "Hi, ", policy: - 'Province determine your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select "N/A".', + 'Province determines your eligibility for Regional Championships. You may only represent a province where you live at least 50% of the year. We reserve the right to ask for proof of residency. If you are not a Canadian resident, or you would prefer not to list your home province, please select "N/A".', save: "Save", signin: "Sign in with the WCA", signout: "Sign Out", @@ -335,7 +335,7 @@ export const resources = { }, "why-does-this-person-appear-in-my-province": { q: "Pourquoi cette personne apparaît-elle dans ma province ? Elle ne vit pas ici !", - a: "Veuillez nous contacter et nous nous ferons un plaisir d'enquêter. ", + a: "Veuillez nous contacter et nous nous ferons un plaisir d'enquêter.", }, }, provinces: { diff --git a/app/src/pages/Account.tsx b/app/src/pages/Account.tsx index f7e9c48..ef0e584 100644 --- a/app/src/pages/Account.tsx +++ b/app/src/pages/Account.tsx @@ -1,13 +1,6 @@ import { Trans, useTranslation } from "react-i18next"; import { useEffect, useReducer, useState } from "react"; -import { - AlertColor, - Box, - Container, - Theme, - Typography, - useMediaQuery, -} from "@mui/material"; +import { AlertColor, Box, Container, Typography } from "@mui/material"; import Button from "@mui/material/Button"; import TextField from "@mui/material/TextField"; import Autocomplete from "@mui/material/Autocomplete"; @@ -36,6 +29,8 @@ import { import httpClient from "../httpClient"; import { getProvincesWithNA } from "../components/Provinces"; import { checkAdmin } from "./AdminPage"; +import useResponsiveQuery from "../components/useResponsiveQuery"; +import { useNavigate } from "react-router-dom"; const initialState: State = { alert: false, @@ -63,8 +58,9 @@ const reducer = (state: State, action: Action) => { }; export const Account = () => { + const navigate = useNavigate(); const { t } = useTranslation(); - const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); + const isSmall = useResponsiveQuery("sm"); const [province, setProvince] = useState(null); const [chipData, setChipData] = useState([]); @@ -152,7 +148,7 @@ export const Account = () => { }; const handleAdmin = () => { - window.location.assign("/admin"); + navigate("/admin"); }; const isAdmin = checkAdmin(user); diff --git a/app/src/pages/AdminPage.tsx b/app/src/pages/AdminPage.tsx index aaf7f29..fecb476 100644 --- a/app/src/pages/AdminPage.tsx +++ b/app/src/pages/AdminPage.tsx @@ -25,7 +25,7 @@ import { UserShow } from "../components/UserShow"; import { i18nProvider } from "../i18nProvider"; export const checkAdmin = (user: User | null) => { - return !!( + return ( user?.roles.includes("GLOBAL_ADMIN") || user?.roles.includes("DIRECTOR") || user?.roles.includes("WEBMASTER") diff --git a/app/src/pages/Rankings.tsx b/app/src/pages/Rankings.tsx index 91c26cf..77c0c17 100644 --- a/app/src/pages/Rankings.tsx +++ b/app/src/pages/Rankings.tsx @@ -22,6 +22,7 @@ import { API_BASE_URL, PRODUCTION } from "../components/api"; import httpClient from "../httpClient"; import { RankList } from "../components/RankList"; import { MyCubingIcon } from "../components/MyCubingIcon"; +import useResponsiveQuery from "../components/useResponsiveQuery"; const provinces: Province[] = getProvinces(); const events: eventID[] = [ @@ -46,17 +47,19 @@ const events: eventID[] = [ export const Rankings = () => { const { t } = useTranslation(); - const isSmall = useMediaQuery((theme) => theme.breakpoints.down("sm")); + const isSmall = useResponsiveQuery("sm"); const [province, setProvince] = useState(provinces[0]); const [eventId, setEventId] = useState("333"); - const [useAverage, setUseAverage] = useState(false); + const [usingAverage, setUsingAverage] = useState(false); const [loading, setLoading] = useState(true); + const [ranking, setRanking] = useState(null); + const switchHandler = (event: { target: { checked: boolean | ((prevState: boolean) => boolean) }; }) => { - setUseAverage(event.target.checked); + setUsingAverage(event.target.checked); }; const handleProvinceChange = ( @@ -92,18 +95,17 @@ export const Rankings = () => { setEventId(newValue as eventID); }; - const [ranking, setRanking] = useState(null); - useEffect(() => { setLoading(true); - let use_average_str = useAverage ? "1" : "0"; + setRanking(null); + const use_average_str = usingAverage ? "1" : "0"; (async () => { try { if ( eventId === null || province?.id === null || - useAverage === null || + usingAverage === null || province === undefined ) { return null; @@ -118,8 +120,7 @@ export const Rankings = () => { "&province=" + province?.id + "&use_average=" + - use_average_str + - "&test=1", + use_average_str, ); //allows to not have the WCA DB locally } else { resp = await httpClient.get( @@ -143,7 +144,7 @@ export const Rankings = () => { } setLoading(false); })(); - }, [eventId, province, useAverage]); + }, [eventId, province, usingAverage]); return ( @@ -209,7 +210,7 @@ export const Rankings = () => { {t("rankings.single")} @@ -234,7 +235,7 @@ export const Rankings = () => { {t("rankings.rankfor")}{" "} {t("province_with_pronouns." + province?.id)} {t("rankings.in")}{" "} {t("events._" + eventId)} {t("rankings.for")}{" "} - {useAverage ? t("rankings.average") : t("rankings.single")} + {usingAverage ? t("rankings.average") : t("rankings.single")} diff --git a/back/backend/handlers/admin/show_users.py b/back/backend/handlers/admin/show_users.py index 1c62858..d0b24eb 100644 --- a/back/backend/handlers/admin/show_users.py +++ b/back/backend/handlers/admin/show_users.py @@ -25,8 +25,8 @@ def get_users(): cursor = ndb.Cursor(urlsafe=cursor) if page < 1: page = 1 - if per_page not in (10, 20, 30, 40, 50): - per_page = 30 + if per_page not in (5, 10, 25, 50): + per_page = 25 # Sort sort_field = request.args.get('sort_field', 'name') From b2189c9fb56954e5be0f47a0bfe414495b963a24 Mon Sep 17 00:00:00 2001 From: Alexandre Ondet Date: Wed, 8 Nov 2023 12:13:08 -0500 Subject: [PATCH 71/72] fix variable name after merge --- app/src/App.tsx | 4 ++-- app/src/components/Base.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/App.tsx b/app/src/App.tsx index fd036af..6cf9dbe 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -3,7 +3,7 @@ import { initReactI18next } from "react-i18next"; import { createTheme, ThemeProvider } from "@mui/material/styles"; import { red } from "@mui/material/colors"; import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom"; -import { Base, ROUTES } from "./components/Base"; +import { Base, ROUTE_NAMES } from "./components/Base"; import { getLocaleOrFallback, resources, SAVED_LOCALE } from "./locale"; import { Home } from "./pages/Home"; import { About } from "./pages/About"; @@ -55,7 +55,7 @@ const App = () => { } /> } /> - {ROUTES.map((route) => ( + {ROUTE_NAMES.map((route) => ( Date: Thu, 28 Dec 2023 19:58:14 -0500 Subject: [PATCH 72/72] small docker config changes --- back/{backend => }/Dockerfile | 8 ++++---- back/requirements.txt | 3 ++- docker-compose.yaml | 19 ++++++++++--------- 3 files changed, 16 insertions(+), 14 deletions(-) rename back/{backend => }/Dockerfile (68%) diff --git a/back/backend/Dockerfile b/back/Dockerfile similarity index 68% rename from back/backend/Dockerfile rename to back/Dockerfile index f48813e..5c7fd57 100644 --- a/back/backend/Dockerfile +++ b/back/Dockerfile @@ -1,8 +1,8 @@ -FROM python:3.11-alpine AS builder +FROM python:3.11 AS builder -ENV FLASK_APP scc +ENV FLASK_APP backend ENV FLASK_DEBUG 1 -ENV FLASK_RUN_PORT 8000 +ENV FLASK_RUN_PORT 8083 ENV FLASK_RUN_HOST 0.0.0.0 WORKDIR /workdir @@ -14,6 +14,6 @@ RUN pip3 install -r requirements.txt COPY . . -EXPOSE 8000 +EXPOSE 8083 CMD ["flask", "run"] \ No newline at end of file diff --git a/back/requirements.txt b/back/requirements.txt index 1f729fd..e01e037 100644 --- a/back/requirements.txt +++ b/back/requirements.txt @@ -6,4 +6,5 @@ google-cloud-logging==3.6.0 google-cloud-ndb==2.2.0 google-cloud-secret-manager==2.16.3 absl-py==1.4.0 -flask-cors==4.0.0 \ No newline at end of file +flask-cors==4.0.0 +six \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 53a23c0..47570ff 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -16,15 +16,16 @@ services: - backend # flask: - # build: - # context: backend - # target: builder - # restart: always - # env_file: ./.env - # networks: - # - backend - # ports: - # - ${FLASK_LOCAL_PORT}:${FLASK_DOCKER_PORT} + # build: + # context: back + # target: builder + # restart: always + # env_file: ./.env + # networks: + # - backend + # ports: + # - ${FLASK_LOCAL_PORT}:${FLASK_DOCKER_PORT} + # - 8081:8081 nginx: container_name: nginx-server