diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 2f8cb48..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "Development", - "image": "mcr.microsoft.com/devcontainers/base:jammy", - "postCreateCommand": "./.devcontainer/postCreate.sh", - "features": { - "ghcr.io/devcontainers/features/common-utils:2": {}, - "ghcr.io/devcontainers/features/docker-in-docker:2": {}, - "ghcr.io/guiyomh/features/vim:0": {}, - "ghcr.io/devcontainers/features/git:1": {}, - "ghcr.io/devcontainers/features/node:1": {}, - "ghcr.io/devcontainers/features/go:1": {}, - "ghcr.io/devcontainers/features/python:1": {}, - "ghcr.io/lukewiwa/features/shellcheck:0": {}, - "ghcr.io/devcontainers/features/github-cli:1": {}, - "ghcr.io/shepherdjerred/devcontainers-features/earthly:1": {} - }, - "customizations": { - "devpod": { - "prebuildRepository": "ghcr.io/shepherdjerred/discord-plays-pokemon" - } - } -} diff --git a/.devcontainer/postCreate.sh b/.devcontainer/postCreate.sh deleted file mode 100755 index 5fd8f9b..0000000 --- a/.devcontainer/postCreate.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -set -euv - -npm install -g npm - -go install github.com/rhysd/actionlint/cmd/actionlint@latest diff --git a/.github/workflows/earthly.yml b/.github/workflows/earthly.yml deleted file mode 100644 index e69de29..0000000 diff --git a/.gitignore b/.gitignore index 72fb974..f9ed4e0 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ error.png logs saves .DS_Store +machine.typegen.d.ts diff --git a/.vscode/extensions.json b/.vscode/extensions.json index de7f7b5..0291186 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -12,6 +12,7 @@ "bradlc.vscode-tailwindcss", "lightyen.tailwindcss-intellisense-twin", "tamasfe.even-better-toml", - "orta.vscode-jest" + "statelyai.stately-vscode", + "zixuanchen.vitest-explorer" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index ec4833d..7d1705a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,11 @@ "editor.defaultFormatter": "esbenp.prettier-vscode", "[shellscript]": { "editor.defaultFormatter": "mkhl.shfmt" + }, + "search.exclude": { + "**/node_modules": true, + "**/bower_components": true, + "**/*.code-search": true, + "**/machine.typegen.d.ts": true } } diff --git a/Earthfile b/Earthfile index 5cd0070..ad5c7bd 100644 --- a/Earthfile +++ b/Earthfile @@ -11,7 +11,6 @@ pipeline.push: PIPELINE --push TRIGGER push main BUILD +ci - BUILD +devcontainer BUILD ./packages/frontend+deploy.storybook --prod=true BUILD ./docs+deploy --prod=true @@ -106,17 +105,3 @@ up: down: LOCALLY RUN (cd packages/backend/ && docker compose down) - -devcontainer: - FROM earthly/dind:ubuntu - WORKDIR /workspace - ARG TARGETARCH - ARG version=0.2.1 - RUN curl --location --fail --silent --show-error -o /usr/local/bin/devpod https://github.com/loft-sh/devpod/releases/download/v$version/devpod-linux-$TARGETARCH - RUN chmod +x /usr/local/bin/devpod - COPY .devcontainer/devcontainer.json . - RUN --push --secret GITHUB_TOKEN=github_token echo $GITHUB_TOKEN | docker login ghcr.io -u shepherdjerred --password-stdin - WITH DOCKER - RUN devpod provider add docker && \ - devpod build github.com/shepherdjerred/discord-plays-pokemon --repository ghcr.io/shepherdjerred/discord-plays-pokemon --platform linux/amd64,linux/arm64 - END diff --git a/README.md b/README.md index 1a1b4d3..ec60c6e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # Discord Plays Pokémon -[![Open in DevPod!](https://devpod.sh/assets/open-in-devpod.svg)](https://devpod.sh/open#https://github.com/shepherdjerred/better-skill-capped) - ![A screenshot of a desktop. The window on the left shows a video stream of Pokémon Liquid Crystal produced by this application. The window on the right shows the Discord application with a user named Pokebot in a voice channel. Discord is also displaying a text channel where users can enter commands to control the Pokémon bot](docs/docs/assets/images/screenshot_all.png) This application allows your Discord server to play a cooperative game of Pokémon (or any other Game Boy Advance ROM) using Discord as the input method. The concept is similar to that of [Twitch Plays Pokémon](https://en.wikipedia.org/wiki/Twitch_Plays_Pok%C3%A9mon). diff --git a/ROADMAP.md b/ROADMAP.md index 959d064..f60809c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -32,7 +32,6 @@ This document tracks the planned work for this repository. ## In Progress - Fullscreen mode -- Require players to be in channel to send commands ## Complete @@ -40,3 +39,5 @@ This document tracks the planned work for this repository. - Fix Discord text commands - Make development/production closer - Minimum watcher count +- Require players to be in channel to send commands +- State machine diff --git a/misc/ec2-bootstrap.sh b/misc/ec2-bootstrap.sh deleted file mode 100755 index 1ba8b7d..0000000 --- a/misc/ec2-bootstrap.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -set -euxo pipefail - -sudo apt update -y -sudo apt upgrade -y - -curl -fsSL https://get.docker.com -o get-docker.sh -sudo sh get-docker.sh -rm get-docker.sh - -sudo groupadd docker || true -sudo usermod -aG docker $USER - -sudo curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose -sudo chmod +x /usr/local/bin/docker-compose - -sudo apt install -y linux-headers-$(uname -r) -distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g') -wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/cuda-keyring_1.0-1_all.deb -sudo dpkg -i cuda-keyring_1.0-1_all.deb -sudo rm cuda-keyring_1.0-1_all.deb -sudo apt update -sudo apt install -y --no-install-recommends cuda-drivers - -distribution=$(. /etc/os-release;echo $ID$VERSION_ID) -curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg -curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ - sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ - sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list - -sudo apt-get update -sudo apt-get install -y nvidia-container-toolkit -sudo nvidia-ctk runtime configure --runtime=docker - -sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/latest/download/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly && /usr/local/bin/earthly bootstrap --with-autocomplete' - -sudo apt install fish -fish -c 'curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher' - -sudo curl -sL https://deb.nodesource.com/setup_lts.x -o /tmp/nodesource_setup.sh -sudo bash /tmp/nodesource_setup.sh -sudo apt install -y nodejs diff --git a/package-lock.json b/package-lock.json index f5b23a5..d63a66d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,8 @@ ], "devDependencies": { "prettier": "^3.0.3", - "prettier-plugin-tailwindcss": "^0.5.4" + "prettier-plugin-tailwindcss": "^0.5.5", + "vitest": "^0.34.6" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -237,21 +238,21 @@ } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", + "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@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.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -265,10 +266,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "license": "MIT" - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -278,11 +275,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -312,12 +309,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "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==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -403,18 +400,20 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "license": "MIT", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "license": "MIT", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -441,25 +440,26 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "license": "MIT", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "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==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -556,8 +556,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "license": "MIT", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } @@ -584,13 +585,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -674,9 +675,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -811,18 +812,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "license": "MIT", @@ -2181,16 +2170,6 @@ "semver": "bin/semver" } }, - "node_modules/@babel/register/node_modules/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==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "license": "MIT" @@ -2206,30 +2185,31 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "license": "MIT", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", - "dependencies": { - "@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", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2245,12 +2225,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2444,40 +2424,6 @@ "react": ">=16.8.0" } }, - "node_modules/@esbuild-kit/cjs-loader": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "@esbuild-kit/core-utils": "^3.0.0", - "get-tsconfig": "^4.4.0" - } - }, - "node_modules/@esbuild-kit/core-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.0.tgz", - "integrity": "sha512-jTtSvVpr5ygNXyPXf9IBbCrKQ0uckq6vWkcGfy1fEr9KjkKdnFn4kFAGjpqZDZim1wsTwh/Be+lhAUemEmxEYA==", - "dependencies": { - "esbuild": "~0.18.20", - "source-map-support": "^0.5.21" - } - }, - "node_modules/@esbuild-kit/core-utils/node_modules/source-map-support": { - "version": "0.5.21", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@esbuild-kit/esm-loader": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.1.tgz", - "integrity": "sha512-NJT43EF+rJ/KCU/9VlBWS9HByN1FvbWdNmtNxdZNLYcxwxF+MASIjRsH9/f6FRa3Eml+Fr8TNujB6uzNTAPZfQ==", - "dependencies": { - "@esbuild-kit/core-utils": "^3.3.0", - "get-tsconfig": "^4.7.0" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", @@ -2540,9 +2486,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2555,22 +2501,22 @@ "dev": true }, "node_modules/@floating-ui/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", - "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", "dev": true, "dependencies": { - "@floating-ui/utils": "^0.1.1" + "@floating-ui/utils": "^0.1.3" } }, "node_modules/@floating-ui/dom": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.2.tgz", - "integrity": "sha512-6ArmenS6qJEWmwzczWyhvrXRdI/rI78poBcW0h/456+onlabit+2G+QxHx5xTOX60NBJQXjsCLFbW2CmsXpUog==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", "dev": true, "dependencies": { - "@floating-ui/core": "^1.4.1", - "@floating-ui/utils": "^0.1.1" + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" } }, "node_modules/@floating-ui/react-dom": { @@ -2587,9 +2533,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.2.tgz", - "integrity": "sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==", "dev": true }, "node_modules/@humanwhocodes/config-array": { @@ -2643,9 +2589,9 @@ } }, "node_modules/@iconify/json": { - "version": "2.2.114", - "resolved": "https://registry.npmjs.org/@iconify/json/-/json-2.2.114.tgz", - "integrity": "sha512-KxZUi3yvruewUcDKK3kGXIZTqRQxN/LuO0uvoduBtCdntQ9NqKlY2cKchgt9cSv950teGzvRUv2nFEgd7Ywuvw==", + "version": "2.2.124", + "resolved": "https://registry.npmjs.org/@iconify/json/-/json-2.2.124.tgz", + "integrity": "sha512-5Jus7MwFnatCZJq0aN7pJKqkE6FUQJLo+8nTrBZ3c+9UxzjUKiaoMfBvzk8pcbfutC1fMDy5JE/1fi+iZ6xlWw==", "dev": true, "dependencies": { "@iconify/types": "*", @@ -2769,8 +2715,9 @@ }, "node_modules/@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==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -2784,16 +2731,18 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2804,8 +2753,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/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==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2816,8 +2766,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -2827,8 +2778,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -2841,8 +2793,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/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==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -2852,8 +2805,9 @@ }, "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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -2866,255 +2820,35 @@ "node": ">=8" } }, - "node_modules/@jest/console": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "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-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, "node_modules/@jest/schemas": { - "version": "29.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.4.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.5.0", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "slash": "^3.0.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform": { - "version": "29.5.0", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -3125,11 +2859,12 @@ } }, "node_modules/@jest/types": { - "version": "29.5.0", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -4006,46 +3741,29 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true }, "node_modules/@socket.io/component-emitter": { "version": "3.1.0", "license": "MIT" }, "node_modules/@storybook/addon-actions": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.4.1.tgz", - "integrity": "sha512-ZCrBUpCAxgMCrcMGvBOhh+8uUZ9HhoCIOfV1XiaTXpE9Y2lqIqfRsc18E/ST3zN25Waf/LcJPJF2Dp/VSSoGpA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.4.6.tgz", + "integrity": "sha512-SsqZr3js5NinKPnC8AeNI7Ij+Q6fIl9tRdRmSulEgjksjOg7E5S1/Wsn5Bb2CCgj7MaX6VxGyC7s3XskQtDiIQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/theming": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "dequal": "^2.0.2", "lodash": "^4.17.21", "polished": "^4.2.2", @@ -4073,19 +3791,19 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.4.1.tgz", - "integrity": "sha512-srmY6S9RAYkApjy49lYwKMFDpRp1XCws0pwHV0QoRBl7zibqUwr3PexkryK0uopPDhnfZRtRykPG5gzePNntmA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.4.6.tgz", + "integrity": "sha512-+LHTZB/ZYMAzkyD5ZxSriBsqmsrvIaW/Nnd/BeuXGbkrVKKqM0qAKiFZAfjc2WchA1piVNy0/1Rsf+kuYCEiJw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/theming": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "memoizerific": "^1.11.3", "ts-dedent": "^2.0.0" }, @@ -4107,21 +3825,21 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.4.1.tgz", - "integrity": "sha512-KlCYprhBerAKItVQKpexR1oParTbNDOZpJbonG+uldZ12FV7kkrTEGD1vwoLtYTLy+QXIGg4MI1cmUpd39LrLg==", - "dev": true, - "dependencies": { - "@storybook/blocks": "7.4.1", - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/core-common": "7.4.1", - "@storybook/core-events": "7.4.1", - "@storybook/manager-api": "7.4.1", - "@storybook/node-logger": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/theming": "7.4.1", - "@storybook/types": "7.4.1", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.4.6.tgz", + "integrity": "sha512-4lq3sycEUIsK8SUWDYc60QgF4vV9FZZ3lDr6M7j2W9bOnvGw49d2fbdlnq+bX1ZprZZ9VgglQpBAorQB3BXZRw==", + "dev": true, + "dependencies": { + "@storybook/blocks": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, @@ -4143,26 +3861,26 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.4.1.tgz", - "integrity": "sha512-rhLeIX30Z/UsCp7tKtUJyGXWJ2Wggtkl+n6hyaW3orQlSQbsndqJ1rGIs0lHScrDv0dKwT2Dcp2WaEXWHRmgEw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.4.6.tgz", + "integrity": "sha512-dLaub+XWFq4hChw+xfuF9yYg0Txp77FUawKoAigccfjWXx+OOhRV3XTuAcknpXkYq94GWynHgUFXosXT9kbDNA==", "dev": true, "dependencies": { "@jest/transform": "^29.3.1", "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.4.1", - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/csf-plugin": "7.4.1", - "@storybook/csf-tools": "7.4.1", + "@storybook/blocks": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/csf-plugin": "7.4.6", + "@storybook/csf-tools": "7.4.6", "@storybook/global": "^5.0.0", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.4.1", - "@storybook/postinstall": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/react-dom-shim": "7.4.1", - "@storybook/theming": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/node-logger": "7.4.6", + "@storybook/postinstall": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/react-dom-shim": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "fs-extra": "^11.1.0", "remark-external-links": "^8.0.0", "remark-slug": "^6.0.0", @@ -4178,24 +3896,24 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.4.1.tgz", - "integrity": "sha512-Ma63h7gQ2uQgMBvMYlrevurqtzbXFfyuHgYp1PZrhFUCuiC7f1yKkxp5X+jLcfXrG2IsPIuBxLBMYtSpRu6izA==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "7.4.1", - "@storybook/addon-backgrounds": "7.4.1", - "@storybook/addon-controls": "7.4.1", - "@storybook/addon-docs": "7.4.1", - "@storybook/addon-highlight": "7.4.1", - "@storybook/addon-measure": "7.4.1", - "@storybook/addon-outline": "7.4.1", - "@storybook/addon-toolbars": "7.4.1", - "@storybook/addon-viewport": "7.4.1", - "@storybook/core-common": "7.4.1", - "@storybook/manager-api": "7.4.1", - "@storybook/node-logger": "7.4.1", - "@storybook/preview-api": "7.4.1", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.4.6.tgz", + "integrity": "sha512-dWodufrt71TK7ELkeIvVae/x4PzECUlbOm57Iqqt4yQCyR291CgvI4PjeB8un2HbpcXCGZ+N/Oj3YkytvzBi4A==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "7.4.6", + "@storybook/addon-backgrounds": "7.4.6", + "@storybook/addon-controls": "7.4.6", + "@storybook/addon-docs": "7.4.6", + "@storybook/addon-highlight": "7.4.6", + "@storybook/addon-measure": "7.4.6", + "@storybook/addon-outline": "7.4.6", + "@storybook/addon-toolbars": "7.4.6", + "@storybook/addon-viewport": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/preview-api": "7.4.6", "ts-dedent": "^2.0.0" }, "funding": { @@ -4208,14 +3926,14 @@ } }, "node_modules/@storybook/addon-highlight": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.4.1.tgz", - "integrity": "sha512-7fD3//+FHOankINRhPnAuW2gLNC7oJMT0eFD0sHrQPG5qMpR+T7u8mqyI05kPszyiY9U72LRfjrf8GL1Hac8gQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.4.6.tgz", + "integrity": "sha512-zCufxxD2KS5VwczxfkcBxe1oR/juTTn2H1Qm8kYvWCJQx3UxzX0+G9cwafbpV7eivqaufLweEwROkH+0KjAtkQ==", "dev": true, "dependencies": { - "@storybook/core-events": "7.4.1", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.4.1" + "@storybook/preview-api": "7.4.6" }, "funding": { "type": "opencollective", @@ -4223,21 +3941,21 @@ } }, "node_modules/@storybook/addon-interactions": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.4.1.tgz", - "integrity": "sha512-KHMVLI6PefdzOpPUEjiMhfi2XHhC1J+9iMgP/WfO2xaws2vXtEZA6HMM2lE2JkC8AN8nSiTWIHtSompEiPd7/Q==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.4.6.tgz", + "integrity": "sha512-zVZYrEPZPhNrXBuPqM7HbQvr6jwsje1sbCYj3wnp83U5wjciuqrngqHIlaSZ30zOWSfRVyzbyqL+JQZKA58BNA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/core-common": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "7.4.1", - "@storybook/manager-api": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/theming": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/instrumenter": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "jest-mock": "^27.0.6", "polished": "^4.2.2", "ts-dedent": "^2.2.0" @@ -4295,19 +4013,19 @@ } }, "node_modules/@storybook/addon-links": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.4.1.tgz", - "integrity": "sha512-DNf9Vwbe0f7fBFW5jc/59d6eC291BOtvjzsdIO8vGzKl4ELVbrXPFcig/CxmeqDqMyUjZ2tplL5wW6a3UuzFvg==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.4.6.tgz", + "integrity": "sha512-BPygElZKX+CPI9Se6GJNk1dYc5oxuhA+vHigO1tBqhiM6VkHyFP3cvezJNQvpNYhkUnu3cxnZXb3UJnlRbPY3g==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/router": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/router": "7.4.6", + "@storybook/types": "7.4.6", "prop-types": "^15.7.2", "ts-dedent": "^2.0.0" }, @@ -4329,18 +4047,18 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.4.1.tgz", - "integrity": "sha512-OFRBGlA8Bs04vJe2dAP2KK+Juus0JrdfLeeW0wm1RQGYCHJZb0awiI59wQ3rJLyS9IEDl95VaNgWrsyCu5YnIw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.4.6.tgz", + "integrity": "sha512-nCymMLaHnxv8TE3yEM1A9Tulb1NuRXRNmtsdHTkjv7P1aWCxZo8A/GZaottKe/GLT8jSRjZ+dnpYWrbAhw6wTQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", "tiny-invariant": "^1.3.1" }, "funding": { @@ -4361,18 +4079,18 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.4.1.tgz", - "integrity": "sha512-HnBQbHLTEHFzeuzNu39Hjol5cCOsXpb406oeD+u8wv6udfDYClg1QmVEaVKddgPooTy9Gv9ztpYlAaMBfSjnmQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.4.6.tgz", + "integrity": "sha512-errNUblRVDLpuEaHQPr/nsrnsUkD2ARmXawkRvizgDWLIDMDJYjTON3MUCaVx3x+hlZ3I6X//G5TVcma8tCc8A==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", "ts-dedent": "^2.0.0" }, "funding": { @@ -4393,16 +4111,16 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.4.1.tgz", - "integrity": "sha512-CWHMBCKomQ5JkoFmFD66uo5A2Xa4ER+DX2Kb0oX62s35mBaNOfJVois++i/2Or8BwOUl61x5/3UdPgN2rWHeSw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.4.6.tgz", + "integrity": "sha512-L9m2FBcKeteGq7qIYsMJr0LEfiH7Wdrv5IDcldZTn68eZUJTh1p4GdJZcOmzX1P5IFRr76hpu03iWsNlWQjpbQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/manager-api": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/theming": "7.4.1" + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6" }, "funding": { "type": "opencollective", @@ -4422,18 +4140,18 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.4.1.tgz", - "integrity": "sha512-3bdRPIFAqZcdGe3XSS9X4T3is6DP8FGytpU96SwnAllG3rI7kQHxmC7pn6mrdNMpLBHq47ZSABoRZZLq8bT/AA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.4.6.tgz", + "integrity": "sha512-INDtk54j7bi7NgxMfd2ATmbA0J7nAd6X8itMkLIyPuPJtx8bYHPDORyemDOd0AojgmAdTOAyUtDYdI/PFeo4Cw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/theming": "7.4.1", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", "memoizerific": "^1.11.3", "prop-types": "^15.7.2" }, @@ -4455,22 +4173,22 @@ } }, "node_modules/@storybook/blocks": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.4.1.tgz", - "integrity": "sha512-allNTTuFcFK/DzGGQqFGPu/bH53wjM7lO9m/yHBtJv8Mi1aP745JqW0ucJMVb/aO2Y8vjkTIVa+meVIl02bfrg==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.4.6.tgz", + "integrity": "sha512-HxBSAeOiTZW2jbHQlo1upRWFgoMsaAyKijUFf5MwwMNIesXCuuTGZDJ3xTABwAVLK2qC9Ektfbo0CZCiPVuDRQ==", "dev": true, "dependencies": { - "@storybook/channels": "7.4.1", - "@storybook/client-logger": "7.4.1", - "@storybook/components": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/csf": "^0.1.0", - "@storybook/docs-tools": "7.4.1", + "@storybook/docs-tools": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/theming": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -4494,15 +4212,15 @@ } }, "node_modules/@storybook/builder-manager": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.4.1.tgz", - "integrity": "sha512-5zD10jO+vxpbkz9yPdPy0ysRRd+81GmZ1yf12xARREy2hp+KeIIC228QDVA1OAsYcfnqREgCAnQslzhR57739A==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.4.6.tgz", + "integrity": "sha512-zylZCD2rmyLOOFBFmUgtJg6UNUKmRNgXiig1XApzS2TkIbTZP827DsVEUl0ey/lskCe0uArkrEBR6ICba8p/Rw==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.4.1", - "@storybook/manager": "7.4.1", - "@storybook/node-logger": "7.4.1", + "@storybook/core-common": "7.4.6", + "@storybook/manager": "7.4.6", + "@storybook/node-logger": "7.4.6", "@types/ejs": "^3.1.1", "@types/find-cache-dir": "^3.2.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", @@ -4522,20 +4240,20 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.4.1.tgz", - "integrity": "sha512-aB7bfirdRLozm4jpBIVhXkzN2sU0J9nF5WTkzT9R0ReRGsHm3+4CDFAPMnHBISgNXkXMLVC4VuQp4w/a4Avjmg==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.4.6.tgz", + "integrity": "sha512-xV9STYK+TkqWWTf2ydm6jx+7P70fjD2UPd1XTUw08uKszIjhuuxk+bG/OF5R1E25mPunAKXm6kBFh351AKejBg==", "dev": true, "dependencies": { - "@storybook/channels": "7.4.1", - "@storybook/client-logger": "7.4.1", - "@storybook/core-common": "7.4.1", - "@storybook/csf-plugin": "7.4.1", + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/csf-plugin": "7.4.6", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.4.1", - "@storybook/preview": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/node-logger": "7.4.6", + "@storybook/preview": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", "es-module-lexer": "^0.9.3", @@ -4570,9 +4288,9 @@ } }, "node_modules/@storybook/builder-vite/node_modules/magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "version": "0.30.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", + "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -4582,13 +4300,13 @@ } }, "node_modules/@storybook/channels": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.1.tgz", - "integrity": "sha512-gnE1mNrRF+9oCVRMq6MS/tLXJbYmf9P02PCC3KpMLcSsABdH5jcrACejzJVo/kE223knFH7NJc4BBj7+5h0uXA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.4.6.tgz", + "integrity": "sha512-yPv/sfo2c18fM3fvG0i1xse63vG8l33Al/OU0k/dtovltPu001/HVa1QgBgsb/QrEfZtvGjGhmtdVeYb39fv3A==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.2.0", @@ -4600,23 +4318,23 @@ } }, "node_modules/@storybook/cli": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.4.1.tgz", - "integrity": "sha512-G1oM1Egs5Z/5FOBcqfACJy2u5cDPl8FMFr3CETkn15a5MXzX3qxH8FD8GmZnXIsEDsGH5WvhnXYbCw+43R6GKg==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.4.6.tgz", + "integrity": "sha512-rRwaH8pOL+FHz/pJMEkNpMH2xvZvWsrl7obBYw26NQiHmiVSAkfHJicndSN1mwc+p5w+9iXthrgzbLtSAOSvkA==", "dev": true, "dependencies": { "@babel/core": "^7.22.9", "@babel/preset-env": "^7.22.9", "@babel/types": "^7.22.5", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.4.1", - "@storybook/core-common": "7.4.1", - "@storybook/core-events": "7.4.1", - "@storybook/core-server": "7.4.1", - "@storybook/csf-tools": "7.4.1", - "@storybook/node-logger": "7.4.1", - "@storybook/telemetry": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/codemod": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/core-server": "7.4.6", + "@storybook/csf-tools": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/telemetry": "7.4.6", + "@storybook/types": "7.4.6", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -4681,9 +4399,9 @@ } }, "node_modules/@storybook/client-logger": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.1.tgz", - "integrity": "sha512-2j0DQlKlPNY8XAaEZv+mUYEUm4dOWg6/Q92UNbvYPRK5qbXUvbMiQco5nmvg4LvMT6y99LhRSW2xrwEx5xKAKw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.4.6.tgz", + "integrity": "sha512-XDw31ZziU//86PKuMRnmc+L/G0VopaGKENQOGEpvAXCU9IZASwGKlKAtcyosjrpi+ZiUXlMgUXCpXM7x3b1Ehw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -4694,18 +4412,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.4.1.tgz", - "integrity": "sha512-KlN2oImqc45RLNRJDWJObvYcLzdtkk4fH40nBIP1/nem8AEbyjEbC5c1OtZilEV47Vn8IdAxqGRPQFXW8GVFEQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.4.6.tgz", + "integrity": "sha512-lxmwEpwksCaAq96APN2YlooSDfKjJ1vKzN5Ni2EqQzf2TEXl7XQjLacHd7OOaII1kfsy+D5gNG4N5wBo7Ub30g==", "dev": true, "dependencies": { "@babel/core": "^7.22.9", "@babel/preset-env": "^7.22.9", "@babel/types": "^7.22.5", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.4.1", - "@storybook/node-logger": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/csf-tools": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^11.0.2", @@ -4735,18 +4453,18 @@ } }, "node_modules/@storybook/components": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.4.1.tgz", - "integrity": "sha512-hCuKmMB0+d3/apHjC8G0vMks1cE1aeoKu09gQ40YT+cBxKWj2+lNVKxDd6wJpaR6bU/wrAL1S6eaIQ/T9QpqRA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.4.6.tgz", + "integrity": "sha512-nIRBhewAgrJJVafyCzuaLx1l+YOfvvD5dOZ0JxZsxJsefOdw1jFpUqUZ5fIpQ2moyvrR0mAUFw378rBfMdHz5Q==", "dev": true, "dependencies": { "@radix-ui/react-select": "^1.2.2", "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.4.1", + "@storybook/client-logger": "7.4.6", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/theming": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "memoizerific": "^1.11.3", "use-resize-observer": "^9.1.0", "util-deprecate": "^1.0.2" @@ -4761,13 +4479,13 @@ } }, "node_modules/@storybook/core-client": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.4.1.tgz", - "integrity": "sha512-0pWcw1XDjS0fuAnU8eDAcxR9B7GrjJFOWB5/4f1fsWmXm4FvH0iQxJtMGuvFBvaDUvRjky0+9BXGRhEzRpMhyg==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.4.6.tgz", + "integrity": "sha512-tfgxAHeCvMcs6DsVgtb4hQSDaCHeAPJOsoyhb47eDQfk4OmxzriM0qWucJV5DePSMi+KutX/rN2u0JxfOuN68g==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/preview-api": "7.4.1" + "@storybook/client-logger": "7.4.6", + "@storybook/preview-api": "7.4.6" }, "funding": { "type": "opencollective", @@ -4775,14 +4493,14 @@ } }, "node_modules/@storybook/core-common": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.4.1.tgz", - "integrity": "sha512-dvHY515l9yyH3Yki9CuGF/LG85yWDmhjtlbHJ7mrMSreaAgvDs7O5Q2iVh6DXg3oMspQvKlLii/ZLzu+3uxMbg==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.4.6.tgz", + "integrity": "sha512-05MJFmOM86qvTLtgDskokIFz9txe0Lbhq4L3by1FtF0GwgH+p+W6I94KI7c6ANER+kVZkXQZhiRzwBFnVTW+Cg==", "dev": true, "dependencies": { - "@storybook/core-events": "7.4.1", - "@storybook/node-logger": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", "@types/find-cache-dir": "^3.2.1", "@types/node": "^16.0.0", "@types/node-fetch": "^2.6.4", @@ -4810,9 +4528,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "16.18.50", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.50.tgz", - "integrity": "sha512-OiDU5xRgYTJ203v4cprTs0RwOCd5c5Zjv+K5P8KSqfiCsB1W3LcamTUMcnQarpq5kOYbhHfSOgIEJvdPyb5xyw==", + "version": "16.18.57", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.57.tgz", + "integrity": "sha512-piPoDozdPaX1hNWFJQzzgWqE40gh986VvVx/QO9RU4qYRE55ld7iepDVgZ3ccGUw0R4wge0Oy1dd+3xOQNkkUQ==", "dev": true }, "node_modules/@storybook/core-common/node_modules/brace-expansion": { @@ -4841,19 +4559,19 @@ } }, "node_modules/@storybook/core-common/node_modules/glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -4877,18 +4595,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/core-common/node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@storybook/core-common/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -4911,9 +4617,9 @@ } }, "node_modules/@storybook/core-events": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.1.tgz", - "integrity": "sha512-F1tGb32XZ4FRfbtXdi4b+zdzWUjFz5rn3TF18mSuBGGXvxKU+4tywgjGQ3dKGdvuP754czn3poSdz2ZW08bLsQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.4.6.tgz", + "integrity": "sha512-r5vrE+32lwrJh1NGFr1a0mWjvxo7q8FXYShylcwRWpacmL5NTtLkrXOoJSeGvJ4yKNYkvxQFtOPId4lzDxa32w==", "dev": true, "dependencies": { "ts-dedent": "^2.0.0" @@ -4924,26 +4630,26 @@ } }, "node_modules/@storybook/core-server": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.4.1.tgz", - "integrity": "sha512-8JJGci8eyNSfiHJ+Xr46Jv95fqQbjrd+ecQJvpyRqwN1LFdCM6QtHYmjt6LzuK16/by5jYXJ7+f8SA+gvW8SbQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.4.6.tgz", + "integrity": "sha512-jqmRTGCJ1W0WReImivkisPVaLFT5sjtLnFoAk0feHp6QS5j7EYOPN7CYzliyQmARWTLUEXOVaFf3VD6nJZQhJQ==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.4.1", - "@storybook/channels": "7.4.1", - "@storybook/core-common": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/builder-manager": "7.4.6", + "@storybook/channels": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.4.1", + "@storybook/csf-tools": "7.4.6", "@storybook/docs-mdx": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.4.1", - "@storybook/node-logger": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/telemetry": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/manager": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/telemetry": "7.4.6", + "@storybook/types": "7.4.6", "@types/detect-port": "^1.3.0", "@types/node": "^16.0.0", "@types/pretty-hrtime": "^1.0.0", @@ -4963,7 +4669,6 @@ "prompts": "^2.4.0", "read-pkg-up": "^7.0.1", "semver": "^7.3.7", - "serve-favicon": "^2.5.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1", "ts-dedent": "^2.0.0", @@ -4978,9 +4683,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "16.18.50", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.50.tgz", - "integrity": "sha512-OiDU5xRgYTJ203v4cprTs0RwOCd5c5Zjv+K5P8KSqfiCsB1W3LcamTUMcnQarpq5kOYbhHfSOgIEJvdPyb5xyw==", + "version": "16.18.57", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.57.tgz", + "integrity": "sha512-piPoDozdPaX1hNWFJQzzgWqE40gh986VvVx/QO9RU4qYRE55ld7iepDVgZ3ccGUw0R4wge0Oy1dd+3xOQNkkUQ==", "dev": true }, "node_modules/@storybook/csf": { @@ -4992,12 +4697,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.4.1.tgz", - "integrity": "sha512-TnvDS2szwwzoqn3WbnB57w1Q+rZ+EFFwpLdjvocsiosLQglMQdPNhDvl1U5uDgwTzVhs4MEiEHJ1LxTkeizxhA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.4.6.tgz", + "integrity": "sha512-yi7Qa4NSqKOyiJTWCxlB0ih2ijXq6oY5qZKW6MuMMBP14xJNRGLbH5KabpfXgN2T7YECcOWG1uWaGj2veJb1KA==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.4.1", + "@storybook/csf-tools": "7.4.6", "unplugin": "^1.3.1" }, "funding": { @@ -5006,9 +4711,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.4.1.tgz", - "integrity": "sha512-mzzsAtB9CYSgxCvZJ4xQrC7QIhMR5MXGBohADiNhnuRXLdZ6wXBhWkRi/sY7Wh5Uh8DdgHkGPJHJxcyYG+FYQw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.4.6.tgz", + "integrity": "sha512-ocKpcIUtTBy6hlLY34RUFQyX403cWpB2gGfqvkHbpGe2BQj7EyV0zpWnjsfVxvw+M9OWlCdxHWDOPUgXM33ELw==", "dev": true, "dependencies": { "@babel/generator": "^7.22.9", @@ -5016,7 +4721,7 @@ "@babel/traverse": "^7.22.8", "@babel/types": "^7.22.5", "@storybook/csf": "^0.1.0", - "@storybook/types": "7.4.1", + "@storybook/types": "7.4.6", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -5033,14 +4738,14 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.4.1.tgz", - "integrity": "sha512-4PRsib2hDQjGhT2CnnPgzNZ5pVrpQ6wtb5l0TG4lDDc0F9Tal0EbrooXWwMsc7SxYslHKIEgxd+Nll66FWILFw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.4.6.tgz", + "integrity": "sha512-nZj1L/8WwKWWJ41FW4MaKGajZUtrhnr9UwflRCkQJaWhAKmDfOb5M5TqI93uCOULpFPOm5wpoMBz2IHInQ2Lrg==", "dev": true, "dependencies": { - "@storybook/core-common": "7.4.1", - "@storybook/preview-api": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/core-common": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", "@types/doctrine": "^0.0.3", "doctrine": "^3.0.0", "lodash": "^4.17.21" @@ -5056,16 +4761,16 @@ "license": "MIT" }, "node_modules/@storybook/instrumenter": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.4.1.tgz", - "integrity": "sha512-Nwu6MErUORKqQv/cYCZfWcvycuQQFOP5fEYAsbtgD2pRn+DXXOWeFyv6iHEbekqzfG2YTQ72koR0lZEFWnDl4w==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.4.6.tgz", + "integrity": "sha512-K5atRoVFCl6HEgkSxIbwygpzgE/iROc7BrtJ3z3a7E70sanFr6Jxt6Egu6fz2QkL3ef4EWpXMnle2vhEfG29pA==", "dev": true, "dependencies": { - "@storybook/channels": "7.4.1", - "@storybook/client-logger": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.4.1" + "@storybook/preview-api": "7.4.6" }, "funding": { "type": "opencollective", @@ -5073,9 +4778,9 @@ } }, "node_modules/@storybook/manager": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.4.1.tgz", - "integrity": "sha512-LaORUHqfinhKk6Ysz7LyBYqblr/Oj+H5jXeMidSWYor+cJ6AZp1BtCUwWAqtjBliZ8vfASxME1CCImENG11eSA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.4.6.tgz", + "integrity": "sha512-kA1hUDxpn1i2SO9OinvLvVXDeL4xgJkModp+pbE8IXv4NJWReNq1ecMeQCzPLS3Sil2gnrullQ9uYXsnZ9bxxA==", "dev": true, "funding": { "type": "opencollective", @@ -5083,19 +4788,19 @@ } }, "node_modules/@storybook/manager-api": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.4.1.tgz", - "integrity": "sha512-nzYasETW20uDWpfST6JFf6c/GSFB/dj7xVtg5EpvAYF8GkErCk9TvNKdLNroRrIYm5VJxHWC2V+CJ07RuX3Glw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.4.6.tgz", + "integrity": "sha512-inrm3DIbCp8wjXSN/wK6e6i2ysQ/IEmtC7IN0OJ7vdrp+USCooPT448SQTUmVctUGCFmOU3fxXByq8g77oIi7w==", "dev": true, "dependencies": { - "@storybook/channels": "7.4.1", - "@storybook/client-logger": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/router": "7.4.1", - "@storybook/theming": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -5120,9 +4825,9 @@ "dev": true }, "node_modules/@storybook/node-logger": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.4.1.tgz", - "integrity": "sha512-P7rR/WoHCR2zdDo8bDowIBlB3wRrVNHHIfyWxubbzj/AA2uPv7cpdjDA+NDHAIq8MkuxZqfqhatjrHLFwMHDBg==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.4.6.tgz", + "integrity": "sha512-djZb310Q27GviDug1XBv0jOEDLCiwr4hhDE0aifCEKZpfNCi/EaP31nbWimFzZwxu4hE/YAPWExzScruR1zw9Q==", "dev": true, "funding": { "type": "opencollective", @@ -5130,9 +4835,9 @@ } }, "node_modules/@storybook/postinstall": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.4.1.tgz", - "integrity": "sha512-nzSAS2kKhYFdeQHOb+mwk6LCiSBx8vigiRActRWMpoUSntlrLFdYKXoYfPQtUQcE7cHDLv5hutD31Kcl7pIazw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.4.6.tgz", + "integrity": "sha512-TqI5BucPAGRWrkh55BYiG2/gHLFtC0In4cuu0GsUzB/1jc4i51npLRorCwhmT7r7YliGl5F7JaP0Bni/qHN3Lg==", "dev": true, "funding": { "type": "opencollective", @@ -5140,9 +4845,9 @@ } }, "node_modules/@storybook/preview": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.4.1.tgz", - "integrity": "sha512-KqHbS5jVKSvFESrwU3iLJE5ciIJicdV3ZducL9t+hNJOdchzV3ezEwMn6gApEin3dm3Ts7InN+W7nBc+MzaXmA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.4.6.tgz", + "integrity": "sha512-2RPXusJ4CTDrIipIKKvbotD7fP0+8VzoFjImunflIrzN9rni+2rq5eMjqlXAaB+77w064zIR4uDUzI9fxsMDeQ==", "dev": true, "funding": { "type": "opencollective", @@ -5150,17 +4855,17 @@ } }, "node_modules/@storybook/preview-api": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.1.tgz", - "integrity": "sha512-swmosWK73lP0CXDKMOwYIaaId28+muPDYX2V/0JmIOA+45HFXimeXZs3XsgVgQMutVF51QqnDA0pfrNgRofHgQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.4.6.tgz", + "integrity": "sha512-byUS/Opt3ytWD4cWz3sNEKw5Yks8MkQgRN+GDSyIomaEAQkLAM0rchPC0MYjwCeUSecV7IIQweNX5RbV4a34BA==", "dev": true, "dependencies": { - "@storybook/channels": "7.4.1", - "@storybook/client-logger": "7.4.1", - "@storybook/core-events": "7.4.1", + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/types": "7.4.1", + "@storybook/types": "7.4.6", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -5176,18 +4881,18 @@ } }, "node_modules/@storybook/react": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.4.1.tgz", - "integrity": "sha512-m5d/NAypnfgrzphOXEWnKryLKLFRRerlbAhFscauif8amyTcUCkR4xu4nf1b5o6LoIicUBg7mfczQvc5pEHDSQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.4.6.tgz", + "integrity": "sha512-w0dVo64baFFPTGpUOWFqkKsu6pQincoymegSNgqaBd5DxEyMDRiRoTWSJHMKE9BwgE8SyWhRkP1ak1mkccSOhQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/core-client": "7.4.1", - "@storybook/docs-tools": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/core-client": "7.4.6", + "@storybook/docs-tools": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.4.1", - "@storybook/react-dom-shim": "7.4.1", - "@storybook/types": "7.4.1", + "@storybook/preview-api": "7.4.6", + "@storybook/react-dom-shim": "7.4.6", + "@storybook/types": "7.4.6", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", "@types/node": "^16.0.0", @@ -5222,9 +4927,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.4.1.tgz", - "integrity": "sha512-LUxmXyAFZB61kFWtZZA5WCHgFfUI5Jtn0d2HVOfpIYK1OcGwW8K4ya0lbMVrYvMgL37e5ShPurjj32U2YBeiJA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.4.6.tgz", + "integrity": "sha512-DSq8l9FDocUF1ooVI+TF83pddj1LynE/Hv0/y8XZhc3IgJ/HkuOQuUmfz29ezgfAi9gFYUR8raTIBi3/xdoRmw==", "dev": true, "funding": { "type": "opencollective", @@ -5236,15 +4941,15 @@ } }, "node_modules/@storybook/react-vite": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-7.4.1.tgz", - "integrity": "sha512-3Z/eg/BuRehSjlrrd55xxwdMrDArIrBVrtWePp/M+l5A8zKX7N29RLmM4OsrhxSbFH/xFZuGrGNKeLO6914aBA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-7.4.6.tgz", + "integrity": "sha512-jkjnrf3FxzR5wcmebXRPflrsM4WIDjWyW/NVFJwxi5PeIOk7fE7/QAPrm4NFRUu2Q7DeuH3oLKsw8bigvUI9RA==", "dev": true, "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "0.2.1", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "7.4.1", - "@storybook/react": "7.4.1", + "@storybook/builder-vite": "7.4.6", + "@storybook/react": "7.4.6", "@vitejs/plugin-react": "^3.0.1", "ast-types": "^0.14.2", "magic-string": "^0.30.0", @@ -5306,9 +5011,9 @@ } }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "16.18.50", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.50.tgz", - "integrity": "sha512-OiDU5xRgYTJ203v4cprTs0RwOCd5c5Zjv+K5P8KSqfiCsB1W3LcamTUMcnQarpq5kOYbhHfSOgIEJvdPyb5xyw==", + "version": "16.18.57", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.57.tgz", + "integrity": "sha512-piPoDozdPaX1hNWFJQzzgWqE40gh986VvVx/QO9RU4qYRE55ld7iepDVgZ3ccGUw0R4wge0Oy1dd+3xOQNkkUQ==", "dev": true }, "node_modules/@storybook/react/node_modules/acorn": { @@ -5333,12 +5038,12 @@ } }, "node_modules/@storybook/router": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.4.1.tgz", - "integrity": "sha512-7tE1B18jb+5+ujXd3BHcub85QnytIVBNA0iAo+o8MNwArISyodqp12y2D3w+QpXkg0GtPhAp/CMhzpyxotPhRQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.4.6.tgz", + "integrity": "sha512-Vl1esrHkcHxDKqc+HY7+6JQpBPW3zYvGk0cQ2rxVMhWdLZTAz1hss9DqzN9tFnPyfn0a1Q77EpMySkUrvWKKNQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", + "@storybook/client-logger": "7.4.6", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -5352,14 +5057,14 @@ } }, "node_modules/@storybook/telemetry": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.4.1.tgz", - "integrity": "sha512-53eQPm22Fa7qzjXFSE++bJv5qNG/89rRLU5xywuSYmjQgtaS6HKLPjIRtNPPbU50gRvklVedDDxD8UqN73mD3w==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.4.6.tgz", + "integrity": "sha512-c8p/C1NIH8EMBviZkBCx8MMDk6rrITJ+b29DEp5MaWSRlklIVyhGiC4RPIRv6sxJwlD41PnqWVFtfu2j2eXLdQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.4.1", - "@storybook/core-common": "7.4.1", - "@storybook/csf-tools": "7.4.1", + "@storybook/client-logger": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/csf-tools": "7.4.6", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -5372,23 +5077,24 @@ } }, "node_modules/@storybook/testing-library": { - "version": "0.2.0", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.2.2.tgz", + "integrity": "sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw==", "dev": true, - "license": "MIT", "dependencies": { "@testing-library/dom": "^9.0.0", - "@testing-library/user-event": "^14.0.0", + "@testing-library/user-event": "^14.4.0", "ts-dedent": "^2.2.0" } }, "node_modules/@storybook/theming": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.1.tgz", - "integrity": "sha512-a4QajZbnYumq8ovtn7nW7BeNrk/TaWyKmUrIz4w08I6ghzESJA4aCWZ6394awbrruiIOzCCKOUq4mfWEsc8W6A==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.4.6.tgz", + "integrity": "sha512-HW77iJ9ptCMqhoBOYFjRQw7VBap+38fkJGHP5KylEJCyYCgIAm2dEcQmtWpMVYFssSGcb6djfbtAMhYU4TL4Iw==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.4.1", + "@storybook/client-logger": "7.4.6", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -5402,12 +5108,12 @@ } }, "node_modules/@storybook/types": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.1.tgz", - "integrity": "sha512-bjt1YDG9AocFBhIFRvGGbYZPlD223p+qAFcFgYdezU16fFE4ZGFUzUuq2ERkOofL7a2+OzLTCQ/SKe1jFkXCxQ==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.4.6.tgz", + "integrity": "sha512-6QLXtMVsFZFpzPkdGWsu/iuc8na9dnS67AMOBKm5qCLPwtUJOYkwhMdFRSSeJthLRpzV7JLAL8Kwvl7MFP3QSw==", "dev": true, "dependencies": { - "@storybook/channels": "7.4.1", + "@storybook/channels": "7.4.6", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" @@ -5641,10 +5347,15 @@ } }, "node_modules/@swc/core": { - "version": "1.3.67", + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.92.tgz", + "integrity": "sha512-vx0vUrf4YTEw59njOJ46Ha5i0cZTMYdRHQ7KXU29efN1MxcmJH2RajWLPlvQarOP1ab9iv9cApD7SMchDyx2vA==", "dev": true, "hasInstallScript": true, - "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, "engines": { "node": ">=10" }, @@ -5653,16 +5364,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.67", - "@swc/core-darwin-x64": "1.3.67", - "@swc/core-linux-arm-gnueabihf": "1.3.67", - "@swc/core-linux-arm64-gnu": "1.3.67", - "@swc/core-linux-arm64-musl": "1.3.67", - "@swc/core-linux-x64-gnu": "1.3.67", - "@swc/core-linux-x64-musl": "1.3.67", - "@swc/core-win32-arm64-msvc": "1.3.67", - "@swc/core-win32-ia32-msvc": "1.3.67", - "@swc/core-win32-x64-msvc": "1.3.67" + "@swc/core-darwin-arm64": "1.3.92", + "@swc/core-darwin-x64": "1.3.92", + "@swc/core-linux-arm-gnueabihf": "1.3.92", + "@swc/core-linux-arm64-gnu": "1.3.92", + "@swc/core-linux-arm64-musl": "1.3.92", + "@swc/core-linux-x64-gnu": "1.3.92", + "@swc/core-linux-x64-musl": "1.3.92", + "@swc/core-win32-arm64-msvc": "1.3.92", + "@swc/core-win32-ia32-msvc": "1.3.92", + "@swc/core-win32-x64-msvc": "1.3.92" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -5673,6 +5384,178 @@ } } }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.92.tgz", + "integrity": "sha512-v7PqZUBtIF6Q5Cp48gqUiG8zQQnEICpnfNdoiY3xjQAglCGIQCjJIDjreZBoeZQZspB27lQN4eZ43CX18+2SnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.92.tgz", + "integrity": "sha512-Q3XIgQfXyxxxms3bPN+xGgvwk0TtG9l89IomApu+yTKzaIIlf051mS+lGngjnh9L0aUiCp6ICyjDLtutWP54fw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.92.tgz", + "integrity": "sha512-tnOCoCpNVXC+0FCfG84PBZJyLlz0Vfj9MQhyhCvlJz9hQmvpf8nTdKH7RHrOn8VfxtUBLdVi80dXgIFgbvl7qA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.92.tgz", + "integrity": "sha512-lFfGhX32w8h1j74Iyz0Wv7JByXIwX11OE9UxG+oT7lG0RyXkF4zKyxP8EoxfLrDXse4Oop434p95e3UNC3IfCw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.92.tgz", + "integrity": "sha512-rOZtRcLj57MSAbiecMsqjzBcZDuaCZ8F6l6JDwGkQ7u1NYR57cqF0QDyU7RKS1Jq27Z/Vg21z5cwqoH5fLN+Sg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.92.tgz", + "integrity": "sha512-qptoMGnBL6v89x/Qpn+l1TH1Y0ed+v0qhNfAEVzZvCvzEMTFXphhlhYbDdpxbzRmCjH6GOGq7Y+xrWt9T1/ARg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.92.tgz", + "integrity": "sha512-g2KrJ43bZkCZHH4zsIV5ErojuV1OIpUHaEyW1gf7JWKaFBpWYVyubzFPvPkjcxHGLbMsEzO7w/NVfxtGMlFH/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.92.tgz", + "integrity": "sha512-3MCRGPAYDoQ8Yyd3WsCMc8eFSyKXY5kQLyg/R5zEqA0uthomo0m0F5/fxAJMZGaSdYkU1DgF73ctOWOf+Z/EzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.92.tgz", + "integrity": "sha512-zqTBKQhgfWm73SVGS8FKhFYDovyRl1f5dTX1IwSKynO0qHkRCqJwauFJv/yevkpJWsI2pFh03xsRs9HncTQKSA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.92", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.92.tgz", + "integrity": "sha512-41bE66ddr9o/Fi1FBh0sHdaKdENPTuDpv1IFHxSg0dJyM/jX8LbkjnpdInYXHBxhcLVAPraVRrNsC4SaoPw2Pg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, "node_modules/@tailwindcss/forms": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.6.tgz", @@ -5686,9 +5569,9 @@ } }, "node_modules/@tanstack/eslint-plugin-query": { - "version": "4.34.1", - "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-4.34.1.tgz", - "integrity": "sha512-RflOwyXamuHhuMX5RL6wtKiVw9Hi5Hhiv9gW2/ICVc4omflB+GflrxwvQ+EWRKrSRv3C0YcR0UzRxuiZ4mLq7Q==", + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-4.36.0.tgz", + "integrity": "sha512-dfKjV4k7QSAg7ROe25RlshcfkZsZKPIHcDibYtjckAlNkrwBFacCjwCsdNCt/neru6D7yCJYR0P59Ww8tg1JLQ==", "dev": true, "funding": { "type": "github", @@ -5699,20 +5582,20 @@ } }, "node_modules/@tanstack/query-core": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.35.0.tgz", - "integrity": "sha512-4GMcKQuLZQi6RFBiBZNsLhl+hQGYScRZ5ZoVq8QAzfqz9M7vcGin/2YdSESwl7WaV+Qzsb5CZOAbMBes4lNTnA==", + "version": "4.35.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.35.7.tgz", + "integrity": "sha512-PgDJtX75ubFS0WCYFM7DqEoJ4QbxU3S5OH3gJSI40xr7UVVax3/J4CM3XUMOTs+EOT5YGEfssi3tfRVGte4DEw==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.35.0.tgz", - "integrity": "sha512-LLYDNnM9ewYHgjm2rzhk4KG/puN2rdoqCUD+N9+V7SwlsYwJk5ypX58rpkoZAhFyZ+KmFUJ7Iv2lIEOoUqydIg==", + "version": "4.35.7", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.35.7.tgz", + "integrity": "sha512-0MankquP/6EOM2ATfEov6ViiKemey5uTbjGlFMX1xGotwNaqC76YKDMJdHumZupPbZcZPWAeoPGEHQmVKIKoOQ==", "dependencies": { - "@tanstack/query-core": "4.35.0", + "@tanstack/query-core": "4.35.7", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -5813,9 +5696,10 @@ "license": "MIT" }, "node_modules/@tsconfig/recommended": { - "version": "1.0.2", - "dev": true, - "license": "MIT" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/recommended/-/recommended-1.0.3.tgz", + "integrity": "sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==", + "dev": true }, "node_modules/@types/aria-query": { "version": "5.0.1", @@ -5823,9 +5707,10 @@ "license": "MIT" }, "node_modules/@types/babel__core": { - "version": "7.20.1", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -5835,26 +5720,29 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } @@ -5868,6 +5756,21 @@ "@types/node": "*" } }, + "node_modules/@types/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "dev": true, @@ -5911,15 +5814,15 @@ "dev": true }, "node_modules/@types/ejs": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.2.tgz", - "integrity": "sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.3.tgz", + "integrity": "sha512-mv5T/JI/bu+pbfz1o+TLl1NF0NIBbjS0Vl6Ppz1YY9DkXfzZT0lelXpfS5i3ZS3U/p90it7uERQpBvLYoK8e4A==", "dev": true }, "node_modules/@types/emscripten": { - "version": "1.39.7", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.7.tgz", - "integrity": "sha512-tLqYV94vuqDrXh515F/FOGtBcRMTPGvVV1LzLbtYDcQmmhtpf/gLYf+hikBbQk8MzOHNz37wpFfJbYAuSn8HqA==", + "version": "1.39.8", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.8.tgz", + "integrity": "sha512-Rk0HKcMXFUuqT32k1kXHZWgxiMvsyYsmlnjp0rLKa0MMoqXLE3T9dogDBTRfuc3SAsXu97KD3k4SKR1lHqd57w==", "dev": true }, "node_modules/@types/escodegen": { @@ -5933,9 +5836,10 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.17", + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", + "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -5970,9 +5874,10 @@ } }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -6012,16 +5917,6 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/jest": { - "version": "29.5.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", - "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, "node_modules/@types/js-cookie": { "version": "2.2.7", "license": "MIT" @@ -6032,15 +5927,15 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.14.198", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", - "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", + "version": "4.14.199", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", + "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==", "dev": true }, "node_modules/@types/mdx": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.7.tgz", - "integrity": "sha512-BG4tyr+4amr3WsSEmHn/fXPqaCba/AYZ7dsaQTiavihQunHSIxk+uAtqsjvicNpyHN6cm+B9RVrUOtW9VzIKHw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.8.tgz", + "integrity": "sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA==", "dev": true }, "node_modules/@types/mime": { @@ -6049,9 +5944,9 @@ "license": "MIT" }, "node_modules/@types/mime-types": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", - "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.2.tgz", + "integrity": "sha512-q9QGHMGCiBJCHEvd4ZLdasdqXv570agPsUW0CeIm/B8DzhxsYMerD0l3IlI+EQ1A2RWHY2mmM9x1YIuuWxisCg==", "dev": true }, "node_modules/@types/minimatch": { @@ -6060,24 +5955,24 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz", - "integrity": "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==" + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", + "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==" }, "node_modules/@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==", "dev": true, "dependencies": { "@types/node": "*", - "form-data": "^3.0.0" + "form-data": "^4.0.0" } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", + "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", "dev": true }, "node_modules/@types/parse-json": { @@ -6085,12 +5980,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/@types/pretty-hrtime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", @@ -6113,9 +6002,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.2.21", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", - "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", + "version": "18.2.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.25.tgz", + "integrity": "sha512-24xqse6+VByVLIr+xWaQ9muX1B4bXJKXBbjszbld/UEDslGLY53+ZucF44HCmLbMPejTzGG9XgR+3m2/Wqu1kw==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -6124,9 +6013,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", - "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.10.tgz", + "integrity": "sha512-5VEC5RgXIk1HHdyN1pHlg0cOqnxHzvPGpMMyGAP5qSaDRmyZNDaQ0kkVAkK6NYlDhP6YBID3llaXlmAS/mdgCA==", "dev": true, "dependencies": { "@types/react": "*" @@ -6138,9 +6027,9 @@ "license": "MIT" }, "node_modules/@types/selenium-webdriver": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.16.tgz", - "integrity": "sha512-ETje9rr7nTrD0r/mNnIuCAF7fAZ2xKE/1WyxXZZH9N9Cy2NKJTrpEd7SCdzuIlm/1iu1gjHCVbaDwT+MuDrVZg==", + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.17.tgz", + "integrity": "sha512-vtoMYktN2XcSlXwSmZq6H+25CiQMPCuGP7RUulfSmRmyI6wCerZPmNyMMrvcCcyDE/ofeWD1COLfux5plsVizw==", "dev": true, "dependencies": { "@types/ws": "*" @@ -6170,15 +6059,10 @@ "@types/node": "*" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/@types/styled-components": { - "version": "5.1.27", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.27.tgz", - "integrity": "sha512-oY9c1SdztRRF0QDQdwXEenfAjGN4WGUkaMpx5hvdTbYYqw01qoY2GrHi+kAR6SVofynzD6KbGoF5ITP0zh5pvg==", + "version": "5.1.28", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.28.tgz", + "integrity": "sha512-nu0VKNybkjvUqJAXWtRqKd7j3iRUl8GbYSTvZNuIBJcw/HUp1Y4QUXNLlj7gcnRV/t784JnHAlvRnSnE3nPbJA==", "dev": true, "dependencies": { "@types/hoist-non-react-statics": "*", @@ -6209,9 +6093,10 @@ } }, "node_modules/@types/yargs": { - "version": "17.0.24", + "version": "17.0.26", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.26.tgz", + "integrity": "sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==", "dev": true, - "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6222,16 +6107,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.0.tgz", - "integrity": "sha512-gUqtknHm0TDs1LhY12K2NA3Rmlmp88jK9Tx8vGZMfHeNMLE3GH2e9TRub+y+SOjuYgtOmok+wt1AyDPZqxbNag==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.4.tgz", + "integrity": "sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.0", - "@typescript-eslint/type-utils": "6.7.0", - "@typescript-eslint/utils": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/type-utils": "6.7.4", + "@typescript-eslint/utils": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -6257,13 +6142,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.0.tgz", - "integrity": "sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz", + "integrity": "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0" + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6274,9 +6159,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.0.tgz", - "integrity": "sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.4.tgz", + "integrity": "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6287,13 +6172,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.0.tgz", - "integrity": "sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz", + "integrity": "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6314,17 +6199,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.0.tgz", - "integrity": "sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.4.tgz", + "integrity": "sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.0", - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/typescript-estree": "6.7.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", "semver": "^7.5.4" }, "engines": { @@ -6339,12 +6224,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.0.tgz", - "integrity": "sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz", + "integrity": "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -6356,15 +6241,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.0.tgz", - "integrity": "sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.4.tgz", + "integrity": "sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.0", - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/typescript-estree": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4" }, "engines": { @@ -6384,13 +6269,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.0.tgz", - "integrity": "sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz", + "integrity": "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0" + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6401,9 +6286,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.0.tgz", - "integrity": "sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.4.tgz", + "integrity": "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6414,13 +6299,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.0.tgz", - "integrity": "sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz", + "integrity": "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6441,12 +6326,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.0.tgz", - "integrity": "sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz", + "integrity": "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -6474,13 +6359,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.0.tgz", - "integrity": "sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.4.tgz", + "integrity": "sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.0", - "@typescript-eslint/utils": "6.7.0", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/utils": "6.7.4", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -6501,13 +6386,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.0.tgz", - "integrity": "sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz", + "integrity": "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0" + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6518,9 +6403,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.0.tgz", - "integrity": "sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.4.tgz", + "integrity": "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6531,13 +6416,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.0.tgz", - "integrity": "sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz", + "integrity": "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6558,17 +6443,17 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.0.tgz", - "integrity": "sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.4.tgz", + "integrity": "sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.0", - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/typescript-estree": "6.7.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", "semver": "^7.5.4" }, "engines": { @@ -6583,12 +6468,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.0.tgz", - "integrity": "sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz", + "integrity": "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -6679,14 +6564,15 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz", - "integrity": "sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.0.tgz", + "integrity": "sha512-rM0SqazU9iqPUraQ2JlIvReeaxOoRj6n+PzB1C0cBzIbd8qP336nC39/R9yPi3wVcah7E7j/kdU1uCUqMEU4OQ==", "dev": true, "dependencies": { - "@babel/core": "^7.22.9", + "@babel/core": "^7.22.20", "@babel/plugin-transform-react-jsx-self": "^7.22.5", "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "@types/babel__core": "^7.20.2", "react-refresh": "^0.14.0" }, "engines": { @@ -6697,74 +6583,182 @@ } }, "node_modules/@vitejs/plugin-react-swc": { - "version": "3.3.2", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.4.0.tgz", + "integrity": "sha512-m7UaA4Uvz82N/0EOVpZL4XsFIakRqrFKeSNxa1FBLSXGvWrWRBwmZb4qxk+ZIVAZcW3c3dn5YosomDgx62XWcQ==", "dev": true, - "license": "MIT", "dependencies": { - "@swc/core": "^1.3.61" + "@swc/core": "^1.3.85" }, "peerDependencies": { "vite": "^4" } }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", - "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@xobotyi/scrollbar-width": { - "version": "1.9.5", - "license": "MIT" - }, - "node_modules/@yarnpkg/esbuild-plugin-pnp": { - "version": "3.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", - "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", + "node_modules/@vitest/expect": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", "dev": true, "dependencies": { - "tslib": "^2.4.0" + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" }, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "esbuild": ">=0.10.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@yarnpkg/fslib": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", - "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", + "node_modules/@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", "dev": true, "dependencies": { - "@yarnpkg/libzip": "^2.3.0", - "tslib": "^1.13.0" + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@yarnpkg/fslib/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@yarnpkg/libzip": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", - "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "@types/emscripten": "^1.39.6", - "tslib": "^1.13.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/magic-string": { + "version": "0.30.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", + "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@vitest/spy": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@xobotyi/scrollbar-width": { + "version": "1.9.5", + "license": "MIT" + }, + "node_modules/@yarnpkg/esbuild-plugin-pnp": { + "version": "3.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", + "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.0" + } + }, + "node_modules/@yarnpkg/fslib": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", + "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", + "dev": true, + "dependencies": { + "@yarnpkg/libzip": "^2.3.0", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + } + }, + "node_modules/@yarnpkg/fslib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@yarnpkg/libzip": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", + "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", + "dev": true, + "dependencies": { + "@types/emscripten": "^1.39.6", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, "node_modules/@yarnpkg/libzip/node_modules/tslib": { @@ -6785,9 +6779,10 @@ } }, "node_modules/acorn": { - "version": "8.9.0", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -6821,15 +6816,15 @@ } }, "node_modules/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==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/aggregate-error": { @@ -6861,33 +6856,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "dev": true, @@ -7000,6 +6968,15 @@ "util": "^0.12.5" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/ast-types": { "version": "0.14.2", "dev": true, @@ -7028,9 +7005,9 @@ "dev": true }, "node_modules/autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "funding": [ { @@ -7048,8 +7025,8 @@ ], "dependencies": { "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -7084,31 +7061,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-jest": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.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", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -7120,21 +7077,6 @@ "node": ">=8" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "dev": true, @@ -7231,45 +7173,6 @@ "styled-components": ">= 2" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "license": "MIT" @@ -7458,21 +7361,11 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bs-logger": { - "version": "0.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/bser": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -7592,6 +7485,15 @@ "node": ">=10" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/call-bind": { "version": "1.0.2", "license": "MIT", @@ -7613,8 +7515,9 @@ }, "node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -7635,9 +7538,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001525", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz", - "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==", + "version": "1.0.30001546", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", + "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", "funding": [ { "type": "opencollective", @@ -7653,6 +7556,24 @@ } ] }, + "node_modules/chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "dev": true, @@ -7668,13 +7589,16 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/char-regex": { - "version": "1.0.2", + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, - "license": "MIT", - "peer": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { - "node": ">=10" + "node": "*" } }, "node_modules/chokidar": { @@ -7724,7 +7648,9 @@ } }, "node_modules/ci-info": { - "version": "3.8.0", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -7732,17 +7658,10 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -7765,9 +7684,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", "dev": true, "engines": { "node": ">=6" @@ -7791,20 +7710,6 @@ "@colors/colors": "1.5.0" } }, - "node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -7840,22 +7745,6 @@ "node": ">=0.10.0" } }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/color": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", @@ -8068,8 +7957,8 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { "version": "0.5.0", @@ -8224,11 +8113,17 @@ } } }, - "node_modules/dedent": { - "version": "0.7.0", + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, - "license": "MIT", - "peer": true + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } }, "node_modules/deep-equal": { "version": "2.2.1", @@ -8268,15 +8163,6 @@ "dev": true, "license": "MIT" }, - "node_modules/deepmerge": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/default-browser-id": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", @@ -8398,15 +8284,6 @@ "node": ">=8" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", @@ -8453,9 +8330,10 @@ } }, "node_modules/diff-sequences": { - "version": "29.4.3", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -8623,18 +8501,6 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz", "integrity": "sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==" }, - "node_modules/emittery": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "dev": true, @@ -8860,9 +8726,9 @@ "dev": true }, "node_modules/esbuild-register": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz", - "integrity": "sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", + "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -8922,15 +8788,15 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", + "@eslint/js": "8.50.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -9008,9 +8874,9 @@ } }, "node_modules/eslint-plugin-storybook": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.13.tgz", - "integrity": "sha512-smd+CS0WH1jBqUEJ3znGS7DU4ayBE9z6lkQAK2yrSUv1+rq8BT/tiI5C/rKE7rmiqiAfojtNYZRhzo5HrulccQ==", + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.14.tgz", + "integrity": "sha512-IeYigPur/MvESNDo43Z+Z5UvlcEVnt0dDZmnw1odi9X2Th1R3bpGyOZsHXb9bp1pFecOpRUuoMG5xdID2TwwOg==", "dev": true, "dependencies": { "@storybook/csf": "^0.0.1", @@ -9212,29 +9078,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/express": { "version": "4.18.2", "license": "MIT", @@ -9403,8 +9246,9 @@ }, "node_modules/fb-watchman": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } @@ -9535,6 +9379,70 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/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==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/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==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-up": { "version": "5.0.0", "dev": true, @@ -9568,9 +9476,9 @@ "license": "ISC" }, "node_modules/flow-parser": { - "version": "0.216.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.216.1.tgz", - "integrity": "sha512-wstw46/C/8bRv/8RySCl15lK376j8DHxm41xFjD9eVL+jSS1UmVpbdLdA0LzGuS2v5uGgQiBLEj6mgSJQwW+MA==", + "version": "0.218.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.218.0.tgz", + "integrity": "sha512-mk4e7UK4P/W3tjrJyto6oxPuCjwvRMyzBh72hTl8T0dOcTzkP0M2JJHpncgyhKphMFi9pnjwHfc8e0oe4Uk3LA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -9602,9 +9510,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==", "dev": true, "dependencies": { "asynckit": "^0.4.0", @@ -9623,15 +9531,16 @@ } }, "node_modules/fraction.js": { - "version": "4.2.0", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", + "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", "dev": true, - "license": "MIT", "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fresh": { @@ -9739,6 +9648,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.1", "license": "MIT", @@ -9772,8 +9690,9 @@ }, "node_modules/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -9802,9 +9721,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -9813,18 +9732,18 @@ } }, "node_modules/giget": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.2.tgz", - "integrity": "sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.3.tgz", + "integrity": "sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==", "dev": true, "dependencies": { - "colorette": "^2.0.19", + "colorette": "^2.0.20", "defu": "^6.1.2", - "https-proxy-agent": "^5.0.1", + "https-proxy-agent": "^7.0.2", "mri": "^1.2.0", - "node-fetch-native": "^1.0.2", - "pathe": "^1.1.0", - "tar": "^6.1.13" + "node-fetch-native": "^1.4.0", + "pathe": "^1.1.1", + "tar": "^6.2.0" }, "bin": { "giget": "dist/cli.mjs" @@ -9948,8 +9867,9 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -10115,16 +10035,16 @@ } }, "node_modules/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==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dev": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -10196,25 +10116,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "dev": true, @@ -10445,15 +10346,6 @@ "node": ">=8" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -10710,648 +10602,170 @@ "node_modules/isexe": { "version": "2.0.0", "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.5.0", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "ISC" }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/jest-regex-util": { - "version": "29.4.3", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve": { - "version": "29.5.0", + "node_modules/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==", "dev": true, - "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "@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" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.5.0", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/jest-runner": { - "version": "29.5.0", + "node_modules/istanbul-lib-report": { + "version": "3.0.0", "dev": true, - "license": "MIT", - "peer": true, + "license": "BSD-3-Clause", "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-runtime": { - "version": "29.5.0", + "node_modules/istanbul-reports": { + "version": "3.1.5", "dev": true, - "license": "MIT", - "peer": true, + "license": "BSD-3-Clause", "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-snapshot": { - "version": "29.5.0", + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest-util": { - "version": "29.5.0", + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-validate": { - "version": "29.5.0", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher": { - "version": "29.5.0", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker": { - "version": "29.5.0", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", - "jest-util": "^29.5.0", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -11361,8 +10775,9 @@ }, "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", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11572,8 +10987,9 @@ }, "node_modules/kleur": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -11605,8 +11021,9 @@ }, "node_modules/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -11683,11 +11100,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "dev": true, @@ -11736,6 +11148,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, "node_modules/lower-case": { "version": "2.0.2", "dev": true, @@ -11805,8 +11226,9 @@ }, "node_modules/makeerror": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -12034,6 +11456,18 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, + "node_modules/mlly": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" + } + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -12156,8 +11590,9 @@ }, "node_modules/node-int64": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true }, "node_modules/node-releases": { "version": "2.0.13", @@ -12423,8 +11858,9 @@ }, "node_modules/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -12537,6 +11973,15 @@ "dev": true, "license": "MIT" }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/peek-stream": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", @@ -12586,62 +12031,26 @@ } }, "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "find-up": "^5.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", "dev": true, - "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" } }, "node_modules/polished": { @@ -12656,9 +12065,9 @@ } }, "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -12802,9 +12211,9 @@ } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.4.tgz", - "integrity": "sha512-QZzzB1bID6qPsKHTeA9qPo1APmmxfFrA5DD3LQ+vbTmAnY40eJI7t9Q1ocqel2EKMWNPLJqdTDWZj1hKYgqSgg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.5.tgz", + "integrity": "sha512-voy0CjWv/CM8yeaduv5ZwovovpTGMR5LbzlhGF+LtEvMJt9wBeVTVnW781hL38R/RcDXCJwN2rolsgr94B/n0Q==", "dev": true, "engines": { "node": ">=14.21.3" @@ -12874,11 +12283,12 @@ } }, "node_modules/pretty-format": { - "version": "29.5.0", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -12888,8 +12298,9 @@ }, "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==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -12930,8 +12341,9 @@ }, "node_modules/prompts": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -13088,22 +12500,6 @@ "async-limiter": "~1.0.0" } }, - "node_modules/pure-rand": { - "version": "6.0.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT", - "peer": true - }, "node_modules/qs": { "version": "6.11.0", "license": "BSD-3-Clause", @@ -13258,8 +12654,9 @@ }, "node_modules/react-is": { "version": "18.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, "node_modules/react-refresh": { "version": "0.14.0", @@ -13659,37 +13056,16 @@ "node_modules/resolve": { "version": "1.22.2", "license": "MIT", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { @@ -13702,19 +13078,12 @@ }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -13851,9 +13220,9 @@ } }, "node_modules/selenium-webdriver": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.12.0.tgz", - "integrity": "sha512-zvPzmTsky6WfO6+BGMj2mCJsw7qKnfQONur2b+pGn8jeTiC+WAUOthZOnaK+HkX5wiU6L4uoMF+JIcOVstp25A==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.13.0.tgz", + "integrity": "sha512-8JS0h5E0Sq7gNfbGg8LVaQ+Eqek97tvOONn3Jmy+NiWfb12WYpftz4VTC4D2JT4wakdG6VUzGKpA8cFGg0IjkA==", "dependencies": { "jszip": "^3.10.1", "tmp": "^0.2.1", @@ -13931,34 +13300,6 @@ "version": "2.1.3", "license": "MIT" }, - "node_modules/serve-favicon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", - "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", - "dev": true, - "dependencies": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-favicon/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/serve-favicon/node_modules/safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, "node_modules/serve-static": { "version": "1.15.0", "license": "MIT", @@ -14034,6 +13375,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/signal-exit": { "version": "3.0.7", "dev": true, @@ -14066,8 +13413,9 @@ }, "node_modules/sisteransi": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true }, "node_modules/slash": { "version": "3.0.0", @@ -14169,10 +13517,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, - "license": "MIT", - "peer": true, + "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==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -14219,15 +13566,16 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "node_modules/sprintf-js": { "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "node_modules/stack-generator": { "version": "2.0.10", @@ -14244,24 +13592,11 @@ "node": "*" } }, - "node_modules/stack-utils": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true }, "node_modules/stackframe": { "version": "1.3.4", @@ -14298,6 +13633,12 @@ "node": ">= 0.8" } }, + "node_modules/std-env": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", + "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", + "dev": true + }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "dev": true, @@ -14316,12 +13657,12 @@ "dev": true }, "node_modules/storybook": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.4.1.tgz", - "integrity": "sha512-b90jq0CYqBMl2JAbC1lInGAoadkPkeGg4Vh8C9Bv7dGhl6M9uei3yEMQTDrj3HvCsktdeZqztGfrkGs2scK+LA==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.4.6.tgz", + "integrity": "sha512-YkFSpnR47j5zz7yElA+2axLjXN7K7TxDGJRHHlqXmG5iQ0PXzmjrj2RxMDKFz4Ybp/QjEUoJ4rx//ESEY0Nb5A==", "dev": true, "dependencies": { - "@storybook/cli": "7.4.1" + "@storybook/cli": "7.4.6" }, "bin": { "sb": "index.js", @@ -14353,19 +13694,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/string-width": { "version": "4.2.3", "dev": true, @@ -14418,15 +13746,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "dev": true, @@ -14457,14 +13776,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/strnum": { "version": "1.0.5", "license": "MIT" }, "node_modules/styled-components": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.0.7.tgz", - "integrity": "sha512-xIwWuiRMYR43mskVsW9MGTRjSo7ol4bcVjT595fGUp3OLBJOlOgaiKaxsHdC4a2HqWKqKnh0CmcRbk5ogyDjTg==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.0.8.tgz", + "integrity": "sha512-AwI02MTWZwqjzfXgR5QcbmcSn5xVjY4N2TLjSuYnmuBGF3y7GicHz3ysbpUq2EMJP5M8/Nc22vcmF3V3WNZDFA==", "dependencies": { "@babel/cli": "^7.21.0", "@babel/core": "^7.21.0", @@ -14867,6 +14198,30 @@ "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", "dev": true }, + "node_modules/tinybench": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tmp": { "version": "0.2.1", "license": "MIT", @@ -14879,8 +14234,9 @@ }, "node_modules/tmpl": { "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true }, "node_modules/to-fast-properties": { "version": "2.0.0", @@ -14964,56 +14320,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/ts-jest": { - "version": "29.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest-resolver": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-resolve": "^29.5.0" - } - }, "node_modules/ts-mixer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", @@ -15091,19 +14397,19 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "3.12.9", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.9.tgz", - "integrity": "sha512-N9Cpuiy55IcemQ2kouH1ZqDvjUa31mkhIYmnJKnvDp0sLQrK9MUrRuN/XzW70iTk5a2kX2A63wLYWORwa34vug==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.13.0.tgz", + "integrity": "sha512-rjmRpTu3as/5fjNq/kOkOtihgLxuIz6pbKdj9xwP4J5jOLkBxw/rjN5ANw+KyrrOXV5uB7HC8+SrrSJxT65y+A==", "dependencies": { - "@esbuild-kit/cjs-loader": "^2.4.2", - "@esbuild-kit/core-utils": "^3.3.0", - "@esbuild-kit/esm-loader": "^2.6.1" + "esbuild": "~0.18.20", + "get-tsconfig": "^4.7.2", + "source-map-support": "^0.5.21" }, "bin": { - "tsx": "dist/cli.js" + "tsx": "dist/cli.mjs" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" } }, "node_modules/twin.macro": { @@ -15139,9 +14445,9 @@ }, "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==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=4" } @@ -15188,6 +14494,12 @@ "node": ">=14.17" } }, + "node_modules/ufo": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", + "integrity": "sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==", + "dev": true + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -15570,9 +14882,9 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", + "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -15624,10 +14936,123 @@ } } }, + "node_modules/vite-node": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.7.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/magic-string": { + "version": "0.30.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", + "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/walker": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -15746,6 +15171,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/winston": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", @@ -15826,8 +15267,9 @@ }, "node_modules/write-file-atomic": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -15863,6 +15305,15 @@ "node": ">=0.4.0" } }, + "node_modules/xstate": { + "version": "4.38.2", + "resolved": "https://registry.npmjs.org/xstate/-/xstate-4.38.2.tgz", + "integrity": "sha512-Fba/DwEPDLneHT3tbJ9F3zafbQXszOlyCJyQqqdzmtlY/cwE2th462KK48yaANf98jHlP6lJvxfNtN0LFKXPQg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/xstate" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -15891,32 +15342,6 @@ "node": ">= 14" } }, - "node_modules/yargs": { - "version": "17.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -15947,13 +15372,21 @@ } }, "node_modules/zod": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", - "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==", + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/zod-error": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/zod-error/-/zod-error-1.5.0.tgz", + "integrity": "sha512-zzopKZ/skI9iXpqCEPj+iLCKl9b88E43ehcU+sbRoHuwGd9F1IDVGQ70TyO6kmfiRL1g4IXkjsXK+g1gLYl4WQ==", + "dependencies": { + "zod": "^3.20.2" + } + }, "packages/backend": { "name": "@discord-plays-pokemon/backend", "version": "1.0.0", @@ -15965,26 +15398,25 @@ "express": "^4.18.2", "lodash": "4.17.21", "rxjs": "^7.8.1", - "selenium-webdriver": "^4.12.0", + "selenium-webdriver": "^4.13.0", "socket.io": "^4.7.2", "ts-pattern": "^5.0.5", - "tsx": "^3.12.9", + "tsx": "^3.13.0", "winston": "^3.10.0", - "zod": "^3.22.2" + "xstate": "^4.38.2", + "zod": "^3.22.4", + "zod-error": "^1.5.0" }, "devDependencies": { - "@tsconfig/recommended": "1.0.2", - "@types/express": "^4.17.17", - "@types/jest": "^29.5.4", - "@types/lodash": "^4.14.198", - "@types/node": "^20.6.0", - "@types/selenium-webdriver": "^4.1.16", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "eslint": "^8.49.0", + "@tsconfig/recommended": "1.0.3", + "@types/express": "^4.17.18", + "@types/lodash": "^4.14.199", + "@types/node": "^20.8.2", + "@types/selenium-webdriver": "^4.1.17", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "eslint": "^8.50.0", "eslint-config-prettier": "^9.0.0", - "ts-jest": "^29.1.1", - "ts-jest-resolver": "^2.0.1", "ts-node": "^10.9.1", "tslib": "^2.6.2", "typescript": "5.2.2" @@ -15996,24 +15428,19 @@ "dependencies": { "lodash": "4.17.21", "ts-pattern": "^5.0.5", - "zod": "^3.22.2" + "zod": "^3.22.4" }, "devDependencies": { - "@tsconfig/recommended": "1.0.2", - "@types/lodash": "^4.14.198", - "@types/node": "^20.6.0", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "eslint": "^8.49.0", + "@tsconfig/recommended": "1.0.3", + "@types/lodash": "^4.14.199", + "@types/node": "^20.8.2", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "eslint": "^8.50.0", "eslint-config-prettier": "^9.0.0", "typescript": "5.2.2" } }, - "packages/common/node_modules/@tsconfig/recommended": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, "packages/common/node_modules/lodash": { "version": "4.17.21", "license": "MIT" @@ -16023,56 +15450,56 @@ "version": "1.0.0", "dependencies": { "@discord-plays-pokemon/common": "1.0.0", - "@tanstack/react-query": "^4.35.0", + "@tanstack/react-query": "^4.35.7", "keyboardjs": "^2.7.0", "lodash": "^4.17.21", "react": "^18.2.0", "react-dom": "^18.2.0", "react-use": "^17.4.0", "socket.io-client": "^4.7.2", - "styled-components": "^6.0.7", + "styled-components": "^6.0.8", "ts-pattern": "^5.0.5", - "zod": "^3.22.2" + "zod": "^3.22.4" }, "devDependencies": { "@iconify-json/carbon": "^1.1.21", "@iconify-json/mdi": "^1.1.54", - "@iconify/json": "^2.2.114", - "@storybook/addon-essentials": "^7.4.1", - "@storybook/addon-interactions": "^7.4.1", - "@storybook/addon-links": "^7.4.1", - "@storybook/blocks": "^7.4.1", - "@storybook/react": "^7.4.1", - "@storybook/react-vite": "^7.4.1", - "@storybook/testing-library": "^0.2.0", + "@iconify/json": "^2.2.124", + "@storybook/addon-essentials": "^7.4.6", + "@storybook/addon-interactions": "^7.4.6", + "@storybook/addon-links": "^7.4.6", + "@storybook/blocks": "^7.4.6", + "@storybook/react": "^7.4.6", + "@storybook/react-vite": "^7.4.6", + "@storybook/testing-library": "^0.2.2", "@svgr/core": "^8.1.0", "@svgr/plugin-jsx": "^8.1.0", "@tailwindcss/forms": "^0.5.6", - "@tanstack/eslint-plugin-query": "^4.34.1", - "@types/lodash": "^4.14.198", - "@types/react": "^18.2.21", - "@types/react-dom": "^18.2.7", - "@types/styled-components": "^5.1.27", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "@vitejs/plugin-react": "^4.0.4", - "@vitejs/plugin-react-swc": "^3.3.2", - "autoprefixer": "^10.4.15", + "@tanstack/eslint-plugin-query": "^4.36.0", + "@types/lodash": "^4.14.199", + "@types/react": "^18.2.25", + "@types/react-dom": "^18.2.10", + "@types/styled-components": "^5.1.28", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "@vitejs/plugin-react": "^4.1.0", + "@vitejs/plugin-react-swc": "^3.4.0", + "autoprefixer": "^10.4.16", "babel-plugin-macros": "^3.1.0", "babel-plugin-styled-components": "^2.1.4", - "eslint": "^8.49.0", + "eslint": "^8.50.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", - "eslint-plugin-storybook": "^0.6.13", - "postcss": "^8.4.29", + "eslint-plugin-storybook": "^0.6.14", + "postcss": "^8.4.31", "prop-types": "^15.8.1", - "storybook": "^7.4.1", + "storybook": "^7.4.6", "tailwindcss": "^3.3.3", "twin.macro": "^3.4.0", "typescript": "^5.2.2", "unplugin-fonts": "^1.0.3", "unplugin-icons": "^0.17.0", - "vite": "^4.4.9" + "vite": "^4.4.11" } }, "packages/test": { diff --git a/package.json b/package.json index 378adf6..3727aea 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "scripts": { "start": "npx tsx packages/backend/src/index.ts", "build": "npm run build --workspaces", - "test": "npm run test --workspaces", + "test": "npx vitest --coverage", "prettier": "prettier .", "prettier:fix": "prettier -w ." }, @@ -15,7 +15,8 @@ ], "devDependencies": { "prettier": "^3.0.3", - "prettier-plugin-tailwindcss": "^0.5.4" + "prettier-plugin-tailwindcss": "^0.5.5", + "vitest": "^0.34.6" }, "engineStrict": true } diff --git a/packages/backend/.eslintignore b/packages/backend/.eslintignore index f37b75f..c42fb5a 100644 --- a/packages/backend/.eslintignore +++ b/packages/backend/.eslintignore @@ -2,3 +2,4 @@ dist node_modules coverage ui/ +*.typegen* diff --git a/packages/backend/Earthfile b/packages/backend/Earthfile index 599233c..2d9dd7d 100644 --- a/packages/backend/Earthfile +++ b/packages/backend/Earthfile @@ -31,6 +31,5 @@ build: test: FROM +src - COPY jest* . RUN npm run test SAVE ARTIFACT coverage AS LOCAL coverage diff --git a/packages/backend/jest.config.ts b/packages/backend/jest.config.ts deleted file mode 100644 index 8cf5fc7..0000000 --- a/packages/backend/jest.config.ts +++ /dev/null @@ -1,195 +0,0 @@ -/* - * For a detailed explanation regarding each configuration property and type check, visit: - * https://jestjs.io/docs/configuration - */ - -export default { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/tmp/jest_rs", - - // Automatically clear mock calls, instances, contexts and results before every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - collectCoverage: true, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: undefined, - - // The directory where Jest should output its coverage files - coverageDirectory: "coverage", - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // Indicates which provider should be used to instrument code for coverage - coverageProvider: "v8", - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // The default configuration for fake timers - // fakeTimers: { - // "enableGlobally": false - // }, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - // moduleFileExtensions: [ - // "js", - // "mjs", - // "cjs", - // "jsx", - // "ts", - // "tsx", - // "json", - // "node" - // ], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - preset: "ts-jest", - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state before every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - resolver: "ts-jest-resolver", - - // Automatically restore mock state and implementation before every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: "node", - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jest-circus/runner", - - // A map from regular expressions to paths to transformers - // transform: undefined, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/", - // "\\.pnp\\.[^\\/]+$" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: undefined, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, -}; diff --git a/packages/backend/package.json b/packages/backend/package.json index a68f733..8078b9b 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -12,9 +12,7 @@ "lint:fix": "npm run lint:eslint:fix", "lint:check": "npm run lint:eslint:check", "lint:eslint:check": "npx eslint .", - "lint:eslint:fix": "npx eslint . --fix", - "test": "npx jest", - "test:watch": "npx jest --watch" + "lint:eslint:fix": "npx eslint . --fix" }, "dependencies": { "@d6v/zconf": "^0.0.4", @@ -24,26 +22,25 @@ "express": "^4.18.2", "lodash": "4.17.21", "rxjs": "^7.8.1", - "selenium-webdriver": "^4.12.0", + "selenium-webdriver": "^4.13.0", "socket.io": "^4.7.2", "ts-pattern": "^5.0.5", - "tsx": "^3.12.9", + "tsx": "^3.13.0", "winston": "^3.10.0", - "zod": "^3.22.2" + "xstate": "^4.38.2", + "zod": "^3.22.4", + "zod-error": "^1.5.0" }, "devDependencies": { - "@tsconfig/recommended": "1.0.2", - "@types/express": "^4.17.17", - "@types/jest": "^29.5.4", - "@types/lodash": "^4.14.198", - "@types/node": "^20.6.0", - "@types/selenium-webdriver": "^4.1.16", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "eslint": "^8.49.0", + "@tsconfig/recommended": "1.0.3", + "@types/express": "^4.17.18", + "@types/lodash": "^4.14.199", + "@types/node": "^20.8.2", + "@types/selenium-webdriver": "^4.1.17", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "eslint": "^8.50.0", "eslint-config-prettier": "^9.0.0", - "ts-jest": "^29.1.1", - "ts-jest-resolver": "^2.0.1", "ts-node": "^10.9.1", "tslib": "^2.6.2", "typescript": "5.2.2" diff --git a/packages/backend/src/browser/discord.ts b/packages/backend/src/browser/discord.ts deleted file mode 100644 index c041510..0000000 --- a/packages/backend/src/browser/discord.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { By, WebDriver, until } from "selenium-webdriver"; -import { wait } from "../util.js"; -import { logger } from "../logger.js"; -import { getConfig } from "../config/index.js"; - -export async function setupDiscord(driver: WebDriver) { - if (await isLoggedIn(driver)) { - logger.info("already logged in"); - } else { - logger.info("logged in"); - await login(driver); - } - await updateSettings(driver); - await navigateToTextChannel(driver); - await joinVoiceChat(driver); - await shareScreen(driver); -} - -async function isLoggedIn(driver: WebDriver): Promise { - logger.info("going to main app page"); - const appPage = "https://discord.com/app"; - await driver.get(appPage); - logger.info("waiting for redirect"); - await driver.wait(async (driver) => { - return (await driver.getCurrentUrl()) != appPage; - }); - const url = await driver.getCurrentUrl(); - if (url.startsWith("https://discord.com/login")) { - logger.info("not logged in"); - return false; - } else { - logger.info("already logged in"); - return true; - } -} - -async function login(driver: WebDriver) { - logger.info("logging in via website"); - await driver.get("https://discord.com/login"); - - logger.info("typing email"); - const emailInput = driver.wait(until.elementLocated(By.css("input[name=email]"))); - await emailInput.sendKeys(getConfig().stream.userbot.username); - - logger.info("typing password"); - const passwordInput = driver.wait(until.elementLocated(By.css("input[name=password]"))); - await passwordInput.sendKeys(getConfig().stream.userbot.password); - - logger.info("click submit button"); - const submitButton = driver.wait(until.elementLocated(By.css("button[type=submit]"))); - await submitButton.click(); - - logger.info("waiting for redirect"); - await driver.wait(until.urlContains("https://discord.com/channels/")); - logger.info("logged in"); -} - -async function navigateToTextChannel(driver: WebDriver) { - logger.info("navigating to text channel"); - const textChannelUrl = `https://discord.com/channels/${getConfig().server_id}/${ - getConfig().game.commands.channel_id - }`; - await driver.get(textChannelUrl); - logger.info("waiting for text channel to be listed"); - const textChat = await driver.wait( - until.elementLocated(By.css(`a[data-list-item-id="channels___${getConfig().game.commands.channel_id}"]`)), - ); - const delay = 5000; - logger.info(`waiting ${delay}ms for text channel to become clickable`); - await wait(delay); - await textChat.click(); - logger.info("navigated to text channel"); -} - -async function updateSettings(driver: WebDriver) { - logger.info("executing script to update discord settings"); - // https://stackoverflow.com/questions/52509440/discord-window-localstorage-is-undefined-how-to-get-access-to-the-localstorage - await driver.executeScript(` - (() => { - function getLocalStoragePropertyDescriptor() { - const iframe = document.createElement('iframe'); - document.head.append(iframe); - const pd = Object.getOwnPropertyDescriptor(iframe.contentWindow, 'localStorage'); - iframe.remove(); - return pd; - } - - Object.defineProperty(window, 'localStorage', getLocalStoragePropertyDescriptor()) - - const currentSettings = JSON.parse(window.localStorage.getItem("MediaEngineStore")); - currentSettings.default.outputVolume = 0; - currentSettings.stream.outputVolume = 0; - currentSettings.default.modeOptions.threshold = -100; - currentSettings.stream.modeOptions.threshold = -100; - currentSettings.default.echoCancellation = false; - currentSettings.stream.echoCancellation = false; - currentSettings.default.automaticGainControl = false; - currentSettings.stream.automaticGainControl = false; - window.localStorage.setItem("MediaEngineStore", JSON.stringify(currentSettings)); - - window.localStorage.setItem("hotspots", '{"_state":{"hiddenHotspots":["VOICE_PANEL_INTRODUCTION","VOICE_CALL_FEEDBACK"],"hotspotOverrides":{}},"_version":1}'); - })(); - `); - logger.info("refreshing page to update settings"); - await driver.navigate().refresh(); -} - -export async function joinVoiceChat(driver: WebDriver) { - logger.info("trying to join voice chat"); - const voiceChannelSelector = `a[data-list-item-id="channels___${getConfig().stream.channel_id}"]`; - const voiceChatButton = await driver.wait(until.elementLocated(By.css(voiceChannelSelector))); - logger.info("joined voice chat"); - await voiceChatButton.click(); -} - -export async function shareScreen(driver: WebDriver) { - logger.info("trying to share screen"); - const videoShareSelector = 'button[aria-label="Share Your Screen"]'; - const videoShareButton = await driver.wait(until.elementLocated(By.css(videoShareSelector))); - logger.info("clicking sharing screen button"); - await videoShareButton.click(); -} - -export async function stopShareScreen(driver: WebDriver) { - logger.info("trying to stop screen sharing"); - const videoShareSelector = 'button[aria-label="Stop Streaming"]'; - const videoShareButton = await driver.wait(until.elementLocated(By.css(videoShareSelector))); - logger.info("clicking stop sharing screen button"); - await videoShareButton.click(); -} - -export async function disconnect(driver: WebDriver) { - logger.info("trying to disconnect"); - await driver.switchTo().window((await driver.getAllWindowHandles())[0]); - const disconnectSelector = 'button[aria-label="Disconnect"]'; - const disconnectButton = await driver.wait(until.elementLocated(By.css(disconnectSelector))); - logger.info("clicking disconnect button"); - await disconnectButton.click(); -} diff --git a/packages/backend/src/browser/index.ts b/packages/backend/src/browser/index.ts deleted file mode 100644 index c0025a1..0000000 --- a/packages/backend/src/browser/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { WebDriver } from "selenium-webdriver"; -import { focusContentFrame, importSave, setupGame } from "./game.js"; -import { setupDiscord } from "./discord.js"; -import { getConfig } from "../config/index.js"; - -export async function start(gameDriver: WebDriver, streamDriver: WebDriver) { - if (getConfig().stream.enabled) { - await setupDiscord(streamDriver); - } - if (getConfig().game.enabled) { - await setupGame(gameDriver); - if (getConfig().game.saves.auto_import.enabled) { - await importSave(gameDriver); - } - // await fullscreenGame(driver); - await focusContentFrame(gameDriver); - } -} diff --git a/packages/backend/src/config/__snapshots__/index.test.ts.snap b/packages/backend/src/config/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000..f6316e0 --- /dev/null +++ b/packages/backend/src/config/__snapshots__/index.test.ts.snap @@ -0,0 +1,19 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`config > should not accept the default configuration > the configuration should require non-empty fields 1`] = ` +[Error: Your configuration at /Users/jerred/git/discord-plays-pokemon/config.example.toml _is_ valid TOML, but it is not a valid configuration for this application. + +Code: too_small ~ Path: server_id ~ Message: String must contain at least 1 character(s) +Code: too_small ~ Path: bot.discord_token ~ Message: String must contain at least 1 character(s) +Code: too_small ~ Path: bot.application_id ~ Message: String must contain at least 1 character(s) +Code: too_small ~ Path: bot.notifications.channel_id ~ Message: String must contain at least 1 character(s) +Code: too_small ~ Path: stream.channel_id ~ Message: String must contain at least 1 character(s) +Code: too_small ~ Path: stream.userbot.id ~ Message: String must contain at least 1 character(s) +Code: too_small ~ Path: stream.userbot.username ~ Message: String must contain at least 1 character(s) +Code: too_small ~ Path: stream.userbot.password ~ Message: String must contain at least 1 character(s) +Code: too_small ~ Path: game.commands.channel_id ~ Message: String must contain at least 1 character(s) + +For more information, read the setup guide (https://docs.discord-plays-pokemon.com/user/) +If you are unable to resolve this error, please open an issue (https://github.com/shepherdjerred/discord-plays-pokemon/issues) +] +`; diff --git a/packages/backend/src/config/index.test.ts b/packages/backend/src/config/index.test.ts index d7636d9..067c28e 100644 --- a/packages/backend/src/config/index.test.ts +++ b/packages/backend/src/config/index.test.ts @@ -1,7 +1,12 @@ +import { describe, it, expect } from "vitest"; import { getConfig } from "./index.js"; describe("config", () => { - it("should not load the default configuration", () => { - expect(() => getConfig("../../config.example.toml")).toThrow(); + it("should not accept the default configuration", () => { + try { + getConfig("config.example.toml"); + } catch (e) { + expect(e).toMatchSnapshot("the configuration should require non-empty fields"); + } }); }); diff --git a/packages/backend/src/config/index.ts b/packages/backend/src/config/index.ts index 8ab4678..093d709 100644 --- a/packages/backend/src/config/index.ts +++ b/packages/backend/src/config/index.ts @@ -2,11 +2,10 @@ import { ztomlSync } from "@d6v/zconf"; import { ConfigSchema } from "./schema.js"; import { resolve } from "path"; import { addErrorLinks, assertPathExists } from "../util.js"; +import { generateErrorMessage } from "zod-error"; import { ZodError } from "zod"; -import { logger } from "../logger.js"; -export function getConfig(file?: string) { - file = file || "config.toml"; +export function getConfig(file: string = "config.toml") { const path = resolve(file); assertPathExists(path, "config file"); @@ -16,19 +15,25 @@ export function getConfig(file?: string) { } catch (e) { if (e instanceof Error) { if (e.name === "SyntaxError") { - logger.error( + throw new Error( `Your configuration at ${path} _is not_ valid TOML.\nCorrect your config to continue\nA TOML validator may be useful, such as an IDE plugin, or https://www.toml-lint.com/\n`, + { cause: e }, ); - throw Error(); } - if (e.name === "ZodError") { - const errors = JSON.parse(e.message) as ZodError[]; - logger.error( - `Your configuration at ${path} _is_ valid TOML, but it is not a valid configuration for this application.\nThe following problems were found:\n\n`, - errors, - addErrorLinks(""), + if (e instanceof ZodError) { + throw new Error( + addErrorLinks( + `Your configuration at ${path} _is_ valid TOML, but it is not a valid configuration for this application.\n\n${generateErrorMessage( + e.issues, + { + delimiter: { + error: "\n", + }, + }, + )}`, + ), + { cause: e }, ); - throw Error(); } } else { throw new Error(`Your configuration is invalid.`, { cause: e }); diff --git a/packages/backend/src/discord/bot/machine.ts b/packages/backend/src/discord/bot/machine.ts new file mode 100644 index 0000000..66b5bad --- /dev/null +++ b/packages/backend/src/discord/bot/machine.ts @@ -0,0 +1,121 @@ +import { Client, Events, GatewayIntentBits, Message, VoiceState } from "discord.js"; +import { assign, createMachine } from "xstate"; +import { logger } from "../../logger.js"; +import { registerSlashCommands } from "./slashCommands/rest.js"; +import { help } from "./slashCommands/commands/help.js"; + +export function createBotMachine({ + botToken, + areScreenshotsEnabled, +}: { + botToken: string; + areScreenshotsEnabled: boolean; +}) { + return createMachine( + { + /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOgBsB7KKAqAfQIGIILCSCA3CgazBLSx5CpStVoN8CThUzoALrlYBtAAwBdVWsSgADhVi4FrbSAAeiAEwqAzCQCMKuwFYAbBacAaEAE9EADlsVC2sAFmsAdicAXyivARwCYnIqGnx6JjAAJ0yKTJIdMnkAM1zUfgwE4WSxNIkpfC5ZI3xNTRM9A2aTcwQrWwdnN08fRDtwlxIQ8dd3GNiQfAoIOBN4oWJ2-UNFfG7EAFoXL18EQ5i4ivWRFPECTc6dvYQQi2PEAE4nEkjzkDXE0i4WB0LI5TL3bbGJBmRChCz2cJ2PyRN4IOzvcIkPp2Wbzf5VMhAuRgfC0CFdaE9OEIpEokYIPx2EjROZAA */ + id: "Discord I/O Machine", + predictableActionArguments: true, + strict: true, + tsTypes: {} as import("./machine.typegen.d.ts").Typegen0, + schema: { + events: {} as + | { type: "screenshot" } + | { type: "message"; data: Message } + | { type: "voice_state_update"; data: { oldState: VoiceState; newState: VoiceState } }, + context: {} as { client: Client | undefined }, + services: {} as { + login: { + data: Client; + }; + listen: { + data: undefined; + }; + }, + }, + context: { + client: undefined, + }, + initial: "logging_in", + states: { + error: { + type: "final", + }, + logging_in: { + invoke: { + src: "login", + onDone: { + target: "listening", + actions: "setClient", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + listening: { + invoke: { + src: "listen", + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + }, + }, + { + actions: { + setClient: (_content, event) => assign({ client: event.data }), + }, + services: { + login: async (): Promise => { + const client = new Client({ + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.MessageContent, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.GuildVoiceStates, + ], + }); + await client.login(botToken); + await registerSlashCommands({ botToken, areScreenshotsEnabled }); + return client; + }, + listen: + ({ client }, _event) => + (sendBack, _onReceive) => { + if (!client) { + throw Error(); + } + + client.on(Events.MessageCreate, (message) => { + sendBack({ type: "message", data: message }); + }); + + client.on(Events.VoiceStateUpdate, (oldState, newState) => { + sendBack({ type: "voice_state_update", data: { oldState, newState } }); + }); + + client.on(Events.InteractionCreate, async (interaction) => { + try { + if (!interaction.isChatInputCommand()) { + return; + } + switch (interaction.commandName) { + case "screenshot": + sendBack({ type: "screenshot" }); + break; + case "help": + await help(interaction); + } + } catch (e) { + logger.error(e); + } + }); + }, + }, + }, + ); +} diff --git a/packages/backend/src/discord/slashCommands/commands/help.ts b/packages/backend/src/discord/bot/slashCommands/commands/help.ts similarity index 95% rename from packages/backend/src/discord/slashCommands/commands/help.ts rename to packages/backend/src/discord/bot/slashCommands/commands/help.ts index 76f83e2..6266dc7 100644 --- a/packages/backend/src/discord/slashCommands/commands/help.ts +++ b/packages/backend/src/discord/bot/slashCommands/commands/help.ts @@ -1,7 +1,7 @@ import { CommandInteraction, SlashCommandBuilder, bold, channelMention, inlineCode, userMention } from "discord.js"; -import { a, b, down, left, right, select, start, up } from "../../../game/command/command.js"; -import { burst, hold, hold_b } from "../../../game/command/commandInput.js"; -import { getConfig } from "../../../config/index.js"; +import { a, b, down, left, right, select, start, up } from "../../../../game/command/command.js"; +import { burst, hold, hold_b } from "../../../../game/command/commandInput.js"; +import { getConfig } from "../../../../config/index.js"; export const helpCommand = new SlashCommandBuilder().setName("help").setDescription("View Pokébot help"); diff --git a/packages/backend/src/discord/bot/slashCommands/commands/screenshot.ts b/packages/backend/src/discord/bot/slashCommands/commands/screenshot.ts new file mode 100644 index 0000000..9a088d0 --- /dev/null +++ b/packages/backend/src/discord/bot/slashCommands/commands/screenshot.ts @@ -0,0 +1,44 @@ +import { + SlashCommandBuilder, + CommandInteraction, + AttachmentBuilder, + EmbedBuilder, + TextChannel, + channelMention, + userMention, + time, +} from "discord.js"; +import { WebDriver } from "selenium-webdriver"; +import { Buffer } from "buffer"; +import { getConfig } from "../../../../config/index.js"; + +export const screenshotCommand = new SlashCommandBuilder() + .setName("screenshot") + .setDescription("Take a screenshot and upload it to the chat"); + +// export function makeScreenshot(driver: WebDriver) { +// return async function screenshot(interaction: CommandInteraction) { +// const screenshot = await driver.takeScreenshot(); +// const buffer = Buffer.from(screenshot, "base64"); +// const date = new Date(); +// const attachment = new AttachmentBuilder(buffer, { +// name: "screenshot.png", +// description: `Screenshot of the Pokémon game at ${date.toISOString()}`, +// }); +// const embed = new EmbedBuilder().setTitle("Pokémon Screenshot").setImage("attachment://screenshot.png"); +// await interaction.reply({ +// content: `Screenshot sent to ${channelMention(getConfig().bot.notifications.channel_id)}`, +// ephemeral: true, +// }); +// const channel = client.channels.cache.get(getConfig().bot.notifications.channel_id); +// if (channel) { +// await (channel as TextChannel).send({ +// content: `Screenshot taken by ${userMention(interaction.user.id)} at ${time(date)}`, +// embeds: [embed], +// files: [attachment], +// }); +// } else { +// await interaction.reply({ ephemeral: true, content: "There was an error" }); +// } +// }; +// } diff --git a/packages/backend/src/discord/bot/slashCommands/rest.ts b/packages/backend/src/discord/bot/slashCommands/rest.ts new file mode 100644 index 0000000..b62bfa5 --- /dev/null +++ b/packages/backend/src/discord/bot/slashCommands/rest.ts @@ -0,0 +1,24 @@ +import { REST, Routes } from "discord.js"; +import { screenshotCommand } from "./commands/screenshot.js"; +import { helpCommand } from "./commands/help.js"; +import { logger } from "../../../logger.js"; + +export async function registerSlashCommands({ + botToken, + areScreenshotsEnabled, +}: { + botToken: string; + areScreenshotsEnabled: boolean; +}) { + const rest = new REST({ version: "10" }).setToken(botToken); + logger.info("registering commands"); + + let commands = [helpCommand.toJSON()]; + + if (areScreenshotsEnabled) { + logger.info("screenshot command is enabled"); + commands = [...commands, screenshotCommand.toJSON()]; + } + + await rest.put(Routes.applicationCommands(botToken), { body: commands }); +} diff --git a/packages/backend/src/discord/channelHandler.ts b/packages/backend/src/discord/channelHandler.ts deleted file mode 100644 index eab88d4..0000000 --- a/packages/backend/src/discord/channelHandler.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Events, GuildMember } from "discord.js"; -import client from "./client.js"; -import { getConfig } from "../config/index.js"; -import { logger } from "../logger.js"; - -export function handleChannelUpdate(updateFn: (participants: number) => Promise) { - client.on(Events.VoiceStateUpdate, async (oldState, newState) => { - logger.info("voice state update"); - const newChannel = newState.channelId; - const oldChannel = oldState.channelId; - const channelId = getConfig().stream.channel_id; - - if (newChannel === channelId || oldChannel === channelId) { - const channel = await client.channels.fetch(channelId); - if (channel?.isVoiceBased()) { - logger.info("calling updateFn"); - logger.info(JSON.stringify(channel.members)); - // it seems that the library has an incorrect type here - await updateFn(channel.members.filter((member) => member.id !== getConfig().stream.userbot.id).size); - } else { - logger.error("channel is not voice based"); - } - } - }); -} diff --git a/packages/backend/src/discord/client.ts b/packages/backend/src/discord/client.ts deleted file mode 100644 index 7d3c3ea..0000000 --- a/packages/backend/src/discord/client.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Client, GatewayIntentBits } from "discord.js"; -import { logger } from "../logger.js"; -import { getConfig } from "../config/index.js"; - -const client = new Client({ - intents: [ - GatewayIntentBits.Guilds, - GatewayIntentBits.MessageContent, - GatewayIntentBits.GuildMessages, - GatewayIntentBits.GuildVoiceStates, - ], -}); - -if (getConfig().bot.enabled) { - logger.info("discord bot is logging in"); - await client.login(getConfig().bot.discord_token); - logger.info("discord bot is logged in"); -} else { - logger.info("discord bot is disabled"); -} - -export default client; diff --git a/packages/backend/src/discord/messageHandler.ts b/packages/backend/src/discord/messageHandler.ts deleted file mode 100644 index 2ae9d79..0000000 --- a/packages/backend/src/discord/messageHandler.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Events, Message, VoiceChannel, channelMention } from "discord.js"; -import { parseChord, type Chord } from "../game/command/chord.js"; -import client from "./client.js"; -import { execute } from "./chordExecutor.js"; -import { isValid } from "./chordValidator.js"; -import { CommandInput } from "../game/command/commandInput.js"; -import { logger } from "../logger.js"; -import { getConfig } from "../config/index.js"; - -export let lastCommand = new Date(); - -export function handleMessages(fn: (commandInput: CommandInput) => Promise) { - logger.info("ready to handle commands"); - client.on(Events.MessageCreate, async (event) => { - try { - return handleMessage(event, fn); - } catch (error) { - logger.info(error); - } - }); -} - -async function handleMessage(event: Message, fn: (commandInput: CommandInput) => Promise) { - if (event.author.bot) { - return; - } - - if (event.channelId !== getConfig().game.commands.channel_id) { - return; - } - - const channel = client.channels.cache.get(getConfig().stream.channel_id); - if (!channel) { - await event.react("💀"); - return; - } - - if (!event.member || event.member.voice.channelId !== getConfig().stream.channel_id) { - await event.reply(`You have to be in ${channelMention(getConfig().stream.channel_id)} to play`); - return; - } - - const memberCount = (channel as VoiceChannel).members.filter((member) => { - return !member.user.bot; - }).size; - if (memberCount < getConfig().stream.minimum_in_channel) { - await event.reply( - `You can't play unless there are at least ${getConfig().stream.minimum_in_channel} ${ - getConfig().stream.minimum_in_channel === 1 ? "person" : "people" - } in ${channelMention(getConfig().stream.channel_id)} 😕`, - ); - return; - } - - let chord: Chord | undefined; - try { - chord = parseChord(event.content); - } catch { - await event.react("💀"); - return; - } - - if (!chord) { - logger.error(chord); - await event.react("❓"); - return; - } - - if (isValid(chord)) { - await execute(chord, fn); - await event.react(`👍`); - lastCommand = new Date(); - } else { - await event.react(`⛔`); - return; - } -} diff --git a/packages/backend/src/discord/slashCommands/commands/screenshot.ts b/packages/backend/src/discord/slashCommands/commands/screenshot.ts deleted file mode 100644 index 0f9b332..0000000 --- a/packages/backend/src/discord/slashCommands/commands/screenshot.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { - SlashCommandBuilder, - CommandInteraction, - AttachmentBuilder, - EmbedBuilder, - TextChannel, - channelMention, - userMention, - time, -} from "discord.js"; -import { WebDriver } from "selenium-webdriver"; -import { Buffer } from "buffer"; -import client from "../../client.js"; -import { getConfig } from "../../../config/index.js"; - -export const screenshotCommand = new SlashCommandBuilder() - .setName("screenshot") - .setDescription("Take a screenshot and upload it to the chat"); - -export function makeScreenshot(driver: WebDriver) { - return async function screenshot(interaction: CommandInteraction) { - const screenshot = await driver.takeScreenshot(); - const buffer = Buffer.from(screenshot, "base64"); - const date = new Date(); - const attachment = new AttachmentBuilder(buffer, { - name: "screenshot.png", - description: `Screenshot of the Pokémon game at ${date.toISOString()}`, - }); - const embed = new EmbedBuilder().setTitle("Pokémon Screenshot").setImage("attachment://screenshot.png"); - await interaction.reply({ - content: `Screenshot sent to ${channelMention(getConfig().bot.notifications.channel_id)}`, - ephemeral: true, - }); - - const channel = client.channels.cache.get(getConfig().bot.notifications.channel_id); - if (channel) { - await (channel as TextChannel).send({ - content: `Screenshot taken by ${userMention(interaction.user.id)} at ${time(date)}`, - embeds: [embed], - files: [attachment], - }); - } else { - await interaction.reply({ ephemeral: true, content: "There was an error" }); - } - }; -} diff --git a/packages/backend/src/discord/slashCommands/index.ts b/packages/backend/src/discord/slashCommands/index.ts deleted file mode 100644 index 1aa2993..0000000 --- a/packages/backend/src/discord/slashCommands/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Events } from "discord.js"; -import "./rest.js"; -import client from "../client.js"; -import { makeScreenshot } from "./commands/screenshot.js"; -import { WebDriver } from "selenium-webdriver"; -import { help } from "./commands/help.js"; -import { logger } from "../../logger.js"; - -export function handleSlashCommands(driver: WebDriver) { - logger.info("handling slash commands"); - client.on(Events.InteractionCreate, async (interaction) => { - try { - if (!interaction.isChatInputCommand()) { - return; - } - switch (interaction.commandName) { - case "start": - break; - case "screenshot": - await makeScreenshot(driver)(interaction); - break; - case "help": - await help(interaction); - } - } catch (e) { - logger.error(e); - } - }); -} diff --git a/packages/backend/src/discord/slashCommands/rest.ts b/packages/backend/src/discord/slashCommands/rest.ts deleted file mode 100644 index 9c54f31..0000000 --- a/packages/backend/src/discord/slashCommands/rest.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { REST, Routes } from "discord.js"; -import { screenshotCommand } from "./commands/screenshot.js"; -import { helpCommand } from "./commands/help.js"; -import { logger } from "../../logger.js"; -import { getConfig } from "../../config/index.js"; - -const rest = new REST({ version: "10" }).setToken(getConfig().bot.discord_token); - -export async function registerSlashCommands() { - logger.info("registering commands"); - try { - let commands = [helpCommand.toJSON()]; - - if (getConfig().bot.commands.screenshot.enabled) { - logger.info("screenshot command is enabled"); - commands = [...commands, screenshotCommand.toJSON()]; - } - - await rest.put(Routes.applicationCommands(getConfig().bot.application_id), { body: commands }); - } catch (error) { - logger.error(error); - } -} diff --git a/packages/backend/src/discord/stream/index.ts b/packages/backend/src/discord/stream/index.ts new file mode 100644 index 0000000..b6c6a6b --- /dev/null +++ b/packages/backend/src/discord/stream/index.ts @@ -0,0 +1,21 @@ +import { By, WebDriver, until } from "selenium-webdriver"; +import { wait } from "../../util.js"; +import { logger } from "../../logger.js"; +import { getConfig } from "../../config/index.js"; + +export async function navigateToTextChannel(driver: WebDriver) { + logger.info("navigating to text channel"); + const textChannelUrl = `https://discord.com/channels/${getConfig().server_id}/${ + getConfig().game.commands.channel_id + }`; + await driver.get(textChannelUrl); + logger.info("waiting for text channel to be listed"); + const textChat = await driver.wait( + until.elementLocated(By.css(`a[data-list-item-id="channels___${getConfig().game.commands.channel_id}"]`)), + ); + const delay = 5000; + logger.info(`waiting ${delay}ms for text channel to become clickable`); + await wait(delay); + await textChat.click(); + logger.info("navigated to text channel"); +} diff --git a/packages/backend/src/discord/stream/login.ts b/packages/backend/src/discord/stream/login.ts new file mode 100644 index 0000000..950fdca --- /dev/null +++ b/packages/backend/src/discord/stream/login.ts @@ -0,0 +1,46 @@ +import { WebDriver, until, By } from "selenium-webdriver"; +import { getConfig } from "../../config/index.js"; +import { logger } from "../../logger.js"; + +export async function isLoggedIn(driver: WebDriver): Promise { + logger.info("going to main app page"); + const appPage = "https://discord.com/app"; + await driver.get(appPage); + + logger.info("waiting for redirect"); + await driver.wait(async (driver) => { + return (await driver.getCurrentUrl()) != appPage; + }); + + const url = await driver.getCurrentUrl(); + if (url.startsWith("https://discord.com/login")) { + logger.info("not logged in"); + return false; + } else { + logger.info("already logged in"); + return true; + } +} + +export async function login(driver: WebDriver) { + logger.info("logging in via website"); + await driver.get("https://discord.com/login"); + + logger.info("typing email"); + const emailInput = driver.wait(until.elementLocated(By.css("input[name=email]"))); + await emailInput.sendKeys(getConfig().stream.userbot.username); + + logger.info("typing password"); + const passwordInput = driver.wait(until.elementLocated(By.css("input[name=password]"))); + await passwordInput.sendKeys(getConfig().stream.userbot.password); + + logger.info("click submit button"); + const submitButton = driver.wait(until.elementLocated(By.css("button[type=submit]"))); + await submitButton.click(); + + logger.info("waiting for redirect"); + await driver.wait(until.urlContains("https://discord.com/channels/")); + logger.info("logged in"); + + // TODO: persist login token +} diff --git a/packages/backend/src/discord/stream/machine.test.ts b/packages/backend/src/discord/stream/machine.test.ts new file mode 100644 index 0000000..a29bdcb --- /dev/null +++ b/packages/backend/src/discord/stream/machine.test.ts @@ -0,0 +1,60 @@ +import { describe, test } from "vitest"; + +import { interpret } from "xstate"; +import { streamMachine } from "./machine.js"; + +describe("states", () => { + test.skip( + "able to reach the ready state", + () => + new Promise((done) => { + const actor = interpret(streamMachine).onTransition((state) => { + if (state.matches("ready")) { + done(); + } + }); + actor.start(); + }), + 10000, + ); + + test.skip( + "able to reach the streaming state", + () => + new Promise((done) => { + const actor = interpret(streamMachine).onTransition((state) => { + if (state.matches("ready")) { + actor.send({ type: "start_stream" }); + } + if (state.matches("streaming")) { + done(); + } + }); + actor.start(); + }), + 25000, + ); + + test.skip( + "able to reach the streaming state", + () => + new Promise((done) => { + let hasStreamed = false; + const actor = interpret(streamMachine).onTransition((state) => { + if (state.matches("ready")) { + if (hasStreamed) { + done(); + } else { + actor.send({ type: "start_stream" }); + } + } + if (state.matches("streaming")) { + hasStreamed = true; + actor.send({ type: "end_stream" }); + } + }); + actor.start(); + }), + 25000, + ); +}); diff --git a/packages/backend/src/discord/stream/machine.ts b/packages/backend/src/discord/stream/machine.ts new file mode 100644 index 0000000..4111172 --- /dev/null +++ b/packages/backend/src/discord/stream/machine.ts @@ -0,0 +1,173 @@ +import { Builder, Browser, WebDriver } from "selenium-webdriver"; +import { Options } from "selenium-webdriver/firefox.js"; +import { assign, createMachine } from "xstate"; +import lodash from "lodash"; +import { getConfig } from "../../config/index.js"; +import { logger } from "../../logger.js"; +import { shareScreen } from "./stream.js"; +import { joinVoiceChat, disconnect } from "./voice.js"; +import { isLoggedIn, login } from "./login.js"; +import { updateSettings } from "./settings.js"; +import { navigateToTextChannel } from "./index.js"; + +export const streamMachine = createMachine( + { + /** @xstate-layout N4IgpgJg5mDOIC5QGUAuAnMBDAtgOgEtYB9WVLdVAgOygGIIB7asQ6gN0YGtW1NdCJMhSq0ENTgGMsVZgG0ADAF1FSxKAAOjWAVnV1IAB6IATAA4ALHgCcAdgUnbANgXWFzs7YA0IAJ6mzBTwAZgUwgEYAVk8zYJNw2wBfRJ8+bHwiYgAbRigoGihiGgZmVgluXgx0wWzc-Noi6nEORmk9VVUDLR09A2MEaNs8SISE6wszJwsLazMffwRQ4LxHJ0jrSItokymklJA0gUycvMhGkpY2Th48Q4ySE5gIRuapGQJ5ZU6kEG7dD-0P36bjMK2C6wstgsUQsLgs80QSxWznWm22u2SqSqRxI-AgvjowkopGxOG+mm0-2YfUQ4QSy3CwQswXBsycJniCIQJnGwx2kXs61skRMwXCmIOpLwRNEhTI-BwFzKLRud2l5EoBRJCterXenxUyi6lN6QNpMyGkIc9gULKhTK5PKceAca0sZlFkUiU0iErVYGoEC18vSSquFVuUoDQYaIdwuraAI6Rp+f1NoGBClBnvGUJhcMdjLwTmscRGwUs1g2Cl9+zVcZwBTo0e16XJvxNAJpCHCFrwVscYTtzPhfkQ1hMNmZ5nCHuZNfWfqlDabMtbuHbaa7Zp7U3CLtG5jdCl7czH3Isk9dkO9CS9qOS+2ojAgcAMd2NPW3GcQzn7mzWNYJgrKETC5SJ+2nOcWVLOIFCcJcFRqGUCk-KlAR-HsTCsLZYW9TZYk8S9HVsUFbBRMw70iBxbUQ6pjjqLUaDQ9MjEQS9llwoDPFsWcnCcEiyJRfjwhLUTez2LEkIY05nmY1NO2pHcoSselL3MeDwjsMDz0cITAKcUTrHEyE6JxYgwHQdBGHQFjvzYns4hCWwdiiFzvRvATzwrKxVm2BJL29awzPuYg8QWCkvyUzDwhrUF3FnWcQTMEYzwWHkINdSJgnGExohrCwQvVERg1JOzoocxlzBCJ1RWw+JnG8XTeL5NZ7yZLYxUkyUkOjUqFXKjCHNsHK8DUjlAkM7SuXpZE1iZAUPXcPKipXWhBu7USRWLCstOZWxxhrR07Fa7Lcvyr1CsfIA */ + id: "Stream", + description: "Manages the lifecycle of a Discord stream with the Chrome browser", + predictableActionArguments: true, + strict: true, + tsTypes: {} as import("./machine.typegen.d.ts").Typegen0, + schema: { + events: {} as { type: "start_stream" } | { type: "end_stream" }, + context: {} as { driver: WebDriver | undefined }, + services: {} as { + start: { + data: WebDriver; + }; + }, + }, + context: { + driver: undefined, + }, + initial: "starting", + states: { + starting: { + invoke: { + src: "start", + onError: { + target: "error", + actions: logger.error, + }, + onDone: { + target: "logging_in", + actions: "setDriver", + }, + }, + states: {}, + }, + + logging_in: { + invoke: { + src: async ({ driver }, _event) => { + if (driver) { + if (await isLoggedIn(driver)) { + logger.info("already logged in"); + } else { + logger.info("logged in"); + await login(driver); + } + } else { + throw Error("unreachable state"); + } + }, + onDone: { + target: "logged_in", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + + logged_in: { + invoke: { + src: async ({ driver }, _event) => { + if (driver) { + await updateSettings(driver); + await navigateToTextChannel(driver); + } else { + throw Error("unreachable state"); + } + }, + onDone: { + target: "ready", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + + error: { + type: "final", + }, + + ready: { + on: { + start_stream: { + target: "starting_stream", + }, + }, + }, + + starting_stream: { + invoke: { + src: async ({ driver }, _event) => { + if (driver) { + await joinVoiceChat(driver); + return await shareScreen(driver); + } else { + throw Error("unreachable state"); + } + }, + onDone: { + target: "streaming", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + + ending_stream: { + invoke: { + src: async ({ driver }, _event) => { + if (driver) { + return await disconnect(driver); + } else { + throw Error("unreachable state"); + } + }, + onDone: { + target: "ready", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + + streaming: { + on: { + end_stream: { + target: "ending_stream", + }, + start_stream: { + target: "streaming", + }, + }, + }, + }, + }, + { + actions: { + setDriver: (_content, event) => assign({ driver: event.data }), + }, + services: { + start: async () => { + const options = new Options(); + + lodash.forOwn(getConfig().game.browser.preferences, (value, key) => { + options.setPreference(key, value); + }); + + return await new Builder().forBrowser(Browser.FIREFOX).setFirefoxOptions(options).build(); + }, + }, + }, +); diff --git a/packages/backend/src/discord/stream/settings.ts b/packages/backend/src/discord/stream/settings.ts new file mode 100644 index 0000000..dd36818 --- /dev/null +++ b/packages/backend/src/discord/stream/settings.ts @@ -0,0 +1,35 @@ +import { WebDriver } from "selenium-webdriver"; +import { logger } from "../../logger.js"; + +export async function updateSettings(driver: WebDriver) { + logger.info("executing script to update discord settings"); + // https://stackoverflow.com/questions/52509440/discord-window-localstorage-is-undefined-how-to-get-access-to-the-localstorage + await driver.executeScript(` + (() => { + function getLocalStoragePropertyDescriptor() { + const iframe = document.createElement('iframe'); + document.head.append(iframe); + const pd = Object.getOwnPropertyDescriptor(iframe.contentWindow, 'localStorage'); + iframe.remove(); + return pd; + } + + Object.defineProperty(window, 'localStorage', getLocalStoragePropertyDescriptor()) + + const currentSettings = JSON.parse(window.localStorage.getItem("MediaEngineStore")); + currentSettings.default.outputVolume = 0; + currentSettings.stream.outputVolume = 0; + currentSettings.default.modeOptions.threshold = -100; + currentSettings.stream.modeOptions.threshold = -100; + currentSettings.default.echoCancellation = false; + currentSettings.stream.echoCancellation = false; + currentSettings.default.automaticGainControl = false; + currentSettings.stream.automaticGainControl = false; + window.localStorage.setItem("MediaEngineStore", JSON.stringify(currentSettings)); + + window.localStorage.setItem("hotspots", '{"_state":{"hiddenHotspots":["VOICE_PANEL_INTRODUCTION","VOICE_CALL_FEEDBACK"],"hotspotOverrides":{}},"_version":1}'); + })(); + `); + logger.info("refreshing page to update settings"); + await driver.navigate().refresh(); +} diff --git a/packages/backend/src/discord/stream/stream.ts b/packages/backend/src/discord/stream/stream.ts new file mode 100644 index 0000000..df97dc9 --- /dev/null +++ b/packages/backend/src/discord/stream/stream.ts @@ -0,0 +1,18 @@ +import { WebDriver, until, By } from "selenium-webdriver"; +import { logger } from "../../logger.js"; + +export async function shareScreen(driver: WebDriver) { + logger.info("trying to share screen"); + const videoShareSelector = 'button[aria-label="Share Your Screen"]'; + const videoShareButton = await driver.wait(until.elementLocated(By.css(videoShareSelector))); + logger.info("clicking sharing screen button"); + await videoShareButton.click(); +} + +export async function stopShareScreen(driver: WebDriver) { + logger.info("trying to stop screen sharing"); + const videoShareSelector = 'button[aria-label="Stop Streaming"]'; + const videoShareButton = await driver.wait(until.elementLocated(By.css(videoShareSelector))); + logger.info("clicking stop sharing screen button"); + await videoShareButton.click(); +} diff --git a/packages/backend/src/discord/stream/voice.ts b/packages/backend/src/discord/stream/voice.ts new file mode 100644 index 0000000..5530c4b --- /dev/null +++ b/packages/backend/src/discord/stream/voice.ts @@ -0,0 +1,22 @@ +import { WebDriver, until, By } from "selenium-webdriver"; +import { getConfig } from "../../config/index.js"; +import { logger } from "../../logger.js"; + +export async function joinVoiceChat(driver: WebDriver) { + logger.info("trying to join voice chat"); + const voiceChannelSelector = `a[data-list-item-id="channels___${getConfig().stream.channel_id}"]`; + const voiceChatButton = await driver.wait(until.elementLocated(By.css(voiceChannelSelector))); + + logger.info("joined voice chat"); + await voiceChatButton.click(); +} + +export async function disconnect(driver: WebDriver) { + logger.info("trying to disconnect"); + await driver.switchTo().window((await driver.getAllWindowHandles())[0]); + const disconnectSelector = 'button[aria-label="Disconnect"]'; + const disconnectButton = await driver.wait(until.elementLocated(By.css(disconnectSelector))); + + logger.info("clicking disconnect button"); + await disconnectButton.click(); +} diff --git a/packages/backend/src/events.ts b/packages/backend/src/events.ts new file mode 100644 index 0000000..3f7ce43 --- /dev/null +++ b/packages/backend/src/events.ts @@ -0,0 +1,27 @@ +import { z } from "zod"; + +export const DiscordSourceSchema = z.strictObject({ + kind: z.literal("discord"), +}); + +export const WebsocketSourceSchema = z.strictObject({ + kind: z.literal("websocket"), +}); + +export type Source = z.infer; +export const SourceSchema = z.discriminatedUnion("kind", [DiscordSourceSchema, WebsocketSourceSchema]); + +export type ScreenshotEvent = z.infer; +export const ScreenshotEventSchema = z.strictObject({ + kind: z.literal("screenshot"), + source: SourceSchema, +}); + +export type CommandEvent = z.infer; +export const CommandEventSchema = z.strictObject({ + kind: z.literal("command"), + source: SourceSchema, +}); + +export type Event = z.infer; +export const EventSchema = z.discriminatedUnion("kind", [ScreenshotEventSchema]); diff --git a/packages/backend/src/browser/game.ts b/packages/backend/src/game/browser/game.ts similarity index 87% rename from packages/backend/src/browser/game.ts rename to packages/backend/src/game/browser/game.ts index c834403..7de857e 100644 --- a/packages/backend/src/browser/game.ts +++ b/packages/backend/src/game/browser/game.ts @@ -1,10 +1,10 @@ import { By, WebDriver, until } from "selenium-webdriver"; -import { CommandInput, isBurst, isHold, isHoldB } from "../game/command/commandInput.js"; -import { toGameboyAdvanceKeyInput } from "../game/command/keybinds.js"; -import { wait } from "../util.js"; -import { getLatestSave } from "../game/saves/index.js"; -import { logger } from "../logger.js"; -import { getConfig } from "../config/index.js"; +import { CommandInput, isBurst, isHold, isHoldB } from "../command/commandInput.js"; +import { toGameboyAdvanceKeyInput } from "../command/keybinds.js"; +import { wait } from "../../util.js"; +import { getLatestSave } from "../saves/index.js"; +import { logger } from "../../logger.js"; +import { getConfig } from "../../config/index.js"; export async function setupGame(driver: WebDriver) { logger.info("navigating to emulator page"); @@ -16,11 +16,6 @@ export async function setupGame(driver: WebDriver) { await wait(5000); logger.info("selecting frame"); await focusContentFrame(driver); - logger.info("waiting for play now button"); - const playNowButton = await driver.wait(until.elementLocated(By.xpath('//a[text()="Play Now"]'))); - logger.info("clicking play now button"); - await playNowButton.click(); - logger.info("clicked button"); } export async function sendGameCommand(driver: WebDriver, command: CommandInput) { diff --git a/packages/backend/src/discord/chordExecutor.ts b/packages/backend/src/game/chordExecutor.ts similarity index 77% rename from packages/backend/src/discord/chordExecutor.ts rename to packages/backend/src/game/chordExecutor.ts index 2677386..b11f35b 100644 --- a/packages/backend/src/discord/chordExecutor.ts +++ b/packages/backend/src/game/chordExecutor.ts @@ -1,6 +1,6 @@ import { wait } from "../util.js"; -import { Chord } from "../game/command/chord.js"; -import { CommandInput } from "../game/command/commandInput.js"; +import { Chord } from "./command/chord.js"; +import { CommandInput } from "./command/commandInput.js"; import { getConfig } from "../config/index.js"; export async function execute(chord: Chord, fn: (commandInput: CommandInput) => Promise) { diff --git a/packages/backend/src/discord/chordValidator.ts b/packages/backend/src/game/chordValidator.ts similarity index 100% rename from packages/backend/src/discord/chordValidator.ts rename to packages/backend/src/game/chordValidator.ts diff --git a/packages/backend/src/game/command/chord.test.ts b/packages/backend/src/game/command/chord.test.ts index f5270eb..3ffb68e 100644 --- a/packages/backend/src/game/command/chord.test.ts +++ b/packages/backend/src/game/command/chord.test.ts @@ -1,3 +1,4 @@ +import { describe, test, expect } from "vitest"; import { parseChord } from "./chord.js"; describe("chord", () => { diff --git a/packages/backend/src/game/command/chordParser.test.ts b/packages/backend/src/game/command/chordParser.test.ts index d41a691..7730d15 100644 --- a/packages/backend/src/game/command/chordParser.test.ts +++ b/packages/backend/src/game/command/chordParser.test.ts @@ -1,3 +1,4 @@ +import { describe, test, expect } from "vitest"; import { commandToGameboyAdvanceKeyInput, parseGameboyAdvanceKeyInput } from "./keybinds.js"; describe("keybinds", () => { diff --git a/packages/backend/src/game/command/commandInput.test.ts b/packages/backend/src/game/command/commandInput.test.ts index ba69718..23df5df 100644 --- a/packages/backend/src/game/command/commandInput.test.ts +++ b/packages/backend/src/game/command/commandInput.test.ts @@ -1,3 +1,4 @@ +import { describe, test, expect } from "vitest"; import { parseCommandInput } from "./commandInput.js"; describe("commandInput", () => { diff --git a/packages/backend/src/game/machine.ts b/packages/backend/src/game/machine.ts new file mode 100644 index 0000000..4300fdc --- /dev/null +++ b/packages/backend/src/game/machine.ts @@ -0,0 +1,165 @@ +import lodash from "lodash"; +import { Options } from "selenium-webdriver/firefox.js"; +import { Browser, Builder, By, WebDriver, until } from "selenium-webdriver"; +import { assign, createMachine } from "xstate"; +import { getConfig } from "../config/index.js"; +import { logger } from "../logger.js"; +import { exportSave, importSave, setupGame } from "./browser/game.js"; + +export const gameMachine = createMachine( + { + /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlgBd0AncgqAYggHtCSCA3JgazBLSzyFSFarXxQEHJpnS0WAbQAMAXSXLEoAA5NYuOfg0gAHogCMADgAsJUwHYAnLcuLz5gEwA2RQGZTlgDQgAJ6IHrYArCS2Draebt6eHpaWAL4pgfw4BMRklDR09GBUVExUJJoANrIAZqWofBhZQrmidJL4nDL6amqG2rr6hiYIFtZ2js6unj5+gSEItt4k3uYe4abeXmvhbuamaRmNgjm4qNr54owsvFI8DQLZpKfnYhJSXbgKKr1IIP16nwMv2G4UUHiiiWcdksOx2c0Q4VsphIHg2YOSSWcllsBxAmWOTzOpVehWKpXKVXItSo9XxjzYRIubw60lkgJ6Kj6OgBLCGCLBEI8SUU0NhbnhCA89kUJEUbkcoNsimi4W8qXSeKO9KoYAqTHQECurFuvDpzR1eoN7U6bK+qk5v3+g2BiHcSzcoJcjgirjhwUQyWRGJWlns4XDqzcuLNOQt+sNRRKZUqNTq9yasd18etrO63wdWm5ztAwzdJA9ii9Kt94v9CHC2JI5hmlil9nlCXVhwezRENAA+imggVmMaWXcY8I8uRB1Vh+Icx87T9CwNAXyEOZvDL7H4NqsIiKAnXvPYlvZW5t7OYnPFHNGtb3p7P0POGInySmqWnJy0B0O2neW18A5dRHSLdcXRGPcm2vHZlXMUFwi3CVnEiRRVVMKVEMRbxQQ8B8exyADLjAIwXhXP4IN5KD8MFYVRQ9Wt5k8JZTDRLwLCFMIw0IjNSBIhg4wNSinUgkt+XBWIhShJwxQlHZkXY7dr12DxVnMPiCQpV8ClgTAdTAfBYGwJhyFE6igQkhA1VsWVW3bVsrGvTFUJ2Ehwg8bdw3Cex1OVHENV-QT6EwJhUAwfAIAstcaOsvDkV3ZtLAsbwIlbJJULlWUvLBVVsQ9PCu01IjSDIl4R2uNhx1NR8cnK4lAJZJcQPzMDVx5KzjEk+jZJhJiJTcUxIlRbcYVMDCEj8KMgrqsryMa0iyWTSlqVpOaSAaplF2A0CuVirrS3ictPXMb1kMQ5jEDcXZy1MRw-M83YLwbNINXwJgIDgQxJ32zqNwAWjcaxvDwm8fBhaULysCUAb8GwNksZt218nxt28LT6T7V4-uLbqEGOmTTHlNZnGldYPAlIUZUrDw3FiLCkWQzHmg-KhcfE-HiccEgkeSdZA3DdTUI9KIYjy1t5TDAjZtKhkKvEDm4vxhI3BRYUztPZzTCppwTtyjK6Z2TTZf4khhIgJXDtCXybBvZCkUsFZENsBSElleVYlBeJkgvFmcmxl83ytjdvSbTYRT2VUMNWLKlh2RxgaGxYwWB-2BLnOgQ6gzZ44c-nbHcFLvAUlwcu3NtUocGbuzNracfAg6NzWew7Z9R3ncRQbPBRPy0tDPykd8N6UiAA */ + predictableActionArguments: true, + strict: true, + tsTypes: {} as import("./machine.typegen.d.ts").Typegen0, + schema: { + events: {} as + | { type: "start_game" } + | { type: "export" } + | { type: "reload" } + | { type: "import" } + | { type: "screenshot" } + | { type: "command" }, + context: {} as { driver: WebDriver | undefined }, + services: {} as { + start: { + data: WebDriver; + }; + }, + }, + context: { + driver: undefined, + }, + initial: "starting", + states: { + starting: { + invoke: { + src: "start", + onDone: { + target: "importing", + actions: "setDriver", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + error: { + type: "final", + }, + importing: { + invoke: { + src: async ({ driver }, _event) => { + if (driver) { + await importSave(driver); + } else { + throw Error("unreachable state"); + } + }, + onDone: { + target: "reload", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + reload: { + invoke: { + src: async ({ driver }, _event) => { + if (driver) { + await driver.navigate().refresh(); + } else { + throw Error("unreachable state"); + } + }, + onDone: { + target: "start_playing", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + start_playing: { + invoke: { + src: async ({ driver }, _event) => { + if (driver) { + logger.info("waiting for play now button"); + const playNowButton = await driver.wait(until.elementLocated(By.xpath('//a[text()="Play Now"]'))); + logger.info("clicking play now button"); + await playNowButton.click(); + logger.info("clicked button"); + } else { + throw Error("unreachable state"); + } + }, + onDone: { + target: "playing", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + playing: { + on: { + export: { + target: "exporting", + }, + reload: { + target: "reload", + }, + screenshot: { + target: "playing", + }, + command: { + target: "playing", + }, + }, + }, + exporting: { + invoke: { + src: async ({ driver }, _event) => { + if (driver) { + await exportSave(driver); + } else { + throw Error("unreachable state"); + } + }, + onDone: { + target: "playing", + }, + onError: { + target: "error", + actions: logger.error, + }, + }, + }, + }, + }, + { + actions: { + setDriver: (_content, event) => assign({ driver: event.data }), + }, + services: { + start: async () => { + const options = new Options(); + + lodash.forOwn(getConfig().game.browser.preferences, (value, key) => { + options.setPreference(key, value); + }); + + const driver = await new Builder().forBrowser(Browser.FIREFOX).setFirefoxOptions(options).build(); + logger.info("fullscreening"); + await driver.manage().window().fullscreen(); + await setupGame(driver); + return driver; + }, + }, + }, +); diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 25880f1..a4f80dd 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -1,166 +1,4 @@ -import { exportSave, sendGameCommand } from "./browser/game.js"; -import { handleMessages } from "./discord/messageHandler.js"; -import { Browser, Builder, WebDriver } from "selenium-webdriver"; -import { writeFile } from "fs/promises"; -import { Options } from "selenium-webdriver/firefox.js"; -import { handleSlashCommands } from "./discord/slashCommands/index.js"; -import { CommandInput } from "./game/command/commandInput.js"; -import { createWebServer } from "./webserver/index.js"; -import { start } from "./browser/index.js"; -import lodash from "lodash"; -import { registerSlashCommands } from "./discord/slashCommands/rest.js"; -import { logger } from "./logger.js"; -import { disconnect, joinVoiceChat, shareScreen } from "./browser/discord.js"; -import { handleChannelUpdate } from "./discord/channelHandler.js"; -import { match } from "ts-pattern"; -import { LoginResponse, StatusResponse } from "@discord-plays-pokemon/common"; -import { getConfig } from "./config/index.js"; +import { interpret } from "xstate"; +import { machine } from "./machine.js"; -let gameDriver: WebDriver | undefined; -let streamDriver: WebDriver | undefined; - -if (getConfig().bot.commands.update) { - await registerSlashCommands(); -} - -if (getConfig().web.enabled) { - const { socket } = createWebServer({ - port: getConfig().web.port, - webAssetsPath: getConfig().web.assets, - isApiEnabled: getConfig().web.api.enabled, - isCorsEnabled: getConfig().web.cors, - }); - - if (socket) { - socket.subscribe((event) => { - match(event) - .with({ request: { kind: "command" } }, (event) => { - logger.info("handling command request", event.request); - if (gameDriver !== undefined) { - try { - void sendGameCommand(gameDriver, { command: event.request.value, quantity: 1 }); - } catch (e) { - logger.error(e); - } - } - }) - .with({ request: { kind: "login" } }, (event) => { - logger.info("handling login request", event.request); - // TODO: perform auth here - const player = { discordId: "id", discordUsername: "username" }; - const response: LoginResponse = { - kind: "login", - value: player, - }; - event.socket.emit("response", response); - }) - .with({ request: { kind: "screenshot" } }, (event) => { - logger.info("handling screenshot request", event.request); - }) - .with({ request: { kind: "status" } }, (event) => { - logger.info("handling status request", event.request); - const response: StatusResponse = { - kind: "status", - value: { - playerList: [], - }, - }; - event.socket.emit("response", response); - }) - .exhaustive(); - }); - } -} - -if (getConfig().stream.enabled || getConfig().game.enabled) { - logger.info("browser is enabled"); - - const options = new Options(); - - lodash.forOwn(getConfig().game.browser.preferences, (value, key) => { - options.setPreference(key, value); - }); - - gameDriver = await new Builder().forBrowser(Browser.FIREFOX).setFirefoxOptions(options).build(); - streamDriver = await new Builder().forBrowser(Browser.FIREFOX).setFirefoxOptions(options).build(); - - logger.info("fullscreening"); - await gameDriver.manage().window().fullscreen(); - - try { - await start(gameDriver, streamDriver); - } catch (error) { - logger.error(error); - try { - const screenshot = await gameDriver.takeScreenshot(); - await writeFile("error.png", screenshot, "base64"); - } catch (e) { - logger.error("unable to take screenshot while handling another error"); - throw e; - } - } - - if (getConfig().bot.commands.enabled) { - handleSlashCommands(gameDriver); - } -} - -if (getConfig().game.enabled && getConfig().game.commands.enabled) { - logger.info("game and discord commands are enabled"); - handleMessages(async (commandInput: CommandInput): Promise => { - if (gameDriver !== undefined) { - try { - await sendGameCommand(gameDriver, commandInput); - } catch (e) { - logger.error(e); - } - } - }); -} - -if (getConfig().game.saves.auto_export.enabled) { - logger.info("auto export saves is enabled"); - // eslint-disable-next-line @typescript-eslint/no-misused-promises - setInterval(async () => { - logger.info("exporting save"); - if (gameDriver) { - try { - await exportSave(gameDriver); - logger.info("save exported successfully"); - } catch (e) { - logger.error(e); - } - } - }, getConfig().game.saves.auto_export.interval_in_milliseconds); -} - -if (getConfig().stream.dynamic_streaming) { - logger.info("dynamic streaming is enabled"); - handleChannelUpdate(async (participants) => { - logger.info("handling channel update."); - logger.info(participants); - if (streamDriver) { - if (participants > 0) { - logger.info("sharing screen since there are now participants"); - try { - await joinVoiceChat(streamDriver); - await shareScreen(streamDriver); - await streamDriver.switchTo().window((await streamDriver.getAllWindowHandles())[1]); - } catch (e) { - logger.error(e); - } - } else { - logger.info("stop sharing screen since there are no longer participants"); - try { - logger.info("saving game before disconnecting"); - await exportSave(streamDriver); - await disconnect(streamDriver); - } catch (e) { - logger.error(e); - } - } - } else { - logger.error("driver is not defined"); - } - }); -} +interpret(machine).start(); diff --git a/packages/backend/src/machine.ts b/packages/backend/src/machine.ts new file mode 100644 index 0000000..72255b6 --- /dev/null +++ b/packages/backend/src/machine.ts @@ -0,0 +1,34 @@ +import { createMachine } from "xstate"; +import { gameMachine } from "./game/machine.js"; +import { streamMachine } from "./discord/stream/machine.js"; +import { webMachine } from "./webserver/machine.js"; + +export const machine = createMachine( + { + /** @xstate-layout N4IgpgJg5mDOIC5gF8A0IB2B7CdGgAoBbAQwGMALASwzAEp8QAHLWKgFyqw0YA9EAjACZ0AT0FDkU5EA */ + predictableActionArguments: true, + strict: true, + tsTypes: {} as import("./machine.typegen.d.ts").Typegen0, + schema: {}, + invoke: [ + { + src: "web", + }, + { + src: "game", + }, + { + src: "stream", + }, + ], + states: {}, + }, + { + services: { + game: gameMachine, + stream: streamMachine, + web: webMachine, + }, + actions: {}, + }, +); diff --git a/packages/backend/src/util.ts b/packages/backend/src/util.ts index 0af468f..1c63611 100644 --- a/packages/backend/src/util.ts +++ b/packages/backend/src/util.ts @@ -1,6 +1,5 @@ import { existsSync } from "fs"; import { resolve } from "path"; -import { exit } from "process"; import { logger } from "./logger.js"; export function wait(milliseconds: number): Promise { diff --git a/packages/backend/src/webserver/machine.ts b/packages/backend/src/webserver/machine.ts new file mode 100644 index 0000000..b6fe8a4 --- /dev/null +++ b/packages/backend/src/webserver/machine.ts @@ -0,0 +1,29 @@ +import { createMachine } from "xstate"; +import { createWebServer } from "./index.js"; +import { getConfig } from "../config/index.js"; + +export const webMachine = createMachine({ + predictableActionArguments: true, + strict: true, + tsTypes: {} as import("./machine.typegen.d.ts").Typegen0, + schema: { + services: {} as { + start: { + data: undefined; + }; + }, + }, + initial: "ready", + states: { + ready: { + entry: () => { + createWebServer({ + port: getConfig().web.port, + isCorsEnabled: getConfig().web.cors, + isApiEnabled: getConfig().web.api.enabled, + webAssetsPath: getConfig().web.assets, + }); + }, + }, + }, +}); diff --git a/packages/backend/src/webserver/socket.test.ts b/packages/backend/src/webserver/socket.test.ts new file mode 100644 index 0000000..8bd0eb8 --- /dev/null +++ b/packages/backend/src/webserver/socket.test.ts @@ -0,0 +1,37 @@ +import { describe, it } from "vitest"; +import { createServer } from "http"; +import { createSocket } from "./socket.js"; +import { io as Client } from "socket.io-client"; +import { Request, RequestSchema } from "@discord-plays-pokemon/common"; + +describe("socket", () => { + it("should handle login requests", () => + new Promise((done) => { + const port = 8081; + const server = createServer(); + const observable = createSocket({ + server, + isCorsEnabled: false, + }); + + server.listen(port, () => { + const clientSocket = Client(`http://127.0.0.1:${port}`); + clientSocket.on("connect", () => { + const request: Request = { + kind: "login", + value: { + token: "string", + }, + }; + clientSocket.emit("request", request); + clientSocket.close(); + }); + }); + + observable.subscribe((observer) => { + RequestSchema.parse(observer.request); + server.close(); + done(); + }); + })); +}); diff --git a/packages/common/package.json b/packages/common/package.json index 5c2c866..c2ba059 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -16,15 +16,15 @@ "dependencies": { "lodash": "4.17.21", "ts-pattern": "^5.0.5", - "zod": "^3.22.2" + "zod": "^3.22.4" }, "devDependencies": { - "@tsconfig/recommended": "1.0.2", - "@types/lodash": "^4.14.198", - "@types/node": "^20.6.0", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "eslint": "^8.49.0", + "@tsconfig/recommended": "1.0.3", + "@types/lodash": "^4.14.199", + "@types/node": "^20.8.2", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "eslint": "^8.50.0", "eslint-config-prettier": "^9.0.0", "typescript": "5.2.2" }, diff --git a/packages/frontend/package.json b/packages/frontend/package.json index a182a5b..65a32e7 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -19,56 +19,56 @@ "test": "true" }, "dependencies": { - "@tanstack/react-query": "^4.35.0", + "@tanstack/react-query": "^5.10.0", "keyboardjs": "^2.7.0", "lodash": "^4.17.21", "react": "^18.2.0", "react-dom": "^18.2.0", "react-use": "^17.4.0", "socket.io-client": "^4.7.2", - "styled-components": "^6.0.7", + "styled-components": "^6.0.8", "ts-pattern": "^5.0.5", - "zod": "^3.22.2", + "zod": "^3.22.4", "@discord-plays-pokemon/common": "1.0.0" }, "devDependencies": { "@iconify-json/carbon": "^1.1.21", "@iconify-json/mdi": "^1.1.54", - "@iconify/json": "^2.2.114", - "@storybook/addon-essentials": "^7.4.1", - "@storybook/addon-interactions": "^7.4.1", - "@storybook/addon-links": "^7.4.1", - "@storybook/blocks": "^7.4.1", - "@storybook/react": "^7.4.1", - "@storybook/react-vite": "^7.4.1", - "@storybook/testing-library": "^0.2.0", + "@iconify/json": "^2.2.124", + "@storybook/addon-essentials": "^7.4.6", + "@storybook/addon-interactions": "^7.4.6", + "@storybook/addon-links": "^7.4.6", + "@storybook/blocks": "^7.4.6", + "@storybook/react": "^7.4.6", + "@storybook/react-vite": "^7.4.6", + "@storybook/testing-library": "^0.2.2", "@svgr/core": "^8.1.0", "@svgr/plugin-jsx": "^8.1.0", "@tailwindcss/forms": "^0.5.6", - "@tanstack/eslint-plugin-query": "^4.34.1", - "@types/lodash": "^4.14.198", - "@types/react": "^18.2.21", - "@types/react-dom": "^18.2.7", - "@types/styled-components": "^5.1.27", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "@vitejs/plugin-react": "^4.0.4", - "@vitejs/plugin-react-swc": "^3.3.2", - "autoprefixer": "^10.4.15", + "@tanstack/eslint-plugin-query": "^4.36.0", + "@types/lodash": "^4.14.199", + "@types/react": "^18.2.25", + "@types/react-dom": "^18.2.10", + "@types/styled-components": "^5.1.28", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "@vitejs/plugin-react": "^4.1.0", + "@vitejs/plugin-react-swc": "^3.4.0", + "autoprefixer": "^10.4.16", "babel-plugin-macros": "^3.1.0", "babel-plugin-styled-components": "^2.1.4", - "eslint": "^8.49.0", + "eslint": "^8.50.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", - "eslint-plugin-storybook": "^0.6.13", - "postcss": "^8.4.29", + "eslint-plugin-storybook": "^0.6.14", + "postcss": "^8.4.31", "prop-types": "^15.8.1", - "storybook": "^7.4.1", + "storybook": "^7.4.6", "tailwindcss": "^3.3.3", "twin.macro": "^3.4.0", "typescript": "^5.2.2", "unplugin-fonts": "^1.0.3", "unplugin-icons": "^0.17.0", - "vite": "^4.4.9" + "vite": "^4.4.11" } } diff --git a/vitest.workspace b/vitest.workspace new file mode 100644 index 0000000..ab1d8a7 --- /dev/null +++ b/vitest.workspace @@ -0,0 +1,3 @@ +export default [ + 'packages/*' +]