diff --git a/.env.example b/.dev.env
similarity index 58%
rename from .env.example
rename to .dev.env
index d25e432..02c46a1 100644
--- a/.env.example
+++ b/.dev.env
@@ -7,33 +7,26 @@
# any secret values.
BOT_TOKEN=
-BOT_VER=0.8.4
+BOT_VER=0.2 DEV
BOT_AUTHOR=Vylpes
BOT_OWNERID=147392775707426816
BOT_CLIENTID=682942374040961060
BOT_ENV=4
-BOT_ADMINS=147392775707426816,887272961504071690
-BOT_LOGLEVEL=info
-BOT_LOG_DISCORD_ENABLE=false
-BOT_LOG_DISCORD_LEVEL=warn
-BOT_LOG_DISCORD_WEBHOOK=
-BOT_LOG_DISCORD_SERVICE=
ABOUT_FUNDING=
ABOUT_REPO=
-DATA_DIR=./.temp
-
DB_HOST=127.0.0.1
DB_PORT=3301
DB_NAME=carddrop
-DB_AUTH_USER=
-DB_AUTH_PASS=
-DB_SYNC=
-DB_LOGGING=
-DB_DATA_LOCATION=./.temp/database
-DB_ROOT_HOST=0.0.0.0
+DB_AUTH_USER=dev
+DB_AUTH_PASS=dev
+DB_SYNC=true
+DB_LOGGING=true
-EXPRESS_PORT=3302
+DB_CARD_FILE=:memory:
-GDRIVESYNC_AUTO=false
+EXPRESS_PORT=3303
+
+GDRIVESYNC_WHITELIST=147392775707426816,887272961504071690
+GDRIVESYNC_AUTO=true
diff --git a/.drone.yml b/.drone.yml
index 962eb6c..35df56b 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -4,36 +4,16 @@ kind: pipeline
name: deployment
steps:
-- name: build
- image: node
- commands:
- - npm ci
- - npm run build
-- name: test
- image: node
- commands:
- - npm test
-- name: deploy to prod
- image: drillster/drone-rsync
- secrets: [ ssh_key, bot_token_prod ]
+- name: deploy
+ image: appleboy/drone-ssh
settings:
- hosts:
- - 192.168.68.120
- user: vylpes
- key:
- from_secret: ssh_key
- source: .
- target: ~/apps/card-drop/card-drop_prod
- recursive: true
+ host: 192.168.68.120
+ username: vylpes
+ password:
+ from_secret: ssh_password
+ port: 22
script:
- - export PATH="$HOME/.yarn/bin:$PATH"
- - export PATH="$HOME/.nodeuse/bin:$PATH"
- - export BOT_TOKEN="$BOT_TOKEN_PROD"
- - cd ~/apps/card-drop/card-drop_prod
- - docker compose --file docker-compose.prod.yml up -d
- - sleep 10
- - cp .prod.env .env
- - pm2 restart card-drop_prod || pm2 start --name card-drop_prod dist/bot.js
+ - sh /home/vylpes/scripts/card-drop/deploy_prod.sh
trigger:
event:
@@ -45,36 +25,16 @@ kind: pipeline
name: staging
steps:
-- name: build
- image: node
- commands:
- - npm ci
- - npm run build
-- name: test
- image: node
- commands:
- - npm test
-- name: deploy to stage
- image: drillster/drone-rsync
- secrets: [ ssh_key, bot_token_stage ]
+- name: stage
+ image: appleboy/drone-ssh
settings:
- hosts:
- - 192.168.68.120
- user: vylpes
- key:
- from_secret: ssh_key
- source: .
- target: ~/apps/card-drop/card-drop_stage
- recursive: true
+ host: 192.168.68.120
+ username: vylpes
+ password:
+ from_secret: ssh_password
+ port: 22
script:
- - export PATH="$HOME/.yarn/bin:$PATH"
- - export PATH="$HOME/.nodeuse/bin:$PATH"
- - export BOT_TOKEN="$BOT_TOKEN_STAGE"
- - cd ~/apps/card-drop/card-drop_stage
- - docker compose --file docker-compose.stage.yml up -d
- - sleep 10
- - cp .stage.env .env
- - pm2 restart card-drop_stage || pm2 start --name card-drop_stage dist/bot.js
+ - sh /home/vylpes/scripts/card-drop/deploy_stage.sh
trigger:
branch:
@@ -91,21 +51,19 @@ steps:
- name: build
image: node
commands:
- - npm ci
- - npm run build
-
-- name: lint
- image: node
- commands:
- - npm run lint
+ - yarn install --frozen-lockfile
+ - yarn build
- name: test
image: node
commands:
- - npm test
+ - yarn install --frozen-lockfile
+ - yarn test
trigger:
branch:
+ - main
+ - develop
- hotfix/*
- feature/*
- renovate/*
diff --git a/.forgejo/workflows/production.yml b/.forgejo/workflows/production.yml
deleted file mode 100644
index cb4ed46..0000000
--- a/.forgejo/workflows/production.yml
+++ /dev/null
@@ -1,77 +0,0 @@
-name: Deploy To Production
-
-on:
- push:
- branches:
- - main
-
-jobs:
- build:
- environment: prod
-
- runs-on: node
-
- steps:
- - uses: actions/checkout@v4
- - name: Use Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 20.x
- - run: yarn install --frozen-lockfile
- - run: yarn build
- - run: yarn test
- - run: yarn lint
-
- - name: "Copy files over to location"
- run: rsync -rvzP . ${{ secrets.PROD_REPO_PATH }}
-
- deploy:
- environment: prod
- needs: build
- runs-on: node
- steps:
- - uses: https://github.com/appleboy/ssh-action@v1.1.0
- env:
- DB_NAME: ${{ secrets.PROD_DB_NAME }}
- DB_AUTH_USER: ${{ secrets.PROD_DB_AUTH_USER }}
- DB_AUTH_PASS: ${{ secrets.PROD_DB_AUTH_PASS }}
- DB_HOST: ${{ secrets.PROD_DB_HOST }}
- DB_PORT: ${{ secrets.PROD_DB_PORT }}
- DB_ROOT_HOST: ${{ secrets.PROD_DB_ROOT_HOST }}
- DB_SYNC: ${{ secrets.PROD_DB_SYNC }}
- DB_LOGGING: ${{ secrets.PROD_DB_LOGGING }}
- DB_DATA_LOCATION: ${{ secrets.PROD_DB_DATA_LOCATION }}
- SERVER_PATH: ${{ secrets.PROD_SSH_SERVER_PATH }}
- BOT_TOKEN: ${{ secrets.PROD_BOT_TOKEN }}
- BOT_VER: ${{ vars.PROD_BOT_VER }}
- BOT_AUTHOR: ${{ vars.PROD_BOT_AUTHOR }}
- BOT_OWNERID: ${{ vars.PROD_BOT_OWNERID }}
- BOT_CLIENTID: ${{ vars.PROD_BOT_CLIENTID }}
- BOT_ENV: ${{ vars.PROD_BOT_ENV }}
- BOT_ADMINS: ${{ vars.PROD_BOT_ADMINS }}
- ABOUT_FUNDING: ${{ vars.PROD_ABOUT_FUNDING }}
- ABOUT_REPO: ${{ vars.PROD_ABOUT_REPO }}
- DATA_DIR: ${{ secrets.PROD_DATA_DIR }}
- GDRIVESYNC_AUTO: ${{ vars.PROD_GDRIVESYNC_AUTO }}
- EXPRESS_PORT: ${{ secrets.PROD_EXPRESS_PORT }}
- BOT_LOGLEVEL: ${{ vars.PROD_BOT_LOGLEVEL }}
- BOT_LOG_DISCORD_ENABLE: ${{ vars.PROD_BOT_LOG_DISCORD_ENABLE }}
- BOT_LOG_DISCORD_LEVEL: ${{ vars.PROD_BOT_LOG_DISCORD_LEVEL }}
- BOT_LOG_DISCORD_WEBHOOK: ${{ secrets.PROD_BOT_LOG_DISCORD_WEBHOOK }}
- BOT_LOG_DISCORD_SERVICE: ${{ vars.PROD_BOT_LOG_DISCORD_SERVICE }}
- with:
- host: ${{ secrets.PROD_SSH_HOST }}
- username: ${{ secrets.PROD_SSH_USER }}
- key: ${{ secrets.PROD_SSH_KEY }}
- port: ${{ secrets.PROD_SSH_PORT }}
- envs: DB_NAME,DB_AUTH_USER,DB_AUTH_PASS,DB_HOST,DB_PORT,DB_ROOT_HOST,DB_SYNC,DB_LOGGING,DB_DATA_LOCATION,BOT_TOKEN,BOT_VER,BOT_AUTHOR,BOT_OWNERID,BOT_CLIENTID,ABOUT_FUNDING,ABOUT_REPO,BOT_ENV,BOT_ADMINS,DATA_DIR,GDRIVESYNC_AUTO,SERVER_PATH,EXPRESS_PORT,BOT_LOGLEVEL,BOT_LOG_DISCORD_ENABLE,BOT_LOG_DISCORD_LEVEL,BOT_LOG_DISCORD_WEBHOOK,BOT_LOG_DISCORD_SERVICE
- script: |
- source .sshrc \
- && cd /home/vylpes/apps/card-drop/card-drop_prod \
- && docker compose down \
- && (pm2 stop card-drop_prod || true) \
- && (pm2 delete card-drop_prod || true) \
- && docker compose up -d \
- && sleep 10 \
- && yarn run db:up \
- && pm2 start --name card-drop_prod dist/bot.js
\ No newline at end of file
diff --git a/.forgejo/workflows/stage.yml b/.forgejo/workflows/stage.yml
deleted file mode 100644
index b6c27da..0000000
--- a/.forgejo/workflows/stage.yml
+++ /dev/null
@@ -1,77 +0,0 @@
-name: Deploy To Stage
-
-on:
- push:
- branches:
- - develop
-
-jobs:
- build:
- environment: stage
-
- runs-on: node
-
- steps:
- - uses: actions/checkout@v4
- - name: Use Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 20.x
- - run: yarn install --frozen-lockfile
- - run: yarn build
- - run: yarn test
- - run: yarn lint
-
- - name: "Copy files over to location"
- run: rsync -rvzP . ${{ secrets.STAGE_REPO_PATH }}
-
- deploy:
- environment: prod
- needs: build
- runs-on: node
- steps:
- - uses: https://github.com/appleboy/ssh-action@v1.1.0
- env:
- DB_NAME: ${{ secrets.STAGE_DB_NAME }}
- DB_AUTH_USER: ${{ secrets.STAGE_DB_AUTH_USER }}
- DB_AUTH_PASS: ${{ secrets.STAGE_DB_AUTH_PASS }}
- DB_HOST: ${{ secrets.STAGE_DB_HOST }}
- DB_PORT: ${{ secrets.STAGE_DB_PORT }}
- DB_ROOT_HOST: ${{ secrets.STAGE_DB_ROOT_HOST }}
- DB_SYNC: ${{ secrets.STAGE_DB_SYNC }}
- DB_LOGGING: ${{ secrets.STAGE_DB_LOGGING }}
- DB_DATA_LOCATION: ${{ secrets.STAGE_DB_DATA_LOCATION }}
- SERVER_PATH: ${{ secrets.STAGE_SSH_SERVER_PATH }}
- BOT_TOKEN: ${{ secrets.STAGE_BOT_TOKEN }}
- BOT_VER: ${{ vars.STAGE_BOT_VER }}
- BOT_AUTHOR: ${{ vars.STAGE_BOT_AUTHOR }}
- BOT_OWNERID: ${{ vars.STAGE_BOT_OWNERID }}
- BOT_CLIENTID: ${{ vars.STAGE_BOT_CLIENTID }}
- BOT_ENV: ${{ vars.STAGE_BOT_ENV }}
- BOT_ADMINS: ${{ vars.STAGE_BOT_ADMINS }}
- ABOUT_FUNDING: ${{ vars.STAGE_ABOUT_FUNDING }}
- ABOUT_REPO: ${{ vars.STAGE_ABOUT_REPO }}
- DATA_DIR: ${{ secrets.STAGE_DATA_DIR }}
- GDRIVESYNC_AUTO: ${{ vars.STAGE_GDRIVESYNC_AUTO }}
- EXPRESS_PORT: ${{ secrets.STAGE_EXPRESS_PORT }}
- BOT_LOGLEVEL: ${{ vars.STAGE_BOT_LOGLEVEL }}
- BOT_LOG_DISCORD_ENABLE: ${{ vars.STAGE_BOT_LOG_DISCORD_ENABLE }}
- BOT_LOG_DISCORD_LEVEL: ${{ vars.STAGE_BOT_LOG_DISCORD_LEVEL }}
- BOT_LOG_DISCORD_WEBHOOK: ${{ secrets.STAGE_BOT_LOG_DISCORD_WEBHOOK }}
- BOT_LOG_DISCORD_SERVICE: ${{ vars.STAGE_BOT_LOG_DISCORD_SERVICE }}
- with:
- host: ${{ secrets.STAGE_SSH_HOST }}
- username: ${{ secrets.STAGE_SSH_USER }}
- key: ${{ secrets.STAGE_SSH_KEY }}
- port: ${{ secrets.STAGE_SSH_PORT }}
- envs: DB_NAME,DB_AUTH_USER,DB_AUTH_PASS,DB_HOST,DB_PORT,DB_ROOT_HOST,DB_SYNC,DB_LOGGING,DB_DATA_LOCATION,BOT_TOKEN,BOT_VER,BOT_AUTHOR,BOT_OWNERID,BOT_CLIENTID,ABOUT_FUNDING,ABOUT_REPO,BOT_ENV,BOT_ADMINS,DATA_DIR,GDRIVESYNC_AUTO,SERVER_PATH,EXPRESS_PORT,BOT_LOGLEVEL,BOT_LOG_DISCORD_ENABLE,BOT_LOG_DISCORD_LEVEL,BOT_LOG_DISCORD_WEBHOOK,BOT_LOG_DISCORD_SERVICE
- script: |
- source .sshrc \
- && cd /home/vylpes/apps/card-drop/card-drop_stage \
- && docker compose down \
- && (pm2 stop card-drop_stage || true) \
- && (pm2 delete card-drop_stage || true) \
- && docker compose up -d \
- && sleep 10 \
- && yarn run db:up \
- && pm2 start --name card-drop_stage dist/bot.js
\ No newline at end of file
diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml
deleted file mode 100644
index 6becf3e..0000000
--- a/.forgejo/workflows/test.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Test
-
-on:
- push:
- branches:
- - feature/*
- - hotfix/*
- - renovate/*
-
-jobs:
- build:
- environment: stage
-
- runs-on: node
-
- steps:
- - uses: actions/checkout@v4
- - name: Use Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 20.x
- - run: yarn install --frozen-lockfile
- - run: yarn build
- - run: yarn test
- - run: yarn lint
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index a7d5b20..a354170 100644
--- a/.gitignore
+++ b/.gitignore
@@ -107,6 +107,5 @@ config.json
.DS_Store
ormconfig.json
gdrive-credentials.json
-data/
-*.db
-.temp/
+cards/
+*.db
\ No newline at end of file
diff --git a/.prod.env b/.prod.env
new file mode 100644
index 0000000..1f338a2
--- /dev/null
+++ b/.prod.env
@@ -0,0 +1,32 @@
+# Security Warning! Do not commit this file to any VCS!
+# This is a local file to speed up development process,
+# so you don't have to change your environment variables.
+#
+# This is not applied to `.env.template`!
+# Template files must be committed to the VCS, but must not contain
+# any secret values.
+
+BOT_TOKEN=
+BOT_VER=0.2
+BOT_AUTHOR=Vylpes
+BOT_OWNERID=147392775707426816
+BOT_CLIENTID=1093810443589529631
+BOT_ENV=1
+
+ABOUT_FUNDING=
+ABOUT_REPO=
+
+DB_HOST=127.0.0.1
+DB_PORT=3321
+DB_NAME=carddrop
+DB_AUTH_USER=prod
+DB_AUTH_PASS=prod
+DB_SYNC=false
+DB_LOGGING=false
+
+DB_CARD_FILE=:memory:
+
+EXPRESS_PORT=3323
+
+GDRIVESYNC_WHITELIST=147392775707426816,887272961504071690
+GDRIVESYNC_AUTO=false
diff --git a/.stage.env b/.stage.env
new file mode 100644
index 0000000..0a63651
--- /dev/null
+++ b/.stage.env
@@ -0,0 +1,32 @@
+# Security Warning! Do not commit this file to any VCS!
+# This is a local file to speed up development process,
+# so you don't have to change your environment variables.
+#
+# This is not applied to `.env.template`!
+# Template files must be committed to the VCS, but must not contain
+# any secret values.
+
+BOT_TOKEN=
+BOT_VER=0.2 BETA
+BOT_AUTHOR=Vylpes
+BOT_OWNERID=147392775707426816
+BOT_CLIENTID=1147976642942214235
+BOT_ENV=2
+
+ABOUT_FUNDING=
+ABOUT_REPO=
+
+DB_HOST=127.0.0.1
+DB_PORT=3311
+DB_NAME=carddrop
+DB_AUTH_USER=stage
+DB_AUTH_PASS=stage
+DB_SYNC=false
+DB_LOGGING=false
+
+DB_CARD_FILE=:memory:
+
+EXPRESS_PORT=3313
+
+GDRIVESYNC_WHITELIST=147392775707426816,887272961504071690
+GDRIVESYNC_AUTO=false
diff --git a/.woodpecker.yml b/.woodpecker.yml
deleted file mode 100644
index f42ba60..0000000
--- a/.woodpecker.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-steps:
- build:
- image: node
- commands:
- - npm ci
- - npm run build
- when:
- event: push
- branch: [ hotfix/*, feature/*, renovate/*, develop, main ]
- lint:
- image: node
- commands:
- - npm run lint
- when:
- event: push
- branch: [ hotfix/*, feature/*, renovate/*, develop, main ]
- test:
- image: node
- commands:
- - npm test
- when:
- event: push
- branch: [ hotfix/*, feature/*, renovate/*, develop, main ]
- stage:
- image: alpine
- secrets: [ ssh_key, stage_bot_token ]
- commands:
- - apk add rsync openssh-client
- - eval `ssh-agent -s`
- - echo "$SSH_KEY" | tr -d '\r' | ssh-add -
- - rsync -e "ssh -o StrictHostKeyChecking=no" -r ./* vylpes@192.168.1.115:/home/vylpes/apps/card-drop/card-drop_stage
- - ssh vylpes@192.168.1.115 BOT_TOKEN='$${stage_bot_token}' 'bash -s' < ./scripts/deploy_stage.sh
- when:
- event: push
- branch: [ develop ]
- deploy:
- image: alpine
- secrets: [ ssh_key, prod_bot_token ]
- commands:
- - apk add rsync openssh-client
- - eval `ssh-agent -s`
- - echo "$SSH_KEY" | tr -d '\r' | ssh-add -
- - rsync -e "ssh -o StrictHostKeyChecking=no" -r ./* vylpes@192.168.1.115:/home/vylpes/apps/card-drop/card-drop_prod
- - ssh vylpes@192.168.1.115 BOT_TOKEN='$${prod_bot_token}' 'bash -s' < ./scripts/deploy_prod.sh
- when:
- event: push
- branch: [ main ]
\ No newline at end of file
diff --git a/README.md b/README.md
index ca4b03f..94f0c9c 100644
--- a/README.md
+++ b/README.md
@@ -1,60 +1,2 @@
-# Card Drop
-
-Card Drop is a Discord Bot designed to allow users to "drop" random cards into
-a channel and have the ability to claim them for themselves or let others if
-they so choose.
-
-The cards are randomly chosen based on weights of their card type (i.e. Bronze
-is more common than Gold). The user who ran the drop command has 5 minutes to
-choose if they want the card to themselves before its claimable by anyone, or
-until the drop command is ran again.
-
-## Installation
-
-Downloads of the latest version can be found from the [GitHub Releases](https://github.com/vylpes/card-drop/releases)
-or [Forgejo Releases](https://git.vylpes.xyz/external/card-drop/releases) page.
-
-Copy the config template file and fill in the strings.
-
-## Requirements
-
-- NodeJS
-- Yarn
-- Docker
-
-## Usage
-
-Install the dependencies and build the app:
-
-```bash
-yarn Install
-yarn build
-```
-
-Setup the database (Recommended to use the docker-compose file
-
-```bash
-docker compose up -d
-```
-
-Copy and edit the settings file
-
-```bash
-cp .env.template .env
-```
-
-> **NOTE:** Make sure you do *not* check in these files! These contain
-sensitive information and should be treated as private.
-
-If you're not using `DB_SYNC=true` in `.env`, make sure to migrate the database
-
-```bash
-yarn db:up
-```
-
-Start the bot
-
-```bash
-yarn start
-```
+# card-drop
diff --git a/database/0.6/1713289062969-user/Up/01-table/User.sql b/database/0.6/1713289062969-user/Up/01-table/User.sql
deleted file mode 100644
index 86a5d36..0000000
--- a/database/0.6/1713289062969-user/Up/01-table/User.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-CREATE TABLE `user` (
- `Id` varchar(255) NOT NULL,
- `WhenCreated` datetime NOT NULL,
- `WhenUpdated` datetime NOT NULL,
- `Currency` int NOT NULL,
- PRIMARY KEY (`Id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
\ No newline at end of file
diff --git a/database/0.6/1715967355818-daily/Up/01-table/User.sql b/database/0.6/1715967355818-daily/Up/01-table/User.sql
deleted file mode 100644
index 8699650..0000000
--- a/database/0.6/1715967355818-daily/Up/01-table/User.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-ALTER TABLE `user`
-ADD LastUsedDaily datetime null;
\ No newline at end of file
diff --git a/database/0.9/1729962056556-createUserEffect/Down/01-table-userEffect.sql b/database/0.9/1729962056556-createUserEffect/Down/01-table-userEffect.sql
deleted file mode 100644
index ca2a800..0000000
--- a/database/0.9/1729962056556-createUserEffect/Down/01-table-userEffect.sql
+++ /dev/null
@@ -1 +0,0 @@
-DROP TABLE `user_effect`;
diff --git a/database/0.9/1729962056556-createUserEffect/Up/01-table-userEffect.sql b/database/0.9/1729962056556-createUserEffect/Up/01-table-userEffect.sql
deleted file mode 100644
index 17c1811..0000000
--- a/database/0.9/1729962056556-createUserEffect/Up/01-table-userEffect.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE TABLE `user_effect` (
- `Id` varchar(255) NOT NULL,
- `WhenCreated` datetime NOT NULL,
- `WhenUpdated` datetime NOT NULL,
- `Name` varchar(255) NOT NULL,
- `UserId` varchar(255) NOT NULL,
- `Unused` int NOT NULL DEFAULT 0,
- `WhenExpires` datetime NULL,
- PRIMARY KEY (`Id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml
new file mode 100644
index 0000000..faac7fb
--- /dev/null
+++ b/docker-compose.prod.yml
@@ -0,0 +1,31 @@
+version: "3.9"
+
+volumes:
+ prod_database_data:
+
+services:
+ # discord:
+ # build: .
+
+ database:
+ image: mysql/mysql-server
+ command: --default-authentication-plugin=mysql_native_password
+ restart: always
+ environment:
+ - MYSQL_DATABASE=carddrop
+ - MYSQL_USER=prod
+ - MYSQL_PASSWORD=prod
+ - MYSQL_ROOT_PASSWORD=root
+ - MYSQL_ROOT_HOST=0.0.0.0
+ ports:
+ - "3321:3306"
+ volumes:
+ - prod_database_data:/var/lib/mysql
+
+ phpmyadmin:
+ image: phpmyadmin
+ restart: always
+ ports:
+ - "3322:80"
+ environment:
+ - PMA_ARBITRARY=1
\ No newline at end of file
diff --git a/docker-compose.stage.yml b/docker-compose.stage.yml
new file mode 100644
index 0000000..a6666a4
--- /dev/null
+++ b/docker-compose.stage.yml
@@ -0,0 +1,31 @@
+version: "3.9"
+
+volumes:
+ stage_database_data:
+
+services:
+ # discord:
+ # build: .
+
+ database:
+ image: mysql/mysql-server
+ command: --default-authentication-plugin=mysql_native_password
+ restart: always
+ environment:
+ - MYSQL_DATABASE=carddrop
+ - MYSQL_USER=stage
+ - MYSQL_PASSWORD=stage
+ - MYSQL_ROOT_PASSWORD=root
+ - MYSQL_ROOT_HOST=0.0.0.0
+ ports:
+ - "3311:3306"
+ volumes:
+ - stage_database_data:/var/lib/mysql
+
+ phpmyadmin:
+ image: phpmyadmin
+ restart: always
+ ports:
+ - "3312:80"
+ environment:
+ - PMA_ARBITRARY=1
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 025a674..c0b5077 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,17 +1,31 @@
version: "3.9"
+volumes:
+ dev_database_data:
+
services:
+ # discord:
+ # build: .
+
database:
image: mysql/mysql-server
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
- - MYSQL_DATABASE=$DB_NAME
- - MYSQL_USER=$DB_AUTH_USER
- - MYSQL_PASSWORD=$DB_AUTH_PASS
- - MYSQL_ROOT_PASSWORD=$DB_AUTH_PASS
- - MYSQL_ROOT_HOST=$DB_ROOT_HOST
+ - MYSQL_DATABASE=carddrop
+ - MYSQL_USER=dev
+ - MYSQL_PASSWORD=dev
+ - MYSQL_ROOT_PASSWORD=root
+ - MYSQL_ROOT_HOST=0.0.0.0
ports:
- - "$DB_PORT:3306"
+ - "3301:3306"
volumes:
- - $DB_DATA_LOCATION:/var/lib/mysql
\ No newline at end of file
+ - dev_database_data:/var/lib/mysql
+
+ phpmyadmin:
+ image: phpmyadmin
+ restart: always
+ ports:
+ - "3302:80"
+ environment:
+ - PMA_ARBITRARY=1
\ No newline at end of file
diff --git a/docs/cards.md b/docs/cards.md
deleted file mode 100644
index f0be28f..0000000
--- a/docs/cards.md
+++ /dev/null
@@ -1,120 +0,0 @@
-# Cards
-
-This document will describe how to add cards to the bot. This is from the
-perspective of the development side and doesn't go into details of syncing
-from an external place such as with the Google Drive Sync function.
-
-The cards will be put into the `$DATA_DIR/cards` folder. `$DATA_DIR` is
-configured in the `.env` file.
-
-## Folder Structure
-
-The general structure of the cards folder is as follows:
-
-```
-cards # The main cards folder
-| Series 1 # Series folder
-| | BRONZE # Type folder
-| | | 1000.jpg # Card image
-| | | 1001.jpg
-| | 1.json # Card metadata file
-| Series 2
-| | SILVER
-| | | 2000.jpg
-| | 2.json
-```
-
-- The root of the cards folder will have a folder foor each series
-- Each series will contain folders for each of the card types containing the
- card images.
-- The series folder will also contain a metadata JSON folder containing the
- metadata of the cards within that series.
-
-The bot when loading will search the cards folder recursively for each json,
-and then read them to determine what cards should be used for the bot.
-
-## Series Metadata
-
-An example of what the metadata files could look like are as follows:
-
-```json
-[
- {
- "id": 1,
- "name": "Series 1",
- "cards": [
- {
- "id": "1000",
- "name": "Card 1000 of Series 1",
- "type": 1,
- "path": "Series 1/BRONZE/1000.jpg"
- },
- {
- "id": "1001",
- "name": "Card 1001 of Series 1",
- "type": 1,
- "path": "Series 2/BRONZE?1001.jpg",
- "subseries": "Custom Series Name"
- }
- ]
- }
-]
-```
-
-This file will load a series called "Series 1" with the id of 1, containing 2
-cards:
-- Card 1000, with type 1 (Bronze), with its image located at (from root)
- "Series 1/BRONZE/1000.jpg"
-- Card 1001 is the same, except has a custom "subseries" name which will
- override the main series name if shown, helpful for an "other" category.
-
-### Card Type
-
-
-
-
- Number |
- Name |
- Chance |
- Sacrifice Cost (Coins) |
-
-
-
-
- 0 |
- Unknown |
- - |
- - |
-
-
- 1 |
- Bronze |
- 62% |
- 5 |
-
-
- 2 |
- Silver |
- 31% |
- 10 |
-
-
- 3 |
- Gold |
- 4.4% |
- 30 |
-
-
- 4 |
- Manga |
- 2% |
- 40 |
-
-
- 5 |
- Legendary |
- 0.6% |
- 100 |
-
-
-
diff --git a/docs/google-drive-sync.md b/docs/google-drive-sync.md
deleted file mode 100644
index 1847f70..0000000
--- a/docs/google-drive-sync.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Google Drive Sync
-
-The bot relies on an external sync between the local file system and Google
-Drive in order to get newer cards to the bot. This is done using
-[Rclone](https://rclone.org/).
-
-The process for this is done by once the `/gdrivesync` command is executed by
-an admin user of the bot, which calls the system shell to run rclone to the
-card folder.
-
-- The admins who can run the command is specifed in `$BOT_ADMINS`, which are
-discord user ids separated by commas.
-- The card folder is located at `$DATA_DIR/cards`.
-- The source requires rclone's remote to be setup as `card-drop-gdrive`.
-
-The exact command it runs is: `rclone sync card-drop-gdrive: $DATA_DIR/cards`.
-
-Once it syncs the database will reread all the cards for updates and then load
-them into the bot to be given.
-
-## Safe Mode
-Safe mode is a function of the bot which disables the `/drop` command function
-and any other functions which rely on the card metadata. Safe mode is activated
-upon failure to sync properly. It is disabled once errors are resolved.
-
-The reason for safe mode is to ensure that the bot stays online for admins to
-be able to resync the bot in case there's an error without it crashing.
-
-## Google Drive
-Please see the Rclone documentation on how to setup a remote using Google
-Drive. You will need to make an app password for this.
-
-- scope: `drive.readonly`
-- root\_folder\_id: The folder id where the cards are located, this can be found
- by looking at the url when viewing the folder in the browser in google drive.
diff --git a/eslint.config.mjs b/eslint.config.mjs
deleted file mode 100644
index 64bf3e2..0000000
--- a/eslint.config.mjs
+++ /dev/null
@@ -1,55 +0,0 @@
-import js from "@eslint/js";
-import ts from "typescript-eslint";
-
-export default [
- {
- ignores: [
- "**/dist/",
- "eslint.config.mjs",
- "jest.config.cjs",
- "jest.setup.js",
- "**/.temp/**/*"
- ],
- },
- js.configs.recommended,
- ...ts.configs.recommended,
- {
- languageOptions: {
- globals: {
- exports: "writable",
- module: "writable",
- require: "writable",
- process: "writable",
- console: "writable",
- jest: "writable",
- },
-
- ecmaVersion: 6,
- sourceType: "script",
- },
-
- files: [
- "./src",
- "./tests"
- ],
-
- rules: {
- camelcase: "error",
- "brace-style": ["error", "1tbs"],
- "comma-dangle": ["error", "never"],
-
- "comma-spacing": ["error", {
- before: false,
- after: true,
- }],
-
- "comma-style": ["error", "last"],
- "arrow-body-style": ["error", "as-needed"],
- "arrow-parens": ["error", "as-needed"],
- "arrow-spacing": "error",
- "no-var": "error",
- "prefer-template": "error",
- "prefer-const": "error",
- },
- }
-];
diff --git a/jest.setup.js b/jest.setup.js
index 8e9ae9a..d583d1a 100644
--- a/jest.setup.js
+++ b/jest.setup.js
@@ -1,4 +1,3 @@
jest.setTimeout(1 * 1000); // 1 second
jest.resetModules();
-jest.resetAllMocks();
-jest.useFakeTimers();
\ No newline at end of file
+jest.resetAllMocks();
\ No newline at end of file
diff --git a/package.json b/package.json
index b8c7536..ebe4870 100644
--- a/package.json
+++ b/package.json
@@ -1,64 +1,50 @@
{
"name": "card-drop",
- "version": "0.9.2",
+ "version": "0.2.0",
"main": "./dist/bot.js",
"typings": "./dist",
"scripts": {
"clean": "rm -rf node_modules/ dist/",
"build": "tsc",
"start": "node ./dist/bot.js",
- "test": "jest",
- "lint": "eslint .",
- "lint:fix": "eslint . --fix",
+ "test": "jest --passWithNoTests",
"db:up": "typeorm migration:run -d dist/database/dataSources/appDataSource.js",
"db:down": "typeorm migration:revert -d dist/database/dataSources/appDataSource.js",
"db:create": "typeorm migration:create ./src/database/migrations/app/new",
"release": "np --no-publish"
},
- "repository": "https://git.vylpes.xyz/External/card-drop.git",
+ "repository": "https://gitea.vylpes.xyz/External/card-drop.git",
"author": "Ethan Lane ",
"license": "MIT",
"bugs": {
- "url": "https//git.vylpes.xyz/External/card-drop/issues",
+ "url": "https//gitea.vylpes.xyz/External/card-drop/issues",
"email": "helpdesk@vylpes.com"
},
"homepage": "https://gitea.vylpes.xyz/External/card-drop",
"funding": "https://ko-fi.com/vylpes",
"dependencies": {
"@discordjs/rest": "^2.0.0",
- "@types/clone-deep": "^4.0.4",
- "@types/express": "^5.0.0",
- "@types/jest": "^29.5.14",
- "@types/uuid": "^10.0.0",
- "axios": "^1.8.4",
+ "@types/express": "^4.17.20",
+ "@types/jest": "^29.0.0",
+ "@types/uuid": "^9.0.0",
"body-parser": "^1.20.2",
- "canvas": "^2.11.2",
- "clone-deep": "^4.0.1",
- "cron": "^3.1.7",
- "discord.js": "^14.16.3",
+ "discord.js": "^14.3.0",
"dotenv": "^16.0.0",
"express": "^4.18.2",
- "fuse.js": "^7.0.0",
- "glob": "^11.0.0",
"jest": "^29.0.0",
"jest-mock-extended": "^3.0.0",
- "jimp": "^1.6.0",
- "minimatch": "9.0.5",
+ "minimatch": "9.0.3",
"mysql": "^2.18.1",
+ "sqlite3": "^5.1.6",
"ts-jest": "^29.0.0",
- "typeorm": "0.3.20",
- "winston": "^3.15.0",
- "winston-daily-rotate-file": "^5.0.0",
- "winston-discord-transport": "^1.3.0"
+ "typeorm": "0.3.17"
+ },
+ "resolutions": {
+ "**/undici": "^5.26.2"
},
- "resolutions": {},
"devDependencies": {
- "@types/node": "^22.8.1",
- "@typescript-eslint/eslint-plugin": "^8.11.0",
- "@typescript-eslint/parser": "^8.11.0",
- "eslint": "^9.13.0",
- "np": "^10.0.7",
- "typescript": "^5.0.0",
- "typescript-eslint": "^8.11.0"
+ "@types/node": "^20.0.0",
+ "np": "^8.0.4",
+ "typescript": "^5.0.0"
}
}
diff --git a/renovate.json b/renovate.json
index 7fa351c..e36bf04 100644
--- a/renovate.json
+++ b/renovate.json
@@ -1,5 +1,4 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
- "baseBranches": ["develop"],
- "labels": ["type/dependencies"]
+ "baseBranches": ["develop"]
}
diff --git a/scripts/deploy_prod.sh b/scripts/deploy_prod.sh
index 84f35c6..c768956 100644
--- a/scripts/deploy_prod.sh
+++ b/scripts/deploy_prod.sh
@@ -3,8 +3,21 @@
export PATH="$HOME/.yarn/bin:$PATH"
export PATH="$HOME/.nodeuse/bin:$PATH"
-cd ~/apps/card-drop/card-drop_prod
-docker compose --file docker-compose.prod.yml up -d
-sleep 10
-cp .prod.env .env
-pm2 restart card-drop_prod || pm2 start --name card-drop_prod dist/bot.js
\ No newline at end of file
+export BOT_TOKEN=$(cat $HOME/scripts/card-drop/prod_key.txt)
+
+cd ~/apps/card-drop/card-drop_prod \
+&& git checkout main \
+&& git fetch \
+&& git pull \
+&& docker compose --file docker-compose.prod.yml down \
+&& (pm2 stop card-drop_prod || true) \
+&& (pm2 delete card-drop_prod || true) \
+&& cp .prod.env .env \
+&& yarn clean \
+&& yarn install --frozen-lockfile \
+&& yarn build \
+&& docker compose --file docker-compose.prod.yml up -d \
+&& echo "Sleeping for 10 seconds to let database load..." \
+&& sleep 10 \
+&& yarn run db:up \
+&& NODE_ENV=production pm2 start --name card-drop_prod dist/bot.js
\ No newline at end of file
diff --git a/scripts/deploy_stage.sh b/scripts/deploy_stage.sh
index 9287b53..5638ba7 100644
--- a/scripts/deploy_stage.sh
+++ b/scripts/deploy_stage.sh
@@ -3,8 +3,21 @@
export PATH="$HOME/.yarn/bin:$PATH"
export PATH="$HOME/.nodeuse/bin:$PATH"
-cd ~/apps/card-drop/card-drop_stage
-docker compose --file docker-compose.stage.yml up -d
-sleep 10
-cp .stage.env .env
-pm2 restart card-drop_stage || pm2 start --name card-drop_stage dist/bot.js
\ No newline at end of file
+export BOT_TOKEN=$(cat $HOME/scripts/card-drop/stage_key.txt)
+
+cd ~/apps/card-drop/card-drop_stage \
+&& git checkout develop \
+&& git fetch \
+&& git pull \
+&& docker compose --file docker-compose.stage.yml down \
+&& (pm2 stop card-drop_stage || true) \
+&& (pm2 delete card-drop_stage || true) \
+&& cp .stage.env .env \
+&& yarn clean \
+&& yarn install --frozen-lockfile \
+&& yarn build \
+&& docker compose --file docker-compose.stage.yml up -d \
+&& echo "Sleeping for 10 seconds to let database load..." \
+&& sleep 10 \
+&& yarn run db:up \
+&& NODE_ENV=production pm2 start --name card-drop_stage dist/bot.js
\ No newline at end of file
diff --git a/src/Functions/CardMetadataFunction.ts b/src/Functions/CardMetadataFunction.ts
deleted file mode 100644
index 9b10665..0000000
--- a/src/Functions/CardMetadataFunction.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import { readFileSync } from "fs";
-import path from "path";
-import Config from "../database/entities/app/Config";
-import { glob } from "glob";
-import { SeriesMetadata } from "../contracts/SeriesMetadata";
-import { CoreClient } from "../client/client";
-import AppLogger from "../client/appLogger";
-import {CardRarity} from "../constants/CardRarity";
-
-export interface CardMetadataResult {
- IsSuccess: boolean;
- ErrorMessage?: string;
-}
-
-export interface FindMetadataResult {
- IsSuccess: boolean;
- Result?: SeriesMetadata[];
- Error?: {
- File: string;
- Message: string;
- };
-}
-
-export default class CardMetadataFunction {
- public static async Execute(overrideSafeMode: boolean = false): Promise {
- AppLogger.LogInfo("Functions/CardMetadataFunction", "Executing");
-
- if (!overrideSafeMode && await Config.GetValue("safemode") == "true") {
- AppLogger.LogWarn("Functions/CardMetadataFunction", "Safe Mode is active, refusing to resync");
-
- return {
- IsSuccess: false,
- ErrorMessage: "Safe mode is on and not overridden",
- };
- }
-
- const cardResult = await this.FindMetadataJSONs();
-
- if (cardResult.IsSuccess) {
- CoreClient.Cards = cardResult.Result!;
-
- const allCards = CoreClient.Cards.flatMap(x => x.cards);
-
- const totalCards = allCards.length;
- const bronzeCards = allCards.filter(x => x.type == CardRarity.Bronze)
- .length;
- const silverCards = allCards.filter(x => x.type == CardRarity.Silver)
- .length;
- const goldCards = allCards.filter(x => x.type == CardRarity.Gold)
- .length;
- const mangaCards = allCards.filter(x => x.type == CardRarity.Manga)
- .length;
- const legendaryCards = allCards.filter(x => x.type == CardRarity.Legendary)
- .length;
-
- AppLogger.LogInfo("Functions/CardMetadataFunction", `Loaded ${totalCards} cards to database (${bronzeCards} bronze, ${silverCards} silver, ${goldCards} gold, ${mangaCards} manga, ${legendaryCards} legendary)`);
-
- const duplicateCards = CoreClient.Cards.flatMap(x => x.cards)
- .filter((card, index, self) => self.findIndex(c => c.id === card.id) !== index);
-
- if (duplicateCards.length > 0) {
- AppLogger.LogWarn("Functions/CardMetadataFunction", `Duplicate card ids found: ${duplicateCards.flatMap(x => x.id).join(", ")}`);
- }
-
- return {
- IsSuccess: true,
- };
- }
-
- await Config.SetValue("safemode", "true");
- AppLogger.LogError("Functions/CardMetadataFunction", `Safe Mode activated due to error: ${cardResult.Error!.Message}`);
-
- return {
- IsSuccess: false,
- ErrorMessage: `${cardResult.Error!.File}: ${cardResult.Error!.Message}`,
- };
- }
-
- private static async FindMetadataJSONs(): Promise {
- const res: SeriesMetadata[] = [];
-
- const seriesJSONs = await glob(path.join(process.env.DATA_DIR!, "cards", "/**/*.json"));
-
- for (const jsonPath of seriesJSONs) {
- try {
- AppLogger.LogVerbose("Functions/CardMetadataFunction", `Reading file ${jsonPath}`);
- const jsonFile = readFileSync(jsonPath);
- const parsedJson: SeriesMetadata[] = JSON.parse(jsonFile.toString());
-
- res.push(...parsedJson);
- } catch (e) {
- AppLogger.LogError("Functions/CardMetadataFunction", `Error reading file ${jsonPath}: ${e}`);
-
- return {
- IsSuccess: false,
- Error: {
- File: jsonPath,
- Message: `${e}`,
- }
- };
- }
- }
-
- return {
- IsSuccess: true,
- Result: res,
- };
- }
-}
\ No newline at end of file
diff --git a/src/Functions/CardSetupFunction.ts b/src/Functions/CardSetupFunction.ts
new file mode 100644
index 0000000..037b87b
--- /dev/null
+++ b/src/Functions/CardSetupFunction.ts
@@ -0,0 +1,102 @@
+import { existsSync, readdirSync } from "fs";
+import CardDataSource from "../database/dataSources/cardDataSource";
+import Card from "../database/entities/card/Card";
+import Series from "../database/entities/card/Series";
+import path from "path";
+import { CardRarity, CardRarityToString } from "../constants/CardRarity";
+import Config from "../database/entities/app/Config";
+
+export default class CardSetupFunction {
+ public static async Execute() {
+ if (await Config.GetValue('safemode') == "true") return;
+
+ try {
+ await this.ClearDatabase();
+ await this.ReadSeries();
+ await this.ReadCards();
+ } catch {
+ await Config.SetValue('safemode', 'true');
+ }
+ }
+
+ private static async ClearDatabase() {
+ const cardRepository = CardDataSource.getRepository(Card);
+ await cardRepository.clear();
+
+ const seriesRepository = CardDataSource.getRepository(Series);
+ await seriesRepository.clear();
+ }
+
+ private static async ReadSeries() {
+ const seriesDir = readdirSync(path.join(process.cwd(), 'cards'));
+
+ const seriesRepository = CardDataSource.getRepository(Series);
+
+ const seriesToSave: Series[] = [];
+
+ for (let dir of seriesDir) {
+ const dirPart = dir.split(' ');
+
+ const seriesId = dirPart.shift();
+ const seriesName = dirPart.join(' ');
+
+ const series = new Series(seriesId!, seriesName, dir);
+
+ seriesToSave.push(series);
+ }
+
+ await seriesRepository.save(seriesToSave);
+ }
+
+ private static async ReadCards() {
+ const loadedSeries = await Series.FetchAll(Series, [ "Cards", "Cards.Series" ]);
+
+ const cardRepository = CardDataSource.getRepository(Card);
+
+ const cardsToSave: Card[] = [];
+
+ for (let series of loadedSeries) {
+ const cardDirBronze = this.GetCardFiles(CardRarity.Bronze, series);
+ const cardDirGold = this.GetCardFiles(CardRarity.Gold, series);
+ const cardDirLegendary = this.GetCardFiles(CardRarity.Legendary, series);
+ const cardDirSilver = this.GetCardFiles(CardRarity.Silver, series);
+ const cardDirManga = this.GetCardFiles(CardRarity.Manga, series);
+
+ cardsToSave.push(
+ ...this.GenerateCardData(cardDirBronze, CardRarity.Bronze, series),
+ ...this.GenerateCardData(cardDirGold, CardRarity.Gold, series),
+ ...this.GenerateCardData(cardDirLegendary, CardRarity.Legendary, series),
+ ...this.GenerateCardData(cardDirSilver, CardRarity.Silver, series),
+ ...this.GenerateCardData(cardDirManga, CardRarity.Manga, series)
+ );
+ }
+
+ await cardRepository.save(cardsToSave);
+
+ console.log(`Loaded ${cardsToSave.length} cards to database`);
+ }
+
+ private static GenerateCardData(files: string[], rarity: CardRarity, series: Series): Card[] {
+ const result: Card[] = [];
+
+ for (let file of files.filter(x => !x.startsWith('.') && (x.endsWith('.png') || x.endsWith('.jpg') || x.endsWith('.gif')))) {
+ const filePart = file.split('.');
+
+ const cardId = filePart[0];
+ const cardName = filePart[0];
+
+ const card = new Card(cardId, cardName, rarity, path.join(process.cwd(), 'cards', series.Path, CardRarityToString(rarity).toUpperCase(), file), file, series);
+
+ result.push(card);
+ }
+
+ return result;
+ }
+
+ private static GetCardFiles(rarity: CardRarity, series: Series): string[] {
+ const folder = path.join(process.cwd(), 'cards', series.Path, CardRarityToString(rarity).toUpperCase());
+ const folderExists = existsSync(folder);
+
+ return folderExists ? readdirSync(folder) : [];
+ }
+}
\ No newline at end of file
diff --git a/src/bot.ts b/src/bot.ts
index 871b927..8bddbf4 100644
--- a/src/bot.ts
+++ b/src/bot.ts
@@ -14,8 +14,6 @@ const requiredConfigs: string[] = [
"BOT_OWNERID",
"BOT_CLIENTID",
"BOT_ENV",
- "BOT_ADMINS",
- "DATA_DIR",
"DB_HOST",
"DB_PORT",
"DB_AUTH_USER",
@@ -23,7 +21,8 @@ const requiredConfigs: string[] = [
"DB_SYNC",
"DB_LOGGING",
"EXPRESS_PORT",
-];
+ "GDRIVESYNC_WHITELIST",
+]
requiredConfigs.forEach(config => {
if (!process.env[config]) {
@@ -37,10 +36,10 @@ const client = new CoreClient([
]);
Registry.RegisterCommands();
+Registry.RegisterEvents();
Registry.RegisterButtonEvents();
-Registry.RegisterStringDropdownEvents();
-if (!existsSync(`${process.env.DATA_DIR}/cards`) && process.env.GDRIVESYNC_AUTO && process.env.GDRIVESYNC_AUTO == "true") {
+if (!existsSync(`${process.cwd()}/cards`) && process.env.GDRIVESYNC_AUTO && process.env.GDRIVESYNC_AUTO == 'true') {
console.log("Card directory not found, syncing...");
CoreClient.AllowDrops = false;
@@ -50,7 +49,7 @@ if (!existsSync(`${process.env.DATA_DIR}/cards`) && process.env.GDRIVESYNC_AUTO
console.error(error.code);
throw `Error while running sync command. Code: ${error.code}`;
} else {
- console.log("Synced successfully.");
+ console.log('Synced successfully.');
CoreClient.AllowDrops = true;
}
});
diff --git a/src/buttonEvents/Claim.ts b/src/buttonEvents/Claim.ts
index d139f42..0db89fe 100644
--- a/src/buttonEvents/Claim.ts
+++ b/src/buttonEvents/Claim.ts
@@ -1,44 +1,27 @@
import { ButtonInteraction } from "discord.js";
import { ButtonEvent } from "../type/buttonEvent";
import Inventory from "../database/entities/app/Inventory";
+import { CoreClient } from "../client/client";
import { default as eClaim } from "../database/entities/app/Claim";
-import AppLogger from "../client/appLogger";
-import User from "../database/entities/app/User";
-import CardConstants from "../constants/CardConstants";
-import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper";
-import DropEmbedHelper from "../helpers/DropHelpers/DropEmbedHelper";
export default class Claim extends ButtonEvent {
public override async execute(interaction: ButtonInteraction) {
if (!interaction.guild || !interaction.guildId) return;
- if (!interaction.channel) return;
- if (!interaction.channel.isSendable()) return;
- await interaction.deferUpdate();
-
- const cardNumber = interaction.customId.split(" ")[1];
- const claimId = interaction.customId.split(" ")[2];
- const droppedBy = interaction.customId.split(" ")[3];
+ const cardNumber = interaction.customId.split(' ')[1];
+ const claimId = interaction.customId.split(' ')[2];
+ const droppedBy = interaction.customId.split(' ')[3];
const userId = interaction.user.id;
- const whenDropped = interaction.message.createdAt;
- const lastClaimableDate = new Date(Date.now() - (1000 * 60 * 2)); // 2 minutes ago
-
- if (whenDropped < lastClaimableDate) {
- await interaction.channel.send(`${interaction.user}, Cards can only be claimed within 2 minutes of it being dropped!`);
- return;
- }
-
- AppLogger.LogSilly("Button/Claim", `Parameters: cardNumber=${cardNumber}, claimId=${claimId}, droppedBy=${droppedBy}, userId=${userId}`);
-
- const user = await User.FetchOneById(User, userId) || new User(userId, CardConstants.StartingCurrency);
-
- AppLogger.LogSilly("Button/Claim", `${user.Id} has ${user.Currency} currency`);
-
const claimed = await eClaim.FetchOneByClaimId(claimId);
if (claimed) {
- await interaction.channel.send(`${interaction.user}, This card has already been claimed!`);
+ await interaction.reply('This card has already been claimed');
+ return;
+ }
+
+ if (claimId == CoreClient.ClaimId && userId != droppedBy) {
+ await interaction.reply('The latest dropped card can only be claimed by the user who dropped it');
return;
}
@@ -47,7 +30,7 @@ export default class Claim extends ButtonEvent {
if (!inventory) {
inventory = new Inventory(userId, cardNumber, 1);
} else {
- inventory.AddQuantity(1);
+ inventory.SetQuantity(inventory.Quantity + 1);
}
await inventory.Save(Inventory, inventory);
@@ -57,22 +40,6 @@ export default class Claim extends ButtonEvent {
await claim.Save(eClaim, claim);
- const card = GetCardsHelper.GetCardByCardNumber(cardNumber);
-
- if (!card) {
- AppLogger.LogError("Button/Claim", `Unable to find card, ${cardNumber}`);
-
- return;
- }
-
- const imageFileName = card.card.path.split("/").pop()!;
-
- const embed = DropEmbedHelper.GenerateDropEmbed(card, inventory.Quantity, imageFileName, interaction.user.username, user.Currency);
- const row = DropEmbedHelper.GenerateDropButtons(card, claimId, interaction.user.id, true);
-
- await interaction.editReply({
- embeds: [ embed ],
- components: [ row ],
- });
+ await interaction.reply(`Card claimed by ${interaction.user}`);
}
-}
+}
\ No newline at end of file
diff --git a/src/buttonEvents/Effects.ts b/src/buttonEvents/Effects.ts
deleted file mode 100644
index cd1a765..0000000
--- a/src/buttonEvents/Effects.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { ButtonInteraction } from "discord.js";
-import { ButtonEvent } from "../type/buttonEvent";
-import List from "./Effects/List";
-import Use from "./Effects/Use";
-import AppLogger from "../client/appLogger";
-import Buy from "./Effects/Buy";
-
-export default class Effects extends ButtonEvent {
- public override async execute(interaction: ButtonInteraction) {
- const action = interaction.customId.split(" ")[1];
-
- switch (action) {
- case "list":
- await List(interaction);
- break;
- case "use":
- await Use.Execute(interaction);
- break;
- case "buy":
- await Buy.Execute(interaction);
- break;
- default:
- AppLogger.LogError("Buttons/Effects", `Unknown action, ${action}`);
- }
- }
-}
diff --git a/src/buttonEvents/Effects/Buy.ts b/src/buttonEvents/Effects/Buy.ts
deleted file mode 100644
index 49cc75f..0000000
--- a/src/buttonEvents/Effects/Buy.ts
+++ /dev/null
@@ -1,120 +0,0 @@
-import {ButtonInteraction} from "discord.js";
-import AppLogger from "../../client/appLogger";
-import EffectHelper from "../../helpers/EffectHelper";
-import EmbedColours from "../../constants/EmbedColours";
-import User from "../../database/entities/app/User";
-import {EffectDetails} from "../../constants/EffectDetails";
-
-export default class Buy {
- public static async Execute(interaction: ButtonInteraction) {
- const subaction = interaction.customId.split(" ")[2];
-
- switch (subaction) {
- case "confirm":
- await this.Confirm(interaction);
- break;
- case "cancel":
- await this.Cancel(interaction);
- break;
- default:
- AppLogger.LogError("Buy", `Unknown subaction, effects ${subaction}`);
- }
- }
-
- private static async Confirm(interaction: ButtonInteraction) {
- const id = interaction.customId.split(" ")[3];
- const quantity = interaction.customId.split(" ")[4];
-
- if (!id || !quantity) {
- AppLogger.LogError("Buy Confirm", "Not enough parameters");
- return;
- }
-
- const effectDetail = EffectDetails.get(id);
-
- if (!effectDetail) {
- AppLogger.LogError("Buy Confirm", "Effect detail not found!");
- return;
- }
-
- const quantityNumber = Number(quantity);
-
- if (!quantityNumber || quantityNumber < 1) {
- AppLogger.LogError("Buy Confirm", "Invalid number");
- return;
- }
-
- const totalCost = effectDetail.cost * quantityNumber;
-
- const user = await User.FetchOneById(User, interaction.user.id);
-
- if (!user) {
- AppLogger.LogError("Buy Confirm", "Unable to find user");
- return;
- }
-
- if (user.Currency < totalCost) {
- interaction.reply(`You don't have enough currency to buy this! You have \`${user.Currency} Currency\` and need \`${totalCost} Currency\`!`);
- return;
- }
-
- user.RemoveCurrency(totalCost);
- await user.Save(User, user);
-
- await EffectHelper.AddEffectToUserInventory(interaction.user.id, id, quantityNumber);
-
- const generatedEmbed = await EffectHelper.GenerateEffectBuyEmbed(interaction.user.id, id, quantityNumber, true);
-
- if (typeof generatedEmbed == "string") {
- await interaction.reply(generatedEmbed);
- return;
- }
-
- generatedEmbed.embed.setColor(EmbedColours.Success);
- generatedEmbed.embed.setFooter({ text: "Purchased" });
-
- await interaction.update({
- embeds: [ generatedEmbed.embed ],
- components: [ generatedEmbed.row ],
- });
- }
-
- private static async Cancel(interaction: ButtonInteraction) {
- const id = interaction.customId.split(" ")[3];
- const quantity = interaction.customId.split(" ")[4];
-
- if (!id || !quantity) {
- AppLogger.LogError("Buy Cancel", "Not enough parameters");
- return;
- }
-
- const effectDetail = EffectDetails.get(id);
-
- if (!effectDetail) {
- AppLogger.LogError("Buy Cancel", "Effect detail not found!");
- return;
- }
-
- const quantityNumber = Number(quantity);
-
- if (!quantityNumber || quantityNumber < 1) {
- AppLogger.LogError("Buy Cancel", "Invalid number");
- return;
- }
-
- const generatedEmbed = await EffectHelper.GenerateEffectBuyEmbed(interaction.user.id, id, quantityNumber, true);
-
- if (typeof generatedEmbed == "string") {
- await interaction.reply(generatedEmbed);
- return;
- }
-
- generatedEmbed.embed.setColor(EmbedColours.Error);
- generatedEmbed.embed.setFooter({ text: "Cancelled" });
-
- await interaction.update({
- embeds: [ generatedEmbed.embed ],
- components: [ generatedEmbed.row ],
- });
- }
-}
diff --git a/src/buttonEvents/Effects/List.ts b/src/buttonEvents/Effects/List.ts
deleted file mode 100644
index d86dfce..0000000
--- a/src/buttonEvents/Effects/List.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { ButtonInteraction } from "discord.js";
-import EffectHelper from "../../helpers/EffectHelper";
-
-export default async function List(interaction: ButtonInteraction) {
- const pageOption = interaction.customId.split(" ")[2];
-
- const page = Number(pageOption);
-
- if (!page) {
- await interaction.reply("Page option is not a valid number");
- return;
- }
-
- const result = await EffectHelper.GenerateEffectListEmbed(interaction.user.id, page);
-
- await interaction.update({
- embeds: [ result.embed ],
- components: [ result.row ],
- });
-}
\ No newline at end of file
diff --git a/src/buttonEvents/Effects/Use.ts b/src/buttonEvents/Effects/Use.ts
deleted file mode 100644
index 5bfe2fd..0000000
--- a/src/buttonEvents/Effects/Use.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonInteraction, ButtonStyle, EmbedBuilder } from "discord.js";
-import { EffectDetails } from "../../constants/EffectDetails";
-import EffectHelper from "../../helpers/EffectHelper";
-import EmbedColours from "../../constants/EmbedColours";
-import TimeLengthInput from "../../helpers/TimeLengthInput";
-import AppLogger from "../../client/appLogger";
-
-export default class Use {
- public static async Execute(interaction: ButtonInteraction) {
- const subaction = interaction.customId.split(" ")[2];
-
- switch (subaction) {
- case "confirm":
- await this.UseConfirm(interaction);
- break;
- case "cancel":
- await this.UseCancel(interaction);
- break;
- }
- }
-
- private static async UseConfirm(interaction: ButtonInteraction) {
- const id = interaction.customId.split(" ")[3];
-
- const effectDetail = EffectDetails.get(id);
-
- if (!effectDetail) {
- AppLogger.LogError("Button/Effects/Use", `Effect not found, ${id}`);
-
- await interaction.reply("Effect not found in system!");
- return;
- }
-
- const now = new Date();
-
- const whenExpires = new Date(now.getTime() + effectDetail.duration);
-
- const result = await EffectHelper.UseEffect(interaction.user.id, id, whenExpires);
-
- if (!result) {
- await interaction.reply("Unable to use effect! Please make sure you have it in your inventory and is not on cooldown");
- return;
- }
-
- const embed = new EmbedBuilder()
- .setTitle("Effect Used")
- .setDescription("You now have an active effect!")
- .setColor(EmbedColours.Green)
- .addFields([
- {
- name: "Effect",
- value: effectDetail.friendlyName,
- inline: true,
- },
- {
- name: "Expires",
- value: ``,
- inline: true,
- },
- ]);
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setLabel("Confirm")
- .setCustomId(`effects use confirm ${effectDetail.id}`)
- .setStyle(ButtonStyle.Primary)
- .setDisabled(true),
- new ButtonBuilder()
- .setLabel("Cancel")
- .setCustomId(`effects use cancel ${effectDetail.id}`)
- .setStyle(ButtonStyle.Danger)
- .setDisabled(true),
- ]);
-
- await interaction.update({
- embeds: [ embed ],
- components: [ row ],
- });
- }
-
- private static async UseCancel(interaction: ButtonInteraction) {
- const id = interaction.customId.split(" ")[3];
-
- const effectDetail = EffectDetails.get(id);
-
- if (!effectDetail) {
- AppLogger.LogError("Button/Effects/Cancel", `Effect not found, ${id}`);
-
- await interaction.reply("Effect not found in system!");
- return;
- }
-
- const timeLengthInput = TimeLengthInput.ConvertFromMilliseconds(effectDetail.duration);
-
- const embed = new EmbedBuilder()
- .setTitle("Effect Use Cancelled")
- .setDescription("The effect from your inventory has not been used")
- .setColor(EmbedColours.Grey)
- .addFields([
- {
- name: "Effect",
- value: effectDetail.friendlyName,
- inline: true,
- },
- {
- name: "Expires",
- value: timeLengthInput.GetLengthShort(),
- inline: true,
- },
- ]);
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setLabel("Confirm")
- .setCustomId(`effects use confirm ${effectDetail.id}`)
- .setStyle(ButtonStyle.Primary)
- .setDisabled(true),
- new ButtonBuilder()
- .setLabel("Cancel")
- .setCustomId(`effects use cancel ${effectDetail.id}`)
- .setStyle(ButtonStyle.Danger)
- .setDisabled(true),
- ]);
-
- await interaction.update({
- embeds: [ embed ],
- components: [ row ],
- });
- }
-}
diff --git a/src/buttonEvents/Inventory.ts b/src/buttonEvents/Inventory.ts
deleted file mode 100644
index 73c7019..0000000
--- a/src/buttonEvents/Inventory.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { ButtonInteraction } from "discord.js";
-import { ButtonEvent } from "../type/buttonEvent";
-import InventoryHelper from "../helpers/InventoryHelper";
-import AppLogger from "../client/appLogger";
-
-export default class Inventory extends ButtonEvent {
- public override async execute(interaction: ButtonInteraction) {
- if (!interaction.guild) return;
-
- const userid = interaction.customId.split(" ")[1];
- const page = interaction.customId.split(" ")[2];
-
- AppLogger.LogSilly("Button/Inventory", `Parameters: userid=${userid}, page=${page}`);
-
- await interaction.deferUpdate();
-
- const member = interaction.guild.members.cache.find(x => x.id == userid) || await interaction.guild.members.fetch(userid);
-
- if (!member) {
- await interaction.reply("Unable to find user.");
- return;
- }
-
- try {
- AppLogger.LogVerbose("Button/Inventory", `Generating inventory page ${page} for ${member.user.username} with id ${member.user.id}`);
-
- const embed = await InventoryHelper.GenerateInventoryPage(member.user.username, member.user.id, Number(page));
-
- if (!embed) {
- await interaction.followUp("No page for user found.");
- return;
- }
-
- await interaction.editReply({
- files: [ embed.image ],
- embeds: [ embed.embed ],
- components: [ embed.row1, embed.row2 ],
- });
- } catch (e) {
- AppLogger.LogError("Button/Inventory", `Error generating inventory page for ${member.user.username} with id ${member.user.id}: ${e}`);
-
- await interaction.followUp("An error has occurred running this command.");
- }
- }
-}
diff --git a/src/buttonEvents/Multidrop.ts b/src/buttonEvents/Multidrop.ts
deleted file mode 100644
index e88d6ef..0000000
--- a/src/buttonEvents/Multidrop.ts
+++ /dev/null
@@ -1,222 +0,0 @@
-import { AttachmentBuilder, ButtonInteraction, EmbedBuilder } from "discord.js";
-import { ButtonEvent } from "../type/buttonEvent";
-import AppLogger from "../client/appLogger";
-import Inventory from "../database/entities/app/Inventory";
-import EmbedColours from "../constants/EmbedColours";
-import { readFileSync } from "fs";
-import path from "path";
-import ErrorMessages from "../constants/ErrorMessages";
-import User from "../database/entities/app/User";
-import { GetSacrificeAmount } from "../constants/CardRarity";
-import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper";
-import MultidropEmbedHelper from "../helpers/DropHelpers/MultidropEmbedHelper";
-
-export default class Multidrop extends ButtonEvent {
- public override async execute(interaction: ButtonInteraction) {
- const action = interaction.customId.split(" ")[1];
-
- switch (action) {
- case "keep":
- await this.Keep(interaction);
- break;
- case "sacrifice":
- await this.Sacrifice(interaction);
- break;
- default:
- await interaction.reply("Invalid action");
- AppLogger.LogError("Button/Multidrop", `Invalid action, ${action}`);
- }
- }
-
- private async Keep(interaction: ButtonInteraction) {
- const cardNumber = interaction.customId.split(" ")[2];
- let cardsRemaining = Number(interaction.customId.split(" ")[3]) || 0;
- const userId = interaction.customId.split(" ")[4];
-
- if (interaction.user.id != userId) {
- await interaction.reply("You're not the user this drop was made for!");
- return;
- }
-
- const card = GetCardsHelper.GetCardByCardNumber(cardNumber);
-
- if (!card) {
- await interaction.reply("Unable to find card.");
- AppLogger.LogWarn("Button/Multidrop/Keep", `Card not found, ${cardNumber}`);
- return;
- }
-
- if (cardsRemaining < 0) {
- await interaction.reply("Your multidrop has ran out! Please buy a new one!");
- return;
- }
-
- const user = await User.FetchOneById(User, interaction.user.id);
-
- if (!user) {
- AppLogger.LogWarn("Button/Multidrop/Keep", ErrorMessages.UnableToFetchUser);
- await interaction.reply(ErrorMessages.UnableToFetchUser);
- return;
- }
-
- // Claim
- let inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, cardNumber);
-
- if (!inventory) {
- inventory = new Inventory(interaction.user.id, cardNumber, 1);
- } else {
- inventory.AddQuantity(1);
- }
-
- await inventory.Save(Inventory, inventory);
-
- // Pack has ran out
- if (cardsRemaining == 0) {
- const embed = new EmbedBuilder()
- .setDescription("Your multidrop has ran out! Please buy a new one!")
- .setColor(EmbedColours.Ok);
-
- await interaction.update({
- embeds: [ embed ],
- attachments: [],
- components: [],
- });
-
- return;
- }
-
- // Drop next card
- const randomCard = GetCardsHelper.GetRandomCard();
- cardsRemaining -= 1;
-
- if (!randomCard) {
- AppLogger.LogWarn("Button/Multidrop/Keep", ErrorMessages.UnableToFetchCard);
- await interaction.reply(ErrorMessages.UnableToFetchCard);
- return;
- }
-
- await interaction.deferUpdate();
-
- try {
- const files = [];
- let imageFileName = "";
-
- if (!(randomCard.card.path.startsWith("http://") || randomCard.card.path.startsWith("https://"))) {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path));
- imageFileName = randomCard.card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- files.push(attachment);
- }
-
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.card.id);
- const quantityClaimed = inventory ? inventory.Quantity : 0;
-
- const embed = MultidropEmbedHelper.GenerateMultidropEmbed(randomCard, quantityClaimed, imageFileName, cardsRemaining, undefined, user.Currency);
-
- const row = MultidropEmbedHelper.GenerateMultidropButtons(randomCard, cardsRemaining, interaction.user.id, cardsRemaining < 0);
-
- await interaction.editReply({
- embeds: [ embed ],
- files: files,
- components: [ row ],
- });
- } catch (e) {
- AppLogger.LogError("Button/Multidrop/Keep", `Error sending next drop for card ${randomCard.card.id}: ${e}`);
-
- await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. (${randomCard.card.id})`);
- }
- }
-
- private async Sacrifice(interaction: ButtonInteraction) {
- const cardNumber = interaction.customId.split(" ")[2];
- let cardsRemaining = Number(interaction.customId.split(" ")[3]) || 0;
- const userId = interaction.customId.split(" ")[4];
-
- if (interaction.user.id != userId) {
- await interaction.reply("You're not the user this drop was made for!");
- return;
- }
-
- const card = GetCardsHelper.GetCardByCardNumber(cardNumber);
-
- if (!card) {
- await interaction.reply("Unable to find card.");
- AppLogger.LogWarn("Button/Multidrop/Sacrifice", `Card not found, ${cardNumber}`);
- return;
- }
-
- if (cardsRemaining < 0) {
- await interaction.reply("Your multidrop has ran out! Please buy a new one!");
- return;
- }
-
- const user = await User.FetchOneById(User, interaction.user.id);
-
- if (!user) {
- AppLogger.LogWarn("Button/Multidrop/Sacrifice", ErrorMessages.UnableToFetchUser);
- await interaction.reply(ErrorMessages.UnableToFetchUser);
- return;
- }
-
- // Sacrifice
- const sacrificeAmount = GetSacrificeAmount(card.card.type);
-
- user.AddCurrency(sacrificeAmount);
-
- await user.Save(User, user);
-
- // Pack has ran out
- if (cardsRemaining == 0) {
- const embed = new EmbedBuilder()
- .setDescription("Your multidrop has ran out! Please buy a new one!")
- .setColor(EmbedColours.Ok);
-
- await interaction.update({
- embeds: [ embed ],
- attachments: [],
- components: [],
- });
-
- return;
- }
-
- // Drop next card
- const randomCard = GetCardsHelper.GetRandomCard();
- cardsRemaining -= 1;
-
- if (!randomCard) {
- AppLogger.LogWarn("Button/Multidrop/Sacrifice", ErrorMessages.UnableToFetchCard);
- await interaction.reply(ErrorMessages.UnableToFetchCard);
- return;
- }
-
- await interaction.deferUpdate();
-
- try {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path));
- const imageFileName = randomCard.card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.card.id);
- const quantityClaimed = inventory ? inventory.Quantity : 0;
-
- const embed = MultidropEmbedHelper.GenerateMultidropEmbed(randomCard, quantityClaimed, imageFileName, cardsRemaining, undefined, user.Currency);
-
- const row = MultidropEmbedHelper.GenerateMultidropButtons(randomCard, cardsRemaining, interaction.user.id, cardsRemaining < 0);
-
- await interaction.editReply({
- embeds: [ embed ],
- files: [ attachment ],
- components: [ row ],
- });
- } catch (e) {
- AppLogger.LogError("Button/Multidrop/Sacrifice", `Error sending next drop for card ${randomCard.card.id}: ${e}`);
-
- await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. (${randomCard.card.id})`);
- }
- }
-}
\ No newline at end of file
diff --git a/src/buttonEvents/Reroll.ts b/src/buttonEvents/Reroll.ts
index 6ad855e..38cae08 100644
--- a/src/buttonEvents/Reroll.ts
+++ b/src/buttonEvents/Reroll.ts
@@ -1,98 +1,64 @@
-import { AttachmentBuilder, ButtonInteraction } from "discord.js";
+import { AttachmentBuilder, ButtonInteraction, DiscordAPIError } from "discord.js";
import { ButtonEvent } from "../type/buttonEvent";
+import CardDropHelper from "../helpers/CardDropHelper";
import { readFileSync } from "fs";
import { v4 } from "uuid";
import { CoreClient } from "../client/client";
import Inventory from "../database/entities/app/Inventory";
import Config from "../database/entities/app/Config";
-import path from "path";
-import AppLogger from "../client/appLogger";
-import User from "../database/entities/app/User";
-import CardConstants from "../constants/CardConstants";
-import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper";
-import DropEmbedHelper from "../helpers/DropHelpers/DropEmbedHelper";
-import {DropResult} from "../contracts/SeriesMetadata";
export default class Reroll extends ButtonEvent {
public override async execute(interaction: ButtonInteraction) {
if (!CoreClient.AllowDrops) {
- await interaction.reply("Bot is currently syncing, please wait until its done.");
+ await interaction.reply('Bot is currently syncing, please wait until its done.');
return;
}
- if (await Config.GetValue("safemode") == "true") {
- AppLogger.LogWarn("Button/Reroll", "Safe Mode is active, refusing to send next drop.");
-
- await interaction.reply("Safe Mode has been activated, please resync to continue.");
+ if (await Config.GetValue('safemode') == "true")
+ {
+ await interaction.reply('Safe Mode has been activated, please resync to contunue.');
return;
}
- let user = await User.FetchOneById(User, interaction.user.id);
+ if (!interaction.guild || !interaction.guildId) return;
- if (!user) {
- user = new User(interaction.user.id, CardConstants.StartingCurrency);
- await user.Save(User, user);
+ let randomCard = await CardDropHelper.GetRandomCard();
- AppLogger.LogInfo("Button/Reroll", `New user (${interaction.user.id}) saved to the database`);
+ if (process.env.DROP_RARITY && Number(process.env.DROP_RARITY) > 0) {
+ randomCard = await CardDropHelper.GetRandomCardByRarity(Number(process.env.DROP_RARITY));
}
- if (!user.RemoveCurrency(CardConstants.ClaimCost)) {
- await interaction.reply(`Not enough currency! You need ${CardConstants.ClaimCost} currency, you have ${user.Currency}!`);
- return;
- }
-
- let randomCard: DropResult | undefined;
-
- try {
- randomCard = await GetCardsHelper.FetchCard(interaction.user.id);
- } catch (e) {
- AppLogger.CatchError("Button/Reroll", e);
-
- await interaction.reply("Unable to fetch card, please try again.");
- }
-
- if (!randomCard) {
- await interaction.reply("Unable to fetch card, please try again.");
- return;
- }
+ const image = readFileSync(randomCard.Path);
await interaction.deferReply();
+ const attachment = new AttachmentBuilder(image, { name: randomCard.FileName });
+
+ const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.CardNumber);
+ const quantityClaimed = inventory ? inventory.Quantity : 0;
+
+ const embed = CardDropHelper.GenerateDropEmbed(randomCard, quantityClaimed || 0);
+
+ const claimId = v4();
+
+ const row = CardDropHelper.GenerateDropButtons(randomCard, claimId, interaction.user.id);
+
try {
- AppLogger.LogVerbose("Button/Reroll", `Sending next drop: ${randomCard.card.id} (${randomCard.card.name})`);
-
- const files = [];
- let imageFileName = "";
-
- if (!(randomCard.card.path.startsWith("http://") || randomCard.card.path.startsWith("https://"))) {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path));
- imageFileName = randomCard.card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- files.push(attachment);
- }
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.card.id);
- const quantityClaimed = inventory ? inventory.Quantity : 0;
-
- const embed = DropEmbedHelper.GenerateDropEmbed(randomCard, quantityClaimed, imageFileName, undefined, user.Currency);
-
- const claimId = v4();
-
- const row = DropEmbedHelper.GenerateDropButtons(randomCard, claimId, interaction.user.id);
-
- await user.Save(User, user);
-
await interaction.editReply({
embeds: [ embed ],
- files: files,
+ files: [ attachment ],
components: [ row ],
});
} catch (e) {
- AppLogger.LogError("Button/Reroll", `Error sending next drop for card ${randomCard.card.id}: ${e}`);
+ console.error(e);
- await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. (${randomCard.card.id})`);
+ if (e instanceof DiscordAPIError) {
+ await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: ${e.code}`);
+ } else {
+ await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: UNKNOWN`);
+ }
}
+
+ CoreClient.ClaimId = claimId;
}
-}
+}
\ No newline at end of file
diff --git a/src/buttonEvents/Sacrifice.ts b/src/buttonEvents/Sacrifice.ts
deleted file mode 100644
index 1626cf6..0000000
--- a/src/buttonEvents/Sacrifice.ts
+++ /dev/null
@@ -1,247 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonInteraction, ButtonStyle, EmbedBuilder } from "discord.js";
-import { ButtonEvent } from "../type/buttonEvent";
-import Inventory from "../database/entities/app/Inventory";
-import { CardRarityToString, GetSacrificeAmount } from "../constants/CardRarity";
-import EmbedColours from "../constants/EmbedColours";
-import User from "../database/entities/app/User";
-import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper";
-import CardConstants from "../constants/CardConstants";
-
-export default class Sacrifice extends ButtonEvent {
- public override async execute(interaction: ButtonInteraction) {
- const subcommand = interaction.customId.split(" ")[1];
-
- switch(subcommand) {
- case "confirm":
- await this.confirm(interaction);
- break;
- case "cancel":
- await this.cancel(interaction);
- break;
- case "give":
- await this.give(interaction);
- }
- }
-
- private async confirm(interaction: ButtonInteraction) {
- const userId = interaction.customId.split(" ")[2];
- const cardNumber = interaction.customId.split(" ")[3];
- const quantity = Number(interaction.customId.split(" ")[4]) || 1;
-
- if (userId != interaction.user.id) {
- await interaction.reply("Only the user who created this sacrifice can confirm it.");
- return;
- }
-
- const cardInInventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber);
-
- if (!cardInInventory || cardInInventory.Quantity == 0) {
- await interaction.reply("Unable to find card in inventory.");
- return;
- }
-
- if (cardInInventory.Quantity < quantity) {
- await interaction.reply("You can only sacrifice what you own.");
- return;
- }
-
- const cardData = GetCardsHelper.GetCardByCardNumber(cardNumber);
-
- if (!cardData) {
- await interaction.reply("Unable to find card in the database.");
- return;
- }
-
- const user = await User.FetchOneById(User, userId);
-
- if (!user) {
- await interaction.reply("Unable to find user in database.");
- return;
- }
-
- cardInInventory.RemoveQuantity(quantity);
-
- await cardInInventory.Save(Inventory, cardInInventory);
-
- const cardValue = GetSacrificeAmount(cardData.card.type) * quantity;
- const cardRarityString = CardRarityToString(cardData.card.type);
-
- user.AddCurrency(cardValue);
-
- await user.Save(User, user);
-
- const description = [
- `Card: ${cardData.card.name}`,
- `Series: ${cardData.series.name}`,
- `Rarity: ${cardRarityString}`,
- `Quantity Owned: ${cardInInventory.Quantity}`,
- `Quantity To Sacrifice: ${quantity}`,
- `Sacrifice Amount: ${cardValue}`,
- ];
-
- const embed = new EmbedBuilder()
- .setTitle("Card Sacrificed")
- .setDescription(description.join("\n"))
- .setColor(EmbedColours.Green)
- .setFooter({ text: `${interaction.user.username}` });
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setCustomId(`sacrifice confirm ${interaction.user.id} ${cardNumber}`)
- .setLabel("Confirm")
- .setStyle(ButtonStyle.Success)
- .setDisabled(true),
- new ButtonBuilder()
- .setCustomId("sacrifice cancel")
- .setLabel("Cancel")
- .setStyle(ButtonStyle.Secondary)
- .setDisabled(true),
- ]);
-
- await interaction.update({
- embeds: [ embed ],
- components: [ row ],
- });
- }
-
- private async cancel(interaction: ButtonInteraction) {
- const userId = interaction.customId.split(" ")[2];
- const cardNumber = interaction.customId.split(" ")[3];
- const quantity = Number(interaction.customId.split(" ")[4]) || 1;
-
- if (userId != interaction.user.id) {
- await interaction.reply("Only the user who created this sacrifice can cancel it.");
- return;
- }
-
- const cardInInventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber);
-
- if (!cardInInventory || cardInInventory.Quantity == 0) {
- await interaction.reply("Unable to find card in inventory.");
- return;
- }
-
- if (cardInInventory.Quantity < quantity) {
- await interaction.reply("You can only sacrifice what you own.");
- return;
- }
-
- const cardData = GetCardsHelper.GetCardByCardNumber(cardNumber);
-
- if (!cardData) {
- await interaction.reply("Unable to find card in the database.");
- return;
- }
-
- const cardValue = GetSacrificeAmount(cardData.card.type) * quantity;
- const cardRarityString = CardRarityToString(cardData.card.type);
-
- const description = [
- `Card: ${cardData.card.name}`,
- `Series: ${cardData.series.name}`,
- `Rarity: ${cardRarityString}`,
- `Quantity Owned: ${cardInInventory.Quantity}`,
- `Quantity To Sacrifice: ${quantity}`,
- `Sacrifice Amount: ${cardValue}`,
- ];
-
- const embed = new EmbedBuilder()
- .setTitle("Sacrifice Cancelled")
- .setDescription(description.join("\n"))
- .setColor(EmbedColours.Grey)
- .setFooter({ text: `${interaction.user.username}` });
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setCustomId(`sacrifice confirm ${interaction.user.id} ${cardNumber}`)
- .setLabel("Confirm")
- .setStyle(ButtonStyle.Success)
- .setDisabled(true),
- new ButtonBuilder()
- .setCustomId("sacrifice cancel")
- .setLabel("Cancel")
- .setStyle(ButtonStyle.Secondary)
- .setDisabled(true),
- ]);
-
- await interaction.update({
- embeds: [ embed ],
- components: [ row ],
- });
- }
-
- private async give(interaction: ButtonInteraction) {
- const userId = interaction.customId.split(" ")[2];
- const cardNumber = interaction.customId.split(" ")[3];
- const quantity = Number(interaction.customId.split(" ")[4]) || 1;
-
- if (userId != interaction.user.id) {
- await interaction.reply("Only the user who created this sacrifice can confirm it.");
- return;
- }
-
- const cardData = GetCardsHelper.GetCardByCardNumber(cardNumber);
-
- if (!cardData) {
- await interaction.reply("Unable to find card in the database.");
- return;
- }
-
- let user = await User.FetchOneById(User, userId);
-
- if (!user) {
- user = new User(userId, CardConstants.StartingCurrency);
- }
-
- const cardInInventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber);
- let cardQuantity = 0;
-
- if (cardInInventory) {
- cardQuantity = cardInInventory.Quantity;
- }
-
- const cardValue = GetSacrificeAmount(cardData.card.type) * quantity;
- const cardRarityString = CardRarityToString(cardData.card.type);
-
- user.AddCurrency(cardValue);
-
- await user.Save(User, user);
-
- const description = [
- `Card: ${cardData.card.name}`,
- `Series: ${cardData.series.name}`,
- `Rarity: ${cardRarityString}`,
- `Quantity Owned: ${cardQuantity}`,
- `Quantity To Sacrifice: ${quantity}`,
- `Sacrifice Amount: ${cardValue}`,
- ];
-
- const embed = new EmbedBuilder()
- .setTitle("Card Sacrificed")
- .setDescription(description.join("\n"))
- .setColor(EmbedColours.Green)
- .setFooter({ text: `${interaction.user.username}` });
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setCustomId(`sacrifice confirm ${interaction.user.id} ${cardNumber}`)
- .setLabel("Confirm")
- .setStyle(ButtonStyle.Success)
- .setDisabled(true),
- new ButtonBuilder()
- .setCustomId("sacrifice cancel")
- .setLabel("Cancel")
- .setStyle(ButtonStyle.Secondary)
- .setDisabled(true),
- ]);
-
- await interaction.update({
- embeds: [ embed ],
- components: [ row ],
- attachments: [],
- });
- }
-}
\ No newline at end of file
diff --git a/src/buttonEvents/Series.ts b/src/buttonEvents/Series.ts
deleted file mode 100644
index 80e03cd..0000000
--- a/src/buttonEvents/Series.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { ButtonInteraction } from "discord.js";
-import { ButtonEvent } from "../type/buttonEvent";
-import AppLogger from "../client/appLogger";
-import SeriesHelper from "../helpers/SeriesHelper";
-
-export default class Series extends ButtonEvent {
- public override async execute(interaction: ButtonInteraction) {
- const subaction = interaction.customId.split(" ")[1];
-
- switch(subaction) {
- case "view":
- await this.ViewSeries(interaction);
- break;
- case "list":
- await this.ListSeries(interaction);
- break;
- default:
- AppLogger.LogWarn("Commands/Series", `Subaction doesn't exist: ${subaction}`);
- interaction.reply("Subaction doesn't exist.");
- }
- }
-
- private async ViewSeries(interaction: ButtonInteraction) {
- const seriesid = interaction.customId.split(" ")[2];
- const page = interaction.customId.split(" ")[3];
-
- await interaction.deferUpdate();
-
- const embed = await SeriesHelper.GenerateSeriesViewPage(Number(seriesid), Number(page), interaction.user.id);
-
- await interaction.editReply({
- embeds: [ embed!.embed ],
- components: [ embed!.row ],
- files: [ embed!.image ],
- });
- }
-
- private async ListSeries(interaction: ButtonInteraction) {
- const page = interaction.customId.split(" ")[2];
-
- const embed = SeriesHelper.GenerateSeriesListPage(Number(page));
-
- await interaction.update({
- embeds: [ embed!.embed ],
- components: [ embed!.row ],
- });
- }
-}
diff --git a/src/buttonEvents/Trade.ts b/src/buttonEvents/Trade.ts
deleted file mode 100644
index fb8449d..0000000
--- a/src/buttonEvents/Trade.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonInteraction, ButtonStyle, EmbedBuilder } from "discord.js";
-import { ButtonEvent } from "../type/buttonEvent";
-import { CoreClient } from "../client/client";
-import Inventory from "../database/entities/app/Inventory";
-import EmbedColours from "../constants/EmbedColours";
-import AppLogger from "../client/appLogger";
-
-export default class Trade extends ButtonEvent {
- public override async execute(interaction: ButtonInteraction) {
- const action = interaction.customId.split(" ")[1];
-
- AppLogger.LogSilly("Button/Trade", `Parameters: action=${action}`);
-
- switch (action) {
- case "accept":
- await this.AcceptTrade(interaction);
- break;
- case "decline":
- await this.DeclineTrade(interaction);
- break;
- }
- }
-
- private async AcceptTrade(interaction: ButtonInteraction) {
- const user1UserId = interaction.customId.split(" ")[2];
- const user2UserId = interaction.customId.split(" ")[3];
- const user1CardNumber = interaction.customId.split(" ")[4];
- const user2CardNumber = interaction.customId.split(" ")[5];
- const expiry = interaction.customId.split(" ")[6];
- const timeoutId = interaction.customId.split(" ")[7];
- const user1Quantity = Number(interaction.customId.split(" ")[8]) || 1;
- const user2Quantity = Number(interaction.customId.split(" ")[9]) || 1;
-
- AppLogger.LogSilly("Button/Trade/AcceptTrade", `Parameters: user1UserId=${user1UserId}, user2UserId=${user2UserId}, user1CardNumber=${user1CardNumber}, user2CardNumber=${user2CardNumber}, expiry=${expiry}, timeoutId=${timeoutId} user1Quantity=${user1Quantity} user2Quantity=${user2Quantity}`);
-
- const expiryDate = new Date(expiry);
-
- if (expiryDate < new Date()) {
- await interaction.reply("Trade has expired");
- return;
- }
-
- if (interaction.user.id !== user2UserId) {
- await interaction.reply("You are not the user who the trade is intended for");
- return;
- }
-
- const user1Item = CoreClient.Cards
- .flatMap(x => x.cards)
- .find(x => x.id === user1CardNumber);
-
- const user2Item = CoreClient.Cards
- .flatMap(x => x.cards)
- .find(x => x.id === user2CardNumber);
-
- if (!user1Item || !user2Item) {
- await interaction.reply("One or more of the items you are trying to trade does not exist.");
- return;
- }
-
- const user1User = interaction.client.users.cache.get(user1UserId) || await interaction.client.users.fetch(user1UserId);
- const user2User = interaction.client.users.cache.get(user2UserId) || await interaction.client.users.fetch(user2UserId);
-
- const user1UserInventory1 = await Inventory.FetchOneByCardNumberAndUserId(user1UserId, user1CardNumber);
- const user2UserInventory1 = await Inventory.FetchOneByCardNumberAndUserId(user2UserId, user2CardNumber);
-
- if (!user1UserInventory1 || !user2UserInventory1) {
- await interaction.reply("One or more of the items you are trying to trade does not exist.");
- return;
- }
-
- if (user1UserInventory1.Quantity < user1Quantity || user2UserInventory1.Quantity < user2Quantity) {
- await interaction.reply("One or more of the items you are trying to trade does not exist.");
- return;
- }
-
- user1UserInventory1.RemoveQuantity(user1Quantity);
- user2UserInventory1.RemoveQuantity(user2Quantity);
-
- await user1UserInventory1.Save(Inventory, user1UserInventory1);
- await user2UserInventory1.Save(Inventory, user2UserInventory1);
-
- let user1UserInventory2 = await Inventory.FetchOneByCardNumberAndUserId(user1UserId, user2CardNumber);
- let user2UserInventory2 = await Inventory.FetchOneByCardNumberAndUserId(user2UserId, user1CardNumber);
-
- if (!user1UserInventory2) {
- user1UserInventory2 = new Inventory(user1UserId, user2CardNumber, user2Quantity);
- } else {
- user1UserInventory2.AddQuantity(user2Quantity);
- }
-
- if (!user2UserInventory2) {
- user2UserInventory2 = new Inventory(user2UserId, user1CardNumber, user1Quantity);
- } else {
- user2UserInventory2.AddQuantity(user1Quantity);
- }
-
- await user1UserInventory2.Save(Inventory, user1UserInventory2);
- await user2UserInventory2.Save(Inventory, user2UserInventory2);
-
- clearTimeout(timeoutId);
-
- const tradeEmbed = new EmbedBuilder()
- .setTitle("Trade Accepted")
- .setDescription(`Trade initiated between ${user1User.username} and ${user2User.username}`)
- .setColor(EmbedColours.Success)
- .setImage("https://i.imgur.com/9w5f1ls.gif")
- .addFields([
- {
- name: `${user1User.username} Receives`,
- value: `${user2Item.id}: ${user2Item.name} x${user2Quantity}`,
- inline: true,
- },
- {
- name: `${user2User.username} Receives`,
- value: `${user1Item.id}: ${user1Item.name} x${user1Quantity}`,
- inline: true,
- },
- {
- name: "Complete",
- value: new Date().toLocaleString(),
- }
- ]);
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setCustomId("trade expired accept")
- .setLabel("Accept")
- .setStyle(ButtonStyle.Success)
- .setDisabled(true),
- new ButtonBuilder()
- .setCustomId("trade expired decline")
- .setLabel("Decline")
- .setStyle(ButtonStyle.Danger)
- .setDisabled(true),
- ]);
-
- await interaction.update({ embeds: [ tradeEmbed ], components: [ row ]});
- }
-
- private async DeclineTrade(interaction: ButtonInteraction) {
- const user1UserId = interaction.customId.split(" ")[2];
- const user2UserId = interaction.customId.split(" ")[3];
- const user1CardNumber = interaction.customId.split(" ")[4];
- const user2CardNumber = interaction.customId.split(" ")[5];
- // No need to get expiry date
- const timeoutId = interaction.customId.split(" ")[7];
- const user1Quantity = Number(interaction.customId.split(" ")[8]) || 1;
- const user2Quantity = Number(interaction.customId.split(" ")[9]) || 1;
-
- AppLogger.LogSilly("Button/Trade/DeclineTrade", `Parameters: user1UserId=${user1UserId}, user2UserId=${user2UserId}, user1CardNumber=${user1CardNumber}, user2CardNumber=${user2CardNumber}, timeoutId=${timeoutId}`);
-
- if (interaction.user.id != user1UserId && interaction.user.id !== user2UserId) {
- await interaction.reply("You are not the user who the trade is intended for");
- return;
- }
-
- const user1User = interaction.client.users.cache.get(user1UserId) || await interaction.client.users.fetch(user1UserId);
- const user2User = interaction.client.users.cache.get(user2UserId) || await interaction.client.users.fetch(user2UserId);
-
- const user1Item = CoreClient.Cards
- .flatMap(x => x.cards)
- .find(x => x.id === user1CardNumber);
-
- const user2Item = CoreClient.Cards
- .flatMap(x => x.cards)
- .find(x => x.id === user2CardNumber);
-
- if (!user1Item || !user2Item) {
- await interaction.reply("One or more of the items you are trying to trade does not exist.");
- return;
- }
-
- clearTimeout(timeoutId);
-
- const tradeEmbed = new EmbedBuilder()
- .setTitle("Trade Declined")
- .setDescription(`Trade initiated between ${user1User.username} and ${user2User.username}`)
- .setColor(EmbedColours.Error)
- .setImage("https://i.imgur.com/9w5f1ls.gif")
- .addFields([
- {
- name: `${user1User.username} Receives`,
- value: `${user2Item.id}: ${user2Item.name} x${user2Quantity}`,
- inline: true,
- },
- {
- name: `${user2User.username} Receives`,
- value: `${user1Item.id}: ${user1Item.name} x${user1Quantity}`,
- inline: true,
- },
- {
- name: "Declined",
- value: new Date().toLocaleString(),
- }
- ]);
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setCustomId("trade expired accept")
- .setLabel("Accept")
- .setStyle(ButtonStyle.Success)
- .setDisabled(true),
- new ButtonBuilder()
- .setCustomId("trade expired decline")
- .setLabel("Decline")
- .setStyle(ButtonStyle.Danger)
- .setDisabled(true),
- ]);
-
- await interaction.update({ embeds: [ tradeEmbed ], components: [ row ]});
- }
-}
\ No newline at end of file
diff --git a/src/buttonEvents/View.ts b/src/buttonEvents/View.ts
deleted file mode 100644
index 007a911..0000000
--- a/src/buttonEvents/View.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import {ButtonInteraction} from "discord.js";
-import {ButtonEvent} from "../type/buttonEvent.js";
-import CardSearchHelper from "../helpers/CardSearchHelper.js";
-
-export default class View extends ButtonEvent {
- public override async execute(interaction: ButtonInteraction) {
- const page = interaction.customId.split(" ")[1];
- const results = interaction.customId.split(" ").splice(2);
-
- await interaction.deferUpdate();
-
- const searchResult = await CardSearchHelper.GenerateSearchPageFromQuery(results, interaction.user.id, Number(page));
-
- if (!searchResult) {
- await interaction.followUp("No results found");
- return;
- }
-
- await interaction.editReply({
- embeds: [ searchResult.embed ],
- components: [ searchResult.row ],
- files: searchResult.attachments,
- });
- }
-}
diff --git a/src/client/appLogger.ts b/src/client/appLogger.ts
deleted file mode 100644
index 6c33609..0000000
--- a/src/client/appLogger.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-import path from "path";
-import { Logger, createLogger, format, transports } from "winston";
-import DailyRotateFile from "winston-daily-rotate-file";
-import DiscordTransport from "winston-discord-transport";
-
-export default class AppLogger {
- public static Logger: Logger;
-
- public static InitialiseLogger(logLevel: string, outputToConsole: boolean) {
- const customFormat = format.printf(({ level, message, timestamp, label }) => {
- return `${timestamp} [${label}] ${level}: ${message}`;
- });
-
- const logger = createLogger({
- level: logLevel,
- format: format.combine(
- format.timestamp({
- format: "YYYY-MM-DD HH:mm:ss"
- }),
- format.errors({ stack: true }),
- format.splat(),
- customFormat,
- ),
- defaultMeta: { service: "bot" },
- transports: [],
- });
-
- if (process.env.DATA_DIR) {
- const logDir = path.join(process.env.DATA_DIR, "logs");
-
- logger.add(new DailyRotateFile({
- filename: "bot-%DATE%.log",
- dirname: logDir,
- datePattern: "YYYY-MM-DD-HH",
- maxSize: "20m",
- maxFiles: "14d",
- }));
- }
-
- if (outputToConsole) {
- logger.add(new transports.Console({
- format: format.combine(
- format.colorize(),
- format.timestamp(),
- customFormat,
- )}));
- }
-
- if (process.env.BOT_LOG_DISCORD_ENABLE == "true") {
- if (process.env.BOT_LOG_DISCORD_WEBHOOK) {
- logger.add(new DiscordTransport({
- webhook: process.env.BOT_LOG_DISCORD_WEBHOOK.toString(),
- defaultMeta: { service: process.env.BOT_LOG_DISCORD_SERVICE },
- level: process.env.BOT_LOG_DISCORD_LEVEL,
- }));
- } else {
- throw "BOT_LOG_DISCORD_WEBHOOK is required to enable discord logger support.";
- }
- }
-
- AppLogger.Logger = logger;
-
- AppLogger.LogInfo("AppLogger", `Log Level: ${logLevel}`);
- }
-
- public static LogError(label: string, message: string) {
- AppLogger.Logger.error({ label, message });
- }
-
- public static LogWarn(label: string, message: string) {
- AppLogger.Logger.warn({ label, message });
- }
-
- public static LogInfo(label: string, message: string) {
- AppLogger.Logger.info({ label, message });
- }
-
- public static LogVerbose(label: string, message: string) {
- AppLogger.Logger.verbose({ label, message });
- }
-
- public static LogDebug(label: string, message: string) {
- AppLogger.Logger.debug({ label, message });
- }
-
- public static LogSilly(label: string, message: string) {
- AppLogger.Logger.silly({ label, message });
- }
-
- public static CatchError(label: string, error: unknown) {
- if (error instanceof Error) {
- AppLogger.Logger.error({ label, message: error.message });
- } else {
- AppLogger.Logger.error({ label, message: error });
- }
- }
-}
diff --git a/src/client/client.ts b/src/client/client.ts
index 57551fb..f909d19 100644
--- a/src/client/client.ts
+++ b/src/client/client.ts
@@ -1,113 +1,91 @@
-import { Client, DMChannel, Guild, GuildBan, GuildMember, Message, NonThreadGuildBasedChannel, PartialGuildMember, PartialMessage } from "discord.js";
+import { Client } from "discord.js";
import * as dotenv from "dotenv";
+import { EventType } from "../constants/EventType";
import ICommandItem from "../contracts/ICommandItem";
-import EventExecutors from "../contracts/EventExecutors";
+import IEventItem from "../contracts/IEventItem";
import { Command } from "../type/command";
import { Events } from "./events";
import { Util } from "./util";
-import IButtonEventItem from "../contracts/ButtonEventItem";
+import CardSetupFunction from "../Functions/CardSetupFunction";
+import CardDataSource from "../database/dataSources/cardDataSource";
+import IButtonEventItem from "../contracts/IButtonEventItem";
import { ButtonEvent } from "../type/buttonEvent";
import AppDataSource from "../database/dataSources/appDataSource";
import { Environment } from "../constants/Environment";
import Webhooks from "../webhooks";
-import CardMetadataFunction from "../Functions/CardMetadataFunction";
-import { SeriesMetadata } from "../contracts/SeriesMetadata";
-import AppLogger from "./appLogger";
-import TimerHelper from "../helpers/TimerHelper";
-import GiveCurrency from "../timers/GiveCurrency";
-import PurgeClaims from "../timers/PurgeClaims";
-import StringDropdownEventItem from "../contracts/StringDropdownEventItem";
-import {StringDropdownEvent} from "../type/stringDropdownEvent";
export class CoreClient extends Client {
private static _commandItems: ICommandItem[];
- private static _eventExecutors: EventExecutors;
+ private static _eventItems: IEventItem[];
private static _buttonEvents: IButtonEventItem[];
- private static _stringDropdowns: StringDropdownEventItem[];
private _events: Events;
private _util: Util;
private _webhooks: Webhooks;
- private _timerHelper: TimerHelper;
+ public static ClaimId: string;
public static Environment: Environment;
public static AllowDrops: boolean;
- public static Cards: SeriesMetadata[];
public static get commandItems(): ICommandItem[] {
return this._commandItems;
}
- public static get eventExecutors(): EventExecutors {
- return this._eventExecutors;
+ public static get eventItems(): IEventItem[] {
+ return this._eventItems;
}
public static get buttonEvents(): IButtonEventItem[] {
return this._buttonEvents;
}
- public static get stringDropdowns(): StringDropdownEventItem[] {
- return this._stringDropdowns;
- }
-
constructor(intents: number[]) {
super({ intents: intents });
dotenv.config();
- CoreClient.Environment = Number(process.env.BOT_ENV);
-
- const loglevel = process.env.BOT_LOGLEVEL ?? "info";
-
- AppLogger.InitialiseLogger(loglevel, CoreClient.Environment == Environment.Local);
-
- AppLogger.LogInfo("Client", "Initialising Client");
-
CoreClient._commandItems = [];
+ CoreClient._eventItems = [];
CoreClient._buttonEvents = [];
- CoreClient._stringDropdowns = [];
this._events = new Events();
this._util = new Util();
this._webhooks = new Webhooks();
- this._timerHelper = new TimerHelper();
- AppLogger.LogInfo("Client", `Environment: ${CoreClient.Environment}`);
+ CoreClient.Environment = Number(process.env.BOT_ENV);
+ console.log(`Bot Environment: ${CoreClient.Environment}`);
CoreClient.AllowDrops = true;
}
public async start() {
if (!process.env.BOT_TOKEN) {
- AppLogger.LogError("Client", "BOT_TOKEN is not defined in .env");
+ console.error("BOT_TOKEN is not defined in .env");
return;
}
await AppDataSource.initialize()
- .then(() => {
- AppLogger.LogInfo("Client", "App Data Source Initialised");
+ .then(() => console.log("App Data Source Initialised"))
+ .catch(err => console.error("Error initialising App Data Source", err));
- this._timerHelper.AddTimer("*/20 * * * *", "Europe/London", GiveCurrency, false);
- this._timerHelper.AddTimer("0 0 * * *", "Europe/London", PurgeClaims, false);
-
- this._timerHelper.StartAllTimers();
- })
- .catch(err => {
- AppLogger.LogError("Client", "App Data Source Initialisation Failed");
- AppLogger.LogError("Client", err);
- throw err;
- });
+ await CardDataSource.initialize()
+ .then(() => console.log("Card Data Source Initialised"))
+ .catch(err => console.error("Error initialising Card Data Source", err));
super.on("interactionCreate", this._events.onInteractionCreate);
super.on("ready", this._events.onReady);
- await CardMetadataFunction.Execute(true);
+ await CardSetupFunction.Execute();
- this._util.loadEvents(this, CoreClient._eventExecutors);
+ this._util.loadEvents(this, CoreClient._eventItems);
this._util.loadSlashCommands(this);
this._webhooks.start();
+ console.log(`Registered Commands: ${CoreClient._commandItems.flatMap(x => x.Name).join(", ")}`);
+ console.log(`Registered Events: ${CoreClient._eventItems.flatMap(x => x.EventType).join(", ")}`);
+ console.log(`Registered Buttons: ${CoreClient._buttonEvents.flatMap(x => x.ButtonId).join(", ")}`);
+
await super.login(process.env.BOT_TOKEN);
}
@@ -119,287 +97,21 @@ export class CoreClient extends Client {
ServerId: serverId,
};
- if ((environment & CoreClient.Environment) == CoreClient.Environment) {
+ if (environment &= CoreClient.Environment) {
CoreClient._commandItems.push(item);
-
- AppLogger.LogVerbose("Client", `Registered Command: ${name}`);
}
}
- public static RegisterChannelCreateEvent(fn: (channel: NonThreadGuildBasedChannel) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.ChannelCreate.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [ fn ],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [],
- };
+ public static RegisterEvent(eventType: EventType, func: Function, environment: Environment = Environment.All) {
+ const item: IEventItem = {
+ EventType: eventType,
+ ExecutionFunction: func,
+ Environment: environment,
+ };
+
+ if (environment &= CoreClient.Environment) {
+ CoreClient._eventItems.push(item);
}
-
- AppLogger.LogVerbose("Client", "Registered Channel Create Event");
- }
-
- public static RegisterChannelDeleteEvent(fn: (channel: DMChannel | NonThreadGuildBasedChannel) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.ChannelDelete.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [ fn ],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Channel Delete Event");
- }
-
- public static RegisterChannelUpdateEvent(fn: (channel: DMChannel | NonThreadGuildBasedChannel) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.ChannelCreate.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [ fn ],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Channel Update Event");
- }
-
- public static RegisterGuildBanAddEvent(fn: (ban: GuildBan) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.GuildBanAdd.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [ fn ],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Guild Ban Add Event");
- }
-
- public static RegisterGuildBanRemoveEvent(fn: (channel: GuildBan) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.GuildBanRemove.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [ fn ],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Guild Ban Remove Event");
- }
-
- public static RegisterGuildCreateEvent(fn: (guild: Guild) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.GuildCreate.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [ fn ],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Guild Create Event");
- }
-
- public static RegisterGuildMemberAddEvent(fn: (member: GuildMember) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.GuildMemberAdd.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [ fn ],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Guild Member Add Event");
- }
-
- public static RegisterGuildMemberRemoveEvent(fn: (member: GuildMember | PartialGuildMember) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.GuildMemberRemove.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [ fn ],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Guild Member Remove Event");
- }
-
- public static GuildMemebrUpdate(fn: (oldMember: GuildMember | PartialGuildMember, newMember: GuildMember) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.GuildMemebrUpdate.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [ fn ],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Guild Member Update Event");
- }
-
- public static RegisterMessageCreateEvent(fn: (message: Message) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.MessageCreate.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [ fn ],
- MessageDelete: [],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Message Create Event");
- }
-
- public static RegisterMessageDeleteEvent(fn: (message: Message | PartialMessage) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.MessageDelete.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [ fn ],
- MessageUpdate: [],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Message Delete Event");
- }
-
- public static RegisterMessageUpdateEvent(fn: (oldMessage: Message | PartialMessage, newMessage: Message | PartialMessage) => void) {
- if (this._eventExecutors) {
- this._eventExecutors.MessageUpdate.push(fn);
- } else {
- this._eventExecutors = {
- ChannelCreate: [],
- ChannelDelete: [],
- ChannelUpdate: [],
- GuildBanAdd: [],
- GuildBanRemove: [],
- GuildCreate: [],
- GuildMemberAdd: [],
- GuildMemberRemove: [],
- GuildMemebrUpdate: [],
- MessageCreate: [],
- MessageDelete: [],
- MessageUpdate: [ fn ],
- };
- }
-
- AppLogger.LogVerbose("Client", "Registered Message Update Event");
}
public static RegisterButtonEvent(buttonId: string, event: ButtonEvent, environment: Environment = Environment.All) {
@@ -409,25 +121,8 @@ export class CoreClient extends Client {
Environment: environment,
};
- if ((environment & CoreClient.Environment) == CoreClient.Environment) {
+ if (environment &= CoreClient.Environment) {
CoreClient._buttonEvents.push(item);
-
- AppLogger.LogVerbose("Client", `Registered Button Event: ${buttonId}`);
- }
- }
-
- public static RegisterStringDropdownEvent(dropdownId: string, event: StringDropdownEvent, environment: Environment = Environment.All) {
- const item: StringDropdownEventItem = {
- DropdownId: dropdownId,
- Event: event,
- Environment: environment,
- };
-
- if ((environment & CoreClient.Environment) == CoreClient.Environment) {
- CoreClient._stringDropdowns.push(item);
-
- AppLogger.LogVerbose("Client", `Registered String Dropdown Event: ${dropdownId}`);
}
}
}
-
diff --git a/src/client/events.ts b/src/client/events.ts
index 5f61da5..db6cfc4 100644
--- a/src/client/events.ts
+++ b/src/client/events.ts
@@ -1,34 +1,22 @@
import { Interaction } from "discord.js";
import ChatInputCommand from "./interactionCreate/ChatInputCommand";
import Button from "./interactionCreate/Button";
-import AppLogger from "./appLogger";
-import NewUserDiscovery from "./interactionCreate/middleware/NewUserDiscovery";
-import StringDropdown from "./interactionCreate/StringDropdown";
export class Events {
public async onInteractionCreate(interaction: Interaction) {
if (!interaction.guildId) return;
- await NewUserDiscovery(interaction);
-
if (interaction.isChatInputCommand()) {
- AppLogger.LogVerbose("Client", `ChatInputCommand: ${interaction.commandName}`);
ChatInputCommand.onChatInput(interaction);
}
if (interaction.isButton()) {
- AppLogger.LogVerbose("Client", `Button: ${interaction.customId}`);
Button.onButtonClicked(interaction);
}
-
- if (interaction.isStringSelectMenu()) {
- AppLogger.LogVerbose("Client", `StringDropdown: ${interaction.customId}`);
- StringDropdown.onStringDropdownSelected(interaction);
- }
}
// Emit when bot is logged in and ready to use
public onReady() {
- AppLogger.LogInfo("Client", "Ready");
+ console.log("Ready");
}
}
diff --git a/src/client/interactionCreate/Button.ts b/src/client/interactionCreate/Button.ts
index b8abbfc..165e426 100644
--- a/src/client/interactionCreate/Button.ts
+++ b/src/client/interactionCreate/Button.ts
@@ -1,29 +1,17 @@
-import { ButtonInteraction } from "discord.js";
+import { ButtonInteraction, Interaction } from "discord.js";
import { CoreClient } from "../client";
-import AppLogger from "../appLogger";
export default class Button {
public static async onButtonClicked(interaction: ButtonInteraction) {
if (!interaction.isButton) return;
- const item = CoreClient.buttonEvents.find(x => x.ButtonId == interaction.customId.split(" ")[0]);
+ const item = CoreClient.buttonEvents.find(x => x.ButtonId == interaction.customId.split(' ')[0]);
if (!item) {
- AppLogger.LogVerbose("Button", `Event not found: ${interaction.customId}`);
-
- await interaction.reply("Event not found");
+ await interaction.reply('Event not found');
return;
}
- try {
- AppLogger.LogDebug("Button", `Executing ${interaction.customId}`);
-
- item.Event.execute(interaction);
- } catch (e) {
- AppLogger.LogError("Button", `Error occurred while executing event: ${interaction.customId}`);
- AppLogger.LogError("Button", e as string);
-
- await interaction.reply("An error occurred while executing the event");
- }
+ item.Event.execute(interaction);
}
}
\ No newline at end of file
diff --git a/src/client/interactionCreate/ChatInputCommand.ts b/src/client/interactionCreate/ChatInputCommand.ts
index 47f7b37..d483f1d 100644
--- a/src/client/interactionCreate/ChatInputCommand.ts
+++ b/src/client/interactionCreate/ChatInputCommand.ts
@@ -1,7 +1,6 @@
import { Interaction } from "discord.js";
import { CoreClient } from "../client";
import ICommandItem from "../../contracts/ICommandItem";
-import AppLogger from "../appLogger";
export default class ChatInputCommand {
public static async onChatInput(interaction: Interaction) {
@@ -14,9 +13,7 @@ export default class ChatInputCommand {
if (!itemForServer) {
if (!item) {
- AppLogger.LogVerbose("ChatInputCommand", `Command not found: ${interaction.commandName}`);
-
- await interaction.reply("Command not found");
+ await interaction.reply('Command not found');
return;
}
@@ -25,15 +22,6 @@ export default class ChatInputCommand {
itemToUse = itemForServer;
}
- try {
- AppLogger.LogDebug("Command", `Executing ${interaction.commandName}`);
-
- itemToUse.Command.execute(interaction);
- } catch (e) {
- AppLogger.LogError("ChatInputCommand", `Error occurred while executing command: ${interaction.commandName}`);
- AppLogger.LogError("ChatInputCommand", e as string);
-
- await interaction.reply("An error occurred while executing the command");
- }
+ itemToUse.Command.execute(interaction);
}
}
\ No newline at end of file
diff --git a/src/client/interactionCreate/StringDropdown.ts b/src/client/interactionCreate/StringDropdown.ts
deleted file mode 100644
index 608b81b..0000000
--- a/src/client/interactionCreate/StringDropdown.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import {StringSelectMenuInteraction} from "discord.js";
-import {CoreClient} from "../client";
-import AppLogger from "../appLogger";
-
-export default class StringDropdown {
- public static async onStringDropdownSelected(interaction: StringSelectMenuInteraction) {
- if (!interaction.isStringSelectMenu()) return;
-
- const item = CoreClient.stringDropdowns.find(x => x.DropdownId == interaction.customId.split(" ")[0]);
-
- if (!item) {
- AppLogger.LogVerbose("StringDropdown", `Event not found: ${interaction.customId}`);
-
- await interaction.reply("Event not found");
- return;
- }
-
- try {
- AppLogger.LogDebug("StringDropdown", `Executing ${interaction.customId}`);
-
- item.Event.execute(interaction);
- } catch (e) {
- AppLogger.LogError("StringDropdown", `Error occurred while executing event: ${interaction.customId}`);
- AppLogger.LogError("StringDropdown", e as string);
-
- await interaction.reply("An error occurred while executing the event");
- }
- }
-}
diff --git a/src/client/interactionCreate/middleware/NewUserDiscovery.ts b/src/client/interactionCreate/middleware/NewUserDiscovery.ts
deleted file mode 100644
index dcbe75a..0000000
--- a/src/client/interactionCreate/middleware/NewUserDiscovery.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Interaction } from "discord.js";
-import User from "../../../database/entities/app/User";
-import CardConstants from "../../../constants/CardConstants";
-import AppLogger from "../../appLogger";
-
-export default async function NewUserDiscovery(interaction: Interaction) {
- const existingUser = await User.FetchOneById(User, interaction.user.id);
-
- if (existingUser) return;
-
- const newUser = new User(interaction.user.id, CardConstants.StartingCurrency);
- await newUser.Save(User, newUser);
-
- AppLogger.LogInfo("NewUserDiscovery", `Discovered new user ${interaction.user.id}`);
-}
\ No newline at end of file
diff --git a/src/client/util.ts b/src/client/util.ts
index 47daa3d..41b7f27 100644
--- a/src/client/util.ts
+++ b/src/client/util.ts
@@ -1,7 +1,7 @@
import { Client, REST, Routes, SlashCommandBuilder } from "discord.js";
-import EventExecutors from "../contracts/EventExecutors";
+import { EventType } from "../constants/EventType";
+import IEventItem from "../contracts/IEventItem";
import { CoreClient } from "./client";
-import AppLogger from "./appLogger";
export class Util {
public loadSlashCommands(client: Client) {
@@ -10,27 +10,25 @@ export class Util {
const globalCommands = registeredCommands.filter(x => !x.ServerId);
const guildCommands = registeredCommands.filter(x => x.ServerId);
- const globalCommandData: Omit[] = [];
+ const globalCommandData: SlashCommandBuilder[] = [];
- for (const command of globalCommands) {
+ for (let command of globalCommands) {
if (!command.Command.CommandBuilder) continue;
- if ((command.Environment & CoreClient.Environment) == CoreClient.Environment) {
+ if (command.Environment &= CoreClient.Environment) {
globalCommandData.push(command.Command.CommandBuilder);
}
}
const guildIds: string[] = [];
- for (const command of guildCommands) {
+ for (let command of guildCommands) {
if (!guildIds.find(x => x == command.ServerId)) {
guildIds.push(command.ServerId!);
}
}
- const rest = new REST({ version: "10" }).setToken(process.env.BOT_TOKEN!);
-
- AppLogger.LogVerbose("Util", `REST PUT: ${globalCommandData.flatMap(x => x.name).join(", ")}`);
+ const rest = new REST({ version: '10' }).setToken(process.env.BOT_TOKEN!);
rest.put(
Routes.applicationCommands(process.env.BOT_CLIENTID!),
@@ -39,43 +37,71 @@ export class Util {
}
);
- for (const guild of guildIds) {
- const guildCommandData: Omit[] = [];
+ for (let guild of guildIds) {
+ const guildCommandData: SlashCommandBuilder[] = [];
- for (const command of guildCommands.filter(x => x.ServerId == guild)) {
+ for (let command of guildCommands.filter(x => x.ServerId == guild)) {
if (!command.Command.CommandBuilder) continue;
- if ((command.Environment & CoreClient.Environment) == CoreClient.Environment) {
+ if (command.Environment &= CoreClient.Environment) {
guildCommandData.push(command.Command.CommandBuilder);
}
}
if (!client.guilds.cache.has(guild)) continue;
- AppLogger.LogVerbose("Util", `REST PUT: ${guild} - ${guildCommandData.flatMap(x => x.name).join(", ")}`);
-
rest.put(
Routes.applicationGuildCommands(process.env.BOT_CLIENTID!, guild),
{
body: guildCommandData
}
- );
+ )
}
}
// Load the events
- loadEvents(client: Client, events: EventExecutors) {
- client.on("channelCreate", (channel) => events.ChannelCreate.forEach((fn) => fn(channel)));
- client.on("channelDelete", (channel) => events.ChannelDelete.forEach((fn) => fn(channel)));
- client.on("channelUpdate", (channel) => events.ChannelUpdate.forEach((fn) => fn(channel)));
- client.on("guildBanAdd", (ban) => events.GuildBanAdd.forEach((fn) => fn(ban)));
- client.on("guildBanRemove", (ban) => events.GuildBanRemove.forEach((fn) => fn(ban)));
- client.on("guildCreate", (guild) => events.GuildCreate.forEach((fn) => fn(guild)));
- client.on("guildMemberAdd", (member) => events.GuildMemberAdd.forEach((fn) => fn(member)));
- client.on("guildMemberRemove", (member) => events.GuildMemberRemove.forEach((fn) => fn(member)));
- client.on("guildMemberUpdate", (oldMember, newMember) => events.GuildMemebrUpdate.forEach((fn) => fn(oldMember, newMember)));
- client.on("messageCreate", (message) => events.MessageCreate.forEach((fn) => fn(message)));
- client.on("messageDelete", (message) => events.MessageDelete.forEach((fn) => fn(message)));
- client.on("messageUpdate", (oldMessage, newMessage) => events.MessageUpdate.forEach((fn) => fn(oldMessage, newMessage)));
+ loadEvents(client: Client, events: IEventItem[]) {
+ events.forEach((e) => {
+ switch(e.EventType) {
+ case EventType.ChannelCreate:
+ client.on('channelCreate', (channel) => e.ExecutionFunction(channel));
+ break;
+ case EventType.ChannelDelete:
+ client.on('channelDelete', (channel) => e.ExecutionFunction(channel));
+ break;
+ case EventType.ChannelUpdate:
+ client.on('channelUpdate', (channel) => e.ExecutionFunction(channel));
+ break;
+ case EventType.GuildBanAdd:
+ client.on('guildBanAdd', (ban) => e.ExecutionFunction(ban));
+ break;
+ case EventType.GuildBanRemove:
+ client.on('guildBanRemove', (ban) => e.ExecutionFunction(ban));
+ break;
+ case EventType.GuildCreate:
+ client.on('guildCreate', (guild) => e.ExecutionFunction(guild));
+ break;
+ case EventType.GuildMemberAdd:
+ client.on('guildMemberAdd', (member) => e.ExecutionFunction(member));
+ break;
+ case EventType.GuildMemberRemove:
+ client.on('guildMemberRemove', (member) => e.ExecutionFunction(member));
+ break;
+ case EventType.GuildMemberUpdate:
+ client.on('guildMemberUpdate', (oldMember, newMember) => e.ExecutionFunction(oldMember, newMember));
+ break;
+ case EventType.MessageCreate:
+ client.on('messageCreate', (message) => e.ExecutionFunction(message));
+ break;
+ case EventType.MessageDelete:
+ client.on('messageDelete', (message) => e.ExecutionFunction(message));
+ break;
+ case EventType.MessageUpdate:
+ client.on('messageUpdate', (oldMessage, newMessage) => e.ExecutionFunction(oldMessage, newMessage));
+ break;
+ default:
+ console.error('Event not implemented.');
+ }
+ });
}
}
diff --git a/src/commands/about.ts b/src/commands/about.ts
index 3bfcdac..6e065cc 100644
--- a/src/commands/about.ts
+++ b/src/commands/about.ts
@@ -6,9 +6,9 @@ export default class About extends Command {
constructor() {
super();
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("about")
- .setDescription("About Bot");
+ super.CommandBuilder = new SlashCommandBuilder()
+ .setName('about')
+ .setDescription('About Bot');
}
public override async execute(interaction: CommandInteraction) {
diff --git a/src/commands/allbalance.ts b/src/commands/allbalance.ts
deleted file mode 100644
index 0874e54..0000000
--- a/src/commands/allbalance.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { CommandInteraction, EmbedBuilder, PermissionsBitField, SlashCommandBuilder } from "discord.js";
-import EmbedColours from "../constants/EmbedColours";
-import { Command } from "../type/command";
-import User from "../database/entities/app/User";
-
-export default class AllBalance extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("allbalance")
- .setDescription("Get everyone's currency balance")
- .setDefaultMemberPermissions(PermissionsBitField.Flags.Administrator);
- }
-
- public override async execute(interaction: CommandInteraction) {
- const users = await User.FetchAll(User);
-
- const filteredUsers = users.filter(x => x.Currency > 0)
- .sort((a, b) => b.Currency - a.Currency);
-
- const embed = new EmbedBuilder()
- .setColor(EmbedColours.Ok)
- .setTitle("All Balances")
- .setDescription(filteredUsers.map(x => `<@${x.Id}> ${x.Currency}`).join("\n"));
-
- await interaction.reply({ embeds: [ embed ], ephemeral: true });
- }
-}
\ No newline at end of file
diff --git a/src/commands/balance.ts b/src/commands/balance.ts
deleted file mode 100644
index c8f087c..0000000
--- a/src/commands/balance.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { CommandInteraction, EmbedBuilder, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import User from "../database/entities/app/User";
-import EmbedColours from "../constants/EmbedColours";
-
-export default class Balance extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("balance")
- .setDescription("Get your currency balance");
- }
-
- public override async execute(interaction: CommandInteraction) {
- const user = await User.FetchOneById(User, interaction.user.id);
-
- const userBalance = user != null ? user.Currency : 0;
-
- const embed = new EmbedBuilder()
- .setColor(EmbedColours.Ok)
- .setTitle("Balance")
- .setDescription(`You currently have **${userBalance} currency**!`)
- .setFooter({ text: interaction.user.username, iconURL: interaction.user.avatarURL() ?? undefined });
-
- await interaction.reply({ embeds: [ embed ]});
- }
-}
\ No newline at end of file
diff --git a/src/commands/daily.ts b/src/commands/daily.ts
deleted file mode 100644
index 65d69fc..0000000
--- a/src/commands/daily.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { CommandInteraction, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import User from "../database/entities/app/User";
-import CardConstants from "../constants/CardConstants";
-import TimeLengthInput from "../helpers/TimeLengthInput";
-
-export default class Daily extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("daily")
- .setDescription("Gain bonus currency, once a day");
- }
-
- public override async execute(interaction: CommandInteraction) {
- const user = await User.FetchOneById(User, interaction.user.id) ?? new User(interaction.user.id, CardConstants.StartingCurrency);
-
- const dayAgo = new Date(Date.now() - (1000 * 60 * 60 * 24));
-
- if (user.LastUsedDaily && user.LastUsedDaily > dayAgo) {
- const timeNow = Date.now();
- const timeLength = 24 * 60 * 60 * 1000; // 1 day
-
- const timeLeft = Math.ceil(((timeLength - (timeNow - user.LastUsedDaily.getTime()))) / 1000 / 60);
-
- const timeLeftHours = Math.floor(timeLeft / 60);
- const timeLeftMinutes = timeLeft % 60;
-
- const timeLeftString = new TimeLengthInput(`${timeLeftHours}h ${timeLeftMinutes}m`);
-
- await interaction.reply(`You have already used the daily command! You can use it again in **${timeLeftString.GetLength()}**.`);
- return;
- }
-
- user.AddCurrency(CardConstants.DailyCurrency);
- user.UpdateLastUsedDaily(new Date());
-
- await user.Save(User, user);
-
- await interaction.reply(`Congratulations, you have claimed your daily ${CardConstants.DailyCurrency} currency! You now have ${user.Currency} currency and can claim again in 24 hours!`);
- }
-}
\ No newline at end of file
diff --git a/src/commands/drop.ts b/src/commands/drop.ts
index b6ad224..bebe581 100644
--- a/src/commands/drop.ts
+++ b/src/commands/drop.ts
@@ -1,109 +1,66 @@
-import { AttachmentBuilder, CommandInteraction, SlashCommandBuilder } from "discord.js";
+import { AttachmentBuilder, CommandInteraction, DiscordAPIError, SlashCommandBuilder } from "discord.js";
import { Command } from "../type/command";
+import CardDropHelper from "../helpers/CardDropHelper";
import { readFileSync } from "fs";
import { CoreClient } from "../client/client";
import { v4 } from "uuid";
import Inventory from "../database/entities/app/Inventory";
import Config from "../database/entities/app/Config";
-import path from "path";
-import AppLogger from "../client/appLogger";
-import User from "../database/entities/app/User";
-import CardConstants from "../constants/CardConstants";
-import ErrorMessages from "../constants/ErrorMessages";
-import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper";
-import DropEmbedHelper from "../helpers/DropHelpers/DropEmbedHelper";
-import {DropResult} from "../contracts/SeriesMetadata";
export default class Drop extends Command {
constructor() {
super();
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("drop")
- .setDescription("Summon a new card drop");
+ super.CommandBuilder = new SlashCommandBuilder()
+ .setName('drop')
+ .setDescription('Summon a new card drop');
}
public override async execute(interaction: CommandInteraction) {
if (!CoreClient.AllowDrops) {
- await interaction.reply(ErrorMessages.BotSyncing);
+ await interaction.reply('Bot is currently syncing, please wait until its done.');
return;
}
- if (await Config.GetValue("safemode") == "true") {
- AppLogger.LogWarn("Commands/Drop", ErrorMessages.SafeMode);
- await interaction.reply(ErrorMessages.SafeMode);
+ if (await Config.GetValue('safemode') == "true")
+ {
+ await interaction.reply('Safe Mode has been activated, please resync to contunue.');
return;
}
- let user = await User.FetchOneById(User, interaction.user.id);
+ const randomCard = await CardDropHelper.GetRandomCard();
- if (!user) {
- user = new User(interaction.user.id, CardConstants.StartingCurrency);
- await user.Save(User, user);
-
- AppLogger.LogInfo("Commands/Drop", `New user (${interaction.user.id}) saved to the database`);
- }
-
- if (!user.RemoveCurrency(CardConstants.ClaimCost)) {
- await interaction.reply(ErrorMessages.NotEnoughCurrency(CardConstants.ClaimCost, user.Currency));
- return;
- }
-
- let randomCard: DropResult | undefined;
-
- try {
- randomCard = await GetCardsHelper.FetchCard(interaction.user.id);
- } catch (e) {
- AppLogger.CatchError("Commands/Drop", e);
-
- await interaction.reply(ErrorMessages.UnableToFetchCard);
- }
-
-
- if (!randomCard) {
- AppLogger.LogWarn("Commands/Drop", ErrorMessages.UnableToFetchCard);
- await interaction.reply(ErrorMessages.UnableToFetchCard);
- return;
- }
+ const image = readFileSync(randomCard.Path);
await interaction.deferReply();
+ const attachment = new AttachmentBuilder(image, { name: randomCard.FileName });
+
+ const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.CardNumber);
+ const quantityClaimed = inventory ? inventory.Quantity : 0;
+
+ const embed = CardDropHelper.GenerateDropEmbed(randomCard, quantityClaimed || 0);
+
+ const claimId = v4();
+
+ const row = CardDropHelper.GenerateDropButtons(randomCard, claimId, interaction.user.id);
+
try {
- const files = [];
- let imageFileName = "";
-
- if (!(randomCard.card.path.startsWith("http://") || randomCard.card.path.startsWith("https://"))) {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path));
- imageFileName = randomCard.card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- files.push(attachment);
- }
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.card.id);
- const quantityClaimed = inventory ? inventory.Quantity : 0;
-
- const embed = DropEmbedHelper.GenerateDropEmbed(randomCard, quantityClaimed, imageFileName, undefined, user.Currency);
-
- const claimId = v4();
-
- const row = DropEmbedHelper.GenerateDropButtons(randomCard, claimId, interaction.user.id);
-
- await user.Save(User, user);
-
-
await interaction.editReply({
embeds: [ embed ],
- files: files,
+ files: [ attachment ],
components: [ row ],
});
-
} catch (e) {
- AppLogger.LogError("Commands/Drop", `Error sending next drop for card ${randomCard.card.id}: ${e}`);
+ console.error(e);
- await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. (${randomCard.card.id})`);
+ if (e instanceof DiscordAPIError) {
+ await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: ${e.code}`);
+ } else {
+ await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: UNKNOWN`);
+ }
}
+ CoreClient.ClaimId = claimId;
}
-}
+}
\ No newline at end of file
diff --git a/src/commands/effects.ts b/src/commands/effects.ts
deleted file mode 100644
index cd6d1d4..0000000
--- a/src/commands/effects.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import { CommandInteraction, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import { EffectChoices } from "../constants/EffectDetails";
-import AppLogger from "../client/appLogger";
-import List from "./effects/List";
-import Use from "./effects/Use";
-import Buy from "./effects/Buy";
-
-export default class Effects extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("effects")
- .setDescription("Effects")
- .addSubcommand(x => x
- .setName("list")
- .setDescription("List all effects I have")
- .addNumberOption(x => x
- .setName("page")
- .setDescription("The page number")
- .setMinValue(1)))
- .addSubcommand(x => x
- .setName("use")
- .setDescription("Use an effect in your inventory")
- .addStringOption(y => y
- .setName("id")
- .setDescription("The effect id to use")
- .setRequired(true)
- .setChoices(EffectChoices)))
- .addSubcommand(x => x
- .setName("buy")
- .setDescription("Buy more effects")
- .addStringOption(y => y
- .setName("id")
- .setDescription("The effect id to buy")
- .setRequired(true)
- .setChoices(EffectChoices))
- .addNumberOption(y => y
- .setName("quantity")
- .setDescription("The amount to buy")
- .setMinValue(1)));
- }
-
- public override async execute(interaction: CommandInteraction) {
- if (!interaction.isChatInputCommand()) return;
-
- const subcommand = interaction.options.getSubcommand();
-
- switch (subcommand) {
- case "list":
- await List(interaction);
- break;
- case "use":
- await Use(interaction);
- break;
- case "buy":
- await Buy(interaction);
- break;
- default:
- AppLogger.LogError("Commands/Effects", `Invalid subcommand: ${subcommand}`);
- }
- }
-}
diff --git a/src/commands/effects/Buy.ts b/src/commands/effects/Buy.ts
deleted file mode 100644
index 3ebf587..0000000
--- a/src/commands/effects/Buy.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { CommandInteraction } from "discord.js";
-import EffectHelper from "../../helpers/EffectHelper";
-
-export default async function Buy(interaction: CommandInteraction) {
- const id = interaction.options.get("id", true).value!;
- const quantity = interaction.options.get("quantity")?.value ?? 1;
-
- const idValue = id.toString();
- const quantityValue = Number(quantity);
-
- const result = await EffectHelper.GenerateEffectBuyEmbed(interaction.user.id, idValue, quantityValue, false);
-
- if (typeof result == "string") {
- await interaction.reply(result);
- return;
- }
-
- await interaction.reply({
- embeds: [ result.embed ],
- components: [ result.row ],
- });
-}
\ No newline at end of file
diff --git a/src/commands/effects/List.ts b/src/commands/effects/List.ts
deleted file mode 100644
index 14e6085..0000000
--- a/src/commands/effects/List.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { CommandInteraction } from "discord.js";
-import EffectHelper from "../../helpers/EffectHelper";
-
-export default async function List(interaction: CommandInteraction) {
- const pageOption = interaction.options.get("page");
-
- const page = !isNaN(Number(pageOption?.value)) ? Number(pageOption?.value) : 1;
-
- const result = await EffectHelper.GenerateEffectListEmbed(interaction.user.id, page);
-
- await interaction.reply({
- embeds: [ result.embed ],
- components: [ result.row ],
- });
-}
\ No newline at end of file
diff --git a/src/commands/effects/Use.ts b/src/commands/effects/Use.ts
deleted file mode 100644
index 9f72ae0..0000000
--- a/src/commands/effects/Use.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction, EmbedBuilder } from "discord.js";
-import { EffectDetails } from "../../constants/EffectDetails";
-import AppLogger from "../../client/appLogger";
-import EffectHelper from "../../helpers/EffectHelper";
-import TimeLengthInput from "../../helpers/TimeLengthInput";
-import EmbedColours from "../../constants/EmbedColours";
-
-export default async function Use(interaction: CommandInteraction) {
- const id = interaction.options.get("id", true).value!.toString();
-
- const effectDetail = EffectDetails.get(id);
-
- if (!effectDetail) {
- AppLogger.LogWarn("Commands/Effects", `Unable to find effect details for ${id}`);
-
- await interaction.reply("Unable to find effect!");
- return;
- }
-
- const canUseEffect = await EffectHelper.CanUseEffect(interaction.user.id, id);
-
- if (!canUseEffect) {
- await interaction.reply("Unable to use effect! Please make sure you have it in your inventory and is not on cooldown");
- return;
- }
-
- const timeLengthInput = TimeLengthInput.ConvertFromMilliseconds(effectDetail.duration);
-
- const embed = new EmbedBuilder()
- .setTitle("Effect Confirmation")
- .setDescription("Would you like to use this effect?")
- .setColor(EmbedColours.Ok)
- .addFields([
- {
- name: "Effect",
- value: effectDetail.friendlyName,
- inline: true,
- },
- {
- name: "Length",
- value: timeLengthInput.GetLengthShort(),
- inline: true,
- },
- ]);
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setLabel("Confirm")
- .setCustomId(`effects use confirm ${effectDetail.id}`)
- .setStyle(ButtonStyle.Primary),
- new ButtonBuilder()
- .setLabel("Cancel")
- .setCustomId(`effects use cancel ${effectDetail.id}`)
- .setStyle(ButtonStyle.Danger),
- ]);
-
- await interaction.reply({
- embeds: [ embed ],
- components: [ row ],
- });
-}
\ No newline at end of file
diff --git a/src/commands/gdrivesync.ts b/src/commands/gdrivesync.ts
index b02c873..97009a2 100644
--- a/src/commands/gdrivesync.ts
+++ b/src/commands/gdrivesync.ts
@@ -1,62 +1,44 @@
import { CacheType, CommandInteraction, PermissionsBitField, SlashCommandBuilder } from "discord.js";
import { Command } from "../type/command";
import { ExecException, exec } from "child_process";
+import CardSetupFunction from "../Functions/CardSetupFunction";
import { CoreClient } from "../client/client";
import Config from "../database/entities/app/Config";
-import CardMetadataFunction from "../Functions/CardMetadataFunction";
-import AppLogger from "../client/appLogger";
export default class Gdrivesync extends Command {
constructor() {
super();
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("gdrivesync")
- .setDescription("Sync google drive to the bot")
+ super.CommandBuilder = new SlashCommandBuilder()
+ .setName('gdrivesync')
+ .setDescription('Sync google drive to the bot')
.setDefaultMemberPermissions(PermissionsBitField.Flags.Administrator);
}
public override async execute(interaction: CommandInteraction) {
if (!interaction.isChatInputCommand()) return;
- const whitelistedUsers = process.env.BOT_ADMINS!.split(",");
+ const whitelistedUsers = process.env.GDRIVESYNC_WHITELIST!.split(',');
if (!whitelistedUsers.find(x => x == interaction.user.id)) {
await interaction.reply("Only whitelisted users can use this command.");
return;
}
- await interaction.reply({
- content: "Syncing, this might take a while...",
- ephemeral: true,
- });
+ await interaction.reply('Syncing, this might take a while...');
CoreClient.AllowDrops = false;
- AppLogger.LogInfo("Commands/GDriveSync", "Syncing google drive to the bot");
-
- exec(`rclone sync card-drop-gdrive: ${process.env.DATA_DIR}/cards`, async (error: ExecException | null) => {
+ exec(`rclone sync card-drop-gdrive: ${process.cwd()}/cards`, async (error: ExecException | null) => {
if (error) {
- AppLogger.LogError("Commands/GDriveSync", `Error while running sync command: ${error.code}, ${error.message}`);
- AppLogger.LogWarn("Commands/GDriveSync", "Safe mode activated");
-
await interaction.editReply(`Error while running sync command. Safe Mode has been activated. Code: ${error.code}`);
- await Config.SetValue("safemode", "true");
+ await Config.SetValue('safemode', 'true');
} else {
- const result = await CardMetadataFunction.Execute(true);
+ await CardSetupFunction.Execute();
+ await interaction.editReply('Synced successfully.');
- if (result.IsSuccess) {
- AppLogger.LogInfo("Commands/GDriveSync", "Synced successfully");
-
- await interaction.editReply("Synced successfully.");
-
- CoreClient.AllowDrops = true;
- await Config.SetValue("safemode", "false");
- } else {
- AppLogger.LogError("Commands/GDriveSync", `Error while running sync command: ${result.ErrorMessage}`);
-
- await interaction.editReply(`Sync failed \`\`\`${result.ErrorMessage}\`\`\``);
- }
+ CoreClient.AllowDrops = true;
+ await Config.SetValue('safemode', 'false');
}
});
}
diff --git a/src/commands/give.ts b/src/commands/give.ts
deleted file mode 100644
index 35dfa04..0000000
--- a/src/commands/give.ts
+++ /dev/null
@@ -1,118 +0,0 @@
-import { CacheType, CommandInteraction, PermissionsBitField, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import { CoreClient } from "../client/client";
-import Config from "../database/entities/app/Config";
-import Inventory from "../database/entities/app/Inventory";
-import AppLogger from "../client/appLogger";
-import User from "../database/entities/app/User";
-import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper";
-
-export default class Give extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("give")
- .setDescription("Give a user a card manually, in case bot breaks")
- .setDefaultMemberPermissions(PermissionsBitField.Flags.Administrator)
- .addSubcommand(x =>
- x
- .setName("card")
- .setDescription("Give a user a card manually")
- .addStringOption(x =>
- x
- .setName("cardnumber")
- .setDescription("The card to give")
- .setRequired(true))
- .addUserOption(x =>
- x
- .setName("user")
- .setDescription("The user to give the card to")
- .setRequired(true)))
- .addSubcommand(x =>
- x
- .setName("currency")
- .setDescription("Give a user currency manually")
- .addNumberOption(x =>
- x
- .setName("amount")
- .setDescription("The amount to give")
- .setRequired(true))
- .addUserOption(x =>
- x
- .setName("user")
- .setDescription("The user to give the currency to")
- .setRequired(true)));
- }
-
- public override async execute(interaction: CommandInteraction) {
- if (!interaction.isChatInputCommand()) return;
-
- const whitelistedUsers = process.env.BOT_ADMINS!.split(",");
-
- if (!whitelistedUsers.find(x => x == interaction.user.id)) {
- await interaction.reply("Only whitelisted users can use this command.");
- return;
- }
-
- switch (interaction.options.getSubcommand()) {
- case "card":
- await this.GiveCard(interaction);
- break;
- case "currency":
- await this.GiveCurrency(interaction);
- break;
- }
- }
-
- private async GiveCard(interaction: CommandInteraction) {
- if (!CoreClient.AllowDrops) {
- await interaction.reply("Bot is currently syncing, please wait until its done.");
- return;
- }
-
- if (await Config.GetValue("safemode") == "true") {
- await interaction.reply("Safe Mode has been activated, please resync to continue.");
- return;
- }
-
- const cardNumber = interaction.options.get("cardnumber", true);
- const user = interaction.options.get("user", true).user!;
-
- AppLogger.LogSilly("Commands/Give/GiveCard", `Parameters: cardNumber=${cardNumber.value}, user=${user.id}`);
-
- const card = GetCardsHelper.GetCardByCardNumber(cardNumber.value!.toString());
-
- if (!card) {
- await interaction.reply("Unable to fetch card, please try again.");
- return;
- }
-
- let inventory = await Inventory.FetchOneByCardNumberAndUserId(user.id, card.card.id);
-
- if (!inventory) {
- inventory = new Inventory(user.id, card.card.id, 1);
- } else {
- inventory.SetQuantity(inventory.Quantity + 1);
- }
-
- await inventory.Save(Inventory, inventory);
-
- await interaction.reply(`Card ${card.card.name} given to ${user.username}, they now have ${inventory.Quantity}`);
- }
-
- private async GiveCurrency(interaction: CommandInteraction) {
- const amount = interaction.options.get("amount", true);
- const user = interaction.options.get("user", true).user!;
-
- AppLogger.LogSilly("Commands/Give/GiveCurrency", `Parameters: amount=${amount.value} user=${user.id}`);
-
- const userEntity = await User.FetchOneById(User, user.id) || new User(user.id, 300);
-
- userEntity.AddCurrency(amount.value! as number);
-
- await userEntity.Save(User, userEntity);
-
- await interaction.reply(`${amount.value} currency ${amount.value! as number >= 0 ? "given to" : "taken from"} ${user.username}, they now have ${userEntity.Currency}`);
- }
-}
\ No newline at end of file
diff --git a/src/commands/id.ts b/src/commands/id.ts
deleted file mode 100644
index 0f11aaa..0000000
--- a/src/commands/id.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import { AttachmentBuilder, CommandInteraction, DiscordAPIError, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import { CoreClient } from "../client/client";
-import { readFileSync } from "fs";
-import path from "path";
-import Inventory from "../database/entities/app/Inventory";
-import AppLogger from "../client/appLogger";
-import DropEmbedHelper from "../helpers/DropHelpers/DropEmbedHelper";
-
-export default class Id extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("id")
- .setDescription("View a specific command by its id")
- .addStringOption(x =>
- x
- .setName("cardnumber")
- .setDescription("The card number to view")
- .setRequired(true));
- }
-
- public override async execute(interaction: CommandInteraction) {
- const cardNumber = interaction.options.get("cardnumber");
-
- AppLogger.LogSilly("Commands/View", `Parameters: cardNumber=${cardNumber?.value}`);
-
- if (!cardNumber || !cardNumber.value) {
- await interaction.reply("Card number is required.");
- return;
- }
-
- const card = CoreClient.Cards
- .flatMap(x => x.cards)
- .find(x => x.id == cardNumber.value);
-
- if (!card) {
- await interaction.reply("Card not found.");
- return;
- }
-
- const series = CoreClient.Cards
- .find(x => x.cards.includes(card))!;
-
- const files = [];
- let imageFileName = "";
-
- if (!(card.path.startsWith("http://") || card.path.startsWith("https://"))) {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", card.path));
- imageFileName = card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- files.push(attachment);
- }
-
- await interaction.deferReply();
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.id);
- const quantityClaimed = inventory ? inventory.Quantity : 0;
-
- const embed = DropEmbedHelper.GenerateDropEmbed({ card, series }, quantityClaimed, imageFileName);
-
- try {
- await interaction.editReply({
- embeds: [ embed ],
- files: files,
- });
- } catch (e) {
- AppLogger.LogError("Commands/View", `Error sending view for card ${card.id}: ${e}`);
-
- if (e instanceof DiscordAPIError) {
- await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: ${e.code}.`);
- } else {
- await interaction.editReply("Unable to send next drop. Please try again, and report this if it keeps happening. Code: UNKNOWN.");
- }
- }
- }
-}
diff --git a/src/commands/inventory.ts b/src/commands/inventory.ts
deleted file mode 100644
index deb4735..0000000
--- a/src/commands/inventory.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { CommandInteraction, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import InventoryHelper from "../helpers/InventoryHelper";
-import AppLogger from "../client/appLogger";
-
-export default class Inventory extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("inventory")
- .setDescription("View your inventory")
- .addNumberOption(x =>
- x
- .setName("page")
- .setDescription("The page to start with"))
- .addUserOption(x =>
- x
- .setName("user")
- .setDescription("The user to view (Defaults to yourself)"));
- }
-
- public override async execute(interaction: CommandInteraction) {
- const page = interaction.options.get("page");
- const userOption = interaction.options.get("user");
-
- const user = userOption ? userOption.user! : interaction.user;
-
- await interaction.deferReply();
-
- AppLogger.LogSilly("Commands/Inventory", `Parameters: page=${page?.value}, user=${user.id}`);
-
- try {
- let pageNumber = 0;
-
- if (page && page.value) {
- pageNumber = Number(page.value) - 1;
- }
-
- const embed = await InventoryHelper.GenerateInventoryPage(user.username, user.id, pageNumber);
-
- if (!embed) {
- await interaction.followUp("No page for user found.");
- return;
- }
-
- await interaction.followUp({
- files: [ embed.image ],
- embeds: [ embed.embed ],
- components: [ embed.row1, embed.row2 ],
- });
- } catch (e) {
- AppLogger.LogError("Commands/Inventory", e as string);
-
- await interaction.followUp("An error has occurred running this command.");
- }
- }
-}
diff --git a/src/commands/multidrop.ts b/src/commands/multidrop.ts
deleted file mode 100644
index 82d19fe..0000000
--- a/src/commands/multidrop.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import { AttachmentBuilder, CommandInteraction, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import { CoreClient } from "../client/client";
-import ErrorMessages from "../constants/ErrorMessages";
-import Config from "../database/entities/app/Config";
-import AppLogger from "../client/appLogger";
-import User from "../database/entities/app/User";
-import CardConstants from "../constants/CardConstants";
-import { readFileSync } from "fs";
-import path from "path";
-import Inventory from "../database/entities/app/Inventory";
-import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper";
-import MultidropEmbedHelper from "../helpers/DropHelpers/MultidropEmbedHelper";
-
-export default class Multidrop extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("multidrop")
- .setDescription("Drop 11 cards for the price of 10!");
- }
-
- public override async execute(interaction: CommandInteraction) {
- if (!CoreClient.AllowDrops) {
- await interaction.reply(ErrorMessages.BotSyncing);
- return;
- }
-
- if (await Config.GetValue("safemode") == "true") {
- AppLogger.LogWarn("Commands/Multidrop", ErrorMessages.SafeMode);
- await interaction.reply(ErrorMessages.SafeMode);
- return;
- }
-
- let user = await User.FetchOneById(User, interaction.user.id);
-
- if (!user) {
- user = new User(interaction.user.id, CardConstants.StartingCurrency);
- await user.Save(User, user);
-
- AppLogger.LogInfo("Commands/Multidrop", `New user (${interaction.user.id}) saved to the database`);
- }
-
- if (user.Currency < CardConstants.MultidropCost) {
- await interaction.reply(ErrorMessages.NotEnoughCurrency(CardConstants.MultidropCost, user.Currency));
- return;
- }
-
- user.RemoveCurrency(CardConstants.MultidropCost);
- await user.Save(User, user);
-
- const randomCard = GetCardsHelper.GetRandomCard();
- const cardsRemaining = CardConstants.MultidropQuantity - 1;
-
- if (!randomCard) {
- AppLogger.LogWarn("Commands/Multidrop", ErrorMessages.UnableToFetchCard);
- await interaction.reply(ErrorMessages.UnableToFetchCard);
- return;
- }
-
- await interaction.deferReply();
-
- try {
- const files = [];
- let imageFileName = "";
-
- if (!(randomCard.card.path.startsWith("http://") || randomCard.card.path.startsWith("https://"))) {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path));
- imageFileName = randomCard.card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- files.push(attachment);
- }
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.card.id);
- const quantityClaimed = inventory ? inventory.Quantity : 0;
-
- const embed = MultidropEmbedHelper.GenerateMultidropEmbed(randomCard, quantityClaimed, imageFileName, cardsRemaining, undefined, user.Currency);
-
- const row = MultidropEmbedHelper.GenerateMultidropButtons(randomCard, cardsRemaining, interaction.user.id);
-
- await interaction.editReply({
- embeds: [ embed ],
- files: files,
- components: [ row ],
- });
- } catch (e) {
- AppLogger.LogError("Commands/Multidrop", `Error sending next drop for card ${randomCard.card.id}: ${e}`);
-
- await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. (${randomCard.card.id})`);
- }
- }
-}
\ No newline at end of file
diff --git a/src/commands/resync.ts b/src/commands/resync.ts
deleted file mode 100644
index f90c96c..0000000
--- a/src/commands/resync.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { CacheType, CommandInteraction, PermissionsBitField, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import Config from "../database/entities/app/Config";
-import CardMetadataFunction from "../Functions/CardMetadataFunction";
-import AppLogger from "../client/appLogger";
-
-export default class Resync extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("resync")
- .setDescription("Resync the card database")
- .setDefaultMemberPermissions(PermissionsBitField.Flags.Administrator);
- }
-
- public override async execute(interaction: CommandInteraction) {
- if (!interaction.isChatInputCommand()) return;
-
- const whitelistedUsers = process.env.BOT_ADMINS!.split(",");
-
- if (!whitelistedUsers.find(x => x == interaction.user.id)) {
- await interaction.reply("Only whitelisted users can use this command.");
- return;
- }
-
- AppLogger.LogInfo("Commands/Resync", "Resyncing database");
-
- const result = await CardMetadataFunction.Execute(true);
-
- if (result) {
- if (await Config.GetValue("safemode") == "true") {
- AppLogger.LogInfo("Commands/Resync", "Resync successful, safe mode disabled");
-
- await Config.SetValue("safemode", "false");
- await interaction.reply("Resynced database and disabled safe mode.");
-
- return;
- }
- await interaction.reply("Resynced database.");
- } else {
- AppLogger.LogWarn("Commands/Resync", "Resync failed, safe mode activated");
-
- await interaction.reply("Resync failed, safe mode has been activated until successful resync.");
- }
- }
-}
\ No newline at end of file
diff --git a/src/commands/sacrifice.ts b/src/commands/sacrifice.ts
deleted file mode 100644
index a44a69e..0000000
--- a/src/commands/sacrifice.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonStyle, CacheType, CommandInteraction, EmbedBuilder, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import Inventory from "../database/entities/app/Inventory";
-import { CardRarityToString, GetSacrificeAmount } from "../constants/CardRarity";
-import EmbedColours from "../constants/EmbedColours";
-import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper";
-
-export default class Sacrifice extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("sacrifice")
- .setDescription("Sacrifices a card for currency")
- .addStringOption(x =>
- x
- .setName("cardnumber")
- .setDescription("The card to sacrifice from your inventory")
- .setRequired(true))
- .addNumberOption(x =>
- x
- .setName("quantity")
- .setDescription("The amount to sacrifice (default 1)"));
- }
-
- public override async execute(interaction: CommandInteraction): Promise {
- const cardnumber = interaction.options.get("cardnumber", true);
- const quantityInput = interaction.options.get("quantity")?.value ?? 1;
-
- const quantity = Number(quantityInput) || 1;
-
- const cardInInventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, cardnumber.value! as string);
-
- if (!cardInInventory || cardInInventory.Quantity == 0) {
- await interaction.reply("Unable to find card in your inventory.");
- return;
- }
-
- if (cardInInventory.Quantity < quantity) {
- await interaction.reply(`You can only sacrifice what you own! You have ${cardInInventory.Quantity} of this card`);
- return;
- }
-
- const cardData = GetCardsHelper.GetCardByCardNumber(cardnumber.value! as string);
-
- if (!cardData) {
- await interaction.reply("Unable to find card in the database.");
- return;
- }
-
- const cardValue = GetSacrificeAmount(cardData.card.type) * quantity;
- const cardRarityString = CardRarityToString(cardData.card.type);
-
- const description = [
- `Card: ${cardData.card.name}`,
- `Series: ${cardData.series.name}`,
- `Rarity: ${cardRarityString}`,
- `Quantity Owned: ${cardInInventory.Quantity}`,
- `Quantity To Sacrifice: ${quantity}`,
- `Sacrifice Amount: ${cardValue}`,
- ];
-
- const embed = new EmbedBuilder()
- .setTitle("Sacrifice")
- .setDescription(description.join("\n"))
- .setColor(EmbedColours.Error)
- .setFooter({ text: `${interaction.user.username}` });
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setCustomId(`sacrifice confirm ${interaction.user.id} ${cardnumber.value!} ${quantity}`)
- .setLabel("Confirm")
- .setStyle(ButtonStyle.Success),
- new ButtonBuilder()
- .setCustomId(`sacrifice cancel ${interaction.user.id} ${cardnumber.value!} ${quantity}`)
- .setLabel("Cancel")
- .setStyle(ButtonStyle.Secondary),
- ]);
-
- await interaction.reply({
- embeds: [ embed ],
- components: [ row ],
- });
- }
-}
\ No newline at end of file
diff --git a/src/commands/series.ts b/src/commands/series.ts
deleted file mode 100644
index 16ae0db..0000000
--- a/src/commands/series.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-import { CommandInteraction, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import { CoreClient } from "../client/client";
-import AppLogger from "../client/appLogger";
-import SeriesHelper from "../helpers/SeriesHelper";
-
-export default class Series extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("series")
- .setDescription("View details on a series")
- .addSubcommand(x =>
- x
- .setName("view")
- .setDescription("View a specifiic series by id")
- .addStringOption(y =>
- y
- .setName("id")
- .setDescription("The series id")
- .setRequired(true)))
- .addSubcommand(x =>
- x
- .setName("list")
- .setDescription("List all series")) as SlashCommandBuilder;
- }
-
- public override async execute(interaction: CommandInteraction) {
- if (!interaction.isChatInputCommand()) return;
-
- switch (interaction.options.getSubcommand()) {
- case "view":
- await this.ViewSeries(interaction);
- break;
- case "list":
- await this.ListSeries(interaction);
- break;
- default:
- AppLogger.LogWarn("Commands/Series", `Subcommand doesn't exist: ${interaction.options.getSubcommand()}`);
- await interaction.reply("Subcommand doesn't exist.");
- }
- }
-
- private async ViewSeries(interaction: CommandInteraction) {
- const id = interaction.options.get("id");
-
- AppLogger.LogSilly("Commands/Series/View", `Parameters: id=${id?.value}`);
-
- await interaction.deferReply();
-
- if (!id) return;
-
- const series = CoreClient.Cards.find(x => x.id == id.value);
-
- if (!series) {
- AppLogger.LogVerbose("Commands/Series/View", "Series not found.");
-
- await interaction.followUp("Series not found.");
- return;
- }
-
- try {
- const embed = await SeriesHelper.GenerateSeriesViewPage(series.id, 0, interaction.user.id);
-
- await interaction.followUp({
- embeds: [ embed!.embed ],
- components: [ embed!.row ],
- files: [ embed!.image ],
- });
- } catch (e) {
- await interaction.followUp("An error has occured generating the series grid.");
- AppLogger.CatchError("Series", e);
- }
- }
-
- private async ListSeries(interaction: CommandInteraction) {
- const embed = SeriesHelper.GenerateSeriesListPage(0);
-
- await interaction.reply({ embeds: [ embed!.embed ], components: [ embed!.row ]});
- }
-}
diff --git a/src/commands/stage/dropnumber.ts b/src/commands/stage/dropnumber.ts
index c61ed43..dd42a43 100644
--- a/src/commands/stage/dropnumber.ts
+++ b/src/commands/stage/dropnumber.ts
@@ -1,80 +1,76 @@
-import { AttachmentBuilder, CacheType, CommandInteraction, SlashCommandBuilder } from "discord.js";
+import { AttachmentBuilder, CacheType, CommandInteraction, DiscordAPIError, SlashCommandBuilder } from "discord.js";
import { Command } from "../../type/command";
+import Card from "../../database/entities/card/Card";
import { readFileSync } from "fs";
import Inventory from "../../database/entities/app/Inventory";
+import CardDropHelper from "../../helpers/CardDropHelper";
import { v4 } from "uuid";
import { CoreClient } from "../../client/client";
-import path from "path";
-import DropEmbedHelper from "../../helpers/DropHelpers/DropEmbedHelper";
-import AppLogger from "../../client/appLogger";
export default class Dropnumber extends Command {
constructor() {
super();
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("dropnumber")
- .setDescription("(TEST) Summon a specific card")
+ super.CommandBuilder = new SlashCommandBuilder()
+ .setName('dropnumber')
+ .setDescription('(TEST) Summon a specific card')
.addStringOption(x =>
x
- .setName("cardnumber")
- .setDescription("The card number to summon")
+ .setName('cardnumber')
+ .setDescription('The card number to summon')
.setRequired(true));
}
public override async execute(interaction: CommandInteraction) {
if (!interaction.isChatInputCommand()) return;
- const cardNumber = interaction.options.get("cardnumber");
+ const cardNumber = interaction.options.get('cardnumber');
if (!cardNumber || !cardNumber.value) {
- await interaction.reply("Card Number is required");
+ await interaction.reply('Card Number is required');
return;
}
- const card = CoreClient.Cards
- .flatMap(x => x.cards)
- .find(x => x.id == cardNumber.value);
+ const card = await Card.FetchOneByCardNumber(cardNumber.value.toString(), [
+ "Series"
+ ]);
if (!card) {
- await interaction.reply("Card not found");
+ await interaction.reply('Card not found');
return;
}
- const claimId = v4();
+ const image = readFileSync(card.Path);
+
await interaction.deferReply();
- try {
- const files = [];
- let imageFileName = "";
+ const attachment = new AttachmentBuilder(image, { name: card.FileName });
- if (!(card.path.startsWith("http://") || card.path.startsWith("https://"))) {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", card.path));
- imageFileName = card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- files.push(attachment);
- }
-
- const series = CoreClient.Cards
- .find(x => x.cards.includes(card))!;
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.id);
+ const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.CardNumber);
const quantityClaimed = inventory ? inventory.Quantity : 0;
- const embed = DropEmbedHelper.GenerateDropEmbed({ card, series }, quantityClaimed, imageFileName);
+ const embed = CardDropHelper.GenerateDropEmbed(card, quantityClaimed || 0);
- const row = DropEmbedHelper.GenerateDropButtons({ card, series }, claimId, interaction.user.id);
+ const claimId = v4();
- await interaction.editReply({
- embeds: [ embed ],
- files: files,
- components: [ row ],
- });
+ const row = CardDropHelper.GenerateDropButtons(card, claimId, interaction.user.id);
+
+ try {
+ await interaction.editReply({
+ embeds: [ embed ],
+ files: [ attachment ],
+ components: [ row ],
+ });
} catch (e) {
- AppLogger.CatchError("Dropnumber", e);
- await interaction.editReply("Unable to send next drop. Please try again, and report this if it keeps happening");
+ console.error(e);
+
+ if (e instanceof DiscordAPIError) {
+ await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: ${e.code}`);
+ } else {
+ await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening.Code: UNKNOWN`);
+ }
}
+
+ CoreClient.ClaimId = claimId;
}
}
\ No newline at end of file
diff --git a/src/commands/stage/droprarity.ts b/src/commands/stage/droprarity.ts
index f776930..fa11b78 100644
--- a/src/commands/stage/droprarity.ts
+++ b/src/commands/stage/droprarity.ts
@@ -1,84 +1,81 @@
-import { AttachmentBuilder, CacheType, CommandInteraction, SlashCommandBuilder } from "discord.js";
+import { AttachmentBuilder, CacheType, CommandInteraction, DiscordAPIError, SlashCommandBuilder } from "discord.js";
import { Command } from "../../type/command";
-import { CardRarity, CardRarityChoices, CardRarityParse } from "../../constants/CardRarity";
+import { CardRarity, CardRarityParse } from "../../constants/CardRarity";
+import CardDropHelper from "../../helpers/CardDropHelper";
import { readFileSync } from "fs";
import Inventory from "../../database/entities/app/Inventory";
import { v4 } from "uuid";
-import path from "path";
-import GetCardsHelper from "../../helpers/DropHelpers/GetCardsHelper";
-import DropEmbedHelper from "../../helpers/DropHelpers/DropEmbedHelper";
-import AppLogger from "../../client/appLogger";
+import { CoreClient } from "../../client/client";
export default class Droprarity extends Command {
constructor() {
super();
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("droprarity")
- .setDescription("(TEST) Summon a random card of a specific rarity")
+ super.CommandBuilder = new SlashCommandBuilder()
+ .setName('droprarity')
+ .setDescription('(TEST) Summon a random card of a specific rarity')
.addStringOption(x =>
x
- .setName("rarity")
- .setDescription("The rarity you want to summon")
- .setRequired(true)
- .setChoices(CardRarityChoices));
+ .setName('rarity')
+ .setDescription('The rarity you want to summon')
+ .setRequired(true));
}
public override async execute(interaction: CommandInteraction) {
if (!interaction.isChatInputCommand()) return;
- const rarity = interaction.options.get("rarity");
+ const rarity = interaction.options.get('rarity');
if (!rarity || !rarity.value) {
- await interaction.reply("Rarity is required");
+ await interaction.reply('Rarity is required');
return;
}
const rarityType = CardRarityParse(rarity.value.toString());
if (rarityType == CardRarity.Unknown) {
- await interaction.reply("Invalid rarity");
+ await interaction.reply('Invalid rarity');
return;
}
- const card = GetCardsHelper.GetRandomCardByRarity(rarityType);
+ const card = await CardDropHelper.GetRandomCardByRarity(rarityType);
if (!card) {
- await interaction.reply("Card not found");
+ await interaction.reply('Card not found');
return;
}
- const claimId = v4();
+ const image = readFileSync(card.Path);
+
await interaction.deferReply();
+ const attachment = new AttachmentBuilder(image, { name: card.FileName });
+
+ const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.CardNumber);
+ const quantityClaimed = inventory ? inventory.Quantity : 0;
+
+ const embed = CardDropHelper.GenerateDropEmbed(card, quantityClaimed || 0);
+
+ const claimId = v4();
+
+ const row = CardDropHelper.GenerateDropButtons(card, claimId, interaction.user.id);
+
try {
- const files = [];
- let imageFileName = "";
-
- if (!(card.card.path.startsWith("http://") || card.card.path.startsWith("https://"))) {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", card.card.path));
- imageFileName = card.card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- files.push(attachment);
- }
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.card.id);
- const quantityClaimed = inventory ? inventory.Quantity : 0;
-
- const embed = DropEmbedHelper.GenerateDropEmbed(card, quantityClaimed, imageFileName);
-
- const row = DropEmbedHelper.GenerateDropButtons(card, claimId, interaction.user.id);
-
await interaction.editReply({
embeds: [ embed ],
- files: files,
+ files: [ attachment ],
components: [ row ],
});
} catch (e) {
- AppLogger.CatchError("Droprarity", e);
- await interaction.editReply("Unable to send next drop. Please try again, and report this if it keeps happening");
+ console.error(e);
+
+ if (e instanceof DiscordAPIError) {
+ await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: ${e.code}`);
+ } else {
+ await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: UNKNOWN`);
+ }
}
+
+ CoreClient.ClaimId = claimId;
}
}
\ No newline at end of file
diff --git a/src/commands/stats.ts b/src/commands/stats.ts
deleted file mode 100644
index e65ab93..0000000
--- a/src/commands/stats.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import {CommandInteraction, EmbedBuilder, PermissionsBitField, SlashCommandBuilder} from "discord.js";
-import {Command} from "../type/command";
-import {CoreClient} from "../client/client";
-import {CardRarity} from "../constants/CardRarity";
-import EmbedColours from "../constants/EmbedColours";
-
-export default class Stats extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("stats")
- .setDescription("Get bot stats such as card info")
- .setDefaultMemberPermissions(PermissionsBitField.Flags.Administrator);
- }
-
- public override async execute(interaction: CommandInteraction) {
- const allCards = CoreClient.Cards.flatMap(x => x.cards);
-
- const totalCards = allCards.length;
- const bronzeCards = allCards.filter(x => x.type == CardRarity.Bronze)
- .length;
- const silverCards = allCards.filter(x => x.type == CardRarity.Silver)
- .length;
- const goldCards = allCards.filter(x => x.type == CardRarity.Gold)
- .length;
- const mangaCards = allCards.filter(x => x.type == CardRarity.Manga)
- .length;
- const legendaryCards = allCards.filter(x => x.type == CardRarity.Legendary)
- .length;
-
- const description = [
- `${totalCards} Total`,
- `${bronzeCards} Bronze`,
- `${silverCards} Silver`,
- `${goldCards} Gold`,
- `${mangaCards} Manga`,
- `${legendaryCards} Legendary`,
- ].join("\n");
-
- const embed = new EmbedBuilder()
- .setTitle("Stats")
- .setDescription(description)
- .setColor(EmbedColours.Ok);
-
- await interaction.reply({
- embeds: [ embed ],
- ephemeral: true,
- });
- }
-}
diff --git a/src/commands/trade.ts b/src/commands/trade.ts
deleted file mode 100644
index fcd312a..0000000
--- a/src/commands/trade.ts
+++ /dev/null
@@ -1,166 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction, EmbedBuilder, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import Inventory from "../database/entities/app/Inventory";
-import { CoreClient } from "../client/client";
-import EmbedColours from "../constants/EmbedColours";
-import AppLogger from "../client/appLogger";
-
-export default class Trade extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("trade")
- .setDescription("Initiate a trade with another user.")
- .addUserOption(x =>
- x
- .setName("user")
- .setDescription("User to trade with")
- .setRequired(true))
- .addStringOption(x =>
- x
- .setName("give")
- .setDescription("Item to give")
- .setRequired(true))
- .addStringOption(x =>
- x
- .setName("receive")
- .setDescription("Item to receive")
- .setRequired(true))
- .addNumberOption(x =>
- x
- .setName("givequantity")
- .setDescription("Amount to give"))
- .addNumberOption(x =>
- x
- .setName("receivequantity")
- .setDescription("Amount to receive"));
- }
-
- public override async execute(interaction: CommandInteraction) {
- const user = interaction.options.get("user", true).user!;
- const give = interaction.options.get("give", true);
- const receive = interaction.options.get("receive", true);
- const givequantityInput = interaction.options.get("givequantity")?.value ?? 1;
- const receivequantityInput = interaction.options.get("receivequantity")?.value ?? 1;
-
- const givequantity = Number(givequantityInput) || 1;
- const receivequantity = Number(receivequantityInput) || 1;
-
- AppLogger.LogSilly("Commands/Trade", `Parameters: user=${user.id}, give=${give.value}, receive=${receive.value}`);
-
- if (interaction.user.id == user.id) {
- await interaction.reply("You can not create a trade with yourself.");
- return;
- }
-
- const user1ItemEntity = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, give.value!.toString());
- const user2ItemEntity = await Inventory.FetchOneByCardNumberAndUserId(user.id, receive.value!.toString());
-
- if (!user1ItemEntity || user1ItemEntity.Quantity < givequantity) {
- await interaction.reply("You do not have the item you are trying to trade.");
- return;
- }
-
- if (!user2ItemEntity || user2ItemEntity.Quantity < receivequantity) {
- await interaction.reply("The user you are trying to trade with does not have the item you are trying to trade for.");
- return;
- }
-
- const user1Item = CoreClient.Cards
- .flatMap(x => x.cards)
- .find(x => x.id === give.value!.toString());
-
- const user2Item = CoreClient.Cards
- .flatMap(x => x.cards)
- .find(x => x.id === receive.value!.toString());
-
- if (!user1Item || !user2Item) {
- await interaction.reply("One or more of the items you are trying to trade does not exist.");
- return;
- }
-
- const now = new Date();
- const expiry = now.setMinutes(now.getMinutes() + 15);
-
- const tradeEmbed = new EmbedBuilder()
- .setTitle("⚠️ Trade Offer ⚠️")
- .setDescription(`Trade initiated between ${interaction.user.username} and ${user.username}`)
- .setColor(EmbedColours.Grey)
- .setImage("https://media1.tenor.com/m/KkZwKl2AQ2QAAAAd/trade-offer.gif")
- .addFields([
- {
- name: `${interaction.user.username} Receives`,
- value: `${user2Item.id}: ${user2Item.name} x${receivequantity}`,
- inline: true,
- },
- {
- name: `${user.username} Receives`,
- value: `${user1Item.id}: ${user1Item.name} x${givequantity}`,
- inline: true,
- },
- {
- name: "Expires",
- value: new Date(expiry).toLocaleString(),
- }
- ]);
-
- const timeoutId = setTimeout(async () => this.autoDecline(interaction, interaction.user.username, user.username, user1Item.id, user2Item.id, user1Item.name, user2Item.name, givequantity, receivequantity), 1000 * 60 * 15); // 15 minutes
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setCustomId(`trade accept ${interaction.user.id} ${user.id} ${user1Item.id} ${user2Item.id} ${expiry} ${timeoutId} ${givequantity} ${receivequantity}`)
- .setLabel("Accept")
- .setStyle(ButtonStyle.Success),
- new ButtonBuilder()
- .setCustomId(`trade decline ${interaction.user.id} ${user.id} ${user1Item.id} ${user2Item.id} ${expiry} ${timeoutId} ${givequantity} ${receivequantity}`)
- .setLabel("Decline")
- .setStyle(ButtonStyle.Danger),
- ]);
-
- await interaction.reply({ content: `${user}`, embeds: [ tradeEmbed ], components: [ row ] });
- }
-
- private async autoDecline(interaction: CommandInteraction, user1Username: string, user2Username: string, user1CardNumber: string, user2CardNumber: string, user1CardName: string, user2CardName: string, user1Quantity: number, user2Quantity: number) {
- AppLogger.LogSilly("Commands/Trade/AutoDecline", `Auto declining trade between ${user1Username} and ${user2Username}`);
-
- const tradeEmbed = new EmbedBuilder()
- .setTitle("Trade Expired")
- .setDescription(`Trade initiated between ${user1Username} and ${user2Username}`)
- .setColor(EmbedColours.Error)
- .setImage("https://media1.tenor.com/m/KkZwKl2AQ2QAAAAd/trade-offer.gif")
- .addFields([
- {
- name: `${user1Username} Receives`,
- value: `${user2CardNumber}: ${user2CardName} x${user2Quantity}`,
- inline: true,
- },
- {
- name: `${user2Username} Receives`,
- value: `${user1CardNumber}: ${user1CardName} x${user1Quantity}`,
- inline: true,
- },
- {
- name: "Expired",
- value: new Date().toLocaleString(),
- }
- ]);
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setCustomId("trade expired accept")
- .setLabel("Accept")
- .setStyle(ButtonStyle.Success)
- .setDisabled(true),
- new ButtonBuilder()
- .setCustomId("trade expired declined")
- .setLabel("Decline")
- .setStyle(ButtonStyle.Danger)
- .setDisabled(true),
- ]);
-
- await interaction.editReply({ embeds: [ tradeEmbed ], components: [ row ]});
- }
-}
\ No newline at end of file
diff --git a/src/commands/view.ts b/src/commands/view.ts
deleted file mode 100644
index 9a1d447..0000000
--- a/src/commands/view.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { CommandInteraction, SlashCommandBuilder } from "discord.js";
-import { Command } from "../type/command";
-import AppLogger from "../client/appLogger";
-import CardSearchHelper from "../helpers/CardSearchHelper";
-
-export default class View extends Command {
- constructor() {
- super();
-
- this.CommandBuilder = new SlashCommandBuilder()
- .setName("view")
- .setDescription("Search for a card by its name")
- .addStringOption(x =>
- x
- .setName("name")
- .setDescription("The card name to search for")
- .setRequired(true));
- }
-
- public override async execute(interaction: CommandInteraction) {
- const name = interaction.options.get("name", true);
-
- AppLogger.LogSilly("Commands/View", `Parameters: name=${name.value}`);
-
- await interaction.deferReply();
-
- const searchResult = await CardSearchHelper.GenerateSearchQuery(name.value!.toString(), interaction.user.id, 7);
-
- if (!searchResult) {
- await interaction.editReply("No results found");
- return;
- }
-
- await interaction.editReply({
- embeds: [ searchResult.embed ],
- components: [ searchResult.row ],
- files: searchResult.attachments,
- });
- }
-}
\ No newline at end of file
diff --git a/src/constants/CardConstants.ts b/src/constants/CardConstants.ts
deleted file mode 100644
index 60a7f59..0000000
--- a/src/constants/CardConstants.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-export default class CardConstants {
- public static readonly ClaimCost = 10;
- public static readonly TimerGiveAmount = 10;
- public static readonly DailyCurrency = 100;
- public static readonly StartingCurrency = 300;
-
- // Multidrop
- public static readonly MultidropCost = this.ClaimCost * 10;
- public static readonly MultidropQuantity = 11;
-
- // Effects
- public static readonly UnusedChanceUpChance = 0.5;
-}
\ No newline at end of file
diff --git a/src/constants/CardRarity.ts b/src/constants/CardRarity.ts
index 0fcdec7..629130a 100644
--- a/src/constants/CardRarity.ts
+++ b/src/constants/CardRarity.ts
@@ -9,93 +9,53 @@ export enum CardRarity {
Legendary,
}
-export const CardRarityChoices = [
- {
- name: "Bronze",
- value: "bronze",
- },
- {
- name: "Silver",
- value: "silver",
- },
- {
- name: "Gold",
- value: "gold",
- },
- {
- name: "Manga",
- value: "manga",
- },
- {
- name: "Legendary",
- value: "legendary",
- },
-];
-
export function CardRarityToString(rarity: CardRarity): string {
switch (rarity) {
- case CardRarity.Unknown:
- return "Unknown";
- case CardRarity.Bronze:
- return "Bronze";
- case CardRarity.Silver:
- return "Silver";
- case CardRarity.Gold:
- return "Gold";
- case CardRarity.Legendary:
- return "Legendary";
- case CardRarity.Manga:
- return "Manga";
+ case CardRarity.Unknown:
+ return "Unknown";
+ case CardRarity.Bronze:
+ return "Bronze";
+ case CardRarity.Silver:
+ return "Silver";
+ case CardRarity.Gold:
+ return "Gold";
+ case CardRarity.Legendary:
+ return "Legendary";
+ case CardRarity.Manga:
+ return "Manga";
}
}
export function CardRarityToColour(rarity: CardRarity): number {
switch (rarity) {
- case CardRarity.Unknown:
- return EmbedColours.Grey;
- case CardRarity.Bronze:
- return EmbedColours.BronzeCard;
- case CardRarity.Silver:
- return EmbedColours.SilverCard;
- case CardRarity.Gold:
- return EmbedColours.GoldCard;
- case CardRarity.Legendary:
- return EmbedColours.LegendaryCard;
- case CardRarity.Manga:
- return EmbedColours.MangaCard;
+ case CardRarity.Unknown:
+ return EmbedColours.Grey;
+ case CardRarity.Bronze:
+ return EmbedColours.BronzeCard;
+ case CardRarity.Silver:
+ return EmbedColours.SilverCard;
+ case CardRarity.Gold:
+ return EmbedColours.GoldCard;
+ case CardRarity.Legendary:
+ return EmbedColours.LegendaryCard;
+ case CardRarity.Manga:
+ return EmbedColours.MangaCard;
}
}
export function CardRarityParse(rarity: string): CardRarity {
switch (rarity.toLowerCase()) {
- case "bronze":
- return CardRarity.Bronze;
- case "silver":
- return CardRarity.Silver;
- case "gold":
- return CardRarity.Gold;
- case "legendary":
- return CardRarity.Legendary;
- case "manga":
- return CardRarity.Manga;
- default:
- return CardRarity.Unknown;
- }
-}
-
-export function GetSacrificeAmount(rarity: CardRarity): number {
- switch (rarity) {
- case CardRarity.Bronze:
- return 5;
- case CardRarity.Silver:
- return 10;
- case CardRarity.Gold:
- return 30;
- case CardRarity.Manga:
- return 40;
- case CardRarity.Legendary:
- return 100;
- default:
- return 0;
+ case "bronze":
+ return CardRarity.Bronze;
+ case "silver":
+ return CardRarity.Silver;
+ case "gold":
+ return CardRarity.Gold;
+ case "legendary":
+ return CardRarity.Legendary;
+ case "manga":
+ return CardRarity.Manga;
+ default:
+ return CardRarity.Unknown;
}
}
\ No newline at end of file
diff --git a/src/constants/EffectDetails.ts b/src/constants/EffectDetails.ts
deleted file mode 100644
index 9d1f2b6..0000000
--- a/src/constants/EffectDetails.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-class EffectDetail {
- public readonly id: string;
- public readonly friendlyName: string;
- public readonly duration: number;
- public readonly cost: number;
- public readonly cooldown: number;
-
- constructor(id: string, friendlyName: string, duration: number, cost: number, cooldown: number) {
- this.id = id;
- this.friendlyName = friendlyName;
- this.duration = duration;
- this.cost = cost;
- this.cooldown = cooldown;
- }
-};
-
-export const EffectDetails = new Map([
- [ "unclaimed", new EffectDetail("unclaimed", "Unclaimed Chance Up", 10 * 60 * 1000, 100, 3 * 60 * 60 * 1000) ],
-]);
-
-export const EffectChoices = [
- { name: "Unclaimed Chance Up", value: "unclaimed" },
-];
diff --git a/src/constants/EmbedColours.ts b/src/constants/EmbedColours.ts
index f270eef..6094dbf 100644
--- a/src/constants/EmbedColours.ts
+++ b/src/constants/EmbedColours.ts
@@ -1,14 +1,6 @@
export default class EmbedColours {
- // General
public static readonly Ok = 0x3050ba;
- public static readonly Success = 0x50c878;
- public static readonly Error = 0xff0000;
-
- // Colours
public static readonly Grey = 0xd3d3d3;
- public static readonly Green = 0x228B22;
-
- // Card Types
public static readonly BronzeCard = 0xcd7f32;
public static readonly SilverCard = 0xc0c0c0;
public static readonly GoldCard = 0xffd700;
diff --git a/src/constants/ErrorMessages.ts b/src/constants/ErrorMessages.ts
deleted file mode 100644
index c8749ec..0000000
--- a/src/constants/ErrorMessages.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export default class ErrorMessages {
- public static readonly BotSyncing = "Bot is currently syncing, please wait until its done.";
- public static readonly SafeMode = "Safe Mode has been activated, please resync to continue.";
- public static readonly UnableToFetchCard = "Unable to fetch card, please try again.";
- public static readonly UnableToFetchUser = "Unable to fetch user, please try again.";
-
- public static readonly NotEnoughCurrency = (need: number, have: number) => `Not enough currency! You need ${need} currency, you have ${have}!`;
-}
\ No newline at end of file
diff --git a/src/contracts/AppBaseEntity.ts b/src/contracts/AppBaseEntity.ts
index 43bed74..8419f00 100644
--- a/src/contracts/AppBaseEntity.ts
+++ b/src/contracts/AppBaseEntity.ts
@@ -11,13 +11,13 @@ export default class AppBaseEntity {
}
@PrimaryColumn()
- Id: string;
+ Id: string;
@Column()
- WhenCreated: Date;
+ WhenCreated: Date;
@Column()
- WhenUpdated: Date;
+ WhenUpdated: Date;
public async Save(target: EntityTarget, entity: DeepPartial): Promise {
this.WhenUpdated = new Date();
@@ -27,24 +27,12 @@ export default class AppBaseEntity {
await repository.save(entity);
}
- public static async SaveAll(target: EntityTarget, entities: DeepPartial[]): Promise {
- const repository = AppDataSource.getRepository(target);
-
- await repository.save(entities);
- }
-
public static async Remove(target: EntityTarget, entity: T): Promise {
const repository = AppDataSource.getRepository(target);
await repository.remove(entity);
}
- public static async RemoveMany(target: EntityTarget, entity: T[]): Promise {
- const repository = AppDataSource.getRepository(target);
-
- await repository.remove(entity);
- }
-
public static async FetchAll(target: EntityTarget, relations?: string[]): Promise {
const repository = AppDataSource.getRepository(target);
diff --git a/src/contracts/CardBaseEntity.ts b/src/contracts/CardBaseEntity.ts
new file mode 100644
index 0000000..d498405
--- /dev/null
+++ b/src/contracts/CardBaseEntity.ts
@@ -0,0 +1,60 @@
+import { Column, DeepPartial, EntityTarget, PrimaryColumn, ObjectLiteral, FindOptionsWhere } from "typeorm";
+import { v4 } from "uuid";
+import AppDataSource from "../database/dataSources/appDataSource";
+import CardDataSource from "../database/dataSources/cardDataSource";
+
+export default class CardBaseEntity {
+ constructor() {
+ this.Id = v4();
+
+ this.WhenCreated = new Date();
+ this.WhenUpdated = new Date();
+ }
+
+ @PrimaryColumn()
+ Id: string;
+
+ @Column()
+ WhenCreated: Date;
+
+ @Column()
+ WhenUpdated: Date;
+
+ public async Save(target: EntityTarget, entity: DeepPartial): Promise {
+ this.WhenUpdated = new Date();
+
+ const repository = CardDataSource.getRepository(target);
+
+ await repository.save(entity);
+ }
+
+ public static async Remove(target: EntityTarget, entity: T): Promise {
+ const repository = CardDataSource.getRepository(target);
+
+ await repository.remove(entity);
+ }
+
+ public static async FetchAll(target: EntityTarget, relations?: string[]): Promise {
+ const repository = CardDataSource.getRepository(target);
+
+ const all = await repository.find({ relations: relations || [] });
+
+ return all;
+ }
+
+ public static async FetchOneById(target: EntityTarget, id: string, relations?: string[]): Promise {
+ const repository = CardDataSource.getRepository(target);
+
+ const single = await repository.findOne({ where: ({ Id: id } as FindOptionsWhere), relations: relations || {} });
+
+ return single;
+ }
+
+ public static async Any(target: EntityTarget): Promise {
+ const repository = CardDataSource.getRepository(target);
+
+ const any = await repository.find();
+
+ return any.length > 0;
+ }
+}
\ No newline at end of file
diff --git a/src/contracts/EventExecutors.ts b/src/contracts/EventExecutors.ts
deleted file mode 100644
index 0696f45..0000000
--- a/src/contracts/EventExecutors.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-
-import { DMChannel, Guild, GuildBan, GuildMember, Message, NonThreadGuildBasedChannel, PartialGuildMember, PartialMessage } from "discord.js";
-
-interface EventExecutors {
- ChannelCreate: ((channel: NonThreadGuildBasedChannel) => void)[],
- ChannelDelete: ((channel: DMChannel | NonThreadGuildBasedChannel) => void)[],
- ChannelUpdate: ((channel: DMChannel | NonThreadGuildBasedChannel) => void)[],
- GuildBanAdd: ((ban: GuildBan) => void)[],
- GuildBanRemove: ((ban: GuildBan) => void)[],
- GuildCreate: ((guild: Guild) => void)[],
- GuildMemberAdd: ((member: GuildMember) => void)[],
- GuildMemberRemove: ((member: GuildMember | PartialGuildMember) => void)[],
- GuildMemebrUpdate: ((oldMember: GuildMember | PartialGuildMember, newMember: GuildMember) => void)[],
- MessageCreate: ((message: Message) => void)[],
- MessageDelete: ((message: Message | PartialMessage) => void)[],
- MessageUpdate: ((oldMessage: Message | PartialMessage, newMessage: Message | PartialMessage) => void)[],
-}
-
-export default EventExecutors;
\ No newline at end of file
diff --git a/src/contracts/ButtonEventItem.ts b/src/contracts/IButtonEventItem.ts
similarity index 74%
rename from src/contracts/ButtonEventItem.ts
rename to src/contracts/IButtonEventItem.ts
index e139334..061a9c9 100644
--- a/src/contracts/ButtonEventItem.ts
+++ b/src/contracts/IButtonEventItem.ts
@@ -1,10 +1,8 @@
import { Environment } from "../constants/Environment";
import { ButtonEvent } from "../type/buttonEvent";
-interface ButtonEventItem {
+export default interface IButtonEventItem {
ButtonId: string,
Event: ButtonEvent,
Environment: Environment,
-}
-
-export default ButtonEventItem;
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/src/contracts/ICommandItem.ts b/src/contracts/ICommandItem.ts
index 0524a8d..3ebc670 100644
--- a/src/contracts/ICommandItem.ts
+++ b/src/contracts/ICommandItem.ts
@@ -1,11 +1,9 @@
import { Environment } from "../constants/Environment";
import { Command } from "../type/command";
-interface ICommandItem {
+export default interface ICommandItem {
Name: string,
Command: Command,
Environment: Environment,
ServerId?: string,
-}
-
-export default ICommandItem;
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/src/contracts/IEventItem.ts b/src/contracts/IEventItem.ts
new file mode 100644
index 0000000..b7cc7bf
--- /dev/null
+++ b/src/contracts/IEventItem.ts
@@ -0,0 +1,9 @@
+
+import { Environment } from "../constants/Environment";
+import { EventType } from "../constants/EventType";
+
+export default interface IEventItem {
+ EventType: EventType,
+ ExecutionFunction: Function,
+ Environment: Environment,
+}
\ No newline at end of file
diff --git a/src/contracts/IGDriveFolderListing.ts b/src/contracts/IGDriveFolderListing.ts
index 1187bca..95e8609 100644
--- a/src/contracts/IGDriveFolderListing.ts
+++ b/src/contracts/IGDriveFolderListing.ts
@@ -1,4 +1,4 @@
-export interface IGDriveFolderListing {
+export default interface IGDriveFolderListing {
id: string,
name: string,
-}
\ No newline at end of file
+};
\ No newline at end of file
diff --git a/src/contracts/SeriesMetadata.ts b/src/contracts/SeriesMetadata.ts
deleted file mode 100644
index 4dd2eb9..0000000
--- a/src/contracts/SeriesMetadata.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { CardRarity } from "../constants/CardRarity";
-
-export interface SeriesMetadata {
- id: number,
- name: string,
- cards: CardMetadata[],
-}
-
-export interface CardMetadata {
- id: string,
- name: string,
- type: CardRarity,
- path: string,
- subseries?: string,
- colour?: string,
-}
-
-export interface DropResult {
- series: SeriesMetadata,
- card: CardMetadata,
-}
\ No newline at end of file
diff --git a/src/contracts/StringDropdownEventItem.ts b/src/contracts/StringDropdownEventItem.ts
deleted file mode 100644
index 1a7b0aa..0000000
--- a/src/contracts/StringDropdownEventItem.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import {Environment} from "../constants/Environment";
-import {StringDropdownEvent} from "../type/stringDropdownEvent";
-
-interface StringDropdownEventItem {
- DropdownId: string,
- Event: StringDropdownEvent,
- Environment: Environment,
-}
-
-export default StringDropdownEventItem;
diff --git a/src/database/dataSources/cardDataSource.ts b/src/database/dataSources/cardDataSource.ts
new file mode 100644
index 0000000..f32a7f2
--- /dev/null
+++ b/src/database/dataSources/cardDataSource.ts
@@ -0,0 +1,22 @@
+import { DataSource } from "typeorm";
+import * as dotenv from "dotenv";
+
+dotenv.config();
+
+const CardDataSource = new DataSource({
+ type: "sqlite",
+ database: process.env.DB_CARD_FILE!,
+ synchronize: true,
+ logging: process.env.DB_LOGGING == "true",
+ entities: [
+ "dist/database/entities/card/**/*.js",
+ ],
+ migrations: [
+ "dist/database/migrations/card/**/*.js",
+ ],
+ subscribers: [
+ "dist/database/subscribers/card/**/*.js",
+ ],
+});
+
+export default CardDataSource;
\ No newline at end of file
diff --git a/src/database/entities/app/Claim.ts b/src/database/entities/app/Claim.ts
index 7cdee38..b4cde5e 100644
--- a/src/database/entities/app/Claim.ts
+++ b/src/database/entities/app/Claim.ts
@@ -12,10 +12,10 @@ export default class Claim extends AppBaseEntity {
}
@Column()
- ClaimId: string;
+ ClaimId: string;
@ManyToOne(() => Inventory, x => x.Claims)
- Inventory: Inventory;
+ Inventory: Inventory;
public SetInventory(inventory: Inventory) {
this.Inventory = inventory;
diff --git a/src/database/entities/app/Config.ts b/src/database/entities/app/Config.ts
index e97728a..50915d0 100644
--- a/src/database/entities/app/Config.ts
+++ b/src/database/entities/app/Config.ts
@@ -12,10 +12,10 @@ export default class Config extends AppBaseEntity {
}
@Column()
- Key: string;
+ Key: string;
@Column()
- Value: string;
+ Value: string;
public SetValue(value: string) {
this.Value = value;
diff --git a/src/database/entities/app/Inventory.ts b/src/database/entities/app/Inventory.ts
index c780dad..adec824 100644
--- a/src/database/entities/app/Inventory.ts
+++ b/src/database/entities/app/Inventory.ts
@@ -14,31 +14,21 @@ export default class Inventory extends AppBaseEntity {
}
@Column()
- UserId: string;
+ UserId: string;
@Column()
- CardNumber: string;
+ CardNumber: string;
@Column()
- Quantity: number;
+ Quantity: number;
@OneToMany(() => Claim, x => x.Inventory)
- Claims: Claim[];
+ Claims: Claim[];
public SetQuantity(quantity: number) {
this.Quantity = quantity;
}
- public RemoveQuantity(amount: number) {
- if (this.Quantity < amount) return;
-
- this.Quantity -= amount;
- }
-
- public AddQuantity(amount: number) {
- this.Quantity += amount;
- }
-
public AddClaim(claim: Claim) {
this.Claims.push(claim);
}
@@ -50,12 +40,4 @@ export default class Inventory extends AppBaseEntity {
return single;
}
-
- public static async FetchAllByUserId(userId: string): Promise {
- const repository = AppDataSource.getRepository(Inventory);
-
- const all = await repository.find({ where: { UserId: userId }});
-
- return all;
- }
-}
+}
\ No newline at end of file
diff --git a/src/database/entities/app/User.ts b/src/database/entities/app/User.ts
deleted file mode 100644
index 3a9018d..0000000
--- a/src/database/entities/app/User.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { Column, Entity } from "typeorm";
-import AppBaseEntity from "../../../contracts/AppBaseEntity";
-
-@Entity()
-export default class User extends AppBaseEntity {
- constructor(userId: string, currency: number) {
- super();
-
- this.Id = userId;
- this.Currency = currency;
- }
-
- @Column()
- Currency: number;
-
- @Column({ nullable: true })
- LastUsedDaily?: Date;
-
- public AddCurrency(amount: number) {
- this.Currency += amount;
- }
-
- public RemoveCurrency(amount: number): boolean {
- if (this.Currency < amount) return false;
-
- this.Currency -= amount;
-
- return true;
- }
-
- public UpdateLastUsedDaily(lastUsedDaily: Date) {
- this.LastUsedDaily = lastUsedDaily;
- }
-}
\ No newline at end of file
diff --git a/src/database/entities/app/UserEffect.ts b/src/database/entities/app/UserEffect.ts
deleted file mode 100644
index 447b9c5..0000000
--- a/src/database/entities/app/UserEffect.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import {Column, Entity} from "typeorm";
-import AppBaseEntity from "../../../contracts/AppBaseEntity";
-import AppDataSource from "../../dataSources/appDataSource";
-
-@Entity()
-export default class UserEffect extends AppBaseEntity {
- constructor(name: string, userId: string, unused: number, WhenExpires?: Date) {
- super();
-
- this.Name = name;
- this.UserId = userId;
- this.Unused = unused;
- this.WhenExpires = WhenExpires;
- }
-
- @Column()
- Name: string;
-
- @Column()
- UserId: string;
-
- @Column()
- Unused: number;
-
- @Column({ nullable: true })
- WhenExpires?: Date;
-
- public AddUnused(amount: number) {
- this.Unused += amount;
- }
-
- public UseEffect(whenExpires: Date): boolean {
- if (this.Unused == 0) {
- return false;
- }
-
- this.Unused -= 1;
- this.WhenExpires = whenExpires;
-
- return true;
- }
-
- public IsEffectActive(): boolean {
- const now = new Date();
-
- if (this.WhenExpires && now < this.WhenExpires) {
- return true;
- }
-
- return false;
- }
-
- public static async FetchOneByUserIdAndName(userId: string, name: string): Promise {
- const repository = AppDataSource.getRepository(UserEffect);
-
- const single = await repository.findOne({ where: { UserId: userId, Name: name } });
-
- return single;
- }
-
- public static async FetchAllByUserIdPaginated(userId: string, page: number = 0, itemsPerPage: number = 10): Promise<[UserEffect[], number]> {
- const repository = AppDataSource.getRepository(UserEffect);
-
- const query = await repository.createQueryBuilder("effect")
- .where("effect.UserId = :userId", { userId })
- .andWhere("effect.Unused > 0")
- .orderBy("effect.Name", "ASC")
- .skip(page * itemsPerPage)
- .take(itemsPerPage)
- .getManyAndCount();
-
- return query;
- }
-
- public static async FetchActiveEffectByUserId(userId: string): Promise {
- const repository = AppDataSource.getRepository(UserEffect);
-
- const query = await repository.createQueryBuilder("effect")
- .where("effect.UserId = :userId", { userId })
- .andWhere("effect.WhenExpires IS NOT NULL")
- .andWhere("effect.WhenExpires > :now", { now: new Date() })
- .getOne();
-
- return query;
- }
-}
diff --git a/src/database/entities/card/Card.ts b/src/database/entities/card/Card.ts
new file mode 100644
index 0000000..295c310
--- /dev/null
+++ b/src/database/entities/card/Card.ts
@@ -0,0 +1,53 @@
+import { Column, Entity, ManyToOne } from "typeorm";
+import CardBaseEntity from "../../../contracts/CardBaseEntity";
+import { CardRarity } from "../../../constants/CardRarity";
+import Series from "./Series";
+import CardDataSource from "../../dataSources/cardDataSource";
+
+@Entity()
+export default class Card extends CardBaseEntity {
+ constructor(cardNumber: string, name: string, rarity: CardRarity, path: string, fileName: string, series: Series) {
+ super();
+
+ this.CardNumber = cardNumber;
+ this.Name = name;
+ this.Rarity = rarity;
+ this.Path = path;
+ this.FileName = fileName;
+ this.Series = series;
+ }
+
+ @Column()
+ CardNumber: string;
+
+ @Column()
+ Name: string;
+
+ @Column()
+ Rarity: CardRarity;
+
+ @Column()
+ Path: string;
+
+ @Column()
+ FileName: string;
+
+ @ManyToOne(() => Series, x => x.Cards)
+ Series: Series;
+
+ public static async FetchOneByCardNumber(cardNumber: string, relations?: string[]): Promise {
+ const repository = CardDataSource.getRepository(Card);
+
+ const single = await repository.findOne({ where: { CardNumber: cardNumber }, relations: relations || [] });
+
+ return single;
+ }
+
+ public static async FetchAllByRarity(rarity: CardRarity, relations?: string[]): Promise {
+ const repository = CardDataSource.getRepository(Card);
+
+ const all = await repository.find({ where: { Rarity: rarity }, relations: relations || [] });
+
+ return all;
+ }
+}
\ No newline at end of file
diff --git a/src/database/entities/card/Series.ts b/src/database/entities/card/Series.ts
new file mode 100644
index 0000000..eb990cc
--- /dev/null
+++ b/src/database/entities/card/Series.ts
@@ -0,0 +1,23 @@
+import { Column, Entity, OneToMany } from "typeorm";
+import CardBaseEntity from "../../../contracts/CardBaseEntity";
+import Card from "./Card";
+
+@Entity()
+export default class Series extends CardBaseEntity {
+ constructor(id: string, name: string, path: string) {
+ super();
+
+ this.Id = id;
+ this.Name = name;
+ this.Path = path;
+ }
+
+ @Column()
+ Name: string;
+
+ @Column()
+ Path: string;
+
+ @OneToMany(() => Card, x => x.Series)
+ Cards: Card[];
+}
\ No newline at end of file
diff --git a/src/database/migrations/app/0.1.5/1694609771821-CreateClaim.ts b/src/database/migrations/app/0.1.5/1694609771821-CreateClaim.ts
index ed048c7..22fe74c 100644
--- a/src/database/migrations/app/0.1.5/1694609771821-CreateClaim.ts
+++ b/src/database/migrations/app/0.1.5/1694609771821-CreateClaim.ts
@@ -1,17 +1,17 @@
-import { MigrationInterface, QueryRunner } from "typeorm";
-import MigrationHelper from "../../../../helpers/MigrationHelper";
+import { MigrationInterface, QueryRunner } from "typeorm"
+import MigrationHelper from "../../../../helpers/MigrationHelper"
export class CreateClaim1694609771821 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise {
- MigrationHelper.Up("1694609771821-CreateClaim", "0.1.5", [
- "01-CreateClaim",
- "02-MoveToClaim",
- "03-AlterInventory",
+ MigrationHelper.Up('1694609771821-CreateClaim', '0.1.5', [
+ '01-CreateClaim',
+ '02-MoveToClaim',
+ '03-AlterInventory',
], queryRunner);
}
- public async down(): Promise {
+ public async down(queryRunner: QueryRunner): Promise {
}
}
diff --git a/src/database/migrations/app/0.1/1693769942868-CreateBase.ts b/src/database/migrations/app/0.1/1693769942868-CreateBase.ts
index 006aa55..709cd3d 100644
--- a/src/database/migrations/app/0.1/1693769942868-CreateBase.ts
+++ b/src/database/migrations/app/0.1/1693769942868-CreateBase.ts
@@ -1,15 +1,15 @@
-import { MigrationInterface, QueryRunner } from "typeorm";
-import MigrationHelper from "../../../../helpers/MigrationHelper";
+import { MigrationInterface, QueryRunner } from "typeorm"
+import MigrationHelper from "../../../../helpers/MigrationHelper"
export class CreateBase1693769942868 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise {
- MigrationHelper.Up("1693769942868-CreateBase", "0.1", [
+ MigrationHelper.Up('1693769942868-CreateBase', '0.1', [
"01-table/Inventory",
], queryRunner);
}
- public async down(): Promise {
+ public async down(queryRunner: QueryRunner): Promise {
}
}
diff --git a/src/database/migrations/app/0.2/1699814500650-createConfig.ts b/src/database/migrations/app/0.2/1699814500650-createConfig.ts
index 2725eee..0a1f22e 100644
--- a/src/database/migrations/app/0.2/1699814500650-createConfig.ts
+++ b/src/database/migrations/app/0.2/1699814500650-createConfig.ts
@@ -1,15 +1,15 @@
-import { MigrationInterface, QueryRunner } from "typeorm";
-import MigrationHelper from "../../../../helpers/MigrationHelper";
+import { MigrationInterface, QueryRunner } from "typeorm"
+import MigrationHelper from "../../../../helpers/MigrationHelper"
export class CreateConfig1699814500650 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise {
- MigrationHelper.Up("1699814500650-createConfig", "0.2", [
+ MigrationHelper.Up('1699814500650-createConfig', '0.2', [
"01-table/Config",
], queryRunner);
}
- public async down(): Promise {
+ public async down(queryRunner: QueryRunner): Promise {
}
}
diff --git a/src/database/migrations/app/0.6/1713289062969-user.ts b/src/database/migrations/app/0.6/1713289062969-user.ts
deleted file mode 100644
index 151db88..0000000
--- a/src/database/migrations/app/0.6/1713289062969-user.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { MigrationInterface, QueryRunner } from "typeorm";
-import MigrationHelper from "../../../../helpers/MigrationHelper";
-
-export class User1713289062969 implements MigrationInterface {
-
- public async up(queryRunner: QueryRunner): Promise {
- MigrationHelper.Up("1713289062969-user", "0.6", [
- "01-table/User",
- ], queryRunner);
- }
-
- public async down(): Promise {
- }
-
-}
diff --git a/src/database/migrations/app/0.6/1715967355818-daily.ts b/src/database/migrations/app/0.6/1715967355818-daily.ts
deleted file mode 100644
index 1c81d18..0000000
--- a/src/database/migrations/app/0.6/1715967355818-daily.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { MigrationInterface, QueryRunner } from "typeorm";
-import MigrationHelper from "../../../../helpers/MigrationHelper";
-
-export class Daily1715967355818 implements MigrationInterface {
-
- public async up(queryRunner: QueryRunner): Promise {
- MigrationHelper.Up("1715967355818-daily", "0.6", [
- "01-table/User",
- ], queryRunner);
- }
-
- public async down(): Promise {
- }
-
-}
diff --git a/src/database/migrations/app/0.9/1729962056556-createUserEffect.ts b/src/database/migrations/app/0.9/1729962056556-createUserEffect.ts
deleted file mode 100644
index f59b7d4..0000000
--- a/src/database/migrations/app/0.9/1729962056556-createUserEffect.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { MigrationInterface, QueryRunner } from "typeorm";
-import MigrationHelper from "../../../../helpers/MigrationHelper";
-
-export class CreateUserEffect1729962056556 implements MigrationInterface {
-
- public async up(queryRunner: QueryRunner): Promise {
- MigrationHelper.Up("1729962056556-createUserEffect", "0.9", [
- "01-table-userEffect",
- ], queryRunner);
- }
-
- public async down(queryRunner: QueryRunner): Promise {
- MigrationHelper.Down("1729962056556-createUserEffect", "0.9", [
- "01-table-userEffect",
- ], queryRunner);
- }
-
-}
diff --git a/src/database/migrations/card/.gitkeep b/src/database/migrations/card/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/helpers/CardDropHelper.ts b/src/helpers/CardDropHelper.ts
new file mode 100644
index 0000000..9f65d69
--- /dev/null
+++ b/src/helpers/CardDropHelper.ts
@@ -0,0 +1,63 @@
+import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js";
+import { CardRarity, CardRarityToColour, CardRarityToString } from "../constants/CardRarity";
+import CardRarityChances from "../constants/CardRarityChances";
+import Card from "../database/entities/card/Card";
+
+export default class CardDropHelper {
+ public static async GetRandomCard(): Promise {
+ const randomRarity = Math.random() * 100;
+
+ let cardRarity: CardRarity;
+
+ const bronzeChance = CardRarityChances.Bronze;
+ const silverChance = bronzeChance + CardRarityChances.Silver;
+ const goldChance = silverChance + CardRarityChances.Gold;
+ const mangaChance = goldChance + CardRarityChances.Manga;
+
+ if (randomRarity < bronzeChance) cardRarity = CardRarity.Bronze;
+ else if (randomRarity < silverChance) cardRarity = CardRarity.Silver;
+ else if (randomRarity < goldChance) cardRarity = CardRarity.Gold;
+ else if (randomRarity < mangaChance) cardRarity = CardRarity.Manga;
+ else cardRarity = CardRarity.Legendary;
+
+ const randomCard = await this.GetRandomCardByRarity(cardRarity);
+
+ return randomCard;
+ }
+
+ public static async GetRandomCardByRarity(rarity: CardRarity): Promise {
+ const allCards = await Card.FetchAllByRarity(rarity, [ "Series" ]);
+
+ const randomCardIndex = Math.floor(Math.random() * allCards.length);
+
+ const card = allCards[randomCardIndex];
+
+ return card;
+ }
+
+ public static GenerateDropEmbed(card: Card, quantityClaimed: Number): EmbedBuilder {
+ let description = "";
+ description += `Series: ${card.Series.Name}\n`;
+ description += `Claimed: ${quantityClaimed}\n`;
+
+ return new EmbedBuilder()
+ .setTitle(card.Name)
+ .setDescription(description)
+ .setFooter({ text: CardRarityToString(card.Rarity) })
+ .setColor(CardRarityToColour(card.Rarity))
+ .setImage(`attachment://${card.FileName}`);
+ }
+
+ public static GenerateDropButtons(card: Card, claimId: string, userId: string): ActionRowBuilder {
+ return new ActionRowBuilder()
+ .addComponents(
+ new ButtonBuilder()
+ .setCustomId(`claim ${card.CardNumber} ${claimId} ${userId}`)
+ .setLabel("Claim")
+ .setStyle(ButtonStyle.Primary),
+ new ButtonBuilder()
+ .setCustomId(`reroll`)
+ .setLabel("Reroll")
+ .setStyle(ButtonStyle.Secondary));
+ }
+}
\ No newline at end of file
diff --git a/src/helpers/CardSearchHelper.ts b/src/helpers/CardSearchHelper.ts
deleted file mode 100644
index df0265c..0000000
--- a/src/helpers/CardSearchHelper.ts
+++ /dev/null
@@ -1,116 +0,0 @@
-import {ActionRowBuilder, AttachmentBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder} from "discord.js";
-import Fuse from "fuse.js";
-import {CoreClient} from "../client/client.js";
-import Inventory from "../database/entities/app/Inventory.js";
-import {readFileSync} from "fs";
-import path from "path";
-import AppLogger from "../client/appLogger.js";
-import GetCardsHelper from "./DropHelpers/GetCardsHelper.js";
-import DropEmbedHelper from "./DropHelpers/DropEmbedHelper.js";
-
-interface ReturnedPage {
- embed: EmbedBuilder,
- row: ActionRowBuilder,
- attachments: AttachmentBuilder[],
- results: string[],
-}
-
-export default class CardSearchHelper {
- public static async GenerateSearchQuery(query: string, userid: string, pages: number): Promise {
- AppLogger.LogSilly("CardSearchHelper/GenerateSearchQuery", `Parameters: query=${query}, userid=${userid}, pages=${pages}`);
-
- const fzf = new Fuse(CoreClient.Cards.flatMap(x => x.cards), { keys: ["name"] });
- const entries = fzf.search(query)
- .splice(0, pages);
-
- const entry = entries[0];
- const results = entries
- .flatMap(x => x.item.id);
-
- if (!entry) {
- AppLogger.LogVerbose("CardSearchHelper/GenerateSearchQuery", `Unable to find entry: ${query}`);
-
- return undefined;
- }
-
- const card = GetCardsHelper.GetCardByCardNumber(entry.item.id);
-
- if (!card) return undefined;
-
- const attachments = [];
- let imageFileName = "";
-
- if (!(card.card.path.startsWith("http://") || card.card.path.startsWith("https://"))) {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", card.card.path));
- imageFileName = card.card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- attachments.push(attachment);
- }
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(userid, card.card.id);
- const quantityClaimed = inventory?.Quantity ?? 0;
-
- const embed = DropEmbedHelper.GenerateDropEmbed(card, quantityClaimed, imageFileName);
-
- const row = new ActionRowBuilder()
- .addComponents(
- new ButtonBuilder()
- .setCustomId(`view 0 ${results.join(" ")}`)
- .setLabel("Previous")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(true),
- new ButtonBuilder()
- .setCustomId(`view 2 ${results.join(" ")}`)
- .setLabel("Next")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(pages == 1));
-
- return { embed, row, attachments, results };
- }
-
- public static async GenerateSearchPageFromQuery(results: string[], userid: string, page: number): Promise {
- const currentPageId = results[page - 1];
-
- const card = GetCardsHelper.GetCardByCardNumber(currentPageId);
-
- if (!card) {
- AppLogger.LogError("CardSearchHelper/GenerateSearchPageFromQuery", `Unable to find card by id: ${currentPageId}.`);
-
- return undefined;
- }
-
- const attachments = [];
- let imageFileName = "";
-
- if (!(card.card.path.startsWith("http://") || card.card.path.startsWith("https://"))) {
- const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", card.card.path));
- imageFileName = card.card.path.split("/").pop()!;
-
- const attachment = new AttachmentBuilder(image, { name: imageFileName });
-
- attachments.push(attachment);
- }
-
- const inventory = await Inventory.FetchOneByCardNumberAndUserId(userid, card.card.id);
- const quantityClaimed = inventory?.Quantity ?? 0;
-
- const embed = DropEmbedHelper.GenerateDropEmbed(card, quantityClaimed, imageFileName);
-
- const row = new ActionRowBuilder()
- .addComponents(
- new ButtonBuilder()
- .setCustomId(`view ${page - 1} ${results.join(" ")}`)
- .setLabel("Previous")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page - 1 == 0),
- new ButtonBuilder()
- .setCustomId(`view ${page + 1} ${results.join(" ")}`)
- .setLabel("Next")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page == results.length));
-
- return { embed, row, attachments, results };
- }
-}
diff --git a/src/helpers/DropHelpers/DropEmbedHelper.ts b/src/helpers/DropHelpers/DropEmbedHelper.ts
deleted file mode 100644
index 5956a27..0000000
--- a/src/helpers/DropHelpers/DropEmbedHelper.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js";
-import { DropResult } from "../../contracts/SeriesMetadata";
-import AppLogger from "../../client/appLogger";
-import { CardRarityToColour, CardRarityToString } from "../../constants/CardRarity";
-import StringTools from "../StringTools";
-
-export default class DropEmbedHelper {
- public static GenerateDropEmbed(drop: DropResult, quantityClaimed: number, imageFileName: string, claimedBy?: string, currency?: number): EmbedBuilder {
- AppLogger.LogSilly("CardDropHelperMetadata/GenerateDropEmbed", `Parameters: drop=${drop.card.id}, quantityClaimed=${quantityClaimed}, imageFileName=${imageFileName}`);
-
- const description = drop.card.subseries ?? drop.series.name;
- let colour = CardRarityToColour(drop.card.type);
-
- if (drop.card.colour && StringTools.IsHexCode(drop.card.colour)) {
- const hexCode = Number("0x" + drop.card.colour);
-
- if (hexCode) {
- colour = hexCode;
- } else {
- AppLogger.LogWarn("CardDropHelperMetadata/GenerateDropEmbed", `Card's colour override is invalid: ${drop.card.id}, ${drop.card.colour}`);
- }
- } else if (drop.card.colour) {
- AppLogger.LogWarn("CardDropHelperMetadata/GenerateDropEmbed", `Card's colour override is invalid: ${drop.card.id}, ${drop.card.colour}`);
- }
-
- let imageUrl = `attachment://${imageFileName}`;
-
- if (drop.card.path.startsWith("http://") || drop.card.path.startsWith("https://")) {
- imageUrl = drop.card.path;
- }
-
- const embed = new EmbedBuilder()
- .setTitle(drop.card.name)
- .setDescription(description)
- .setFooter({ text: `${CardRarityToString(drop.card.type)} · ${drop.card.id}` })
- .setColor(colour)
- .setImage(imageUrl)
- .addFields([
- {
- name: "Claimed",
- value: `${quantityClaimed}`,
- inline: true,
- }
- ]);
-
- if (claimedBy != null) {
- embed.addFields([
- {
- name: "Claimed by",
- value: claimedBy,
- inline: true,
- }
- ]);
- }
-
- if (currency != null) {
- embed.addFields([
- {
- name: "Currency",
- value: `${currency}`,
- inline: true,
- }
- ]);
- }
-
- return embed;
- }
-
- public static GenerateDropButtons(drop: DropResult, claimId: string, userId: string, disabled: boolean = false): ActionRowBuilder {
- AppLogger.LogSilly("CardDropHelperMetadata/GenerateDropButtons", `Parameters: drop=${drop.card.id}, claimId=${claimId}, userId=${userId}`);
-
- return new ActionRowBuilder()
- .addComponents(
- new ButtonBuilder()
- .setCustomId(`claim ${drop.card.id} ${claimId} ${userId}`)
- .setLabel("Claim")
- .setStyle(ButtonStyle.Success)
- .setDisabled(disabled),
- new ButtonBuilder()
- .setCustomId(`sacrifice give ${userId} ${drop.card.id} 1`)
- .setLabel(`Sacrifice`)
- .setStyle(ButtonStyle.Danger),
- new ButtonBuilder()
- .setCustomId("reroll")
- .setEmoji("🔁")
- .setStyle(ButtonStyle.Primary),);
- }
-}
\ No newline at end of file
diff --git a/src/helpers/DropHelpers/GetCardsHelper.ts b/src/helpers/DropHelpers/GetCardsHelper.ts
deleted file mode 100644
index 4c8648f..0000000
--- a/src/helpers/DropHelpers/GetCardsHelper.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import AppLogger from "../../client/appLogger";
-import { CoreClient } from "../../client/client";
-import CardConstants from "../../constants/CardConstants";
-import { CardRarity } from "../../constants/CardRarity";
-import CardRarityChances from "../../constants/CardRarityChances";
-import { DropResult } from "../../contracts/SeriesMetadata";
-import EffectHelper from "../EffectHelper";
-import GetUnclaimedCardsHelper from "./GetUnclaimedCardsHelper";
-
-export default class GetCardsHelper {
- public static async FetchCard(userId: string): Promise {
- const hasChanceUpEffect = await EffectHelper.HasEffect(userId, "unclaimed");
-
- if (hasChanceUpEffect && Math.random() <= CardConstants.UnusedChanceUpChance) {
- return await GetUnclaimedCardsHelper.GetRandomCardUnclaimed(userId);
- }
-
- return this.GetRandomCard();
- }
-
- public static GetRandomCard(): DropResult | undefined {
- const randomRarity = Math.random() * 100;
-
- let cardRarity: CardRarity;
-
- const bronzeChance = CardRarityChances.Bronze;
- const silverChance = bronzeChance + CardRarityChances.Silver;
- const goldChance = silverChance + CardRarityChances.Gold;
- const mangaChance = goldChance + CardRarityChances.Manga;
-
- if (randomRarity < bronzeChance) cardRarity = CardRarity.Bronze;
- else if (randomRarity < silverChance) cardRarity = CardRarity.Silver;
- else if (randomRarity < goldChance) cardRarity = CardRarity.Gold;
- else if (randomRarity < mangaChance) cardRarity = CardRarity.Manga;
- else cardRarity = CardRarity.Legendary;
-
- const randomCard = this.GetRandomCardByRarity(cardRarity);
-
- AppLogger.LogSilly("CardDropHelperMetadata/GetRandomCard", `Random card: ${randomCard?.card.id} ${randomCard?.card.name}`);
-
- return randomCard;
- }
-
- public static GetRandomCardByRarity(rarity: CardRarity): DropResult | undefined {
- AppLogger.LogSilly("CardDropHelperMetadata/GetRandomCardByRarity", `Parameters: rarity=${rarity}`);
-
- const allCards = CoreClient.Cards
- .flatMap(x => x.cards)
- .filter(x => x.type == rarity);
-
- const randomCardIndex = Math.floor(Math.random() * allCards.length);
-
- const card = allCards[randomCardIndex];
- const series = CoreClient.Cards
- .find(x => x.cards.includes(card));
-
- if (!series) {
- AppLogger.LogError("CardDropHelperMetadata/GetRandomCardByRarity", `Series not found for card ${card.id}`);
-
- return undefined;
- }
-
- AppLogger.LogSilly("CardDropHelperMetadata/GetRandomCardByRarity", `Random card: ${card.id} ${card.name}`);
-
- return {
- series: series,
- card: card,
- };
- }
-
- public static GetCardByCardNumber(cardNumber: string): DropResult | undefined {
- AppLogger.LogSilly("CardDropHelperMetadata/GetCardByCardNumber", `Parameters: cardNumber=${cardNumber}`);
-
- const card = CoreClient.Cards
- .flatMap(x => x.cards)
- .find(x => x.id == cardNumber);
-
- const series = CoreClient.Cards
- .find(x => x.cards.find(y => y.id == card?.id));
-
- AppLogger.LogSilly("CardDropHelperMetadata/GetCardByCardNumber", `Card: ${card?.id} ${card?.name}`);
- AppLogger.LogSilly("CardDropHelperMetadata/GetCardByCardNumber", `Series: ${series?.id} ${series?.name}`);
-
- if (!card || !series) {
- AppLogger.LogVerbose("CardDropHelperMetadata/GetCardByCardNumber", `Unable to find card metadata: ${cardNumber}`);
- return undefined;
- }
-
- return { card, series };
- }
-}
diff --git a/src/helpers/DropHelpers/GetUnclaimedCardsHelper.ts b/src/helpers/DropHelpers/GetUnclaimedCardsHelper.ts
deleted file mode 100644
index 94ce894..0000000
--- a/src/helpers/DropHelpers/GetUnclaimedCardsHelper.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import AppLogger from "../../client/appLogger";
-import { CoreClient } from "../../client/client";
-import { CardRarity } from "../../constants/CardRarity";
-import CardRarityChances from "../../constants/CardRarityChances";
-import { DropResult } from "../../contracts/SeriesMetadata";
-import Inventory from "../../database/entities/app/Inventory";
-import GetCardsHelper from "./GetCardsHelper";
-
-export default class GetUnclaimedCardsHelper {
- public static async GetRandomCardUnclaimed(userId: string): Promise {
- const randomRarity = Math.random() * 100;
-
- let cardRarity: CardRarity;
-
- const bronzeChance = CardRarityChances.Bronze;
- const silverChance = bronzeChance + CardRarityChances.Silver;
- const goldChance = silverChance + CardRarityChances.Gold;
- const mangaChance = goldChance + CardRarityChances.Manga;
-
- if (randomRarity < bronzeChance) cardRarity = CardRarity.Bronze;
- else if (randomRarity < silverChance) cardRarity = CardRarity.Silver;
- else if (randomRarity < goldChance) cardRarity = CardRarity.Gold;
- else if (randomRarity < mangaChance) cardRarity = CardRarity.Manga;
- else cardRarity = CardRarity.Legendary;
-
- const randomCard = await this.GetRandomCardByRarityUnclaimed(cardRarity, userId);
-
- return randomCard;
- }
-
- public static async GetRandomCardByRarityUnclaimed(rarity: CardRarity, userId: string): Promise {
- const claimedCards = await Inventory.FetchAllByUserId(userId);
-
- if (!claimedCards || claimedCards.length == 0) {
- // They don't have any cards, so safe to get any random card
- return GetCardsHelper.GetRandomCardByRarity(rarity);
- }
-
- const allCards = CoreClient.Cards
- .flatMap(x => x.cards)
- .filter(x => x.type == rarity)
- .filter(x => !claimedCards.find(y => y.CardNumber == x.id && y.Quantity > 0));
-
- if (!allCards || allCards.length == 0) {
- // There is no card left unclaimed, fallback to any card
- return GetCardsHelper.GetRandomCardByRarity(rarity);
- };
-
- const randomCardIndex = Math.floor(Math.random() * allCards.length);
-
- const card = allCards[randomCardIndex];
-
- if (!card) {
- AppLogger.LogError("CardDropHelperMetadata/GetRandomCardByRarityUnclaimed", `Card not found in index, ${randomCardIndex} of ${allCards.length}, User Id: ${userId}, rarity: ${rarity}`);
-
- return undefined;
- }
-
- const series = CoreClient.Cards
- .find(x => x.cards.includes(card));
-
- if (!series) {
- AppLogger.LogError("CardDropHelperMetadata/GetRandomCardByRarityUnclaimed", `Series not found for card ${card.id}, User Id: ${userId}, rarity: ${rarity}`);
-
- return undefined;
- }
-
- return {
- series: series,
- card: card,
- };
- }
-}
diff --git a/src/helpers/DropHelpers/MultidropEmbedHelper.ts b/src/helpers/DropHelpers/MultidropEmbedHelper.ts
deleted file mode 100644
index 526993e..0000000
--- a/src/helpers/DropHelpers/MultidropEmbedHelper.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js";
-import { DropResult } from "../../contracts/SeriesMetadata";
-import { GetSacrificeAmount } from "../../constants/CardRarity";
-import DropEmbedHelper from "./DropEmbedHelper";
-
-export default class MultidropEmbedHelper {
- public static GenerateMultidropEmbed(drop: DropResult, quantityClaimed: number, imageFileName: string, cardsRemaining: number, claimedBy?: string, currency?: number): EmbedBuilder {
- const dropEmbed = DropEmbedHelper.GenerateDropEmbed(drop, quantityClaimed, imageFileName, claimedBy, currency);
-
- dropEmbed.setFooter({ text: `${dropEmbed.data.footer?.text} · ${cardsRemaining} Remaining`});
-
- return dropEmbed;
- }
-
- public static GenerateMultidropButtons(drop: DropResult, cardsRemaining: number, userId: string, disabled = false): ActionRowBuilder {
- return new ActionRowBuilder()
- .addComponents(
- new ButtonBuilder()
- .setCustomId(`multidrop keep ${drop.card.id} ${cardsRemaining} ${userId}`)
- .setLabel("Keep")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(disabled),
- new ButtonBuilder()
- .setCustomId(`multidrop sacrifice ${drop.card.id} ${cardsRemaining} ${userId}`)
- .setLabel(`Sacrifice (+${GetSacrificeAmount(drop.card.type)} 🪙)`)
- .setStyle(ButtonStyle.Secondary));
- }
-}
diff --git a/src/helpers/EffectHelper.ts b/src/helpers/EffectHelper.ts
deleted file mode 100644
index 09e096c..0000000
--- a/src/helpers/EffectHelper.ts
+++ /dev/null
@@ -1,194 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js";
-import UserEffect from "../database/entities/app/UserEffect";
-import EmbedColours from "../constants/EmbedColours";
-import { EffectDetails } from "../constants/EffectDetails";
-import User from "../database/entities/app/User";
-import CardConstants from "../constants/CardConstants";
-import AppLogger from "../client/appLogger";
-
-export default class EffectHelper {
- public static async AddEffectToUserInventory(userId: string, name: string, quantity: number = 1) {
- let effect = await UserEffect.FetchOneByUserIdAndName(userId, name);
-
- if (!effect) {
- effect = new UserEffect(name, userId, quantity);
- } else {
- effect.AddUnused(quantity);
- }
-
- await effect.Save(UserEffect, effect);
- }
-
- public static async UseEffect(userId: string, name: string, whenExpires: Date): Promise {
- const canUseEffect = await this.CanUseEffect(userId, name);
-
- if (!canUseEffect) return false;
-
- const effect = await UserEffect.FetchOneByUserIdAndName(userId, name);
-
- effect!.UseEffect(whenExpires);
-
- await effect!.Save(UserEffect, effect!);
-
- return true;
- }
-
- public static async CanUseEffect(userId: string, name: string): Promise {
- const effect = await UserEffect.FetchOneByUserIdAndName(userId, name);
- const now = new Date();
-
- if (!effect || effect.Unused == 0) {
- return false;
- }
-
- const effectDetail = EffectDetails.get(effect.Name);
-
- if (!effectDetail) {
- return false;
- }
-
- if (effect.WhenExpires && now < new Date(effect.WhenExpires.getTime() + effectDetail.cooldown)) {
- return false;
- }
-
- return true;
- }
-
- public static async HasEffect(userId: string, name: string): Promise {
- const effect = await UserEffect.FetchOneByUserIdAndName(userId, name);
- const now = new Date();
-
- if (!effect || !effect.WhenExpires) {
- return false;
- }
-
- if (now > effect.WhenExpires) {
- return false;
- }
-
- return true;
- }
-
- public static async GenerateEffectListEmbed(userId: string, page: number): Promise<{
- embed: EmbedBuilder,
- row: ActionRowBuilder,
- }> {
- const itemsPerPage = 10;
-
- const query = await UserEffect.FetchAllByUserIdPaginated(userId, page - 1, itemsPerPage);
- const activeEffect = await UserEffect.FetchActiveEffectByUserId(userId);
-
- const effects = query[0];
- const count = query[1];
-
- const totalPages = count > 0 ? Math.ceil(count / itemsPerPage) : 1;
-
- let description = "*none*";
-
- if (effects.length > 0) {
- description = effects.map(x => `${EffectDetails.get(x.Name)?.friendlyName} x${x.Unused}`).join("\n");
- }
-
- const embed = new EmbedBuilder()
- .setTitle("Effects")
- .setDescription(description)
- .setColor(EmbedColours.Ok)
- .setFooter({ text: `Page ${page} of ${totalPages}` });
-
- if (activeEffect) {
- embed.addFields([
- {
- name: "Active",
- value: `${EffectDetails.get(activeEffect.Name)?.friendlyName}`,
- inline: true,
- },
- {
- name: "Expires",
- value: ``,
- inline: true,
- },
- ]);
- }
-
- const row = new ActionRowBuilder()
- .addComponents(
- new ButtonBuilder()
- .setCustomId(`effects list ${page - 1}`)
- .setLabel("Previous")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page == 1),
- new ButtonBuilder()
- .setCustomId(`effects list ${page + 1}`)
- .setLabel("Next")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page == totalPages),
- );
-
- return {
- embed,
- row,
- };
- }
-
- public static async GenerateEffectBuyEmbed(userId: string, id: string, quantity: number, disabled: boolean): Promise<{
- embed: EmbedBuilder,
- row: ActionRowBuilder,
- } | string> {
- const effectDetail = EffectDetails.get(id);
-
- if (!effectDetail) {
- return "Effect detail not found!";
- }
-
- const totalCost = effectDetail.cost * quantity;
-
- let user = await User.FetchOneById(User, userId);
-
- if (!user) {
- user = new User(userId, CardConstants.StartingCurrency);
- await user.Save(User, user);
-
- AppLogger.LogInfo("EffectHelper", `Created initial user entity for : ${userId}`);
- }
-
- if (!disabled && user.Currency < totalCost) {
- return `You don't have enough currency to buy this! You have \`${user.Currency} Currency\` and need \`${totalCost} Currency\`!`;
- }
-
- const embed = new EmbedBuilder()
- .setTitle("Buy Effect")
- .setDescription(effectDetail.friendlyName)
- .setColor(EmbedColours.Ok)
- .addFields([
- {
- name: "Cost",
- value: `${totalCost}`,
- inline: true,
- },
- {
- name: "Quantity",
- value: `${quantity}`,
- inline: true,
- },
- ]);
-
- const row = new ActionRowBuilder()
- .addComponents([
- new ButtonBuilder()
- .setCustomId(`effects buy confirm ${id} ${quantity}`)
- .setLabel("Confirm")
- .setStyle(ButtonStyle.Success)
- .setDisabled(disabled),
- new ButtonBuilder()
- .setCustomId(`effects buy cancel ${id} ${quantity}`)
- .setLabel("Cancel")
- .setStyle(ButtonStyle.Danger)
- .setDisabled(disabled),
- ]);
-
- return {
- embed,
- row,
- }
- }
-}
diff --git a/src/helpers/ImageHelper.ts b/src/helpers/ImageHelper.ts
deleted file mode 100644
index 6156938..0000000
--- a/src/helpers/ImageHelper.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import {createCanvas, loadImage} from "canvas";
-import path from "path";
-import AppLogger from "../client/appLogger";
-import {existsSync} from "fs";
-import Inventory from "../database/entities/app/Inventory";
-import { Bitmap, Jimp } from "jimp";
-import axios from "axios";
-
-interface CardInput {
- id: string;
- path: string;
-}
-
-export default class ImageHelper {
- public static async GenerateCardImageGrid(cards: CardInput[], userId?: string): Promise {
- const gridWidth = 3;
- const gridHeight = Math.ceil(cards.length / gridWidth);
-
- const imageWidth = 526;
- const imageHeight = 712;
-
- const canvasWidth = imageWidth * gridWidth;
- const canvasHeight = imageHeight * gridHeight;
-
- const canvas = createCanvas(canvasWidth, canvasHeight);
- const ctx = canvas.getContext("2d");
-
- for (let i = 0; i < cards.length; i++) {
- try {
- const card = cards[i];
-
- const filePath = path.join(process.env.DATA_DIR!, "cards", card.path);
-
- let bitmap: Bitmap;
-
- if (existsSync(filePath)) {
- const data = await Jimp.read(filePath);
-
- bitmap = data.bitmap;
- } else if (card.path.startsWith("http://") || card.path.startsWith("https://")) {
- const response = await axios.get(card.path, { responseType: "arraybuffer" });
- const buffer = Buffer.from(response.data);
- const data = await Jimp.fromBuffer(buffer);
-
- bitmap = data.bitmap;
- } else {
- AppLogger.LogError("ImageHelper/GenerateCardImageGrid", `Failed to load image from path ${card.path}`);
- continue;
- }
-
- const imageData = Jimp.fromBitmap(bitmap);
-
- if (userId != null) {
- const claimed = await Inventory.FetchOneByCardNumberAndUserId(userId, card.id);
-
- if (!claimed || claimed.Quantity == 0) {
- imageData.greyscale();
- }
- }
-
- const image = await loadImage(await imageData.getBuffer("image/png"));
-
- const x = i % gridWidth;
- const y = Math.floor(i / gridWidth);
-
- const imageX = imageWidth * x;
- const imageY = imageHeight * y;
-
- ctx.drawImage(image, imageX, imageY);
- }
- catch {
- // TODO: Enable once we've investigated a fix
- //AppLogger.CatchError("ImageHelper", e);
- }
- }
-
- return canvas.toBuffer();
- }
-}
diff --git a/src/helpers/InventoryHelper.ts b/src/helpers/InventoryHelper.ts
deleted file mode 100644
index 15c9c92..0000000
--- a/src/helpers/InventoryHelper.ts
+++ /dev/null
@@ -1,166 +0,0 @@
-import { ActionRowBuilder, AttachmentBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder } from "discord.js";
-import Inventory from "../database/entities/app/Inventory";
-import { CoreClient } from "../client/client";
-import EmbedColours from "../constants/EmbedColours";
-import { CardRarity, CardRarityToString } from "../constants/CardRarity";
-import cloneDeep from "clone-deep";
-import AppLogger from "../client/appLogger";
-import ImageHelper from "./ImageHelper";
-
-interface InventoryPage {
- id: number,
- name: string,
- cards: InventoryPageCards[],
- seriesSubpage: number,
-}
-
-interface InventoryPageCards {
- id: string,
- name: string,
- type: CardRarity,
- quantity: number,
- path: string,
-}
-
-interface ReturnedInventoryPage {
- embed: EmbedBuilder,
- row1: ActionRowBuilder,
- row2: ActionRowBuilder,
- image: AttachmentBuilder,
-}
-
-
-export default class InventoryHelper {
- public static async GenerateInventoryPage(username: string, userid: string, page: number): Promise {
- AppLogger.LogSilly("Helpers/InventoryHelper", `Parameters: username=${username}, userid=${userid}, page=${page}`);
-
- const cardsPerPage = 9;
-
- const inventory = await Inventory.FetchAllByUserId(userid);
-
- if (!inventory || inventory.length == 0) return undefined;
-
- const clientCards = cloneDeep(CoreClient.Cards);
-
- const allSeriesClaimed = clientCards
- .sort((a, b) => a.id - b.id)
- .filter(x => {
- x.cards = x.cards
- .sort((a, b) => b.type - a.type)
- .filter(y => inventory.find(z => z.CardNumber == y.id))
- .filter(y => inventory.find(z => z.CardNumber == y.id)!.Quantity > 0);
-
- return x;
- });
-
- const pages: InventoryPage[] = [];
-
- for (const series of allSeriesClaimed) {
- const seriesCards = series.cards;
-
- for (let i = 0; i < seriesCards.length; i+= cardsPerPage) {
- const cards = series.cards.slice(i, i + cardsPerPage);
- const pageCards: InventoryPageCards[] = [];
-
- for (const card of cards) {
- const item = inventory.find(x => x.CardNumber == card.id);
-
- if (!item) {
- continue;
- }
-
- pageCards.push({
- id: card.id,
- name: card.name,
- type: card.type,
- quantity: item.Quantity,
- path: card.path,
- });
- }
-
- pages.push({
- id: series.id,
- name: series.name,
- cards: pageCards,
- seriesSubpage: i / cardsPerPage,
- });
- }
- }
-
- const currentPage = pages[page];
-
- if (!currentPage) {
- return undefined;
- }
-
- const embed = new EmbedBuilder()
- .setTitle(username)
- .setDescription(`**${currentPage.name} (${currentPage.seriesSubpage + 1})**\n${currentPage.cards.map(x => `[${x.id}] ${x.name} (${CardRarityToString(x.type)}) x${x.quantity}`).join("\n")}`)
- .setFooter({ text: `Page ${page + 1} of ${pages.length}` })
- .setColor(EmbedColours.Ok)
- .setImage("attachment://page.png");
-
- const row1 = new ActionRowBuilder()
- .addComponents(
- new ButtonBuilder()
- .setCustomId(`inventory ${userid} ${page - 1}`)
- .setLabel("Previous")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page == 0),
- new ButtonBuilder()
- .setCustomId(`inventory ${userid} ${page + 1}`)
- .setLabel("Next")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page + 1 == pages.length));
-
- let pageNum = 0;
-
- const maxLength = 25; // Discord API limit
-
- const allPageOptions = pages.map(x =>
- new StringSelectMenuOptionBuilder()
- .setLabel(`${x.name} (${x.seriesSubpage + 1})`.substring(0, 100))
- .setDescription(`Page ${pageNum + 1}`)
- .setDefault(currentPage.id == x.id)
- .setValue(`${userid} ${pageNum++}`));
-
- const currentPageIndex = allPageOptions.indexOf(allPageOptions.find(x => x.data.default)!);
-
- let pageOptions: StringSelectMenuOptionBuilder[] = [];
-
- if (allPageOptions.length <= maxLength) {
- pageOptions = allPageOptions;
- } else {
- let startIndex = currentPageIndex - Math.floor((maxLength - 1) / 2);
- let endIndexOffset = 0;
-
- if (startIndex < 0) {
- endIndexOffset = 0 - startIndex;
-
- startIndex = 0;
- }
-
- let endIndex = currentPageIndex + Math.floor((maxLength - 1) / 2) + endIndexOffset;
-
- if (endIndex + 1 > allPageOptions.length) {
- endIndex = allPageOptions.length;
- }
-
- for (let i = startIndex; i < endIndex; i++) {
- pageOptions.push(allPageOptions[i]);
- }
- }
-
- const row2 = new ActionRowBuilder()
- .addComponents(
- new StringSelectMenuBuilder()
- .setCustomId("inventory")
- .setPlaceholder(`${currentPage.name} (${currentPage.seriesSubpage + 1})`)
- .addOptions(pageOptions));
-
- const buffer = await ImageHelper.GenerateCardImageGrid(currentPage.cards.map(x => ({ id: x.id, path: x.path })));
- const image = new AttachmentBuilder(buffer, { name: "page.png" });
-
- return { embed, row1, row2, image };
- }
-}
diff --git a/src/helpers/MigrationHelper.ts b/src/helpers/MigrationHelper.ts
index 5946cb1..69fee4a 100644
--- a/src/helpers/MigrationHelper.ts
+++ b/src/helpers/MigrationHelper.ts
@@ -3,7 +3,7 @@ import { QueryRunner } from "typeorm";
export default class MigrationHelper {
public static Up(migrationName: string, version: string, queryFiles: string[], queryRunner: QueryRunner) {
- for (const path of queryFiles) {
+ for (let path of queryFiles) {
const query = readFileSync(`${process.cwd()}/database/${version}/${migrationName}/Up/${path}.sql`).toString();
queryRunner.query(query);
@@ -11,7 +11,7 @@ export default class MigrationHelper {
}
public static Down(migrationName: string, version: string, queryFiles: string[], queryRunner: QueryRunner) {
- for (const path of queryFiles) {
+ for (let path of queryFiles) {
const query = readFileSync(`${process.cwd()}/database/${version}/${migrationName}/Down/${path}.sql`).toString();
queryRunner.query(query);
diff --git a/src/helpers/SeriesHelper.ts b/src/helpers/SeriesHelper.ts
deleted file mode 100644
index 5469938..0000000
--- a/src/helpers/SeriesHelper.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import { ActionRowBuilder, AttachmentBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js";
-import AppLogger from "../client/appLogger";
-import cloneDeep from "clone-deep";
-import { CoreClient } from "../client/client";
-import EmbedColours from "../constants/EmbedColours";
-import { CardRarityToString } from "../constants/CardRarity";
-import ImageHelper from "./ImageHelper";
-
-export default class SeriesHelper {
- public static async GenerateSeriesViewPage(seriesId: number, page: number, userId: string): Promise<{ embed: EmbedBuilder, row: ActionRowBuilder, image: AttachmentBuilder } | null> {
- AppLogger.LogSilly("Helpers/SeriesHelper", `Parameters: seriesId=${seriesId}, page=${page}`);
-
- const itemsPerPage = 9;
-
- const series = cloneDeep(CoreClient.Cards)
- .find(x => x.id == seriesId);
-
- if (!series) {
- AppLogger.LogVerbose("Helpers/SeriesHelper", `Unable to find series: ${seriesId}`);
- return null;
- }
-
- const totalPages = Math.ceil(series.cards.length / itemsPerPage);
- const totalCards = series.cards.length;
-
- if (page > totalPages) {
- AppLogger.LogVerbose("Helpers/SeriesHelper", `Trying to find page greater than what exists for this series. Page: ${page} but there are only ${totalPages} pages`);
- return null;
- }
-
- const cardsOnPage = series.cards.splice(page * itemsPerPage, itemsPerPage);
-
- const description = cardsOnPage
- .map(x => `[${x.id}] ${x.name} (${CardRarityToString(x.type)})`)
- .join("\n");
-
- const embed = new EmbedBuilder()
- .setTitle(series.name)
- .setColor(EmbedColours.Ok)
- .setDescription(description)
- .setFooter({ text: `${series.id} · ${totalCards} cards · Page ${page + 1} of ${totalPages}` })
- .setImage("attachment://page.png");
-
- const row = new ActionRowBuilder()
- .addComponents(
- new ButtonBuilder()
- .setCustomId(`series view ${seriesId} ${page - 1}`)
- .setLabel("Previous")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page == 0),
- new ButtonBuilder()
- .setCustomId(`series view ${seriesId} ${page + 1}`)
- .setLabel("Next")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page + 1 == totalPages));
-
- const buffer = await ImageHelper.GenerateCardImageGrid(cardsOnPage.map(x => ({id: x.id, path: x.path})), userId);
- const image = new AttachmentBuilder(buffer, { name: "page.png" });
-
- return { embed, row, image };
- }
-
- public static GenerateSeriesListPage(page: number): { embed: EmbedBuilder, row: ActionRowBuilder } | null {
- AppLogger.LogSilly("Helpers/InventoryHelper", `Parameters: page=${page}`);
-
- const itemsPerPage = 15;
-
- const series = cloneDeep(CoreClient.Cards)
- .sort((a, b) => a.id - b.id);
-
- const totalPages = Math.ceil(series.length / itemsPerPage);
-
- if (page > totalPages) {
- AppLogger.LogVerbose("Helpers/SeriesHelper", `Trying to find page greater than what exists for this series. Page: ${page} but there are only ${totalPages} pages`);
- return null;
- }
-
- const seriesOnPage = series.splice(page * itemsPerPage, itemsPerPage);
-
- const description = seriesOnPage
- .map(x => `[${x.id}] ${x.name} (${x.cards.length} cards)`)
- .join("\n");
-
- const embed = new EmbedBuilder()
- .setTitle("Series")
- .setColor(EmbedColours.Ok)
- .setDescription(description)
- .setFooter({ text: `${CoreClient.Cards.length} series · Page ${page + 1} of ${totalPages}` });
-
- const row = new ActionRowBuilder()
- .addComponents(
- new ButtonBuilder()
- .setCustomId(`series list ${page - 1}`)
- .setLabel("Previous")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page == 0),
- new ButtonBuilder()
- .setCustomId(`series list ${page + 1}`)
- .setLabel("Next")
- .setStyle(ButtonStyle.Primary)
- .setDisabled(page + 1 == totalPages));
-
- return { embed, row };
- }
-}
diff --git a/src/helpers/StringTools.ts b/src/helpers/StringTools.ts
index 1e43ded..0254dc5 100644
--- a/src/helpers/StringTools.ts
+++ b/src/helpers/StringTools.ts
@@ -1,7 +1,7 @@
export default class StringTools {
public static Capitalise(str: string): string {
const words = str.split(" ");
- const result: string[] = [];
+ let result: string[] = [];
words.forEach(word => {
const firstLetter = word.substring(0, 1).toUpperCase();
@@ -26,31 +26,17 @@ export default class StringTools {
public static RandomString(length: number) {
let result = "";
- const characters = "abcdefghkmnpqrstuvwxyz23456789";
+ const characters = 'abcdefghkmnpqrstuvwxyz23456789';
const charactersLength = characters.length;
- for ( let i = 0; i < length; i++ ) {
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
+ for ( var i = 0; i < length; i++ ) {
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
public static ReplaceAll(str: string, find: string, replace: string) {
- return str.replace(new RegExp(find, "g"), replace);
- }
-
- public static IsHexCode(str: string): boolean {
- if (str.length != 6) return false;
-
- const characters = "0123456789abcdefABCDEF";
-
- for (let i = 0; i < 6; i++) {
- const char = str[i];
-
- if (!characters.includes(char)) return false;
- }
-
- return true;
+ return str.replace(new RegExp(find, 'g'), replace);
}
}
\ No newline at end of file
diff --git a/src/helpers/TimeLengthInput.ts b/src/helpers/TimeLengthInput.ts
index aef58ba..95befa6 100644
--- a/src/helpers/TimeLengthInput.ts
+++ b/src/helpers/TimeLengthInput.ts
@@ -4,23 +4,23 @@ export default class TimeLengthInput {
public readonly value: string;
constructor(input: string) {
- this.value = StringTools.ReplaceAll(input, ",", "");
+ this.value = StringTools.ReplaceAll(input, ',', '');
}
public GetDays(): number {
- return this.GetValue("d");
+ return this.GetValue('d');
}
public GetHours(): number {
- return this.GetValue("h");
+ return this.GetValue('h');
}
public GetMinutes(): number {
- return this.GetValue("m");
+ return this.GetValue('m');
}
public GetSeconds(): number {
- return this.GetValue("s");
+ return this.GetValue('s');
}
public GetMilliseconds(): number {
@@ -106,7 +106,7 @@ export default class TimeLengthInput {
}
private GetValue(designation: string): number {
- const valueSplit = this.value.split(" ");
+ const valueSplit = this.value.split(' ');
const desString = valueSplit.find(x => x.charAt(x.length - 1) == designation);
@@ -118,19 +118,4 @@ export default class TimeLengthInput {
return desNumber;
}
-
- public static ConvertFromMilliseconds(ms: number): TimeLengthInput {
- const seconds = Math.floor(ms / 1000);
- const minutes = Math.floor(seconds / 60);
- const hours = Math.floor(minutes / 60);
- const days = Math.floor(hours / 24);
-
- const remainingSeconds = seconds % 60;
- const remainingMinutes = minutes % 60;
- const remainingHours = hours % 24;
-
- const timeString = `${days}d ${remainingHours}h ${remainingMinutes}m ${remainingSeconds}s`;
-
- return new TimeLengthInput(timeString);
- }
}
\ No newline at end of file
diff --git a/src/helpers/TimerHelper.ts b/src/helpers/TimerHelper.ts
deleted file mode 100644
index 535a6a7..0000000
--- a/src/helpers/TimerHelper.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import { CronJob } from "cron";
-import { v4 } from "uuid";
-import { Primitive } from "../type/primitive";
-
-interface Timer {
- id: string;
- job: CronJob;
- context: Map;
- onTick: ((context: Map) => void) | ((context: Map) => Promise);
- runOnStart: boolean;
-}
-
-export default class TimerHelper {
- private _timers: Timer[];
-
- constructor() {
- this._timers = [];
- }
-
- public AddTimer(
- cronTime: string,
- timeZone: string,
- onTick: ((context: Map) => void) | ((context: Map) => Promise),
- runOnStart: boolean = false): string {
- const context = new Map();
-
- const job = new CronJob(
- cronTime,
- () => {
- onTick(context);
- },
- null,
- false,
- timeZone,
- );
-
- const id = v4();
-
- this._timers.push({
- id,
- job,
- context,
- onTick,
- runOnStart,
- });
-
- return id;
- }
-
- public StartAllTimers() {
- this._timers.forEach(timer => this.StartJob(timer));
- }
-
- public StopAllTimers() {
- this._timers.forEach(timer => timer.job.stop());
- }
-
- public StartTimer(id: string) {
- const timer = this._timers.find(x => x.id == id);
-
- if (!timer) return;
-
- this.StartJob(timer);
- }
-
- public StopTimer(id: string) {
- const timer = this._timers.find(x => x.id == id);
-
- if (!timer) return;
-
- timer.job.stop();
- }
-
- private StartJob(timer: Timer) {
- timer.job.start();
-
- if (timer.runOnStart) {
- timer.onTick(timer.context);
- }
- }
-}
\ No newline at end of file
diff --git a/src/hooks/ReloadDB.ts b/src/hooks/ReloadDB.ts
index 9d99df7..25c6875 100644
--- a/src/hooks/ReloadDB.ts
+++ b/src/hooks/ReloadDB.ts
@@ -1,11 +1,10 @@
import { Request, Response } from "express";
-import CardMetadataFunction from "../Functions/CardMetadataFunction";
-import AppLogger from "../client/appLogger";
+import CardSetupFunction from "../Functions/CardSetupFunction";
export default async function ReloadDB(req: Request, res: Response) {
- AppLogger.LogInfo("Hooks/ReloadDB", "Reloading Card DB...");
+ console.log('Reloading Card DB...');
- await CardMetadataFunction.Execute();
+ await CardSetupFunction.Execute();
res.sendStatus(200);
}
\ No newline at end of file
diff --git a/src/registry.ts b/src/registry.ts
index 3ae885d..9619437 100644
--- a/src/registry.ts
+++ b/src/registry.ts
@@ -1,24 +1,9 @@
import { CoreClient } from "./client/client";
-import { Environment } from "./constants/Environment";
// Global Command Imports
import About from "./commands/about";
-import AllBalance from "./commands/allbalance";
-import Balance from "./commands/balance";
-import Daily from "./commands/daily";
import Drop from "./commands/drop";
-import Effects from "./commands/effects";
import Gdrivesync from "./commands/gdrivesync";
-import Give from "./commands/give";
-import Id from "./commands/id";
-import Inventory from "./commands/inventory";
-import Multidrop from "./commands/multidrop";
-import Resync from "./commands/resync";
-import Sacrifice from "./commands/sacrifice";
-import Series from "./commands/series";
-import Stats from "./commands/stats";
-import Trade from "./commands/trade";
-import View from "./commands/view";
// Test Command Imports
import Dropnumber from "./commands/stage/dropnumber";
@@ -26,57 +11,27 @@ import Droprarity from "./commands/stage/droprarity";
// Button Event Imports
import Claim from "./buttonEvents/Claim";
-import EffectsButtonEvent from "./buttonEvents/Effects";
-import InventoryButtonEvent from "./buttonEvents/Inventory";
-import MultidropButtonEvent from "./buttonEvents/Multidrop";
import Reroll from "./buttonEvents/Reroll";
-import SacrificeButtonEvent from "./buttonEvents/Sacrifice";
-import SeriesEvent from "./buttonEvents/Series";
-import TradeButtonEvent from "./buttonEvents/Trade";
-import ViewButtonEvent from "./buttonEvents/View";
-
-// String Dropdown Event Imports
-import InventoryStringDropdown from "./stringDropdowns/Inventory";
+import { Environment } from "./constants/Environment";
export default class Registry {
public static RegisterCommands() {
// Global Commands
- CoreClient.RegisterCommand("about", new About());
- CoreClient.RegisterCommand("allbalance", new AllBalance());
- CoreClient.RegisterCommand("balance", new Balance());
- CoreClient.RegisterCommand("daily", new Daily());
- CoreClient.RegisterCommand("drop", new Drop());
- CoreClient.RegisterCommand("effects", new Effects());
- CoreClient.RegisterCommand("gdrivesync", new Gdrivesync());
- CoreClient.RegisterCommand("give", new Give());
- CoreClient.RegisterCommand("id", new Id());
- CoreClient.RegisterCommand("inventory", new Inventory());
- CoreClient.RegisterCommand("multidrop", new Multidrop());
- CoreClient.RegisterCommand("resync", new Resync());
- CoreClient.RegisterCommand("sacrifice", new Sacrifice());
- CoreClient.RegisterCommand("series", new Series());
- CoreClient.RegisterCommand("stats", new Stats());
- CoreClient.RegisterCommand("trade", new Trade());
- CoreClient.RegisterCommand("view", new View());
+ CoreClient.RegisterCommand('about', new About());
+ CoreClient.RegisterCommand('drop', new Drop());
+ CoreClient.RegisterCommand('gdrivesync', new Gdrivesync());
// Test Commands
- CoreClient.RegisterCommand("dropnumber", new Dropnumber(), Environment.Test);
- CoreClient.RegisterCommand("droprarity", new Droprarity(), Environment.Test);
+ CoreClient.RegisterCommand('dropnumber', new Dropnumber(), Environment.Test);
+ CoreClient.RegisterCommand('droprarity', new Droprarity(), Environment.Test);
+ }
+
+ public static RegisterEvents() {
+
}
public static RegisterButtonEvents() {
- CoreClient.RegisterButtonEvent("claim", new Claim());
- CoreClient.RegisterButtonEvent("effects", new EffectsButtonEvent());
- CoreClient.RegisterButtonEvent("inventory", new InventoryButtonEvent());
- CoreClient.RegisterButtonEvent("multidrop", new MultidropButtonEvent());
- CoreClient.RegisterButtonEvent("reroll", new Reroll());
- CoreClient.RegisterButtonEvent("sacrifice", new SacrificeButtonEvent());
- CoreClient.RegisterButtonEvent("series", new SeriesEvent());
- CoreClient.RegisterButtonEvent("trade", new TradeButtonEvent());
- CoreClient.RegisterButtonEvent("view", new ViewButtonEvent());
- }
-
- public static RegisterStringDropdownEvents() {
- CoreClient.RegisterStringDropdownEvent("inventory", new InventoryStringDropdown());
+ CoreClient.RegisterButtonEvent('claim', new Claim());
+ CoreClient.RegisterButtonEvent('reroll', new Reroll());
}
}
\ No newline at end of file
diff --git a/src/stringDropdowns/Inventory.ts b/src/stringDropdowns/Inventory.ts
deleted file mode 100644
index 2a218ea..0000000
--- a/src/stringDropdowns/Inventory.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import {StringSelectMenuInteraction} from "discord.js";
-import {StringDropdownEvent} from "../type/stringDropdownEvent";
-import AppLogger from "../client/appLogger";
-import InventoryHelper from "../helpers/InventoryHelper";
-
-export default class Inventory extends StringDropdownEvent {
- public override async execute(interaction: StringSelectMenuInteraction) {
- if (!interaction.guild) return;
-
- const userid = interaction.values[0].split(" ")[0];
- const page = interaction.values[0].split(" ")[1];
-
- AppLogger.LogDebug("StringDropdown/Inventory", `Parameters: userid=${userid}, page=${page}`);
-
- await interaction.deferUpdate();
-
- const member = interaction.guild.members.cache.find(x => x.id == userid) || await interaction.guild.members.fetch(userid);
-
- if (!member) {
- await interaction.reply("Unable to find user.");
- return;
- }
-
- try {
- const embed = await InventoryHelper.GenerateInventoryPage(member.user.username, member.user.id, Number(page));
-
- if (!embed) {
- await interaction.followUp("No page for user found.");
- return;
- }
-
- await interaction.editReply({
- files: [ embed.image ],
- embeds: [ embed.embed ],
- components: [ embed.row1, embed.row2 ],
- });
- } catch (e) {
- AppLogger.LogError("StringDropdown/Inventory", `Error generating inventory page for ${member.user.username} with id ${member.user.id}: ${e}`);
-
- await interaction.followUp("An error has occurred running this command.");
- }
- }
-}
diff --git a/src/timers/GiveCurrency.ts b/src/timers/GiveCurrency.ts
deleted file mode 100644
index 93e48d1..0000000
--- a/src/timers/GiveCurrency.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import AppLogger from "../client/appLogger";
-import CardConstants from "../constants/CardConstants";
-import User from "../database/entities/app/User";
-
-export default async function GiveCurrency() {
- AppLogger.LogDebug("Timers/GiveCurrency", "Giving currency to every known user");
-
- const users = await User.FetchAll(User);
-
- const usersFiltered = users.filter(x => x.Currency < 1000);
-
- for (const user of usersFiltered) {
- user.AddCurrency(CardConstants.TimerGiveAmount);
- }
-
- User.SaveAll(User, users);
-
- AppLogger.LogDebug("Timers/GiveCurrency", `Successfully gave +${CardConstants.TimerGiveAmount} currency to ${usersFiltered.length} users`);
-}
\ No newline at end of file
diff --git a/src/timers/PurgeClaims.ts b/src/timers/PurgeClaims.ts
deleted file mode 100644
index 4ca8902..0000000
--- a/src/timers/PurgeClaims.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import AppLogger from "../client/appLogger";
-import Claim from "../database/entities/app/Claim";
-
-export default async function PurgeClaims() {
- const claims = await Claim.FetchAll(Claim);
-
- const whenLastClaimable = new Date(Date.now() - (1000 * 60 * 2)); // 2 minutes ago
-
- const expiredClaims = claims.filter(x => x.WhenCreated < whenLastClaimable);
-
- await Claim.RemoveMany(Claim, expiredClaims);
-
- AppLogger.LogInfo("Timers/PurgeClaims", `Purged ${expiredClaims.length} claims from the database`);
-}
\ No newline at end of file
diff --git a/src/type/buttonEvent.ts b/src/type/buttonEvent.ts
index 8a45bd0..3a691cf 100644
--- a/src/type/buttonEvent.ts
+++ b/src/type/buttonEvent.ts
@@ -1,5 +1,7 @@
import { ButtonInteraction } from "discord.js";
-export abstract class ButtonEvent {
- abstract execute(interaction: ButtonInteraction): Promise;
+export class ButtonEvent {
+ public execute(interaction: ButtonInteraction) {
+
+ }
}
\ No newline at end of file
diff --git a/src/type/command.ts b/src/type/command.ts
index 458a81e..10d091d 100644
--- a/src/type/command.ts
+++ b/src/type/command.ts
@@ -1,8 +1,9 @@
import { CommandInteraction } from "discord.js";
-export abstract class Command {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- CommandBuilder type is dynamic depending on options and can't be strictly typed
+export class Command {
public CommandBuilder: any;
+
+ public execute(interaction: CommandInteraction) {
- abstract execute(interaction: CommandInteraction): Promise;
+ }
}
diff --git a/src/type/primitive.ts b/src/type/primitive.ts
deleted file mode 100644
index b1e143b..0000000
--- a/src/type/primitive.ts
+++ /dev/null
@@ -1 +0,0 @@
-export type Primitive = string | number | boolean;
\ No newline at end of file
diff --git a/src/type/stringDropdownEvent.ts b/src/type/stringDropdownEvent.ts
deleted file mode 100644
index c097cda..0000000
--- a/src/type/stringDropdownEvent.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import {StringSelectMenuInteraction} from "discord.js";
-
-export abstract class StringDropdownEvent {
- abstract execute(interaction: StringSelectMenuInteraction): Promise;
-}
diff --git a/src/webhooks.ts b/src/webhooks.ts
index 0b99816..ec30720 100644
--- a/src/webhooks.ts
+++ b/src/webhooks.ts
@@ -1,7 +1,6 @@
import bodyParser from "body-parser";
import express, { Application } from "express";
import ReloadDB from "./hooks/ReloadDB";
-import AppLogger from "./client/appLogger";
export default class Webhooks {
private app: Application;
@@ -20,12 +19,12 @@ export default class Webhooks {
}
private setupRoutes() {
- this.app.post("/api/reload-db", ReloadDB);
+ this.app.post('/api/reload-db', ReloadDB);
}
private setupListen() {
this.app.listen(this.port, () => {
- AppLogger.LogInfo("Webhooks", `API listening on port ${this.port}`);
+ console.log(`API listening on port ${this.port}`);
});
}
}
\ No newline at end of file
diff --git a/tests/.gitkeep b/tests/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/tests/__functions__/discord.js/GenerateButtonInteractionMock.ts b/tests/__functions__/discord.js/GenerateButtonInteractionMock.ts
deleted file mode 100644
index 2199477..0000000
--- a/tests/__functions__/discord.js/GenerateButtonInteractionMock.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ButtonInteraction } from "../../__types__/discord.js";
-
-export default function GenerateButtonInteractionMock(): ButtonInteraction {
- return {
- guild: {},
- guildId: "guildId",
- channel: {
- isSendable: jest.fn().mockReturnValue(true),
- send: jest.fn(),
- },
- deferUpdate: jest.fn(),
- editReply: jest.fn(),
- message: {
- createdAt: new Date(1000 * 60 * 27),
- },
- user: {
- id: "userId",
- },
- customId: "customId",
- update: jest.fn(),
- reply: jest.fn(),
- };
-}
\ No newline at end of file
diff --git a/tests/__functions__/discord.js/GenerateCommandInteractionMock.ts b/tests/__functions__/discord.js/GenerateCommandInteractionMock.ts
deleted file mode 100644
index 128c25b..0000000
--- a/tests/__functions__/discord.js/GenerateCommandInteractionMock.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { CommandInteraction } from "../../__types__/discord.js";
-
-export default function GenerateCommandInteractionMock(options?: {
- subcommand?: string,
-}): CommandInteraction {
- return {
- deferReply: jest.fn(),
- editReply: jest.fn(),
- isChatInputCommand: jest.fn().mockReturnValue(true),
- options: {
- getSubcommand: jest.fn().mockReturnValue(options?.subcommand),
- },
- user: {
- id: "userId",
- },
- };
-}
\ No newline at end of file
diff --git a/tests/__types__/discord.js.ts b/tests/__types__/discord.js.ts
deleted file mode 100644
index 3304af4..0000000
--- a/tests/__types__/discord.js.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-export type ButtonInteraction = {
- guild: object | null,
- guildId: string | null,
- channel: {
- isSendable: jest.Func,
- send: jest.Func,
- } | null,
- deferUpdate: jest.Func,
- editReply: jest.Func,
- message: {
- createdAt: Date,
- } | null,
- user: {
- id: string,
- } | null,
- customId: string,
- update: jest.Func,
- reply: jest.Func,
-}
-
-export type CommandInteraction = {
- deferReply: jest.Func,
- editReply: jest.Func,
- isChatInputCommand: jest.Func,
- options: {
- getSubcommand: jest.Func,
- },
- user: {
- id: string,
- },
-}
\ No newline at end of file
diff --git a/tests/buttonEvents/Claim.test.ts b/tests/buttonEvents/Claim.test.ts
deleted file mode 100644
index 1e7027c..0000000
--- a/tests/buttonEvents/Claim.test.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-import { ButtonInteraction, TextChannel } from "discord.js";
-import Claim from "../../src/buttonEvents/Claim";
-import { ButtonInteraction as ButtonInteractionType } from "../__types__/discord.js";
-import GenerateButtonInteractionMock from "../__functions__/discord.js/GenerateButtonInteractionMock";
-
-jest.mock("../../src/client/appLogger");
-
-let interaction: ButtonInteractionType;
-
-beforeEach(() => {
- jest.useFakeTimers();
- jest.setSystemTime(1000 * 60 * 30);
-
- interaction = GenerateButtonInteractionMock();
- interaction.customId = "claim cardNumber claimId droppedBy userId";
-});
-
-afterAll(() => {
- jest.useRealTimers();
-});
-
-test("GIVEN interaction.guild is null, EXPECT nothing to happen", async () => {
- // Arrange
- interaction.guild = null;
-
- // Act
- const claim = new Claim();
- await claim.execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.deferUpdate).not.toHaveBeenCalled();
- expect(interaction.editReply).not.toHaveBeenCalled();
- expect((interaction.channel as TextChannel).send).not.toHaveBeenCalled();
-});
-
-test("GIVEN interaction.guildId is null, EXPECT nothing to happen", async () => {
- // Arrange
- interaction.guildId = null;
-
- // Act
- const claim = new Claim();
- await claim.execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.deferUpdate).not.toHaveBeenCalled();
- expect(interaction.editReply).not.toHaveBeenCalled();
- expect((interaction.channel as TextChannel).send).not.toHaveBeenCalled();
-});
-
-test("GIVEN interaction.channel is null, EXPECT nothing to happen", async () => {
- // Arrange
- interaction.channel = null;
-
- // Act
- const claim = new Claim();
- await claim.execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.deferUpdate).not.toHaveBeenCalled();
- expect(interaction.editReply).not.toHaveBeenCalled();
-});
-
-test("GIVEN channel is not sendable, EXPECT nothing to happen", async () => {
- // Arrange
- interaction.channel!.isSendable = jest.fn().mockReturnValue(false);
-
- // Act
- const claim = new Claim();
- await claim.execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.deferUpdate).not.toHaveBeenCalled();
- expect(interaction.editReply).not.toHaveBeenCalled();
- expect((interaction.channel as TextChannel).send).not.toHaveBeenCalled();
-});
-
-test("GIVEN interaction.message was created more than 5 minutes ago, EXPECT error", async () => {
- // Arrange
- interaction.message!.createdAt = new Date(0);
-
- // Act
- const claim = new Claim();
- await claim.execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.channel!.send).toHaveBeenCalledTimes(1);
- expect(interaction.channel!.send).toHaveBeenCalledWith("[object Object], Cards can only be claimed within 2 minutes of it being dropped!");
-
- expect(interaction.editReply).not.toHaveBeenCalled();
-});
\ No newline at end of file
diff --git a/tests/buttonEvents/Effects.test.ts b/tests/buttonEvents/Effects.test.ts
deleted file mode 100644
index 8fb1023..0000000
--- a/tests/buttonEvents/Effects.test.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { ButtonInteraction } from "discord.js";
-import Effects from "../../src/buttonEvents/Effects";
-import GenerateButtonInteractionMock from "../__functions__/discord.js/GenerateButtonInteractionMock";
-import { ButtonInteraction as ButtonInteractionType } from "../__types__/discord.js";
-import List from "../../src/buttonEvents/Effects/List";
-import Use from "../../src/buttonEvents/Effects/Use";
-import AppLogger from "../../src/client/appLogger";
-
-jest.mock("../../src/client/appLogger");
-jest.mock("../../src/buttonEvents/Effects/List");
-jest.mock("../../src/buttonEvents/Effects/Use");
-
-let interaction: ButtonInteractionType;
-
-beforeEach(() => {
- jest.resetAllMocks();
-
- interaction = GenerateButtonInteractionMock();
- interaction.customId = "effects";
-});
-
-test("GIVEN action is list, EXPECT list function to be called", async () => {
- // Arrange
- interaction.customId = "effects list";
-
- // Act
- const effects = new Effects();
- await effects.execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(List).toHaveBeenCalledTimes(1);
- expect(List).toHaveBeenCalledWith(interaction);
-
- expect(Use.Execute).not.toHaveBeenCalled();
-});
-
-test("GIVEN action is use, EXPECT use function to be called", async () => {
- // Arrange
- interaction.customId = "effects use";
-
- // Act
- const effects = new Effects();
- await effects.execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(Use.Execute).toHaveBeenCalledTimes(1);
- expect(Use.Execute).toHaveBeenCalledWith(interaction);
-
- expect(List).not.toHaveBeenCalled();
-});
-
-test.todo("GIVEN action is buy, EXPECT buy function to be called");
-
-test("GIVEN action is invalid, EXPECT nothing to be called", async () => {
- // Arrange
- interaction.customId = "effects invalid";
-
- // Act
- const effects = new Effects();
- await effects.execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(List).not.toHaveBeenCalled();
- expect(Use.Execute).not.toHaveBeenCalled();
-
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buttons/Effects", "Unknown action, invalid");
-});
diff --git a/tests/buttonEvents/Effects/Buy.test.ts b/tests/buttonEvents/Effects/Buy.test.ts
deleted file mode 100644
index 3898504..0000000
--- a/tests/buttonEvents/Effects/Buy.test.ts
+++ /dev/null
@@ -1,350 +0,0 @@
-import {ButtonInteraction} from "discord.js";
-import Buy from "../../../src/buttonEvents/Effects/Buy";
-import GenerateButtonInteractionMock from "../../__functions__/discord.js/GenerateButtonInteractionMock";
-import { ButtonInteraction as ButtonInteractionType } from "../../__types__/discord.js";
-import AppLogger from "../../../src/client/appLogger";
-import EffectHelper from "../../../src/helpers/EffectHelper";
-import EmbedColours from "../../../src/constants/EmbedColours";
-import User from "../../../src/database/entities/app/User";
-
-jest.mock("../../../src/client/appLogger");
-jest.mock("../../../src/helpers/EffectHelper");
-jest.mock("../../../src/database/entities/app/User");
-
-let interaction: ButtonInteractionType;
-
-beforeEach(() => {
- jest.resetAllMocks();
-
- interaction = GenerateButtonInteractionMock();
- interaction.customId = "effects buy";
-
-});
-
-describe("Execute", () => {
- test("GIVEN subaction is invalid, EXPECT error logged", async () => {
- // Arrange
- interaction.customId += " invalid";
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy", "Unknown subaction, effects invalid");
- });
-});
-
-describe("Confirm", () => {
- let user: User;
-
- beforeEach(() => {
- interaction.customId += " confirm";
-
- user = {
- Currency: 1000,
- Save: jest.fn(),
- RemoveCurrency: jest.fn(),
- } as unknown as User;
-
- (User.FetchOneById as jest.Mock).mockResolvedValue(user);
- });
-
- test("EXPECT success embed generated", async () => {
- // Assert
- interaction.customId += " unclaimed 1";
-
- const embed = {
- id: "embed",
- setColor: jest.fn(),
- setFooter: jest.fn(),
- };
- const row = {
- id: "row",
- };
-
- (EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue({
- embed,
- row,
- });
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.update).toHaveBeenCalledTimes(1);
- expect(interaction.update).toHaveBeenCalledWith({
- embeds: [ embed ],
- components: [ row ],
- });
-
- expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledTimes(1);
- expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledWith("userId", "unclaimed", 1, true);
-
- expect(embed.setColor).toHaveBeenCalledTimes(1);
- expect(embed.setColor).toHaveBeenCalledWith(EmbedColours.Success);
-
- expect(embed.setFooter).toHaveBeenCalledTimes(1);
- expect(embed.setFooter).toHaveBeenCalledWith({ text: "Purchased" });
-
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(AppLogger.LogError).not.toHaveBeenCalled();
-
- expect(User.FetchOneById).toHaveBeenCalledTimes(1);
- expect(User.FetchOneById).toHaveBeenCalledWith(User, "userId");
-
- expect(user.RemoveCurrency).toHaveBeenCalledTimes(1);
- expect(user.RemoveCurrency).toHaveBeenCalledWith(100);
-
- expect(user.Save).toHaveBeenCalledTimes(1);
- expect(user.Save).toHaveBeenCalledWith(User, user);
-
- expect(EffectHelper.AddEffectToUserInventory).toHaveBeenCalledTimes(1);
- expect(EffectHelper.AddEffectToUserInventory).toHaveBeenCalledWith("userId", "unclaimed", 1);
- });
-
- test("GIVEN id is not supplied, EXPECT error", async () => {
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Not enough parameters");
-
- expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
- });
-
- test("GIVEN quantity is not supplied, EXPECT error", async () => {
- // Assert
- interaction.customId += " unclaimed";
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Not enough parameters");
-
- expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
- });
-
- test("GIVEN quantity is not a number, EXPECT error", async () => {
- // Assert
- interaction.customId += " unclaimed invalid";
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Invalid number");
-
- expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
- });
-
- test("GIVEN quantity is 0, EXPECT error", async () => {
- // Assert
- interaction.customId += " unclaimed 0";
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Invalid number");
-
- expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
- });
-
- test("GIVEN user is not found, EXPECT error", async () => {
- // Assert
- interaction.customId += " unclaimed 1";
-
- (User.FetchOneById as jest.Mock).mockResolvedValue(undefined);
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Unable to find user");
-
- expect(EffectHelper.AddEffectToUserInventory).not.toHaveBeenCalled();
-
- expect(interaction.update).not.toHaveBeenCalled();
- expect(interaction.reply).not.toHaveBeenCalled();
- });
-
- test("GIVEN user does not have enough currency, EXPECT error", async () => {
- // Assert
- interaction.customId += " unclaimed 1";
-
- user.Currency = 0;
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.reply).toHaveBeenCalledTimes(1);
- expect(interaction.reply).toHaveBeenCalledWith("You don't have enough currency to buy this! You have `0 Currency` and need `100 Currency`!");
-
- expect(EffectHelper.AddEffectToUserInventory).not.toHaveBeenCalled();
-
- expect(interaction.update).not.toHaveBeenCalled();
-
- expect(AppLogger.LogError).not.toHaveBeenCalled();
- });
-
- test("GIVEN GenerateEffectBuyEmbed returns with a string, EXPECT error replied", async () => {
- // Assert
- interaction.customId += " unclaimed 1";
-
- (EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue("Test error");
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.reply).toHaveBeenCalledTimes(1);
- expect(interaction.reply).toHaveBeenCalledWith("Test error");
-
- expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledTimes(1);
-
- expect(interaction.update).not.toHaveBeenCalled();
- expect(AppLogger.LogError).not.toHaveBeenCalled();
- });
-});
-
-describe("Cancel", () => {
- beforeEach(() => {
- interaction.customId += " cancel";
- });
-
- test("EXPECT embed generated", async () => {
- // Assert
- interaction.customId += " unclaimed 1";
-
- const embed = {
- id: "embed",
- setColor: jest.fn(),
- setFooter: jest.fn(),
- };
- const row = {
- id: "row",
- };
-
- (EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue({
- embed,
- row,
- });
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.update).toHaveBeenCalledTimes(1);
- expect(interaction.update).toHaveBeenCalledWith({
- embeds: [ embed ],
- components: [ row ],
- });
-
- expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledTimes(1);
- expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledWith("userId", "unclaimed", 1, true);
-
- expect(embed.setColor).toHaveBeenCalledTimes(1);
- expect(embed.setColor).toHaveBeenCalledWith(EmbedColours.Error);
-
- expect(embed.setFooter).toHaveBeenCalledTimes(1);
- expect(embed.setFooter).toHaveBeenCalledWith({ text: "Cancelled" });
-
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(AppLogger.LogError).not.toHaveBeenCalled();
- });
-
- test("GIVEN id is not supplied, EXPECT error", async () => {
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Cancel", "Not enough parameters");
-
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
- });
-
- test("GIVEN quantity is not supplied, EXPECT error", async () => {
- // Assert
- interaction.customId += " unclaimed";
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Cancel", "Not enough parameters");
-
- expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
- });
-
- test("GIVEN quantity is not a number, EXPECT error", async () => {
- // Assert
- interaction.customId += " unclaimed invalid";
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Cancel", "Invalid number");
-
- expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
- });
-
- test("GIVEN quantity is 0, EXPECT error", async () => {
- // Assert
- interaction.customId += " unclaimed 0";
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Cancel", "Invalid number");
-
- expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
- });
-
- test("GIVEN GenerateEffectBuyEmbed returns with a string, EXPECT error replied", async () => {
- // Assert
- interaction.customId += " unclaimed 1";
-
- (EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue("Test error");
-
- // Act
- await Buy.Execute(interaction as unknown as ButtonInteraction);
-
- // Assert
- expect(interaction.reply).toHaveBeenCalledTimes(1);
- expect(interaction.reply).toHaveBeenCalledWith("Test error");
-
- expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledTimes(1);
-
- expect(interaction.update).not.toHaveBeenCalled();
- expect(AppLogger.LogError).not.toHaveBeenCalled();
- });
-});
diff --git a/tests/buttonEvents/Effects/List.test.ts b/tests/buttonEvents/Effects/List.test.ts
deleted file mode 100644
index 5b42c61..0000000
--- a/tests/buttonEvents/Effects/List.test.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import { ActionRowBuilder, ButtonBuilder, ButtonInteraction, EmbedBuilder } from "discord.js";
-import List from "../../../src/buttonEvents/Effects/List";
-import EffectHelper from "../../../src/helpers/EffectHelper";
-import { mock } from "jest-mock-extended";
-
-jest.mock("../../../src/helpers/EffectHelper");
-
-let interaction: ReturnType>;
-
-beforeEach(() => {
- jest.resetAllMocks();
-
- (EffectHelper.GenerateEffectListEmbed as jest.Mock).mockResolvedValue({
- embed: mock(),
- row: mock>(),
- });
-
- interaction = mock();
- interaction.user.id = "userId";
- interaction.customId = "effects list 1";
-});
-
-test("GIVEN pageOption is NOT a number, EXPECT error", async () => {
- // Arrange
- interaction.customId = "effects list invalid";
-
- // Act
- await List(interaction);
-
- // Assert
- expect(interaction.reply).toHaveBeenCalledTimes(1);
- expect(interaction.reply).toHaveBeenCalledWith("Page option is not a valid number")
-
- expect(EffectHelper.GenerateEffectListEmbed).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
-});
-
-test("GIVEN pageOption is a number, EXPECT interaction updated", async () => {
- // Arrange
- interaction.customId = "effects list 1";
-
- // Act
- await List(interaction);
-
- // Assert
- expect(EffectHelper.GenerateEffectListEmbed).toHaveBeenCalledTimes(1);
- expect(EffectHelper.GenerateEffectListEmbed).toHaveBeenCalledWith("userId", 1);
-
- expect(interaction.update).toHaveBeenCalledTimes(1);
-});
\ No newline at end of file
diff --git a/tests/buttonEvents/Effects/Use.test.ts b/tests/buttonEvents/Effects/Use.test.ts
deleted file mode 100644
index 86391cc..0000000
--- a/tests/buttonEvents/Effects/Use.test.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-import { ButtonInteraction, InteractionResponse, InteractionUpdateOptions, MessagePayload } from "discord.js";
-import Use from "../../../src/buttonEvents/Effects/Use";
-import { mock } from "jest-mock-extended";
-import AppLogger from "../../../src/client/appLogger";
-import EffectHelper from "../../../src/helpers/EffectHelper";
-
-jest.mock("../../../src/client/appLogger");
-jest.mock("../../../src/helpers/EffectHelper");
-
-beforeEach(() => {
- jest.resetAllMocks();
-
- jest.useFakeTimers();
- jest.setSystemTime(0);
-});
-
-afterAll(() => {
- jest.useRealTimers();
-});
-
-describe("Execute", () => {
- test("GIVEN subaction is unknown, EXPECT nothing to be called", async () => {
- // Arrange
- const interaction = mock();
- interaction.customId = "effects use invalud";
-
- // Act
- await Use.Execute(interaction);
-
- // Assert
- expect(interaction.reply).not.toHaveBeenCalled();
- expect(interaction.update).not.toHaveBeenCalled();
- });
-});
-
-describe("UseConfirm", () => {
- let interaction = mock();
-
- beforeEach(() => {
- interaction = mock();
- interaction.customId = "effects use confirm";
- });
-
- test("GIVEN effectDetail is not found, EXPECT error", async () => {
- // Arrange
- interaction.customId += " invalid";
-
- // Act
- await Use.Execute(interaction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Button/Effects/Use", "Effect not found, invalid");
-
- expect(interaction.reply).toHaveBeenCalledTimes(1);
- expect(interaction.reply).toHaveBeenCalledWith("Effect not found in system!");
- });
-
- test("GIVEN EffectHelper.UseEffect failed, EXPECT error", async () => {
- // Arrange
- interaction.customId += " unclaimed";
- interaction.user.id = "userId";
-
- (EffectHelper.UseEffect as jest.Mock).mockResolvedValue(false);
-
- const whenExpires = new Date(Date.now() + 10 * 60 * 1000);
-
- // Act
- await Use.Execute(interaction);
-
- // Assert
- expect(EffectHelper.UseEffect).toHaveBeenCalledTimes(1);
- expect(EffectHelper.UseEffect).toHaveBeenCalledWith("userId", "unclaimed", whenExpires);
-
- expect(interaction.reply).toHaveBeenCalledTimes(1);
- expect(interaction.reply).toHaveBeenCalledWith("Unable to use effect! Please make sure you have it in your inventory and is not on cooldown");
- });
-
- test("GIVEN EffectHelper.UseEffect succeeded, EXPECT interaction updated", async () => {
- let updatedWith;
-
- // Arrange
- interaction.customId += " unclaimed";
- interaction.user.id = "userId";
- interaction.update.mockImplementation(async (opts: string | MessagePayload | InteractionUpdateOptions) => {
- updatedWith = opts;
-
- return mock>();
- });
-
- (EffectHelper.UseEffect as jest.Mock).mockResolvedValue(true);
-
- const whenExpires = new Date(Date.now() + 10 * 60 * 1000);
-
- // Act
- await Use.Execute(interaction);
-
- // Assert
- expect(EffectHelper.UseEffect).toHaveBeenCalledTimes(1);
- expect(EffectHelper.UseEffect).toHaveBeenCalledWith("userId", "unclaimed", whenExpires);
-
- expect(interaction.update).toHaveBeenCalledTimes(1);
- expect(updatedWith).toMatchSnapshot();
- });
-});
-
-describe("UseCancel", () => {
- let interaction = mock();
-
- beforeEach(() => {
- interaction = mock();
- interaction.customId = "effects use cancel";
- });
-
- test("GIVEN effectDetail is not found, EXPECT error", async () => {
- // Arrange
- interaction.customId += " invalid";
-
- // Act
- await Use.Execute(interaction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Button/Effects/Cancel", "Effect not found, invalid");
-
- expect(interaction.reply).toHaveBeenCalledTimes(1);
- expect(interaction.reply).toHaveBeenCalledWith("Effect not found in system!");
- });
-
- test("GIVEN effectDetail is found, EXPECT interaction updated", async () => {
- let updatedWith;
-
- // Arrange
- interaction.customId += " unclaimed";
- interaction.user.id = "userId";
- interaction.update.mockImplementation(async (opts: string | MessagePayload | InteractionUpdateOptions) => {
- updatedWith = opts;
-
- return mock>();
- });
- // Act
- await Use.Execute(interaction);
-
- // Assert
- expect(interaction.update).toHaveBeenCalledTimes(1);
- expect(updatedWith).toMatchSnapshot();
- });
-});
\ No newline at end of file
diff --git a/tests/buttonEvents/Effects/__snapshots__/Use.test.ts.snap b/tests/buttonEvents/Effects/__snapshots__/Use.test.ts.snap
deleted file mode 100644
index 6cec0f4..0000000
--- a/tests/buttonEvents/Effects/__snapshots__/Use.test.ts.snap
+++ /dev/null
@@ -1,95 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`UseCancel GIVEN effectDetail is found, EXPECT interaction updated 1`] = `
-{
- "components": [
- {
- "components": [
- {
- "custom_id": "effects use confirm unclaimed",
- "disabled": true,
- "emoji": undefined,
- "label": "Confirm",
- "style": 1,
- "type": 2,
- },
- {
- "custom_id": "effects use cancel unclaimed",
- "disabled": true,
- "emoji": undefined,
- "label": "Cancel",
- "style": 4,
- "type": 2,
- },
- ],
- "type": 1,
- },
- ],
- "embeds": [
- {
- "color": 13882323,
- "description": "The effect from your inventory has not been used",
- "fields": [
- {
- "inline": true,
- "name": "Effect",
- "value": "Unclaimed Chance Up",
- },
- {
- "inline": true,
- "name": "Expires",
- "value": "10m",
- },
- ],
- "title": "Effect Use Cancelled",
- },
- ],
-}
-`;
-
-exports[`UseConfirm GIVEN EffectHelper.UseEffect succeeded, EXPECT interaction updated 1`] = `
-{
- "components": [
- {
- "components": [
- {
- "custom_id": "effects use confirm unclaimed",
- "disabled": true,
- "emoji": undefined,
- "label": "Confirm",
- "style": 1,
- "type": 2,
- },
- {
- "custom_id": "effects use cancel unclaimed",
- "disabled": true,
- "emoji": undefined,
- "label": "Cancel",
- "style": 4,
- "type": 2,
- },
- ],
- "type": 1,
- },
- ],
- "embeds": [
- {
- "color": 2263842,
- "description": "You now have an active effect!",
- "fields": [
- {
- "inline": true,
- "name": "Effect",
- "value": "Unclaimed Chance Up",
- },
- {
- "inline": true,
- "name": "Expires",
- "value": "",
- },
- ],
- "title": "Effect Used",
- },
- ],
-}
-`;
diff --git a/tests/buttonEvents/Multidrop.test.ts b/tests/buttonEvents/Multidrop.test.ts
deleted file mode 100644
index 5c9da42..0000000
--- a/tests/buttonEvents/Multidrop.test.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-describe("execute", () => {
- describe("GIVEN randomCard image is hosted locally", () => {
- test.todo("EXPECT image to be uploaded directly");
- });
-
- describe("GIVEN randomCard image is hosted via http", () => {
- test.todo("EXPECT image link to be directly added to embed");
- });
-
- describe("GIVEN randomCard image is hosted via https", () => {
- test.todo("EXPECT image link to be directly added to embed");
- });
-});
diff --git a/tests/buttonEvents/Reroll.test.ts b/tests/buttonEvents/Reroll.test.ts
deleted file mode 100644
index 2021aac..0000000
--- a/tests/buttonEvents/Reroll.test.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-describe("GIVEN valid conditions", () => {
- test.todo("EXPECT user.RemoveCurrency to be called");
-
- test.todo("GIVEN user is saved");
-});
-
-test.todo("GIVEN user.RemoveCurrency fails, EXPECT error replied");
\ No newline at end of file
diff --git a/tests/commands/__snapshots__/effects.test.ts.snap b/tests/commands/__snapshots__/effects.test.ts.snap
deleted file mode 100644
index 474b505..0000000
--- a/tests/commands/__snapshots__/effects.test.ts.snap
+++ /dev/null
@@ -1,106 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`EXPECT CommandBuilder to be defined 1`] = `
-{
- "contexts": undefined,
- "default_member_permissions": undefined,
- "default_permission": undefined,
- "description": "Effects",
- "description_localizations": undefined,
- "dm_permission": undefined,
- "integration_types": undefined,
- "name": "effects",
- "name_localizations": undefined,
- "nsfw": undefined,
- "options": [
- {
- "description": "List all effects I have",
- "description_localizations": undefined,
- "name": "list",
- "name_localizations": undefined,
- "options": [
- {
- "autocomplete": undefined,
- "choices": undefined,
- "description": "The page number",
- "description_localizations": undefined,
- "max_value": undefined,
- "min_value": 1,
- "name": "page",
- "name_localizations": undefined,
- "required": false,
- "type": 10,
- },
- ],
- "type": 1,
- },
- {
- "description": "Use an effect in your inventory",
- "description_localizations": undefined,
- "name": "use",
- "name_localizations": undefined,
- "options": [
- {
- "autocomplete": undefined,
- "choices": [
- {
- "name": "Unclaimed Chance Up",
- "name_localizations": undefined,
- "value": "unclaimed",
- },
- ],
- "description": "The effect id to use",
- "description_localizations": undefined,
- "max_length": undefined,
- "min_length": undefined,
- "name": "id",
- "name_localizations": undefined,
- "required": true,
- "type": 3,
- },
- ],
- "type": 1,
- },
- {
- "description": "Buy more effects",
- "description_localizations": undefined,
- "name": "buy",
- "name_localizations": undefined,
- "options": [
- {
- "autocomplete": undefined,
- "choices": [
- {
- "name": "Unclaimed Chance Up",
- "name_localizations": undefined,
- "value": "unclaimed",
- },
- ],
- "description": "The effect id to buy",
- "description_localizations": undefined,
- "max_length": undefined,
- "min_length": undefined,
- "name": "id",
- "name_localizations": undefined,
- "required": true,
- "type": 3,
- },
- {
- "autocomplete": undefined,
- "choices": undefined,
- "description": "The amount to buy",
- "description_localizations": undefined,
- "max_value": undefined,
- "min_value": 1,
- "name": "quantity",
- "name_localizations": undefined,
- "required": false,
- "type": 10,
- },
- ],
- "type": 1,
- },
- ],
- "type": 1,
-}
-`;
diff --git a/tests/commands/drop.test.ts b/tests/commands/drop.test.ts
deleted file mode 100644
index 81b5f4a..0000000
--- a/tests/commands/drop.test.ts
+++ /dev/null
@@ -1,142 +0,0 @@
-import { CommandInteraction } from "discord.js";
-import Drop from "../../src/commands/drop";
-import GenerateCommandInteractionMock from "../__functions__/discord.js/GenerateCommandInteractionMock";
-import { CommandInteraction as CommandInteractionMock } from "../__types__/discord.js";
-import { CoreClient } from "../../src/client/client";
-import Config from "../../src/database/entities/app/Config";
-import User from "../../src/database/entities/app/User";
-import GetCardsHelper from "../../src/helpers/DropHelpers/GetCardsHelper";
-import Inventory from "../../src/database/entities/app/Inventory";
-import DropEmbedHelper from "../../src/helpers/DropHelpers/DropEmbedHelper";
-import CardConstants from "../../src/constants/CardConstants";
-import * as uuid from "uuid";
-
-jest.mock("../../src/database/entities/app/Config");
-jest.mock("../../src/database/entities/app/User");
-jest.mock("../../src/helpers/DropHelpers/GetCardsHelper");
-jest.mock("../../src/database/entities/app/Inventory");
-jest.mock("../../src/helpers/DropHelpers/DropEmbedHelper");
-
-jest.mock("uuid");
-
-beforeEach(() => {
- (Config.GetValue as jest.Mock).mockResolvedValue("false");
-});
-
-describe("execute", () => {
- describe("GIVEN user is in the database", () => {
- let interaction: CommandInteractionMock;
- let user: User;
- const randomCard = {
- card: {
- id: "cardId",
- path: "https://google.com/",
- }
- };
-
- beforeAll(async () => {
- // Arrange
- CoreClient.AllowDrops = true;
-
- interaction = GenerateCommandInteractionMock();
-
- user = {
- Currency: 500,
- RemoveCurrency: jest.fn().mockReturnValue(true),
- Save: jest.fn(),
- } as unknown as User;
-
- (User.FetchOneById as jest.Mock).mockResolvedValue(user);
- (GetCardsHelper.FetchCard as jest.Mock).mockResolvedValue(randomCard);
- (Inventory.FetchOneByCardNumberAndUserId as jest.Mock).mockResolvedValue({
- Quantity: 1,
- });
- (DropEmbedHelper.GenerateDropEmbed as jest.Mock).mockReturnValue({
- type: "Embed",
- });
- (DropEmbedHelper.GenerateDropButtons as jest.Mock).mockReturnValue({
- type: "Button",
- });
-
- (uuid.v4 as jest.Mock).mockReturnValue("uuid");
-
- // Act
- const drop = new Drop();
- await drop.execute(interaction as unknown as CommandInteraction);
- });
-
- test("EXPECT user to be fetched", () => {
- expect(User.FetchOneById).toHaveBeenCalledTimes(1);
- expect(User.FetchOneById).toHaveBeenCalledWith(User, "userId");
- });
-
- test("EXPECT user.RemoveCurrency to be called", () => {
- expect(user.RemoveCurrency).toHaveBeenCalledTimes(1);
- expect(user.RemoveCurrency).toHaveBeenCalledWith(CardConstants.ClaimCost);
- });
-
- test("EXPECT user to be saved", () => {
- expect(user.Save).toHaveBeenCalledTimes(1);
- expect(user.Save).toHaveBeenCalledWith(User, user);
- });
-
- test("EXPECT random card to be fetched", () => {
- expect(GetCardsHelper.FetchCard).toHaveBeenCalledTimes(1);
- expect(GetCardsHelper.FetchCard).toHaveBeenCalledWith("userId");
- });
-
- test("EXPECT interaction to be deferred", () => {
- expect(interaction.deferReply).toHaveBeenCalledTimes(1);
- });
-
- test("EXPECT Inventory.FetchOneByCardNumberAndUserId to be called", () => {
- expect(Inventory.FetchOneByCardNumberAndUserId).toHaveBeenCalledTimes(1);
- expect(Inventory.FetchOneByCardNumberAndUserId).toHaveBeenCalledWith("userId", "cardId");
- });
-
- test("EXPECT DropEmbedHelper.GenerateDropEmbed to be called", () => {
- expect(DropEmbedHelper.GenerateDropEmbed).toHaveBeenCalledTimes(1);
- expect(DropEmbedHelper.GenerateDropEmbed).toHaveBeenCalledWith(randomCard, 1, "", undefined, 500);
- });
-
- test("EXPECT DropEmbedHelper.GenerateDropButtons to be called", () => {
- expect(DropEmbedHelper.GenerateDropButtons).toHaveBeenCalledTimes(1);
- expect(DropEmbedHelper.GenerateDropButtons).toHaveBeenCalledWith(randomCard, "uuid", "userId");
- });
-
- test("EXPECT interaction to be edited", () => {
- expect(interaction.editReply).toHaveBeenCalledTimes(1);
- expect(interaction.editReply).toHaveBeenCalledWith({
- embeds: [ { type: "Embed" } ],
- files: [],
- components: [ { type: "Button" } ],
- });
- });
-
- describe("AND randomCard path is not a url", () => {
- test.todo("EXPECT image read from file system");
-
- test.todo("EXPECT files on the embed to contain the image as an attachment");
- });
- });
-
- describe("GIVEN user is not in the database", () => {
- test.todo("EXPECT new user to be created");
- });
-
- describe("GIVEN user.RemoveCurrency fails", () => {
- test.todo("EXPECT error replied");
- });
-
- describe("GIVEN randomCard returns null", () => {
- test.todo("EXPECT error logged");
-
- test.todo("EXPECT error replied");
- });
-
- describe("GIVEN the code throws an error", () => {
- test.todo("EXPECT error logged");
-
- test.todo("EXPECT interaction edited with error");
- });
-});
\ No newline at end of file
diff --git a/tests/commands/effects.test.ts b/tests/commands/effects.test.ts
deleted file mode 100644
index 33f612d..0000000
--- a/tests/commands/effects.test.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import Effects from "../../src/commands/effects";
-import List from "../../src/commands/effects/List";
-import Use from "../../src/commands/effects/Use";
-import Buy from "../../src/commands/effects/Buy";
-import AppLogger from "../../src/client/appLogger";
-import GenerateCommandInteractionMock from "../__functions__/discord.js/GenerateCommandInteractionMock";
-import { CommandInteraction } from "discord.js";
-
-jest.mock("../../src/commands/effects/List");
-jest.mock("../../src/commands/effects/Use");
-jest.mock("../../src/commands/effects/Buy");
-jest.mock("../../src/client/appLogger");
-
-beforeEach(() => {
- jest.resetAllMocks();
-});
-
-test("EXPECT CommandBuilder to be defined", async () => {
- // Act
- const effects = new Effects();
-
- // Assert
- expect(effects.CommandBuilder).toMatchSnapshot();
-});
-
-describe("execute", () => {
- test("GIVEN interaction subcommand is list, EXPECT buy function called", async () => {
- // Arrange
- const interaction = GenerateCommandInteractionMock({
- subcommand: "list",
- });
-
- // Act
- const effects = new Effects();
- await effects.execute(interaction as unknown as CommandInteraction);
-
- // Assert
- expect(List).toHaveBeenCalledTimes(1);
- expect(List).toHaveBeenCalledWith(interaction);
-
- expect(Use).not.toHaveBeenCalled();
- expect(Buy).not.toHaveBeenCalled();
-
- expect(AppLogger.LogError).not.toHaveBeenCalled();
- });
-
- test("GIVEN interaction subcommand is use, EXPECT buy function called", async () => {
- // Arrange
- const interaction = GenerateCommandInteractionMock({
- subcommand: "use",
- });
-
- // Act
- const effects = new Effects();
- await effects.execute(interaction as unknown as CommandInteraction);
-
- // Assert
- expect(Use).toHaveBeenCalledTimes(1);
- expect(Use).toHaveBeenCalledWith(interaction);
-
- expect(List).not.toHaveBeenCalled();
- expect(Buy).not.toHaveBeenCalled();
-
- expect(AppLogger.LogError).not.toHaveBeenCalled();
- });
-
- test("GIVEN interaction subcommand is buy, EXPECT buy function called", async () => {
- // Arrange
- const interaction = GenerateCommandInteractionMock({
- subcommand: "buy",
- });
-
- // Act
- const effects = new Effects();
- await effects.execute(interaction as unknown as CommandInteraction);
-
- // Assert
- expect(Buy).toHaveBeenCalledTimes(1);
- expect(Buy).toHaveBeenCalledWith(interaction);
-
- expect(List).not.toHaveBeenCalled();
- expect(Use).not.toHaveBeenCalled();
-
- expect(AppLogger.LogError).not.toHaveBeenCalled();
- });
-
- test("GIVEN interaction subcommand is invalid, EXPECT error logged", async () => {
- // Arrange
- const interaction = GenerateCommandInteractionMock({
- subcommand: "invalid",
- });
-
- // Act
- const effects = new Effects();
- await effects.execute(interaction as unknown as CommandInteraction);
-
- // Assert
- expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
- expect(AppLogger.LogError).toHaveBeenCalledWith("Commands/Effects", "Invalid subcommand: invalid");
-
- expect(List).not.toHaveBeenCalled();
- expect(Use).not.toHaveBeenCalled();
- expect(Buy).not.toHaveBeenCalled();
- });
-});
\ No newline at end of file
diff --git a/tests/commands/effects/Buy.test.ts b/tests/commands/effects/Buy.test.ts
deleted file mode 100644
index 87e4219..0000000
--- a/tests/commands/effects/Buy.test.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-jest.mock("../../../src/helpers/EffectHelper");
-
-describe("Buy", () => {
- test.todo("GIVEN result returns a string, EXPECT interaction replied with string");
-
- test.todo("GIVEN result returns an embed, EXPECT interaction replied with embed and row");
-
- test.todo("GIVEN quantity option is not supplied, EXPECT quantity to default to 1");
-});
diff --git a/tests/commands/multidrop.test.ts b/tests/commands/multidrop.test.ts
deleted file mode 100644
index 5c9da42..0000000
--- a/tests/commands/multidrop.test.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-describe("execute", () => {
- describe("GIVEN randomCard image is hosted locally", () => {
- test.todo("EXPECT image to be uploaded directly");
- });
-
- describe("GIVEN randomCard image is hosted via http", () => {
- test.todo("EXPECT image link to be directly added to embed");
- });
-
- describe("GIVEN randomCard image is hosted via https", () => {
- test.todo("EXPECT image link to be directly added to embed");
- });
-});
diff --git a/tests/helpers/DropHelpers/DropEmbedHelper.test.ts b/tests/helpers/DropHelpers/DropEmbedHelper.test.ts
deleted file mode 100644
index 743f6c7..0000000
--- a/tests/helpers/DropHelpers/DropEmbedHelper.test.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-describe("GenerateDropButtons", () => {
- test.todo("EXPECT row to be returned");
-});
\ No newline at end of file
diff --git a/tests/helpers/DropHelpers/GetCardsHelper.test.ts b/tests/helpers/DropHelpers/GetCardsHelper.test.ts
deleted file mode 100644
index 421d4ef..0000000
--- a/tests/helpers/DropHelpers/GetCardsHelper.test.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import GetCardsHelper from "../../../src/helpers/DropHelpers/GetCardsHelper";
-import EffectHelper from "../../../src/helpers/EffectHelper";
-import GetUnclaimedCardsHelper from "../../../src/helpers/DropHelpers/GetUnclaimedCardsHelper";
-import CardConstants from "../../../src/constants/CardConstants";
-
-jest.mock("../../../src/helpers/EffectHelper");
-jest.mock("../../../src/helpers/DropHelpers/GetUnclaimedCardsHelper");
-
-beforeEach(() => {
- jest.resetAllMocks();
-});
-
-describe("FetchCard", () => {
- test("GIVEN user has the unclaimed effect AND unused chance is within constraint, EXPECT unclaimed card returned", async () => {
- // Arrange
- (EffectHelper.HasEffect as jest.Mock).mockResolvedValue(true);
- GetCardsHelper.GetRandomCard = jest.fn();
- Math.random = jest.fn().mockReturnValue(CardConstants.UnusedChanceUpChance - 0.1);
-
- // Act
- await GetCardsHelper.FetchCard("userId");
-
- // Assert
- expect(EffectHelper.HasEffect).toHaveBeenCalledTimes(1);
- expect(EffectHelper.HasEffect).toHaveBeenCalledWith("userId", "unclaimed");
-
- expect(GetUnclaimedCardsHelper.GetRandomCardUnclaimed).toHaveBeenCalledTimes(1);
- expect(GetUnclaimedCardsHelper.GetRandomCardUnclaimed).toHaveBeenCalledWith("userId");
-
- expect(GetCardsHelper.GetRandomCard).not.toHaveBeenCalled();
- });
-
- test("GIVEN user has unclaimed effect AND unused chance is NOT within constraint, EXPECT random card returned", async () => {
- // Arrange
- (EffectHelper.HasEffect as jest.Mock).mockResolvedValue(true);
- GetCardsHelper.GetRandomCard = jest.fn();
- Math.random = jest.fn().mockReturnValue(CardConstants.UnusedChanceUpChance + 0.1);
-
- // Act
- await GetCardsHelper.FetchCard("userId");
-
- // Assert
- expect(EffectHelper.HasEffect).toHaveBeenCalledTimes(1);
- expect(EffectHelper.HasEffect).toHaveBeenCalledWith("userId", "unclaimed");
-
- expect(GetCardsHelper.GetRandomCard).toHaveBeenCalledTimes(1);
-
- expect(GetUnclaimedCardsHelper.GetRandomCardUnclaimed).not.toHaveBeenCalled();
- });
-
- test("GIVEN user does NOT have unclaimed effect, EXPECT random card returned", async () => {
- // Arrange
- (EffectHelper.HasEffect as jest.Mock).mockResolvedValue(false);
- GetCardsHelper.GetRandomCard = jest.fn();
- Math.random = jest.fn().mockReturnValue(CardConstants.UnusedChanceUpChance + 0.1);
-
- // Act
- await GetCardsHelper.FetchCard("userId");
-
- // Assert
- expect(EffectHelper.HasEffect).toHaveBeenCalledTimes(1);
- expect(EffectHelper.HasEffect).toHaveBeenCalledWith("userId", "unclaimed");
-
- expect(GetCardsHelper.GetRandomCard).toHaveBeenCalledTimes(1);
-
- expect(GetUnclaimedCardsHelper.GetRandomCardUnclaimed).not.toHaveBeenCalled();
- });
-});
\ No newline at end of file
diff --git a/tests/helpers/EffectHelper.test.ts b/tests/helpers/EffectHelper.test.ts
deleted file mode 100644
index dcab744..0000000
--- a/tests/helpers/EffectHelper.test.ts
+++ /dev/null
@@ -1,127 +0,0 @@
-import EffectHelper from "../../src/helpers/EffectHelper";
-import UserEffect from "../../src/database/entities/app/UserEffect";
-
-jest.mock("../../src/database/entities/app/UserEffect");
-
-describe("GenerateEffectListEmbed", () => {
- test("GIVEN user has an effect, EXPECT detailed embed to be returned", async () => {
- // Arrange
- (UserEffect.FetchAllByUserIdPaginated as jest.Mock).mockResolvedValue([
- [
- {
- Name: "unclaimed",
- Unused: 1,
- }
- ],
- 1,
- ]);
-
- // Act
- const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
-
- // Assert
- expect(result).toMatchSnapshot();
- });
-
- test("GIVEN user has more than 1 page of effects, EXPECT pagination enabled", async () => {
- const effects: {
- Name: string,
- Unused: number,
- }[] = [];
-
- for (let i = 0; i < 15; i++) {
- effects.push({
- Name: "unclaimed",
- Unused: 1,
- });
- }
-
- // Arrange
- (UserEffect.FetchAllByUserIdPaginated as jest.Mock).mockResolvedValue([
- effects,
- 15,
- ]);
-
- // Act
- const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
-
- // Assert
- expect(result).toMatchSnapshot();
- });
-
- test("GIVEN user is on a page other than 1, EXPECT pagination enabled", async () => {
- const effects: {
- Name: string,
- Unused: number,
- }[] = [];
-
- for (let i = 0; i < 15; i++) {
- effects.push({
- Name: "unclaimed",
- Unused: 1,
- });
- }
-
- // Arrange
- (UserEffect.FetchAllByUserIdPaginated as jest.Mock).mockResolvedValue([
- effects,
- 15,
- ]);
-
- // Act
- const result = await EffectHelper.GenerateEffectListEmbed("userId", 2);
-
- // Assert
- expect(result).toMatchSnapshot();
- });
-
- test("GIVEN user does NOT have an effect, EXPECT empty embed to be returned", async () => {
- // Arrange
- (UserEffect.FetchAllByUserIdPaginated as jest.Mock).mockResolvedValue([
- [],
- 0,
- ]);
-
- // Act
- const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
-
- // Assert
- expect(result).toMatchSnapshot();
- });
-
- test("GIVEN there is an active effect, EXPECT field added", async () => {
- // Arrange
- (UserEffect.FetchAllByUserIdPaginated as jest.Mock).mockResolvedValue([
- [
- {
- Name: "unclaimed",
- Unused: 1,
- }
- ],
- 1,
- ]);
-
- (UserEffect.FetchActiveEffectByUserId as jest.Mock).mockResolvedValue({
- Name: "unclaimed",
- WhenExpires: new Date(1738174052),
- });
-
- // Act
- const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
-
- // Assert
- expect(result).toMatchSnapshot();
- });
-});
-
-describe("GenerateEffectBuyEmbed", () => {
- test.todo("GIVEN Effect Details are not found, EXPECT error");
-
- test.todo("GIVEN user is not in database, EXPECT blank user created");
-
- test.todo("GIVEN user does not have enough currency, EXPECT error");
-
- test.todo("GIVEN user does have enough currency, EXPECT embed returned");
-
- test.todo("GIVEN disabled boolean is true, EXPECT buttons to be disabled");
-});
\ No newline at end of file
diff --git a/tests/helpers/TimeLengthInput.test.ts b/tests/helpers/TimeLengthInput.test.ts
deleted file mode 100644
index 6a23d67..0000000
--- a/tests/helpers/TimeLengthInput.test.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import TimeLengthInput from "../../src/helpers/TimeLengthInput";
-
-describe("ConvertFromMilliseconds", () => {
- test("EXPECT 1000ms to be outputted as a second", () => {
- const timeLength = TimeLengthInput.ConvertFromMilliseconds(1000);
- expect(timeLength.GetLengthShort()).toBe("1s");
- });
-
- test("EXPECT 60000ms to be outputted as a minute", () => {
- const timeLength = TimeLengthInput.ConvertFromMilliseconds(60000);
- expect(timeLength.GetLengthShort()).toBe("1m");
- });
-
- test("EXPECT 3600000ms to be outputted as an hour", () => {
- const timeLength = TimeLengthInput.ConvertFromMilliseconds(3600000);
- expect(timeLength.GetLengthShort()).toBe("1h");
- });
-
- test("EXPECT 86400000ms to be outputted as a day", () => {
- const timeLength = TimeLengthInput.ConvertFromMilliseconds(86400000);
- expect(timeLength.GetLengthShort()).toBe("1d");
- });
-
- test("EXPECT a combination to be outputted correctly", () => {
- const timeLength = TimeLengthInput.ConvertFromMilliseconds(90061000);
- expect(timeLength.GetLengthShort()).toBe("1d 1h 1m 1s");
- });
-
- test("EXPECT 0ms to be outputted as empty", () => {
- const timeLength = TimeLengthInput.ConvertFromMilliseconds(0);
- expect(timeLength.GetLengthShort()).toBe("");
- });
-
- test("EXPECT 123456789ms to be outputted correctly", () => {
- const timeLength = TimeLengthInput.ConvertFromMilliseconds(123456789);
- expect(timeLength.GetLengthShort()).toBe("1d 10h 17m 36s");
- });
-});
\ No newline at end of file
diff --git a/tests/helpers/__snapshots__/EffectHelper.test.ts.snap b/tests/helpers/__snapshots__/EffectHelper.test.ts.snap
deleted file mode 100644
index fc3317e..0000000
--- a/tests/helpers/__snapshots__/EffectHelper.test.ts.snap
+++ /dev/null
@@ -1,216 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`GenerateEffectListEmbed GIVEN there is an active effect, EXPECT field added 1`] = `
-{
- "embed": {
- "color": 3166394,
- "description": "Unclaimed Chance Up x1",
- "fields": [
- {
- "inline": true,
- "name": "Active",
- "value": "Unclaimed Chance Up",
- },
- {
- "inline": true,
- "name": "Expires",
- "value": "",
- },
- ],
- "footer": {
- "icon_url": undefined,
- "text": "Page 1 of 1",
- },
- "title": "Effects",
- },
- "row": {
- "components": [
- {
- "custom_id": "effects list 0",
- "disabled": true,
- "emoji": undefined,
- "label": "Previous",
- "style": 1,
- "type": 2,
- },
- {
- "custom_id": "effects list 2",
- "disabled": true,
- "emoji": undefined,
- "label": "Next",
- "style": 1,
- "type": 2,
- },
- ],
- "type": 1,
- },
-}
-`;
-
-exports[`GenerateEffectListEmbed GIVEN user does NOT have an effect, EXPECT empty embed to be returned 1`] = `
-{
- "embed": {
- "color": 3166394,
- "description": "*none*",
- "footer": {
- "icon_url": undefined,
- "text": "Page 1 of 1",
- },
- "title": "Effects",
- },
- "row": {
- "components": [
- {
- "custom_id": "effects list 0",
- "disabled": true,
- "emoji": undefined,
- "label": "Previous",
- "style": 1,
- "type": 2,
- },
- {
- "custom_id": "effects list 2",
- "disabled": true,
- "emoji": undefined,
- "label": "Next",
- "style": 1,
- "type": 2,
- },
- ],
- "type": 1,
- },
-}
-`;
-
-exports[`GenerateEffectListEmbed GIVEN user has an effect, EXPECT detailed embed to be returned 1`] = `
-{
- "embed": {
- "color": 3166394,
- "description": "Unclaimed Chance Up x1",
- "footer": {
- "icon_url": undefined,
- "text": "Page 1 of 1",
- },
- "title": "Effects",
- },
- "row": {
- "components": [
- {
- "custom_id": "effects list 0",
- "disabled": true,
- "emoji": undefined,
- "label": "Previous",
- "style": 1,
- "type": 2,
- },
- {
- "custom_id": "effects list 2",
- "disabled": true,
- "emoji": undefined,
- "label": "Next",
- "style": 1,
- "type": 2,
- },
- ],
- "type": 1,
- },
-}
-`;
-
-exports[`GenerateEffectListEmbed GIVEN user has more than 1 page of effects, EXPECT pagination enabled 1`] = `
-{
- "embed": {
- "color": 3166394,
- "description": "Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1",
- "footer": {
- "icon_url": undefined,
- "text": "Page 1 of 2",
- },
- "title": "Effects",
- },
- "row": {
- "components": [
- {
- "custom_id": "effects list 0",
- "disabled": true,
- "emoji": undefined,
- "label": "Previous",
- "style": 1,
- "type": 2,
- },
- {
- "custom_id": "effects list 2",
- "disabled": false,
- "emoji": undefined,
- "label": "Next",
- "style": 1,
- "type": 2,
- },
- ],
- "type": 1,
- },
-}
-`;
-
-exports[`GenerateEffectListEmbed GIVEN user is on a page other than 1, EXPECT pagination enabled 1`] = `
-{
- "embed": {
- "color": 3166394,
- "description": "Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1
-Unclaimed Chance Up x1",
- "footer": {
- "icon_url": undefined,
- "text": "Page 2 of 2",
- },
- "title": "Effects",
- },
- "row": {
- "components": [
- {
- "custom_id": "effects list 1",
- "disabled": false,
- "emoji": undefined,
- "label": "Previous",
- "style": 1,
- "type": 2,
- },
- {
- "custom_id": "effects list 3",
- "disabled": true,
- "emoji": undefined,
- "label": "Next",
- "style": 1,
- "type": 2,
- },
- ],
- "type": 1,
- },
-}
-`;
diff --git a/tests/timers/PurgeClaims.test.ts b/tests/timers/PurgeClaims.test.ts
deleted file mode 100644
index 6d0d09b..0000000
--- a/tests/timers/PurgeClaims.test.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-describe("PurgeClaims", () => {
- test.todo("EXPECT claims to be fetched");
-
- test.todo("EXPECT Claim.RemoveMany to remove the claims older than 2 minutes");
-
- test.todo("EXPECT info logged");
-});
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index c63e681..8585cbd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3,121 +3,167 @@
"@ampproject/remapping@^2.2.0":
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
- integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
+ integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
dependencies:
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.24"
+ "@jridgewell/gen-mapping" "^0.3.0"
+ "@jridgewell/trace-mapping" "^0.3.9"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.0.tgz#9374b5cd068d128dac0b94ff482594273b1c2815"
- integrity sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.22.5":
+ version "7.22.13"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
+ integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
dependencies:
- "@babel/helper-validator-identifier" "^7.25.9"
- js-tokens "^4.0.0"
- picocolors "^1.0.0"
+ "@babel/highlight" "^7.22.13"
+ chalk "^2.4.2"
-"@babel/compat-data@^7.25.9":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.0.tgz#f02ba6d34e88fadd5e8861e8b38902f43cc1c819"
- integrity sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==
+"@babel/compat-data@^7.22.9":
+ version "7.23.2"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc"
+ integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==
-"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40"
- integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==
+"@babel/core@^7.11.6", "@babel/core@^7.12.3":
+ version "7.23.2"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94"
+ integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==
dependencies:
"@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.26.0"
- "@babel/generator" "^7.26.0"
- "@babel/helper-compilation-targets" "^7.25.9"
- "@babel/helper-module-transforms" "^7.26.0"
- "@babel/helpers" "^7.26.0"
- "@babel/parser" "^7.26.0"
- "@babel/template" "^7.25.9"
- "@babel/traverse" "^7.25.9"
- "@babel/types" "^7.26.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.2"
+ "@babel/parser" "^7.23.0"
+ "@babel/template" "^7.22.15"
+ "@babel/traverse" "^7.23.2"
+ "@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"
semver "^6.3.1"
-"@babel/generator@^7.25.9", "@babel/generator@^7.26.0", "@babel/generator@^7.7.2":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.0.tgz#505cc7c90d92513f458a477e5ef0703e7c91b8d7"
- integrity sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==
+"@babel/generator@^7.23.0", "@babel/generator@^7.7.2":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
+ integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
dependencies:
- "@babel/parser" "^7.26.0"
- "@babel/types" "^7.26.0"
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.25"
- jsesc "^3.0.2"
+ "@babel/types" "^7.23.0"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ "@jridgewell/trace-mapping" "^0.3.17"
+ jsesc "^2.5.1"
-"@babel/helper-compilation-targets@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875"
- integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==
+"@babel/helper-compilation-targets@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52"
+ integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==
dependencies:
- "@babel/compat-data" "^7.25.9"
- "@babel/helper-validator-option" "^7.25.9"
- browserslist "^4.24.0"
+ "@babel/compat-data" "^7.22.9"
+ "@babel/helper-validator-option" "^7.22.15"
+ browserslist "^4.21.9"
lru-cache "^5.1.1"
semver "^6.3.1"
-"@babel/helper-module-imports@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
- integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
+"@babel/helper-environment-visitor@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
+ integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
+
+"@babel/helper-function-name@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+ integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
dependencies:
- "@babel/traverse" "^7.25.9"
- "@babel/types" "^7.25.9"
+ "@babel/template" "^7.22.15"
+ "@babel/types" "^7.23.0"
-"@babel/helper-module-transforms@^7.26.0":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
- integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
+"@babel/helper-hoist-variables@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+ integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
dependencies:
- "@babel/helper-module-imports" "^7.25.9"
- "@babel/helper-validator-identifier" "^7.25.9"
- "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.22.5"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46"
- integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==
-
-"@babel/helper-string-parser@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
- integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
-
-"@babel/helper-validator-identifier@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
- integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
-
-"@babel/helper-validator-option@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
- integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
-
-"@babel/helpers@^7.26.0":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4"
- integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==
+"@babel/helper-module-imports@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
+ integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
dependencies:
- "@babel/template" "^7.25.9"
- "@babel/types" "^7.26.0"
+ "@babel/types" "^7.22.15"
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0":
- version "7.26.1"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.1.tgz#44e02499960df2cdce2c456372a3e8e0c3c5c975"
- integrity sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==
+"@babel/helper-module-transforms@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e"
+ integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==
dependencies:
- "@babel/types" "^7.26.0"
+ "@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.20"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
+ integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
+
+"@babel/helper-simple-access@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
+ integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+ integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
+ integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+
+"@babel/helper-validator-identifier@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
+"@babel/helper-validator-option@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040"
+ integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==
+
+"@babel/helpers@^7.23.2":
+ version "7.23.2"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767"
+ integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==
+ dependencies:
+ "@babel/template" "^7.22.15"
+ "@babel/traverse" "^7.23.2"
+ "@babel/types" "^7.23.0"
+
+"@babel/highlight@^7.22.13":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54"
+ integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.20"
+ chalk "^2.4.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7":
+ version "7.22.10"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55"
+ integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==
+
+"@babel/parser@^7.22.15", "@babel/parser@^7.22.5", "@babel/parser@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
+ integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
@@ -133,28 +179,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-class-properties@^7.12.13":
+"@babel/plugin-syntax-class-properties@^7.8.3":
version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
dependencies:
"@babel/helper-plugin-utils" "^7.12.13"
-"@babel/plugin-syntax-class-static-block@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
- integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.14.5"
-
-"@babel/plugin-syntax-import-attributes@^7.24.7":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7"
- integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==
- dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
-
-"@babel/plugin-syntax-import-meta@^7.10.4":
+"@babel/plugin-syntax-import-meta@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
@@ -169,13 +201,13 @@
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-jsx@^7.7.2":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290"
- integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918"
+ integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
+"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
@@ -189,7 +221,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-numeric-separator@^7.10.4":
+"@babel/plugin-syntax-numeric-separator@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
@@ -217,14 +249,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-private-property-in-object@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
- integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.14.5"
-
-"@babel/plugin-syntax-top-level-await@^7.14.5":
+"@babel/plugin-syntax-top-level-await@^7.8.3":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
@@ -232,223 +257,145 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-typescript@^7.7.2":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399"
- integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272"
+ integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/template@^7.25.9", "@babel/template@^7.3.3":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016"
- integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==
+"@babel/runtime@^7.21.0":
+ version "7.22.10"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682"
+ integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==
dependencies:
- "@babel/code-frame" "^7.25.9"
- "@babel/parser" "^7.25.9"
- "@babel/types" "^7.25.9"
+ regenerator-runtime "^0.14.0"
-"@babel/traverse@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84"
- integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==
+"@babel/template@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
+ integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
dependencies:
- "@babel/code-frame" "^7.25.9"
- "@babel/generator" "^7.25.9"
- "@babel/parser" "^7.25.9"
- "@babel/template" "^7.25.9"
- "@babel/types" "^7.25.9"
- debug "^4.3.1"
+ "@babel/code-frame" "^7.22.13"
+ "@babel/parser" "^7.22.15"
+ "@babel/types" "^7.22.15"
+
+"@babel/template@^7.3.3":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
+ integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==
+ dependencies:
+ "@babel/code-frame" "^7.22.5"
+ "@babel/parser" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
+"@babel/traverse@^7.23.2":
+ version "7.23.2"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
+ integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==
+ 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.23.0"
+ "@babel/types" "^7.23.0"
+ debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.3.3":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff"
- integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
+ integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
dependencies:
- "@babel/helper-string-parser" "^7.25.9"
- "@babel/helper-validator-identifier" "^7.25.9"
+ "@babel/helper-string-parser" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
-"@colors/colors@1.6.0", "@colors/colors@^1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0"
- integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==
-
-"@dabh/diagnostics@^2.0.2":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a"
- integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==
+"@bconnorwhite/module@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@bconnorwhite/module/-/module-2.0.2.tgz#557846110bb89412e9689ac778358bc2b1af0c4a"
+ integrity sha512-ck1me5WMgZKp06gnJrVKEkytpehTTQbvsAMbF1nGPeHri/AZNhj87++PSE2LOxmZqM0EtGMaqeLdx7Lw7SUnTA==
dependencies:
- colorspace "1.1.x"
- enabled "2.0.x"
- kuler "^2.0.0"
+ find-up "^5.0.0"
+ read-json-safe "^1.0.5"
+ types-pkg-json "^1.1.0"
-"@discordjs/builders@^1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.9.0.tgz#71fa6de91132bd1deaff2a9daea7aa5d5c9f124a"
- integrity sha512-0zx8DePNVvQibh5ly5kCEei5wtPBIUbSoE9n+91Rlladz4tgtFbJ36PZMxxZrTEOQ7AHMZ/b0crT/0fCy6FTKg==
+"@discordjs/builders@^1.6.5":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.6.5.tgz#3e23912eaab1d542b61ca0fa7202e5aaef2b7200"
+ integrity sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==
dependencies:
- "@discordjs/formatters" "^0.5.0"
- "@discordjs/util" "^1.1.1"
- "@sapphire/shapeshift" "^4.0.0"
- discord-api-types "0.37.97"
+ "@discordjs/formatters" "^0.3.2"
+ "@discordjs/util" "^1.0.1"
+ "@sapphire/shapeshift" "^3.9.2"
+ discord-api-types "0.37.50"
fast-deep-equal "^3.1.3"
- ts-mixer "^6.0.4"
- tslib "^2.6.3"
+ ts-mixer "^6.0.3"
+ tslib "^2.6.1"
-"@discordjs/collection@1.5.3":
+"@discordjs/collection@^1.5.3":
version "1.5.3"
resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.3.tgz#5a1250159ebfff9efa4f963cfa7e97f1b291be18"
integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==
-"@discordjs/collection@^2.1.0", "@discordjs/collection@^2.1.1":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-2.1.1.tgz#901917bc538c12b9c3613036d317847baee08cae"
- integrity sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==
-
-"@discordjs/formatters@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.5.0.tgz#2d284c4271bc41984339936df1d0164e470f3b7a"
- integrity sha512-98b3i+Y19RFq1Xke4NkVY46x8KjJQjldHUuEbCqMvp1F5Iq9HgnGpu91jOi/Ufazhty32eRsKnnzS8n4c+L93g==
+"@discordjs/formatters@^0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.3.2.tgz#3ae054f7b3097cc0dc7645fade37a3f20fa1fb4b"
+ integrity sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==
dependencies:
- discord-api-types "0.37.97"
+ discord-api-types "0.37.50"
-"@discordjs/rest@^2.0.0", "@discordjs/rest@^2.3.0", "@discordjs/rest@^2.4.0":
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-2.4.0.tgz#63bfc816af58af844914e3589d7eae609cd199b5"
- integrity sha512-Xb2irDqNcq+O8F0/k/NaDp7+t091p+acb51iA4bCKfIn+WFWd6HrNvcsSbMMxIR9NjcMZS6NReTKygqiQN+ntw==
+"@discordjs/rest@^2.0.0", "@discordjs/rest@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-2.0.1.tgz#100c208a964e54b8d7cd418bbaed279c816b8ec5"
+ integrity sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==
dependencies:
- "@discordjs/collection" "^2.1.1"
- "@discordjs/util" "^1.1.1"
- "@sapphire/async-queue" "^1.5.3"
- "@sapphire/snowflake" "^3.5.3"
- "@vladfrangu/async_event_emitter" "^2.4.6"
- discord-api-types "0.37.97"
- magic-bytes.js "^1.10.0"
- tslib "^2.6.3"
- undici "6.19.8"
+ "@discordjs/collection" "^1.5.3"
+ "@discordjs/util" "^1.0.1"
+ "@sapphire/async-queue" "^1.5.0"
+ "@sapphire/snowflake" "^3.5.1"
+ "@vladfrangu/async_event_emitter" "^2.2.2"
+ discord-api-types "0.37.50"
+ magic-bytes.js "^1.0.15"
+ tslib "^2.6.1"
+ undici "5.22.1"
-"@discordjs/util@^1.1.0", "@discordjs/util@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.1.1.tgz#bafcde0faa116c834da1258d78ec237080bbab29"
- integrity sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==
-
-"@discordjs/ws@1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.1.1.tgz#bffbfd46838258ab09054ed98ddef1a36f6507a3"
- integrity sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==
- dependencies:
- "@discordjs/collection" "^2.1.0"
- "@discordjs/rest" "^2.3.0"
- "@discordjs/util" "^1.1.0"
- "@sapphire/async-queue" "^1.5.2"
- "@types/ws" "^8.5.10"
- "@vladfrangu/async_event_emitter" "^2.2.4"
- discord-api-types "0.37.83"
- tslib "^2.6.2"
- ws "^8.16.0"
-
-"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56"
- integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==
- dependencies:
- eslint-visitor-keys "^3.4.3"
-
-"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0":
- version "4.12.1"
- resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
- integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
-
-"@eslint/config-array@^0.18.0":
- version "0.18.0"
- resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d"
- integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==
- dependencies:
- "@eslint/object-schema" "^2.1.4"
- debug "^4.3.1"
- minimatch "^3.1.2"
-
-"@eslint/core@^0.7.0":
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.7.0.tgz#a1bb4b6a4e742a5ff1894b7ee76fbf884ec72bd3"
- integrity sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==
-
-"@eslint/eslintrc@^3.1.0":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6"
- integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==
- dependencies:
- ajv "^6.12.4"
- debug "^4.3.2"
- espree "^10.0.1"
- globals "^14.0.0"
- ignore "^5.2.0"
- import-fresh "^3.2.1"
- js-yaml "^4.1.0"
- minimatch "^3.1.2"
- strip-json-comments "^3.1.1"
-
-"@eslint/js@9.13.0":
- version "9.13.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.13.0.tgz#c5f89bcd57eb54d5d4fa8b77693e9c28dc97e547"
- integrity sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==
-
-"@eslint/object-schema@^2.1.4":
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843"
- integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==
-
-"@eslint/plugin-kit@^0.2.0":
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.1.tgz#cd14fe2db79fa639839dfef4105e83bad1814482"
- integrity sha512-HFZ4Mp26nbWk9d/BpvP0YNL6W4UoZF0VFcTw/aPPA8RpOxeFQgK+ClABGgAUXs9Y/RGX/l1vOmrqz1MQt9MNuw==
- dependencies:
- levn "^0.4.1"
-
-"@humanfs/core@^0.19.0":
- version "0.19.0"
- resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.0.tgz#08db7a8c73bb07673d9ebd925f2dad746411fcec"
- integrity sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==
-
-"@humanfs/node@^0.16.5":
- version "0.16.5"
- resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.5.tgz#a9febb7e7ad2aff65890fdc630938f8d20aa84ba"
- integrity sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==
- dependencies:
- "@humanfs/core" "^0.19.0"
- "@humanwhocodes/retry" "^0.3.0"
-
-"@humanwhocodes/module-importer@^1.0.1":
+"@discordjs/util@^1.0.1":
version "1.0.1"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
- integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+ resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.0.1.tgz#7d6f97b65425d3a8b46ea1180150dee6991a88cf"
+ integrity sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==
-"@humanwhocodes/retry@^0.3.0", "@humanwhocodes/retry@^0.3.1":
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a"
- integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==
-
-"@inquirer/figures@^1.0.3":
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.7.tgz#d050ccc0eabfacc0248c4ff647a9dfba1b01594b"
- integrity sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==
-
-"@isaacs/cliui@^8.0.2":
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
- integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+"@discordjs/ws@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.0.1.tgz#fab8aa4c1667040a95b5268a2875add27353d323"
+ integrity sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==
dependencies:
- string-width "^5.1.2"
- string-width-cjs "npm:string-width@^4.2.0"
- strip-ansi "^7.0.1"
- strip-ansi-cjs "npm:strip-ansi@^6.0.1"
- wrap-ansi "^8.1.0"
- wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+ "@discordjs/collection" "^1.5.3"
+ "@discordjs/rest" "^2.0.1"
+ "@discordjs/util" "^1.0.1"
+ "@sapphire/async-queue" "^1.5.0"
+ "@types/ws" "^8.5.5"
+ "@vladfrangu/async_event_emitter" "^2.2.2"
+ discord-api-types "0.37.50"
+ tslib "^2.6.1"
+ ws "^8.13.0"
+
+"@fastify/busboy@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8"
+ integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==
+
+"@gar/promisify@^1.0.1":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
+ integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
@@ -461,7 +408,7 @@
js-yaml "^3.13.1"
resolve-from "^5.0.0"
-"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3":
+"@istanbuljs/schema@^0.1.2":
version "0.1.3"
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
@@ -646,7 +593,7 @@
slash "^3.0.0"
write-file-atomic "^4.0.2"
-"@jest/types@^29.6.3":
+"@jest/types@^29.6.1", "@jest/types@^29.6.3":
version "29.6.3"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59"
integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==
@@ -658,311 +605,43 @@
"@types/yargs" "^17.0.8"
chalk "^4.0.0"
-"@jimp/core@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/core/-/core-1.6.0.tgz#3ef241bf02f40431bb382aea665e5187a2c05eef"
- integrity sha512-EQQlKU3s9QfdJqiSrZWNTxBs3rKXgO2W+GxNXDtwchF3a4IqxDheFX1ti+Env9hdJXDiYLp2jTRjlxhPthsk8w==
+"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+ integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
dependencies:
- "@jimp/file-ops" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- await-to-js "^3.0.0"
- exif-parser "^0.1.12"
- file-type "^16.0.0"
- mime "3"
-
-"@jimp/diff@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/diff/-/diff-1.6.0.tgz#f8d058bfad64751c5e5c135499d1a784f797c5c8"
- integrity sha512-+yUAQ5gvRC5D1WHYxjBHZI7JBRusGGSLf8AmPRPCenTzh4PA+wZ1xv2+cYqQwTfQHU5tXYOhA0xDytfHUf1Zyw==
- dependencies:
- "@jimp/plugin-resize" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- pixelmatch "^5.3.0"
-
-"@jimp/file-ops@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/file-ops/-/file-ops-1.6.0.tgz#ae9c6aa65b2c9a5a16515a8fdf83b55f51100087"
- integrity sha512-Dx/bVDmgnRe1AlniRpCKrGRm5YvGmUwbDzt+MAkgmLGf+jvBT75hmMEZ003n9HQI/aPnm/YKnXjg/hOpzNCpHQ==
-
-"@jimp/js-bmp@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/js-bmp/-/js-bmp-1.6.0.tgz#ff7c4306e764745063e249ee926d0dd807924abf"
- integrity sha512-FU6Q5PC/e3yzLyBDXupR3SnL3htU7S3KEs4e6rjDP6gNEOXRFsWs6YD3hXuXd50jd8ummy+q2WSwuGkr8wi+Gw==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- bmp-ts "^1.0.9"
-
-"@jimp/js-gif@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/js-gif/-/js-gif-1.6.0.tgz#0efa5d83317a89d6eda936e2ae1df2b7d122a38d"
- integrity sha512-N9CZPHOrJTsAUoWkWZstLPpwT5AwJ0wge+47+ix3++SdSL/H2QzyMqxbcDYNFe4MoI5MIhATfb0/dl/wmX221g==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/types" "1.6.0"
- gifwrap "^0.10.1"
- omggif "^1.0.10"
-
-"@jimp/js-jpeg@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/js-jpeg/-/js-jpeg-1.6.0.tgz#e47da6758346548079f0ac8ff215d0d9d1ec435e"
- integrity sha512-6vgFDqeusblf5Pok6B2DUiMXplH8RhIKAryj1yn+007SIAQ0khM1Uptxmpku/0MfbClx2r7pnJv9gWpAEJdMVA==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/types" "1.6.0"
- jpeg-js "^0.4.4"
-
-"@jimp/js-png@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/js-png/-/js-png-1.6.0.tgz#c857adfdbfcb7107a6511c3b2939ffbad0fefedc"
- integrity sha512-AbQHScy3hDDgMRNfG0tPjL88AV6qKAILGReIa3ATpW5QFjBKpisvUaOqhzJ7Reic1oawx3Riyv152gaPfqsBVg==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/types" "1.6.0"
- pngjs "^7.0.0"
-
-"@jimp/js-tiff@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/js-tiff/-/js-tiff-1.6.0.tgz#f18fa3d59f52fda339acfdcadbe7363bed912e81"
- integrity sha512-zhReR8/7KO+adijj3h0ZQUOiun3mXUv79zYEAKvE0O+rP7EhgtKvWJOZfRzdZSNv0Pu1rKtgM72qgtwe2tFvyw==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/types" "1.6.0"
- utif2 "^4.1.0"
-
-"@jimp/plugin-blit@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-1.6.0.tgz#fed35aefbb5757599a4299a9ff6c06cc3466f46f"
- integrity sha512-M+uRWl1csi7qilnSK8uxK4RJMSuVeBiO1AY0+7APnfUbQNZm6hCe0CCFv1Iyw1D/Dhb8ph8fQgm5mwM0eSxgVA==
- dependencies:
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-blur@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-1.6.0.tgz#781b3be9de2744e5eb6ab86ec05ee7d2ce5092e8"
- integrity sha512-zrM7iic1OTwUCb0g/rN5y+UnmdEsT3IfuCXCJJNs8SZzP0MkZ1eTvuwK9ZidCuMo4+J3xkzCidRwYXB5CyGZTw==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/utils" "1.6.0"
-
-"@jimp/plugin-circle@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-1.6.0.tgz#2314dc7955068cb4a000de4eceb02890eb131c88"
- integrity sha512-xt1Gp+LtdMKAXfDp3HNaG30SPZW6AQ7dtAtTnoRKorRi+5yCJjKqXRgkewS5bvj8DEh87Ko1ydJfzqS3P2tdWw==
- dependencies:
- "@jimp/types" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-color@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-1.6.0.tgz#927c83ee932070ad285266840728c21ac39bf27b"
- integrity sha512-J5q8IVCpkBsxIXM+45XOXTrsyfblyMZg3a9eAo0P7VPH4+CrvyNQwaYatbAIamSIN1YzxmO3DkIZXzRjFSz1SA==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- tinycolor2 "^1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-contain@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-1.6.0.tgz#d08900ecf85ac564a6f9f3fc0d61cc8d5e43626e"
- integrity sha512-oN/n+Vdq/Qg9bB4yOBOxtY9IPAtEfES8J1n9Ddx+XhGBYT1/QTU/JYkGaAkIGoPnyYvmLEDqMz2SGihqlpqfzQ==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/plugin-blit" "1.6.0"
- "@jimp/plugin-resize" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-cover@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-1.6.0.tgz#07ffb2f3d6ac53616c66f1131cd66ced17e3ca3e"
- integrity sha512-Iow0h6yqSC269YUJ8HC3Q/MpCi2V55sMlbkkTTx4zPvd8mWZlC0ykrNDeAy9IJegrQ7v5E99rJwmQu25lygKLA==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/plugin-crop" "1.6.0"
- "@jimp/plugin-resize" "1.6.0"
- "@jimp/types" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-crop@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-1.6.0.tgz#59f2b20869330fd768d1743d845b8ba9ed9bc52a"
- integrity sha512-KqZkEhvs+21USdySCUDI+GFa393eDIzbi1smBqkUPTE+pRwSWMAf01D5OC3ZWB+xZsNla93BDS9iCkLHA8wang==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-displace@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-1.6.0.tgz#41b3257a6c0f64c749c29c1a2e64ba7df31a7a25"
- integrity sha512-4Y10X9qwr5F+Bo5ME356XSACEF55485j5nGdiyJ9hYzjQP9nGgxNJaZ4SAOqpd+k5sFaIeD7SQ0Occ26uIng5Q==
- dependencies:
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-dither@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-1.6.0.tgz#10c17070dcbec565904f11b7986e90ae20850b6f"
- integrity sha512-600d1RxY0pKwgyU0tgMahLNKsqEcxGdbgXadCiVCoGd6V6glyCvkNrnnwC0n5aJ56Htkj88PToSdF88tNVZEEQ==
- dependencies:
- "@jimp/types" "1.6.0"
-
-"@jimp/plugin-fisheye@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-1.6.0.tgz#2831c0060598b27bf004bf8a70adfeec003d4fcc"
- integrity sha512-E5QHKWSCBFtpgZarlmN3Q6+rTQxjirFqo44ohoTjzYVrDI6B6beXNnPIThJgPr0Y9GwfzgyarKvQuQuqCnnfbA==
- dependencies:
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-flip@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-1.6.0.tgz#75c87bdb0f0ca9db44b320cc9671aa201e52b5c3"
- integrity sha512-/+rJVDuBIVOgwoyVkBjUFHtP+wmW0r+r5OQ2GpatQofToPVbJw1DdYWXlwviSx7hvixTWLKVgRWQ5Dw862emDg==
- dependencies:
- "@jimp/types" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-hash@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-hash/-/plugin-hash-1.6.0.tgz#8de89dfbbb6be671f9cdb2b59816acf3f07c4298"
- integrity sha512-wWzl0kTpDJgYVbZdajTf+4NBSKvmI3bRI8q6EH9CVeIHps9VWVsUvEyb7rpbcwVLWYuzDtP2R0lTT6WeBNQH9Q==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/js-bmp" "1.6.0"
- "@jimp/js-jpeg" "1.6.0"
- "@jimp/js-png" "1.6.0"
- "@jimp/js-tiff" "1.6.0"
- "@jimp/plugin-color" "1.6.0"
- "@jimp/plugin-resize" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- any-base "^1.1.0"
-
-"@jimp/plugin-mask@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-1.6.0.tgz#2b5a437e5d9a9906dcabb7a7baf4d5cd7d2361b1"
- integrity sha512-Cwy7ExSJMZszvkad8NV8o/Z92X2kFUFM8mcDAhNVxU0Q6tA0op2UKRJY51eoK8r6eds/qak3FQkXakvNabdLnA==
- dependencies:
- "@jimp/types" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-print@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-1.6.0.tgz#ccef327f53afb47617aa66ca65435447380faf34"
- integrity sha512-zarTIJi8fjoGMSI/M3Xh5yY9T65p03XJmPsuNet19K/Q7mwRU6EV2pfj+28++2PV2NJ+htDF5uecAlnGyxFN2A==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/js-jpeg" "1.6.0"
- "@jimp/js-png" "1.6.0"
- "@jimp/plugin-blit" "1.6.0"
- "@jimp/types" "1.6.0"
- parse-bmfont-ascii "^1.0.6"
- parse-bmfont-binary "^1.0.6"
- parse-bmfont-xml "^1.1.6"
- simple-xml-to-json "^1.2.2"
- zod "^3.23.8"
-
-"@jimp/plugin-quantize@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-quantize/-/plugin-quantize-1.6.0.tgz#880095fc0ead41321d94bf54895e366dd7d079d6"
- integrity sha512-EmzZ/s9StYQwbpG6rUGBCisc3f64JIhSH+ncTJd+iFGtGo0YvSeMdAd+zqgiHpfZoOL54dNavZNjF4otK+mvlg==
- dependencies:
- image-q "^4.0.0"
- zod "^3.23.8"
-
-"@jimp/plugin-resize@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-1.6.0.tgz#331e8912ed68746846145019bc6e2ea057e6f175"
- integrity sha512-uSUD1mqXN9i1SGSz5ov3keRZ7S9L32/mAQG08wUwZiEi5FpbV0K8A8l1zkazAIZi9IJzLlTauRNU41Mi8IF9fA==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/types" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-rotate@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-1.6.0.tgz#de271f39a3ac9e853b02e01d3d44ab086d12e099"
- integrity sha512-JagdjBLnUZGSG4xjCLkIpQOZZ3Mjbg8aGCCi4G69qR+OjNpOeGI7N2EQlfK/WE8BEHOW5vdjSyglNqcYbQBWRw==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/plugin-crop" "1.6.0"
- "@jimp/plugin-resize" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/plugin-threshold@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-1.6.0.tgz#11479cf59131ea95dcaff6a1403af1964593a3fa"
- integrity sha512-M59m5dzLoHOVWdM41O8z9SyySzcDn43xHseOH0HavjsfQsT56GGCC4QzU1banJidbUrePhzoEdS42uFE8Fei8w==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/plugin-color" "1.6.0"
- "@jimp/plugin-hash" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
- zod "^3.23.8"
-
-"@jimp/types@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/types/-/types-1.6.0.tgz#27022730fd673653e1430e6bd8ac6f6de1596f89"
- integrity sha512-7UfRsiKo5GZTAATxm2qQ7jqmUXP0DxTArztllTcYdyw6Xi5oT4RaoXynVtCD4UyLK5gJgkZJcwonoijrhYFKfg==
- dependencies:
- zod "^3.23.8"
-
-"@jimp/utils@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-1.6.0.tgz#e196f3953ea1ebc88f50cf0d490adb24aeffe596"
- integrity sha512-gqFTGEosKbOkYF/WFj26jMHOI5OH2jeP1MmC/zbK6BF6VJBf8rIC5898dPfSzZEbSA0wbbV5slbntWVc5PKLFA==
- dependencies:
- "@jimp/types" "1.6.0"
- tinycolor2 "^1.6.0"
-
-"@jridgewell/gen-mapping@^0.3.5":
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
- integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
- dependencies:
- "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/set-array" "^1.0.1"
"@jridgewell/sourcemap-codec" "^1.4.10"
- "@jridgewell/trace-mapping" "^0.3.24"
+ "@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/resolve-uri@^3.1.0":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
- integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
+ integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
-"@jridgewell/set-array@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
- integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+"@jridgewell/set-array@^1.0.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
- integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+ version "1.4.15"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
- version "0.3.25"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
- integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9":
+ version "0.3.19"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811"
+ integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==
dependencies:
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@ljharb/through@^2.3.9":
+ version "2.3.9"
+ resolved "https://registry.yarnpkg.com/@ljharb/through/-/through-2.3.9.tgz#85f221eb82f9d555e180e87d6e50fb154af85408"
+ integrity sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==
+
"@mapbox/node-pre-gyp@^1.0.0":
version "1.0.11"
resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa"
@@ -999,10 +678,21 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@pkgjs/parseargs@^0.11.0":
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
- integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+"@npmcli/fs@^1.0.0":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257"
+ integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==
+ dependencies:
+ "@gar/promisify" "^1.0.1"
+ semver "^7.3.5"
+
+"@npmcli/move-file@^1.0.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
+ integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
+ dependencies:
+ mkdirp "^1.0.4"
+ rimraf "^3.0.2"
"@pnpm/config.env-replace@^1.1.0":
version "1.1.0"
@@ -1017,9 +707,9 @@
graceful-fs "4.2.10"
"@pnpm/npm-conf@^2.1.0":
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0"
- integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0"
+ integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==
dependencies:
"@pnpm/config.env-replace" "^1.1.0"
"@pnpm/network.ca-file" "^1.0.1"
@@ -1032,33 +722,43 @@
dependencies:
any-observable "^0.3.0"
-"@sapphire/async-queue@^1.5.2", "@sapphire/async-queue@^1.5.3":
- version "1.5.3"
- resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.3.tgz#03cd2a2f3665068f314736bdc56eee2025352422"
- integrity sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w==
+"@sapphire/async-queue@^1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8"
+ integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==
-"@sapphire/shapeshift@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz#86c1b41002ff5d0b2ad21cbc3418b06834b89040"
- integrity sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==
+"@sapphire/shapeshift@^3.9.2":
+ version "3.9.2"
+ resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz#a9c12cd51e1bc467619bb56df804450dd14871ac"
+ integrity sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==
dependencies:
fast-deep-equal "^3.1.3"
lodash "^4.17.21"
-"@sapphire/snowflake@3.5.3", "@sapphire/snowflake@^3.5.3":
- version "3.5.3"
- resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.3.tgz#0c102aa2ec5b34f806e9bc8625fc6a5e1d0a0c6a"
- integrity sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==
+"@sapphire/snowflake@^3.5.1":
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.1.tgz#254521c188b49e8b2d4cc048b475fb2b38737fec"
+ integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
+"@sindresorhus/is@^4.0.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+ integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+
+"@sindresorhus/is@^5.2.0", "@sindresorhus/is@^5.3.0":
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668"
+ integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==
+
"@sinonjs/commons@^3.0.0":
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd"
- integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72"
+ integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==
dependencies:
type-detect "4.0.8"
@@ -1074,15 +774,29 @@
resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12"
integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==
-"@tokenizer/token@^0.3.0":
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276"
- integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==
+"@szmarczak/http-timer@^4.0.5":
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
+ integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
+ dependencies:
+ defer-to-connect "^2.0.0"
+
+"@szmarczak/http-timer@^5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a"
+ integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==
+ dependencies:
+ defer-to-connect "^2.0.1"
+
+"@tootallnate/once@1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
"@types/babel__core@^7.1.14":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
- integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
+ version "7.20.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756"
+ integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==
dependencies:
"@babel/parser" "^7.20.7"
"@babel/types" "^7.20.7"
@@ -1091,302 +805,230 @@
"@types/babel__traverse" "*"
"@types/babel__generator@*":
- version "7.6.8"
- resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab"
- integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
+ version "7.6.5"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95"
+ integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==
dependencies:
"@babel/types" "^7.0.0"
"@types/babel__template@*":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
- integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
+ version "7.4.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b"
+ integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
- version "7.20.6"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7"
- integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==
+ version "7.20.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d"
+ integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==
dependencies:
"@babel/types" "^7.20.7"
"@types/body-parser@*":
- version "1.19.5"
- resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4"
- integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==
+ version "1.19.4"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.4.tgz#78ad68f1f79eb851aa3634db0c7f57f6f601b462"
+ integrity sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==
dependencies:
"@types/connect" "*"
"@types/node" "*"
-"@types/clone-deep@^4.0.4":
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/@types/clone-deep/-/clone-deep-4.0.4.tgz#6932f2d0a4b4ef337d97cb72e6ecdf091c05145d"
- integrity sha512-vXh6JuuaAha6sqEbJueYdh5zNBPPgG1OYumuz2UvLvriN6ABHDSW8ludREGWJb1MLIzbwZn4q4zUbUCerJTJfA==
+"@types/cacheable-request@^6.0.1":
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
+ integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
+ dependencies:
+ "@types/http-cache-semantics" "*"
+ "@types/keyv" "^3.1.4"
+ "@types/node" "*"
+ "@types/responselike" "^1.0.0"
"@types/connect@*":
- version "3.4.38"
- resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858"
- integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==
+ version "3.4.37"
+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.37.tgz#c66a96689fd3127c8772eb3e9e5c6028ec1a9af5"
+ integrity sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==
dependencies:
"@types/node" "*"
-"@types/estree@^1.0.6":
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
- integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
-
-"@types/express-serve-static-core@^5.0.0":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz#3c9997ae9d00bc236e45c6374e84f2596458d9db"
- integrity sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==
+"@types/express-serve-static-core@^4.17.33":
+ version "4.17.39"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz#2107afc0a4b035e6cb00accac3bdf2d76ae408c8"
+ integrity sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==
dependencies:
"@types/node" "*"
"@types/qs" "*"
"@types/range-parser" "*"
"@types/send" "*"
-"@types/express@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.0.tgz#13a7d1f75295e90d19ed6e74cab3678488eaa96c"
- integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==
+"@types/express@^4.17.20":
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.20.tgz#e7c9b40276d29e38a4e3564d7a3d65911e2aa433"
+ integrity sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==
dependencies:
"@types/body-parser" "*"
- "@types/express-serve-static-core" "^5.0.0"
+ "@types/express-serve-static-core" "^4.17.33"
"@types/qs" "*"
"@types/serve-static" "*"
"@types/graceful-fs@^4.1.3":
- version "4.1.9"
- resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4"
- integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==
+ version "4.1.7"
+ resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a"
+ integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==
dependencies:
"@types/node" "*"
-"@types/http-errors@*":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
- integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
+"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
+ integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
- integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
+"@types/http-errors@*":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.3.tgz#c54e61f79b3947d040f150abd58f71efb422ff62"
+ integrity sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#fdfdd69fa16d530047d9963635bd77c71a08c068"
+ integrity sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==
+
+"@types/istanbul-lib-coverage@^2.0.1":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
+ integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
"@types/istanbul-lib-report@*":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf"
- integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz#394798d5f727402eb5ec99eb9618ffcd2b7645a1"
+ integrity sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==
dependencies:
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-reports@^3.0.0":
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54"
- integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz#0313e2608e6d6955d195f55361ddeebd4b74c6e7"
+ integrity sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/jest@^29.5.14":
- version "29.5.14"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5"
- integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==
+"@types/jest@^29.0.0":
+ version "29.5.7"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.7.tgz#2c0dafe2715dd958a455bc10e2ec3e1ec47b5036"
+ integrity sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==
dependencies:
expect "^29.0.0"
pretty-format "^29.0.0"
-"@types/json-schema@^7.0.15":
- version "7.0.15"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
- integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
+"@types/keyv@^3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
+ integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
+ dependencies:
+ "@types/node" "*"
-"@types/luxon@~3.4.0":
- version "3.4.2"
- resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.4.2.tgz#e4fc7214a420173cea47739c33cdf10874694db7"
- integrity sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==
+"@types/mime@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.3.tgz#886674659ce55fe7c6c06ec5ca7c0eb276a08f91"
+ integrity sha512-i8MBln35l856k5iOhKk2XJ4SeAWg75mLIpZB4v6imOagKL6twsukBZGDMNhdOVk7yRFTMPpfILocMos59Q1otQ==
"@types/mime@^1":
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
- integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.4.tgz#a4ed836e069491414bab92c31fdea9e557aca0d9"
+ integrity sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==
-"@types/node@*", "@types/node@^22.8.1":
- version "22.8.1"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-22.8.1.tgz#b39d4b98165e2ae792ce213f610c7c6108ccfa16"
- integrity sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==
+"@types/node@*":
+ version "20.8.10"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e"
+ integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==
dependencies:
- undici-types "~6.19.8"
+ undici-types "~5.26.4"
-"@types/node@16.9.1":
- version "16.9.1"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708"
- integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==
+"@types/node@^20.0.0":
+ version "20.8.7"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.7.tgz#ad23827850843de973096edfc5abc9e922492a25"
+ integrity sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==
+ dependencies:
+ undici-types "~5.25.1"
-"@types/normalize-package-data@^2.4.3":
- version "2.4.4"
- resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901"
- integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==
+"@types/normalize-package-data@^2.4.1":
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz#291c243e4b94dbfbc0c0ee26b7666f1d5c030e2c"
+ integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==
"@types/qs@*":
- version "6.9.16"
- resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794"
- integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==
+ version "6.9.9"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.9.tgz#66f7b26288f6799d279edf13da7ccd40d2fa9197"
+ integrity sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==
"@types/range-parser@*":
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb"
- integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.6.tgz#7cb33992049fd7340d5b10c0098e104184dfcd2a"
+ integrity sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==
+
+"@types/responselike@^1.0.0":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.2.tgz#8de1b0477fd7c12df77e50832fa51701a8414bd6"
+ integrity sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA==
+ dependencies:
+ "@types/node" "*"
"@types/send@*":
- version "0.17.4"
- resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
- integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==
+ version "0.17.3"
+ resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.3.tgz#81b2ea5a3a18aad357405af2d643ccbe5a09020b"
+ integrity sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==
dependencies:
"@types/mime" "^1"
"@types/node" "*"
"@types/serve-static@*":
- version "1.15.7"
- resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714"
- integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==
+ version "1.15.4"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.4.tgz#44b5895a68ca637f06c229119e1c774ca88f81b2"
+ integrity sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==
dependencies:
"@types/http-errors" "*"
+ "@types/mime" "*"
"@types/node" "*"
- "@types/send" "*"
"@types/stack-utils@^2.0.0":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
- integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.2.tgz#01284dde9ef4e6d8cef6422798d9a3ad18a66f8b"
+ integrity sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==
-"@types/triple-beam@^1.3.2":
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c"
- integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==
+"@types/uuid@^9.0.0":
+ version "9.0.6"
+ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.6.tgz#c91ae743d8344a54b2b0c691195f5ff5265f6dfb"
+ integrity sha512-BT2Krtx4xaO6iwzwMFUYvWBWkV2pr37zD68Vmp1CDV196MzczBRxuEpD6Pr395HAgebC/co7hOphs53r8V7jew==
-"@types/uuid@^10.0.0":
- version "10.0.0"
- resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d"
- integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==
-
-"@types/ws@^8.5.10":
- version "8.5.12"
- resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e"
- integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==
+"@types/ws@^8.5.5":
+ version "8.5.8"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.8.tgz#13efec7bd439d0bdf2af93030804a94f163b1430"
+ integrity sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==
dependencies:
"@types/node" "*"
"@types/yargs-parser@*":
- version "21.0.3"
- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
- integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
+ version "21.0.2"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.2.tgz#7bd04c5da378496ef1695a1008bf8f71847a8b8b"
+ integrity sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==
"@types/yargs@^17.0.8":
- version "17.0.33"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d"
- integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==
+ version "17.0.29"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.29.tgz#06aabc72497b798c643c812a8b561537fea760cf"
+ integrity sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@8.11.0", "@typescript-eslint/eslint-plugin@^8.11.0":
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz#c3f087d20715fa94310b30666c08b3349e0ab084"
- integrity sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==
- dependencies:
- "@eslint-community/regexpp" "^4.10.0"
- "@typescript-eslint/scope-manager" "8.11.0"
- "@typescript-eslint/type-utils" "8.11.0"
- "@typescript-eslint/utils" "8.11.0"
- "@typescript-eslint/visitor-keys" "8.11.0"
- graphemer "^1.4.0"
- ignore "^5.3.1"
- natural-compare "^1.4.0"
- ts-api-utils "^1.3.0"
-
-"@typescript-eslint/parser@8.11.0", "@typescript-eslint/parser@^8.11.0":
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.11.0.tgz#2ad1481388dc1c937f50b2d138c9ca57cc6c5cce"
- integrity sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==
- dependencies:
- "@typescript-eslint/scope-manager" "8.11.0"
- "@typescript-eslint/types" "8.11.0"
- "@typescript-eslint/typescript-estree" "8.11.0"
- "@typescript-eslint/visitor-keys" "8.11.0"
- debug "^4.3.4"
-
-"@typescript-eslint/scope-manager@8.11.0":
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz#9d399ce624118966732824878bc9a83593a30405"
- integrity sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==
- dependencies:
- "@typescript-eslint/types" "8.11.0"
- "@typescript-eslint/visitor-keys" "8.11.0"
-
-"@typescript-eslint/type-utils@8.11.0":
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz#b7f9e6120c1ddee8a1a07615646642ad85fc91b5"
- integrity sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==
- dependencies:
- "@typescript-eslint/typescript-estree" "8.11.0"
- "@typescript-eslint/utils" "8.11.0"
- debug "^4.3.4"
- ts-api-utils "^1.3.0"
-
-"@typescript-eslint/types@8.11.0":
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.11.0.tgz#7c766250502097f49bbc2e651132e6bf489e20b8"
- integrity sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==
-
-"@typescript-eslint/typescript-estree@8.11.0":
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz#35fe5d3636fc5727c52429393415412e552e222b"
- integrity sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==
- dependencies:
- "@typescript-eslint/types" "8.11.0"
- "@typescript-eslint/visitor-keys" "8.11.0"
- debug "^4.3.4"
- fast-glob "^3.3.2"
- is-glob "^4.0.3"
- minimatch "^9.0.4"
- semver "^7.6.0"
- ts-api-utils "^1.3.0"
-
-"@typescript-eslint/utils@8.11.0":
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.11.0.tgz#4480d1e9f2bb18ea3510c79f870a1aefc118103d"
- integrity sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==
- dependencies:
- "@eslint-community/eslint-utils" "^4.4.0"
- "@typescript-eslint/scope-manager" "8.11.0"
- "@typescript-eslint/types" "8.11.0"
- "@typescript-eslint/typescript-estree" "8.11.0"
-
-"@typescript-eslint/visitor-keys@8.11.0":
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz#273de1cbffe63d9f9cd7dfc20b5a5af66310cb92"
- integrity sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==
- dependencies:
- "@typescript-eslint/types" "8.11.0"
- eslint-visitor-keys "^3.4.3"
-
-"@vladfrangu/async_event_emitter@^2.2.4", "@vladfrangu/async_event_emitter@^2.4.6":
- version "2.4.6"
- resolved "https://registry.yarnpkg.com/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.6.tgz#508b6c45b03f917112a9008180b308ba0e4d1805"
- integrity sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==
+"@vladfrangu/async_event_emitter@^2.2.2":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz#84c5a3f8d648842cec5cc649b88df599af32ed88"
+ integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-abort-controller@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
- integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
- dependencies:
- event-target-shim "^5.0.0"
-
accepts@~1.3.8:
version "1.3.8"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
@@ -1395,23 +1037,28 @@ accepts@~1.3.8:
mime-types "~2.1.34"
negotiator "0.6.3"
-acorn-jsx@^5.3.2:
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
- integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
-
-acorn@^8.12.0:
- version "8.14.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
- integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
-
-agent-base@6:
+agent-base@6, agent-base@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
dependencies:
debug "4"
+agentkeepalive@^4.1.3:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923"
+ integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==
+ dependencies:
+ humanize-ms "^1.2.1"
+
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
aggregate-error@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e"
@@ -1420,15 +1067,16 @@ aggregate-error@^4.0.0:
clean-stack "^4.0.0"
indent-string "^5.0.0"
-ajv@^6.12.4:
- version "6.12.6"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
- integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+all-package-names@^2.0.2:
+ version "2.0.713"
+ resolved "https://registry.yarnpkg.com/all-package-names/-/all-package-names-2.0.713.tgz#4693690ac02d8adc19fe269f02e1095dd31adce8"
+ integrity sha512-JvEzctY1eqTWrwagvOvMkO0KT6eOEzosRIz+aa6fwiN8r/OSwBo+ICS1gDZuT49R1lqpRw1XOK/LvJTcExK2Qw==
dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
+ commander-version "^1.1.0"
+ p-lock "^2.0.0"
+ parse-json-object "^2.0.1"
+ progress "^2.0.3"
+ types-json "^1.2.2"
ansi-align@^3.0.1:
version "3.0.1"
@@ -1477,9 +1125,9 @@ ansi-regex@^5.0.1:
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
ansi-regex@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
- integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
ansi-styles@^2.2.1:
version "2.2.1"
@@ -1505,16 +1153,11 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-ansi-styles@^6.1.0, ansi-styles@^6.2.1:
+ansi-styles@^6.1.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-any-base@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
- integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==
-
any-observable@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
@@ -1551,6 +1194,14 @@ are-we-there-yet@^2.0.0:
delegates "^1.0.0"
readable-stream "^3.6.0"
+are-we-there-yet@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
+ integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^3.6.0"
+
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -1568,38 +1219,6 @@ array-flatten@1.1.1:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
-async@^3.2.3:
- version "3.2.6"
- resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
- integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-
-atomically@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/atomically/-/atomically-2.0.3.tgz#27e47bbe39994d324918491ba7c0edb7783e56cb"
- integrity sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==
- dependencies:
- stubborn-fs "^1.2.5"
- when-exit "^2.1.1"
-
-await-to-js@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/await-to-js/-/await-to-js-3.0.0.tgz#70929994185616f4675a91af6167eb61cc92868f"
- integrity sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==
-
-axios@^1.8.4:
- version "1.8.4"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447"
- integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==
- dependencies:
- follow-redirects "^1.15.6"
- form-data "^4.0.0"
- proxy-from-env "^1.1.0"
-
babel-jest@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5"
@@ -1635,25 +1254,22 @@ babel-plugin-jest-hoist@^29.6.3:
"@types/babel__traverse" "^7.0.6"
babel-preset-current-node-syntax@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30"
- integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+ integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
dependencies:
"@babel/plugin-syntax-async-generators" "^7.8.4"
"@babel/plugin-syntax-bigint" "^7.8.3"
- "@babel/plugin-syntax-class-properties" "^7.12.13"
- "@babel/plugin-syntax-class-static-block" "^7.14.5"
- "@babel/plugin-syntax-import-attributes" "^7.24.7"
- "@babel/plugin-syntax-import-meta" "^7.10.4"
+ "@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.10.4"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
- "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@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-private-property-in-object" "^7.14.5"
- "@babel/plugin-syntax-top-level-await" "^7.14.5"
+ "@babel/plugin-syntax-top-level-await" "^7.8.3"
babel-preset-jest@^29.6.3:
version "29.6.3"
@@ -1673,6 +1289,11 @@ base64-js@^1.3.1:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+big-integer@^1.6.44:
+ version "1.6.51"
+ resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
+ integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
+
bignumber.js@9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075"
@@ -1687,15 +1308,28 @@ bl@^4.1.0:
inherits "^2.0.4"
readable-stream "^3.4.0"
-bmp-ts@^1.0.9:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/bmp-ts/-/bmp-ts-1.0.9.tgz#0fd124ba812be9b786b29e5b186ee76d74ff5538"
- integrity sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==
+body-parser@1.20.1:
+ version "1.20.1"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
+ integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
+ dependencies:
+ bytes "3.1.2"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "2.0.0"
+ destroy "1.2.0"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ on-finished "2.4.1"
+ qs "6.11.0"
+ raw-body "2.5.1"
+ type-is "~1.6.18"
+ unpipe "1.0.0"
-body-parser@1.20.3, body-parser@^1.20.2:
- version "1.20.3"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6"
- integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==
+body-parser@^1.20.2:
+ version "1.20.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
+ integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
dependencies:
bytes "3.1.2"
content-type "~1.0.5"
@@ -1705,24 +1339,31 @@ body-parser@1.20.3, body-parser@^1.20.2:
http-errors "2.0.0"
iconv-lite "0.4.24"
on-finished "2.4.1"
- qs "6.13.0"
+ qs "6.11.0"
raw-body "2.5.2"
type-is "~1.6.18"
unpipe "1.0.0"
-boxen@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/boxen/-/boxen-8.0.1.tgz#7e9fcbb45e11a2d7e6daa8fdcebfc3242fc19fe3"
- integrity sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==
+boxen@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4"
+ integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==
dependencies:
ansi-align "^3.0.1"
- camelcase "^8.0.0"
- chalk "^5.3.0"
+ camelcase "^7.0.1"
+ chalk "^5.2.0"
cli-boxes "^3.0.0"
- string-width "^7.2.0"
- type-fest "^4.21.0"
- widest-line "^5.0.0"
- wrap-ansi "^9.0.0"
+ string-width "^5.1.2"
+ type-fest "^2.13.0"
+ widest-line "^4.0.1"
+ wrap-ansi "^8.1.0"
+
+bplist-parser@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e"
+ integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==
+ dependencies:
+ big-integer "^1.6.44"
brace-expansion@^1.1.7:
version "1.1.11"
@@ -1739,24 +1380,24 @@ brace-expansion@^2.0.1:
dependencies:
balanced-match "^1.0.0"
-braces@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
- integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+braces@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
- fill-range "^7.1.1"
+ fill-range "^7.0.1"
-browserslist@^4.24.0:
- version "4.24.2"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580"
- integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==
+browserslist@^4.21.9:
+ version "4.22.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
+ integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
dependencies:
- caniuse-lite "^1.0.30001669"
- electron-to-chromium "^1.5.41"
- node-releases "^2.0.18"
- update-browserslist-db "^1.1.1"
+ caniuse-lite "^1.0.30001541"
+ electron-to-chromium "^1.4.535"
+ node-releases "^2.0.13"
+ update-browserslist-db "^1.0.13"
-bs-logger@^0.2.6:
+bs-logger@0.x:
version "0.2.6"
resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
@@ -1791,42 +1432,101 @@ buffer@^6.0.3:
base64-js "^1.3.1"
ieee754 "^1.2.1"
-bundle-name@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889"
- integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==
+builtins@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
+ integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==
+
+bundle-name@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a"
+ integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==
dependencies:
- run-applescript "^7.0.0"
+ run-applescript "^5.0.0"
bytes@3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
-call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
- integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
+cacache@^15.2.0:
+ version "15.3.0"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
+ integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
dependencies:
- es-errors "^1.3.0"
- function-bind "^1.1.2"
+ "@npmcli/fs" "^1.0.0"
+ "@npmcli/move-file" "^1.0.1"
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ glob "^7.1.4"
+ infer-owner "^1.0.4"
+ lru-cache "^6.0.0"
+ minipass "^3.1.1"
+ minipass-collect "^1.0.2"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.2"
+ mkdirp "^1.0.3"
+ p-map "^4.0.0"
+ promise-inflight "^1.0.1"
+ rimraf "^3.0.2"
+ ssri "^8.0.1"
+ tar "^6.0.2"
+ unique-filename "^1.1.1"
-call-bind@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
- integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
+cacheable-lookup@^5.0.3:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
+ integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
+
+cacheable-lookup@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27"
+ integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==
+
+cacheable-request@^10.2.8:
+ version "10.2.13"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.13.tgz#b7012bb4a2acdb18cb54d2dff751d766b3500842"
+ integrity sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==
dependencies:
- es-define-property "^1.0.0"
- es-errors "^1.3.0"
- function-bind "^1.1.2"
- get-intrinsic "^1.2.4"
- set-function-length "^1.2.1"
+ "@types/http-cache-semantics" "^4.0.1"
+ get-stream "^6.0.1"
+ http-cache-semantics "^4.1.1"
+ keyv "^4.5.3"
+ mimic-response "^4.0.0"
+ normalize-url "^8.0.0"
+ responselike "^3.0.0"
+
+cacheable-request@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
+ integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^4.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^6.0.1"
+ responselike "^2.0.0"
+
+call-bind@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+callsites@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-4.1.0.tgz#de72b98612eed4e1e2564c952498677faa9d86c2"
+ integrity sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==
+
camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
@@ -1837,31 +1537,15 @@ camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-camelcase@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-8.0.0.tgz#c0d36d418753fb6ad9c5e0437579745c1c14a534"
- integrity sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==
+camelcase@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048"
+ integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==
-caniuse-lite@^1.0.30001669:
- version "1.0.30001673"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001673.tgz#5aa291557af1c71340e809987367410aab7a5a9e"
- integrity sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==
-
-canvas@^2.11.2:
- version "2.11.2"
- resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.11.2.tgz#553d87b1e0228c7ac0fc72887c3adbac4abbd860"
- integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==
- dependencies:
- "@mapbox/node-pre-gyp" "^1.0.0"
- nan "^2.17.0"
- simple-get "^3.0.3"
-
-chalk-template@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-1.1.0.tgz#ffc55db6dd745e9394b85327c8ac8466edb7a7b1"
- integrity sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==
- dependencies:
- chalk "^5.2.0"
+caniuse-lite@^1.0.30001541:
+ version "1.0.30001549"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz#7d1a3dce7ea78c06ed72c32c2743ea364b3615aa"
+ integrity sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==
chalk@^1.0.0, chalk@^1.1.3:
version "1.1.3"
@@ -1883,7 +1567,7 @@ chalk@^2.4.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2:
+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -1891,7 +1575,7 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@^5.2.0, chalk@^5.3.0:
+chalk@^5.0.0, chalk@^5.0.1, chalk@^5.2.0, chalk@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
@@ -1917,9 +1601,14 @@ ci-info@^3.2.0:
integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
cjs-module-lexer@^1.0.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170"
- integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
+ integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
clean-stack@^4.0.0:
version "4.2.0"
@@ -1960,9 +1649,9 @@ cli-highlight@^2.1.11:
yargs "^16.0.0"
cli-spinners@^2.5.0:
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
- integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db"
+ integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==
cli-truncate@^0.2.1:
version "0.2.1"
@@ -2005,14 +1694,12 @@ cliui@^8.0.1:
strip-ansi "^6.0.1"
wrap-ansi "^7.0.0"
-clone-deep@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
- integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+clone-response@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
+ integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
dependencies:
- is-plain-object "^2.0.4"
- kind-of "^6.0.2"
- shallow-clone "^3.0.0"
+ mimic-response "^1.0.0"
clone@^1.0.2:
version "1.0.4"
@@ -2034,7 +1721,7 @@ collect-v8-coverage@^1.0.0:
resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9"
integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==
-color-convert@^1.9.0, color-convert@^1.9.3:
+color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
@@ -2053,56 +1740,28 @@ color-name@1.1.3:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-color-name@^1.0.0, color-name@~1.1.4:
+color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-color-string@^1.6.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
- integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
- dependencies:
- color-name "^1.0.0"
- simple-swizzle "^0.2.2"
-
-color-support@^1.1.2:
+color-support@^1.1.2, color-support@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
-color@^3.1.3:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164"
- integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==
+commander-version@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/commander-version/-/commander-version-1.1.0.tgz#fbfaea4632921a42f8f855f96bcaa3d9920a6296"
+ integrity sha512-9aNW4N6q6EPDUszLRH6k9IwO6OoGYh3HRgUF/fA7Zs+Mz1v1x5akSqT7QGB8JsGY7AG7qMA7oRRB/4yyn33FYA==
dependencies:
- color-convert "^1.9.3"
- color-string "^1.6.0"
+ "@bconnorwhite/module" "^2.0.2"
+ commander "^6.1.0"
-colors@^1.2.1:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
- integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
-
-colorspace@1.1.x:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243"
- integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==
- dependencies:
- color "^3.1.3"
- text-hex "1.0.x"
-
-combined-stream@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
-component-emitter@^1.3.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17"
- integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==
+commander@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
+ integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
concat-map@0.0.1:
version "0.0.1"
@@ -2117,15 +1776,16 @@ config-chain@^1.1.11:
ini "^1.3.4"
proto-list "~1.2.1"
-configstore@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/configstore/-/configstore-7.0.0.tgz#4461561fc51cb40e5ee1161230bc0337e069cc6b"
- integrity sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==
+configstore@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566"
+ integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==
dependencies:
- atomically "^2.0.3"
- dot-prop "^9.0.0"
- graceful-fs "^4.2.11"
- xdg-basedir "^5.1.0"
+ dot-prop "^6.0.1"
+ graceful-fs "^4.2.6"
+ unique-string "^3.0.0"
+ write-file-atomic "^3.0.3"
+ xdg-basedir "^5.0.1"
console-control-strings@^1.0.0, console-control-strings@^1.1.0:
version "1.1.0"
@@ -2154,29 +1814,24 @@ cookie-signature@1.0.6:
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
-cookie@0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9"
- integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==
-
-cookiejar@^2.1.2:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b"
- integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==
+cookie@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+ integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
core-util-is@~1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-cosmiconfig@^8.3.6:
- version "8.3.6"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3"
- integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==
+cosmiconfig@^8.1.3:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd"
+ integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==
dependencies:
- import-fresh "^3.3.0"
+ import-fresh "^3.2.1"
js-yaml "^4.1.0"
- parse-json "^5.2.0"
+ parse-json "^5.0.0"
path-type "^4.0.0"
create-jest@^29.7.0:
@@ -2192,15 +1847,7 @@ create-jest@^29.7.0:
jest-util "^29.7.0"
prompts "^2.0.1"
-cron@^3.1.7:
- version "3.1.7"
- resolved "https://registry.yarnpkg.com/cron/-/cron-3.1.7.tgz#3423d618ba625e78458fff8cb67001672d49ba0d"
- integrity sha512-tlBg7ARsAMQLzgwqVxy8AZl/qlTc5nibqYwtNGoCrd+cV+ugI+tvZC1oT/8dFH8W455YrywGykx/KMmAqOr7Jw==
- dependencies:
- "@types/luxon" "~3.4.0"
- luxon "~3.4.0"
-
-cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -2209,15 +1856,24 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
+crypto-random-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2"
+ integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==
+ dependencies:
+ type-fest "^1.0.1"
+
date-fns@^1.27.2:
version "1.30.1"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
-dayjs@^1.11.9:
- version "1.11.13"
- resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
- integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
+date-fns@^2.29.3:
+ version "2.30.0"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0"
+ integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==
+ dependencies:
+ "@babel/runtime" "^7.21.0"
debug@2.6.9:
version "2.6.9"
@@ -2226,52 +1882,52 @@ debug@2.6.9:
dependencies:
ms "2.0.0"
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
- version "4.3.7"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52"
- integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
- ms "^2.1.3"
+ ms "2.1.2"
-decompress-response@^4.2.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
- integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
dependencies:
- mimic-response "^2.0.0"
+ mimic-response "^3.1.0"
dedent@^1.0.0:
- version "1.5.3"
- resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a"
- integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff"
+ integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-deep-is@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
- integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-
deepmerge@^4.2.2:
version "4.3.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-default-browser-id@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26"
- integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==
-
-default-browser@^5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf"
- integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==
+default-browser-id@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c"
+ integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==
dependencies:
- bundle-name "^4.1.0"
- default-browser-id "^5.0.0"
+ bplist-parser "^0.2.0"
+ untildify "^4.0.0"
+
+default-browser@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da"
+ integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==
+ dependencies:
+ bundle-name "^3.0.0"
+ default-browser-id "^3.0.0"
+ execa "^7.1.1"
+ titleize "^3.0.0"
defaults@^1.0.3:
version "1.0.4"
@@ -2280,24 +1936,20 @@ defaults@^1.0.3:
dependencies:
clone "^1.0.2"
-define-data-property@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
- integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
- dependencies:
- es-define-property "^1.0.0"
- es-errors "^1.3.0"
- gopd "^1.0.1"
+defer-to-connect@^2.0.0, defer-to-connect@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+ integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
define-lazy-prop@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
-del@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/del/-/del-7.1.0.tgz#0de0044d556b649ff05387f1fa7c885e155fd1b6"
- integrity sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==
+del@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-7.0.0.tgz#79db048bec96f83f344b46c1a66e35d9c09fe8ac"
+ integrity sha512-tQbV/4u5WVB8HMJr08pgw0b6nG4RGt/tj+7Numvq+zqcvUFeMaIWWOUFltiU+6go8BSO2/ogsB4EasDaj0y68Q==
dependencies:
globby "^13.1.2"
graceful-fs "^4.2.10"
@@ -2308,11 +1960,6 @@ del@^7.1.0:
rimraf "^3.0.2"
slash "^4.0.0"
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
@@ -2329,9 +1976,9 @@ destroy@1.2.0:
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
detect-libc@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700"
- integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d"
+ integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==
detect-newline@^3.0.0:
version "3.1.0"
@@ -2350,59 +1997,49 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
-discord-api-types@0.37.100:
- version "0.37.100"
- resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.100.tgz#5979892d39511bc7f1dbb9660d2d2cad698b3de7"
- integrity sha512-a8zvUI0GYYwDtScfRd/TtaNBDTXwP5DiDVX7K5OmE+DRT57gBqKnwtOC5Ol8z0mRW8KQfETIgiB8U0YZ9NXiCA==
+discord-api-types@0.37.50:
+ version "0.37.50"
+ resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.50.tgz#6059eb8c0b784ad8194655a8b8b7f540fcfac428"
+ integrity sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==
-discord-api-types@0.37.83:
- version "0.37.83"
- resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.83.tgz#a22a799729ceded8176ea747157837ddf4708b1f"
- integrity sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==
-
-discord-api-types@0.37.97:
- version "0.37.97"
- resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.97.tgz#d658573f726ad179261d538dbad4e7e8eca48d11"
- integrity sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==
-
-discord.js@^14.16.3:
- version "14.16.3"
- resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.16.3.tgz#9553366953c992469f47a55af2a11c2054a9babe"
- integrity sha512-EPCWE9OkA9DnFFNrO7Kl1WHHDYFXu3CNVFJg63bfU7hVtjZGyhShwZtSBImINQRWxWP2tgo2XI+QhdXx28r0aA==
+discord.js@^14.3.0:
+ version "14.13.0"
+ resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.13.0.tgz#e7a00bdba70adb9e266a06884ca1acaf9a0b5c20"
+ integrity sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==
dependencies:
- "@discordjs/builders" "^1.9.0"
- "@discordjs/collection" "1.5.3"
- "@discordjs/formatters" "^0.5.0"
- "@discordjs/rest" "^2.4.0"
- "@discordjs/util" "^1.1.1"
- "@discordjs/ws" "1.1.1"
- "@sapphire/snowflake" "3.5.3"
- discord-api-types "0.37.100"
- fast-deep-equal "3.1.3"
- lodash.snakecase "4.1.1"
- tslib "^2.6.3"
- undici "6.19.8"
+ "@discordjs/builders" "^1.6.5"
+ "@discordjs/collection" "^1.5.3"
+ "@discordjs/formatters" "^0.3.2"
+ "@discordjs/rest" "^2.0.1"
+ "@discordjs/util" "^1.0.1"
+ "@discordjs/ws" "^1.0.1"
+ "@sapphire/snowflake" "^3.5.1"
+ "@types/ws" "^8.5.5"
+ discord-api-types "0.37.50"
+ fast-deep-equal "^3.1.3"
+ lodash.snakecase "^4.1.1"
+ tslib "^2.6.1"
+ undici "5.22.1"
+ ws "^8.13.0"
-dot-prop@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-9.0.0.tgz#bae5982fe6dc6b8fddb92efef4f2ddff26779e92"
- integrity sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==
+dot-prop@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083"
+ integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==
dependencies:
- type-fest "^4.18.2"
+ is-obj "^2.0.0"
+
+dot-prop@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-7.2.0.tgz#468172a3529779814d21a779c1ba2f6d76609809"
+ integrity sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==
+ dependencies:
+ type-fest "^2.11.2"
dotenv@^16.0.0, dotenv@^16.0.3:
- version "16.4.5"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
- integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
-
-dunder-proto@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
- integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
- dependencies:
- call-bind-apply-helpers "^1.0.1"
- es-errors "^1.3.0"
- gopd "^1.2.0"
+ version "16.3.1"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e"
+ integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==
eastasianwidth@^0.2.0:
version "0.2.0"
@@ -2414,17 +2051,10 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
-ejs@^3.1.10:
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b"
- integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==
- dependencies:
- jake "^10.8.5"
-
-electron-to-chromium@^1.5.41:
- version "1.5.47"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.47.tgz#ef0751bc19b28be8ee44cd8405309de3bf3b20c7"
- integrity sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==
+electron-to-chromium@^1.4.535:
+ version "1.4.554"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz#04e09c2ee31dc0f1546174033809b54cc372740b"
+ integrity sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==
elegant-spinner@^1.0.1:
version "1.0.1"
@@ -2436,11 +2066,6 @@ emittery@^0.13.1:
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad"
integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==
-emoji-regex@^10.3.0:
- version "10.4.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4"
- integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==
-
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -2451,20 +2076,34 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-enabled@2.0.x:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2"
- integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==
-
encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-encodeurl@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
- integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
+encoding@^0.1.12:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+ integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+ dependencies:
+ iconv-lite "^0.6.2"
+
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+env-paths@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+ integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+err-code@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+ integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
error-ex@^1.3.1:
version "1.3.2"
@@ -2473,49 +2112,10 @@ error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
- integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
- dependencies:
- get-intrinsic "^1.2.4"
-
-es-define-property@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
- integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
-
-es-errors@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
- integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
-
-es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
- integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
- dependencies:
- es-errors "^1.3.0"
-
-es-set-tostringtag@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
- integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
- dependencies:
- es-errors "^1.3.0"
- get-intrinsic "^1.2.6"
- has-tostringtag "^1.0.2"
- hasown "^2.0.2"
-
escalade@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
- integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
-
-escalade@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
- integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
escape-goat@^4.0.0:
version "4.0.0"
@@ -2542,123 +2142,16 @@ escape-string-regexp@^2.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
-escape-string-regexp@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
-eslint-scope@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.1.0.tgz#70214a174d4cbffbc3e8a26911d8bf51b9ae9d30"
- integrity sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==
- dependencies:
- esrecurse "^4.3.0"
- estraverse "^5.2.0"
-
-eslint-visitor-keys@^3.4.3:
- version "3.4.3"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
- integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-
-eslint-visitor-keys@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz#1f785cc5e81eb7534523d85922248232077d2f8c"
- integrity sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==
-
-eslint@^9.13.0:
- version "9.13.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.13.0.tgz#7659014b7dda1ff876ecbd990f726e11c61596e6"
- integrity sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==
- dependencies:
- "@eslint-community/eslint-utils" "^4.2.0"
- "@eslint-community/regexpp" "^4.11.0"
- "@eslint/config-array" "^0.18.0"
- "@eslint/core" "^0.7.0"
- "@eslint/eslintrc" "^3.1.0"
- "@eslint/js" "9.13.0"
- "@eslint/plugin-kit" "^0.2.0"
- "@humanfs/node" "^0.16.5"
- "@humanwhocodes/module-importer" "^1.0.1"
- "@humanwhocodes/retry" "^0.3.1"
- "@types/estree" "^1.0.6"
- "@types/json-schema" "^7.0.15"
- ajv "^6.12.4"
- chalk "^4.0.0"
- cross-spawn "^7.0.2"
- debug "^4.3.2"
- escape-string-regexp "^4.0.0"
- eslint-scope "^8.1.0"
- eslint-visitor-keys "^4.1.0"
- espree "^10.2.0"
- esquery "^1.5.0"
- esutils "^2.0.2"
- fast-deep-equal "^3.1.3"
- file-entry-cache "^8.0.0"
- find-up "^5.0.0"
- glob-parent "^6.0.2"
- ignore "^5.2.0"
- imurmurhash "^0.1.4"
- is-glob "^4.0.0"
- json-stable-stringify-without-jsonify "^1.0.1"
- lodash.merge "^4.6.2"
- minimatch "^3.1.2"
- natural-compare "^1.4.0"
- optionator "^0.9.3"
- text-table "^0.2.0"
-
-espree@^10.0.1, espree@^10.2.0:
- version "10.2.0"
- resolved "https://registry.yarnpkg.com/espree/-/espree-10.2.0.tgz#f4bcead9e05b0615c968e85f83816bc386a45df6"
- integrity sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==
- dependencies:
- acorn "^8.12.0"
- acorn-jsx "^5.3.2"
- eslint-visitor-keys "^4.1.0"
-
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-esquery@^1.5.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
- integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
- dependencies:
- estraverse "^5.1.0"
-
-esrecurse@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
- integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
- dependencies:
- estraverse "^5.2.0"
-
-estraverse@^5.1.0, estraverse@^5.2.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
- integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
-
-esutils@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
- integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-
etag@~1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
-event-target-shim@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
- integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
-
-events@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
- integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-
execa@^5.0.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
@@ -2674,30 +2167,25 @@ execa@^5.0.0:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
-execa@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c"
- integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==
+execa@^7.1.1:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9"
+ integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==
dependencies:
cross-spawn "^7.0.3"
- get-stream "^8.0.1"
- human-signals "^5.0.0"
+ get-stream "^6.0.1"
+ human-signals "^4.3.0"
is-stream "^3.0.0"
merge-stream "^2.0.0"
npm-run-path "^5.1.0"
onetime "^6.0.0"
- signal-exit "^4.1.0"
+ signal-exit "^3.0.7"
strip-final-newline "^3.0.0"
-exif-parser@^0.1.12:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
- integrity sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==
-
-exit-hook@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-4.0.0.tgz#c1e16ebd03d3166f837b1502dac755bb5c460d58"
- integrity sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==
+exit-hook@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-3.2.0.tgz#7d86bc361a4d79278001b72a0509318a6f468f20"
+ integrity sha512-aIQN7Q04HGAV/I5BszisuHTZHXNoC23WtLkxdCLuYZMdWviRD0TMIt2bnUBi9MrHaF/hH8b3gwG9iaAUHKnJGA==
exit@^0.1.2:
version "0.1.2"
@@ -2716,36 +2204,36 @@ expect@^29.0.0, expect@^29.7.0:
jest-util "^29.7.0"
express@^4.18.2:
- version "4.21.1"
- resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281"
- integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==
+ version "4.18.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
+ integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
dependencies:
accepts "~1.3.8"
array-flatten "1.1.1"
- body-parser "1.20.3"
+ body-parser "1.20.1"
content-disposition "0.5.4"
content-type "~1.0.4"
- cookie "0.7.1"
+ cookie "0.5.0"
cookie-signature "1.0.6"
debug "2.6.9"
depd "2.0.0"
- encodeurl "~2.0.0"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
- finalhandler "1.3.1"
+ finalhandler "1.2.0"
fresh "0.5.2"
http-errors "2.0.0"
- merge-descriptors "1.0.3"
+ merge-descriptors "1.0.1"
methods "~1.1.2"
on-finished "2.4.1"
parseurl "~1.3.3"
- path-to-regexp "0.1.10"
+ path-to-regexp "0.1.7"
proxy-addr "~2.0.7"
- qs "6.13.0"
+ qs "6.11.0"
range-parser "~1.2.1"
safe-buffer "5.2.1"
- send "0.19.0"
- serve-static "1.16.2"
+ send "0.18.0"
+ serve-static "1.15.0"
setprototypeof "1.2.0"
statuses "2.0.1"
type-is "~1.6.18"
@@ -2761,15 +2249,15 @@ external-editor@^3.0.3, external-editor@^3.1.0:
iconv-lite "^0.4.24"
tmp "^0.0.33"
-fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-glob@^3.3.0, fast-glob@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
- integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+fast-glob@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
+ integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
@@ -2777,25 +2265,15 @@ fast-glob@^3.3.0, fast-glob@^3.3.2:
merge2 "^1.3.0"
micromatch "^4.0.4"
-fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
+fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
- integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
-
-fast-safe-stringify@^2.0.4, fast-safe-stringify@^2.0.7:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
- integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
-
fastq@^1.6.0:
- version "1.17.1"
- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
- integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
+ integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
dependencies:
reusify "^1.0.4"
@@ -2806,16 +2284,6 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
-fecha@^2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd"
- integrity sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==
-
-fecha@^4.2.0:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd"
- integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==
-
figures@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
@@ -2838,61 +2306,34 @@ figures@^3.0.0:
dependencies:
escape-string-regexp "^1.0.5"
-file-entry-cache@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
- integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
+figures@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f"
+ integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==
dependencies:
- flat-cache "^4.0.0"
+ escape-string-regexp "^5.0.0"
+ is-unicode-supported "^1.2.0"
-file-stream-rotator@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz#007019e735b262bb6c6f0197e58e5c87cb96cec3"
- integrity sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==
- dependencies:
- moment "^2.29.1"
-
-file-type@^16.0.0:
- version "16.5.4"
- resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd"
- integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==
- dependencies:
- readable-web-to-node-stream "^3.0.0"
- strtok3 "^6.2.4"
- token-types "^4.1.1"
-
-filelist@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
- integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
- dependencies:
- minimatch "^5.0.1"
-
-fill-range@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
- integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
to-regex-range "^5.0.1"
-finalhandler@1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019"
- integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==
+finalhandler@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+ integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
dependencies:
debug "2.6.9"
- encodeurl "~2.0.0"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "2.4.1"
parseurl "~1.3.3"
statuses "2.0.1"
unpipe "~1.0.0"
-find-up-simple@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/find-up-simple/-/find-up-simple-1.0.0.tgz#21d035fde9fdbd56c8f4d2f63f32fd93a1cfc368"
- integrity sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==
-
find-up@^4.0.0, find-up@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
@@ -2909,60 +2350,18 @@ find-up@^5.0.0:
locate-path "^6.0.0"
path-exists "^4.0.0"
-flat-cache@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
- integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
+find-up@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790"
+ integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==
dependencies:
- flatted "^3.2.9"
- keyv "^4.5.4"
+ locate-path "^7.1.0"
+ path-exists "^5.0.0"
-flatted@^3.2.9:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
- integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
-
-fn.name@1.x.x:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc"
- integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==
-
-follow-redirects@^1.15.6:
- version "1.15.9"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
- integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
-
-foreground-child@^3.1.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77"
- integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==
- dependencies:
- cross-spawn "^7.0.0"
- signal-exit "^4.0.1"
-
-form-data@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.2.tgz#83ad9ced7c03feaad97e293d6f6091011e1659c8"
- integrity sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.8"
- mime-types "^2.1.12"
-
-form-data@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c"
- integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.8"
- es-set-tostringtag "^2.1.0"
- mime-types "^2.1.12"
-
-formidable@^1.2.1:
- version "1.2.6"
- resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168"
- integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==
+form-data-encoder@^2.1.2:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5"
+ integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==
forwarded@0.2.0:
version "0.2.0"
@@ -2991,16 +2390,11 @@ fsevents@^2.3.2:
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-function-bind@^1.1.2:
+function-bind@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-fuse.js@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-7.0.0.tgz#6573c9fcd4c8268e403b4fc7d7131ffcf99a9eb2"
- integrity sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==
-
gauge@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395"
@@ -3016,6 +2410,20 @@ gauge@^3.0.0:
strip-ansi "^6.0.1"
wide-align "^1.1.2"
+gauge@^4.0.3:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
+ integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
+ dependencies:
+ aproba "^1.0.3 || ^2.0.0"
+ color-support "^1.1.3"
+ console-control-strings "^1.1.0"
+ has-unicode "^2.0.1"
+ signal-exit "^3.0.7"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+ wide-align "^1.1.5"
+
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -3026,69 +2434,33 @@ get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-east-asian-width@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389"
- integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==
-
-get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
- integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
+get-intrinsic@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
+ integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
dependencies:
- es-errors "^1.3.0"
- function-bind "^1.1.2"
+ function-bind "^1.1.1"
+ has "^1.0.3"
has-proto "^1.0.1"
has-symbols "^1.0.3"
- hasown "^2.0.0"
-
-get-intrinsic@^1.2.6:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
- integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
- dependencies:
- call-bind-apply-helpers "^1.0.2"
- es-define-property "^1.0.1"
- es-errors "^1.3.0"
- es-object-atoms "^1.1.1"
- function-bind "^1.1.2"
- get-proto "^1.0.1"
- gopd "^1.2.0"
- has-symbols "^1.1.0"
- hasown "^2.0.2"
- math-intrinsics "^1.1.0"
get-package-type@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
-get-proto@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
- integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+get-stream@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
dependencies:
- dunder-proto "^1.0.1"
- es-object-atoms "^1.0.0"
+ pump "^3.0.0"
-get-stream@^6.0.0:
+get-stream@^6.0.0, get-stream@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-get-stream@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2"
- integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==
-
-gifwrap@^0.10.1:
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.10.1.tgz#9ed46a5d51913b482d4221ce9c727080260b681e"
- integrity sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==
- dependencies:
- image-q "^4.0.0"
- omggif "^1.0.10"
-
github-url-from-git@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/github-url-from-git/-/github-url-from-git-1.5.0.tgz#f985fedcc0a9aa579dc88d7aff068d55cc6251a0"
@@ -3101,37 +2473,6 @@ glob-parent@^5.1.2:
dependencies:
is-glob "^4.0.1"
-glob-parent@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
- integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
- dependencies:
- is-glob "^4.0.3"
-
-glob@^10.3.10:
- version "10.4.5"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
- integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^3.1.2"
- minimatch "^9.0.4"
- minipass "^7.1.2"
- package-json-from-dist "^1.0.0"
- path-scurry "^1.11.1"
-
-glob@^11.0.0:
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.0.tgz#6031df0d7b65eaa1ccb9b29b5ced16cea658e77e"
- integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^4.0.1"
- minimatch "^10.0.0"
- minipass "^7.1.2"
- package-json-from-dist "^1.0.0"
- path-scurry "^2.0.0"
-
glob@^7.1.3, glob@^7.1.4:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
@@ -3144,23 +2485,29 @@ glob@^7.1.3, glob@^7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
-global-directory@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e"
- integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==
+glob@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
+ integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
dependencies:
- ini "4.1.1"
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^5.0.1"
+ once "^1.3.0"
+
+global-dirs@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485"
+ integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==
+ dependencies:
+ ini "2.0.0"
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-globals@^14.0.0:
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
- integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
-
globby@^13.1.2:
version "13.2.2"
resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592"
@@ -3172,33 +2519,50 @@ globby@^13.1.2:
merge2 "^1.4.1"
slash "^4.0.0"
-gopd@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
- integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+got@^11.8.5:
+ version "11.8.6"
+ resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
+ integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
dependencies:
- get-intrinsic "^1.1.3"
+ "@sindresorhus/is" "^4.0.0"
+ "@szmarczak/http-timer" "^4.0.5"
+ "@types/cacheable-request" "^6.0.1"
+ "@types/responselike" "^1.0.0"
+ cacheable-lookup "^5.0.3"
+ cacheable-request "^7.0.2"
+ decompress-response "^6.0.0"
+ http2-wrapper "^1.0.0-beta.5.2"
+ lowercase-keys "^2.0.0"
+ p-cancelable "^2.0.0"
+ responselike "^2.0.0"
-gopd@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
- integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+got@^12.1.0:
+ version "12.6.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549"
+ integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==
+ dependencies:
+ "@sindresorhus/is" "^5.2.0"
+ "@szmarczak/http-timer" "^5.0.1"
+ cacheable-lookup "^7.0.0"
+ cacheable-request "^10.2.8"
+ decompress-response "^6.0.0"
+ form-data-encoder "^2.1.2"
+ get-stream "^6.0.1"
+ http2-wrapper "^2.1.10"
+ lowercase-keys "^3.0.0"
+ p-cancelable "^3.0.0"
+ responselike "^3.0.0"
graceful-fs@4.2.10:
version "4.2.10"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
-graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.9:
+graceful-fs@^4.2.10, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-graphemer@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
- integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
-
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
@@ -3216,64 +2580,60 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-has-property-descriptors@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
- integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
- dependencies:
- es-define-property "^1.0.0"
-
has-proto@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
- integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+ integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
has-symbols@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-has-symbols@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
- integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
-
-has-tostringtag@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
- integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
- dependencies:
- has-symbols "^1.0.3"
-
has-unicode@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
-hasown@^2.0.0, hasown@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
- integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
- dependencies:
- function-bind "^1.1.2"
+has-yarn@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d"
+ integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==
+
+has@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6"
+ integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==
highlight.js@^10.7.1:
version "10.7.3"
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
-hosted-git-info@^7.0.0, hosted-git-info@^7.0.1:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17"
- integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==
+hosted-git-info@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
+ integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
dependencies:
- lru-cache "^10.0.1"
+ lru-cache "^6.0.0"
+
+hosted-git-info@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58"
+ integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==
+ dependencies:
+ lru-cache "^7.5.1"
html-escaper@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+ integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
http-errors@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
@@ -3285,6 +2645,31 @@ http-errors@2.0.0:
statuses "2.0.1"
toidentifier "1.0.1"
+http-proxy-agent@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+ integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
+ dependencies:
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
+
+http2-wrapper@^1.0.0-beta.5.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
+ integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
+ dependencies:
+ quick-lru "^5.1.1"
+ resolve-alpn "^1.0.0"
+
+http2-wrapper@^2.1.10:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3"
+ integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==
+ dependencies:
+ quick-lru "^5.1.1"
+ resolve-alpn "^1.2.0"
+
https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
@@ -3298,10 +2683,17 @@ human-signals@^2.1.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-human-signals@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
- integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==
+human-signals@^4.3.0:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
+ integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
+
+humanize-ms@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+ integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+ dependencies:
+ ms "^2.0.0"
iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
@@ -3310,31 +2702,31 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24:
dependencies:
safer-buffer ">= 2.1.2 < 3"
+iconv-lite@^0.6.2:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
ieee754@^1.1.13, ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-ignore-walk@^6.0.4:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd"
- integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==
+ignore-walk@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.3.tgz#0fcdb6decaccda35e308a7b0948645dd9523b7bb"
+ integrity sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==
dependencies:
minimatch "^9.0.0"
-ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1:
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
- integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
+ignore@^5.2.4:
+ version "5.2.4"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
+ integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
-image-q@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/image-q/-/image-q-4.0.0.tgz#31e075be7bae3c1f42a85c469b4732c358981776"
- integrity sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==
- dependencies:
- "@types/node" "16.9.1"
-
-import-fresh@^3.2.1, import-fresh@^3.3.0:
+import-fresh@^3.2.1:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
@@ -3342,10 +2734,15 @@ import-fresh@^3.2.1, import-fresh@^3.3.0:
parent-module "^1.0.0"
resolve-from "^4.0.0"
+import-lazy@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
+ integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
+
import-local@^3.0.2, import-local@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260"
- integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+ integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
dependencies:
pkg-dir "^4.2.0"
resolve-cwd "^3.0.0"
@@ -3360,15 +2757,20 @@ indent-string@^3.0.0:
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
integrity sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
indent-string@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5"
integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==
-index-to-position@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-0.1.2.tgz#e11bfe995ca4d8eddb1ec43274488f3c201a7f09"
- integrity sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==
+infer-owner@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
inflight@^1.0.4:
version "1.0.6"
@@ -3383,10 +2785,10 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-ini@4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1"
- integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==
+ini@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
+ integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
ini@^1.3.4, ini@~1.3.0:
version "1.3.8"
@@ -3440,15 +2842,19 @@ inquirer@^7.0.0:
strip-ansi "^6.0.0"
through "^2.3.6"
-inquirer@^9.2.15:
- version "9.3.7"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.3.7.tgz#0b562bf843812208844741c9aec9244c939b83d4"
- integrity sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==
+inquirer@^9.2.6:
+ version "9.2.10"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.2.10.tgz#495a846fd6722ffadba896bd9d93e1e5a7add5c7"
+ integrity sha512-tVVNFIXU8qNHoULiazz612GFl+yqNfjMTbLuViNJE/d860Qxrd3NMrse8dm40VUQLOQeULvaQF8lpAhvysjeyA==
dependencies:
- "@inquirer/figures" "^1.0.3"
+ "@ljharb/through" "^2.3.9"
ansi-escapes "^4.3.2"
+ chalk "^5.3.0"
+ cli-cursor "^3.1.0"
cli-width "^4.1.0"
external-editor "^3.1.0"
+ figures "^5.0.0"
+ lodash "^4.17.21"
mute-stream "1.0.0"
ora "^5.4.1"
run-async "^3.0.0"
@@ -3456,7 +2862,11 @@ inquirer@^9.2.15:
string-width "^4.2.3"
strip-ansi "^6.0.1"
wrap-ansi "^6.2.0"
- yoctocolors-cjs "^2.1.2"
+
+ip@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
+ integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
ipaddr.js@1.9.1:
version "1.9.1"
@@ -3468,17 +2878,24 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
-is-arrayish@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
- integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
-
-is-core-module@^2.13.0:
- version "2.15.1"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37"
- integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==
+is-ci@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
+ integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
dependencies:
- hasown "^2.0.2"
+ ci-info "^3.2.0"
+
+is-core-module@^2.13.0, is-core-module@^2.5.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db"
+ integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==
+ dependencies:
+ has "^1.0.3"
+
+is-docker@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
is-docker@^3.0.0:
version "3.0.0"
@@ -3512,18 +2929,13 @@ is-generator-fn@^2.0.0:
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
+is-glob@^4.0.1, is-glob@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
-is-in-ci@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-in-ci/-/is-in-ci-1.0.0.tgz#9a86bbda7e42c6129902e0574c54b018fbb6ab88"
- integrity sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==
-
is-inside-container@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
@@ -3531,13 +2943,13 @@ is-inside-container@^1.0.0:
dependencies:
is-docker "^3.0.0"
-is-installed-globally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-1.0.0.tgz#08952c43758c33d815692392f7f8437b9e436d5a"
- integrity sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==
+is-installed-globally@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
+ integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
dependencies:
- global-directory "^4.0.1"
- is-path-inside "^4.0.0"
+ global-dirs "^3.0.0"
+ is-path-inside "^3.0.2"
is-interactive@^1.0.0:
version "1.0.0"
@@ -3549,6 +2961,20 @@ is-interactive@^2.0.0:
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90"
integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==
+is-lambda@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
+ integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
+
+is-name-taken@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-name-taken/-/is-name-taken-2.0.0.tgz#c36e6515e07621dc48cd026b6b015a504942fae1"
+ integrity sha512-W+FUWF5g7ONVJTx3rldZeVizmPzrMMUdscpSQ96vyYerx+4b2NcqaujLJJDWruGzE0FjzGZO9RFIipOGxx/WIw==
+ dependencies:
+ all-package-names "^2.0.2"
+ package-name-conflict "^1.0.3"
+ validate-npm-package-name "^3.0.0"
+
is-npm@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261"
@@ -3559,6 +2985,11 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+is-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
is-observable@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
@@ -3571,18 +3002,16 @@ is-path-cwd@^3.0.0:
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-3.0.0.tgz#889b41e55c8588b1eb2a96a61d05740a674521c7"
integrity sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==
+is-path-inside@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
is-path-inside@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-4.0.0.tgz#805aeb62c47c1b12fc3fd13bfb3ed1e7430071db"
integrity sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==
-is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.0.1"
-
is-promise@^2.1.0:
version "2.2.2"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
@@ -3610,12 +3039,17 @@ is-stream@^3.0.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
+is-typedarray@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
is-unicode-supported@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
-is-unicode-supported@^1.3.0:
+is-unicode-supported@^1.1.0, is-unicode-supported@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714"
integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==
@@ -3625,12 +3059,17 @@ is-url-superb@^6.1.0:
resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-6.1.0.tgz#182f0d92b482412afeadfba8e6ea2c76680e3631"
integrity sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ==
-is-wsl@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2"
- integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
dependencies:
- is-inside-container "^1.0.0"
+ is-docker "^2.0.0"
+
+is-yarn-global@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb"
+ integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==
isarray@~1.0.0:
version "1.0.0"
@@ -3642,20 +3081,15 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
- integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
-
issue-regex@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/issue-regex/-/issue-regex-4.3.0.tgz#e73db1b475fa12b93ddc66c36ebd5a5f57d0d838"
- integrity sha512-7731a/t2llyrk8Hdwl1x3LkhIFGzxHQGpJA7Ur9cIRViakQF2y25Lwhx8Ziy1B068+kBYUmYPBzw5uo3DdWrdQ==
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/issue-regex/-/issue-regex-4.1.0.tgz#e2039123748a48e6711eed7a9eb392f2c17c9341"
+ integrity sha512-X3HBmm7+Th+l4/kMtqwcHHgELD0Lfl0Ina6S3+grr+mKmTxsrM84NAO1UuRPIxIbGLIl3TCEu45S1kdu21HYbQ==
istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
- integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
+ integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
istanbul-lib-instrument@^5.0.4:
version "5.2.1"
@@ -3669,13 +3103,13 @@ istanbul-lib-instrument@^5.0.4:
semver "^6.3.0"
istanbul-lib-instrument@^6.0.0:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765"
- integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf"
+ integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==
dependencies:
- "@babel/core" "^7.23.9"
- "@babel/parser" "^7.23.9"
- "@istanbuljs/schema" "^0.1.3"
+ "@babel/core" "^7.12.3"
+ "@babel/parser" "^7.14.7"
+ "@istanbuljs/schema" "^0.1.2"
istanbul-lib-coverage "^3.2.0"
semver "^7.5.4"
@@ -3698,39 +3132,13 @@ istanbul-lib-source-maps@^4.0.0:
source-map "^0.6.1"
istanbul-reports@^3.1.3:
- version "3.1.7"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b"
- integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a"
+ integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==
dependencies:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
-jackspeak@^3.1.2:
- version "3.4.3"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a"
- integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
- optionalDependencies:
- "@pkgjs/parseargs" "^0.11.0"
-
-jackspeak@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.2.tgz#11f9468a3730c6ff6f56823a820d7e3be9bef015"
- integrity sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
-
-jake@^10.8.5:
- version "10.9.2"
- resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f"
- integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==
- dependencies:
- async "^3.2.3"
- chalk "^4.0.2"
- filelist "^1.0.4"
- minimatch "^3.1.2"
-
jest-changed-files@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a"
@@ -3909,11 +3317,11 @@ jest-message-util@^29.7.0:
stack-utils "^2.0.3"
jest-mock-extended@^3.0.0:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/jest-mock-extended/-/jest-mock-extended-3.0.7.tgz#3d902dabad99d7831bbe5fccee85ab0371c22675"
- integrity sha512-7lsKdLFcW9B9l5NzZ66S/yTQ9k8rFtnwYdCNuRU/81fqDWicNDVhitTSPnrGmNeNm0xyw0JHexEOShrIKRCIRQ==
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/jest-mock-extended/-/jest-mock-extended-3.0.5.tgz#ebf208e363f4f1db603b81fb005c4055b7c1c8b7"
+ integrity sha512-/eHdaNPUAXe7f65gHH5urc8SbRVWjYxBqmCgax2uqOBJy8UUcCBMN1upj1eZ8y/i+IqpyEm4Kq0VKss/GCCTdw==
dependencies:
- ts-essentials "^10.0.0"
+ ts-essentials "^7.0.3"
jest-mock@^29.7.0:
version "29.7.0"
@@ -4038,7 +3446,19 @@ jest-snapshot@^29.7.0:
pretty-format "^29.7.0"
semver "^7.5.3"
-jest-util@^29.0.0, jest-util@^29.7.0:
+jest-util@^29.0.0:
+ version "29.6.2"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.2.tgz#8a052df8fff2eebe446769fd88814521a517664d"
+ integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==
+ dependencies:
+ "@jest/types" "^29.6.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ graceful-fs "^4.2.9"
+ picomatch "^2.2.3"
+
+jest-util@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc"
integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==
@@ -4096,44 +3516,6 @@ jest@^29.0.0:
import-local "^3.0.2"
jest-cli "^29.7.0"
-jimp@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/jimp/-/jimp-1.6.0.tgz#7c7e5133c8dc06706e1ed35e771c685af393bfd2"
- integrity sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==
- dependencies:
- "@jimp/core" "1.6.0"
- "@jimp/diff" "1.6.0"
- "@jimp/js-bmp" "1.6.0"
- "@jimp/js-gif" "1.6.0"
- "@jimp/js-jpeg" "1.6.0"
- "@jimp/js-png" "1.6.0"
- "@jimp/js-tiff" "1.6.0"
- "@jimp/plugin-blit" "1.6.0"
- "@jimp/plugin-blur" "1.6.0"
- "@jimp/plugin-circle" "1.6.0"
- "@jimp/plugin-color" "1.6.0"
- "@jimp/plugin-contain" "1.6.0"
- "@jimp/plugin-cover" "1.6.0"
- "@jimp/plugin-crop" "1.6.0"
- "@jimp/plugin-displace" "1.6.0"
- "@jimp/plugin-dither" "1.6.0"
- "@jimp/plugin-fisheye" "1.6.0"
- "@jimp/plugin-flip" "1.6.0"
- "@jimp/plugin-hash" "1.6.0"
- "@jimp/plugin-mask" "1.6.0"
- "@jimp/plugin-print" "1.6.0"
- "@jimp/plugin-quantize" "1.6.0"
- "@jimp/plugin-resize" "1.6.0"
- "@jimp/plugin-rotate" "1.6.0"
- "@jimp/plugin-threshold" "1.6.0"
- "@jimp/types" "1.6.0"
- "@jimp/utils" "1.6.0"
-
-jpeg-js@^0.4.4:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa"
- integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==
-
js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -4154,10 +3536,10 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
-jsesc@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
- integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
json-buffer@3.0.1:
version "3.0.1"
@@ -4169,68 +3551,35 @@ json-parse-even-better-errors@^2.3.0:
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
-json-schema-traverse@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-stable-stringify-without-jsonify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
- integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
-
json5@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
-keyv@^4.5.4:
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
- integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+keyv@^4.0.0, keyv@^4.5.3:
+ version "4.5.3"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25"
+ integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==
dependencies:
json-buffer "3.0.1"
-kind-of@^6.0.2:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
kleur@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-kuler@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
- integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
-
-ky@^1.2.0:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/ky/-/ky-1.7.2.tgz#b97d9b997ba51ff1e152f0815d3d27b86513eb1c"
- integrity sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==
-
-latest-version@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-9.0.0.tgz#e91ed216e7a4badc6f73b66c65adb46c58ec6ba1"
- integrity sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==
+latest-version@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da"
+ integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==
dependencies:
- package-json "^10.0.0"
+ package-json "^8.1.0"
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
-levn@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
- integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
- dependencies:
- prelude-ls "^1.2.1"
- type-check "~0.4.0"
-
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@@ -4304,17 +3653,24 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
-lodash.memoize@^4.1.2:
+locate-path@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a"
+ integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==
+ dependencies:
+ p-locate "^6.0.0"
+
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
+
+lodash.memoize@4.x:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
-lodash.merge@^4.6.2:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
- integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-
-lodash.snakecase@4.1.1:
+lodash.snakecase@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==
@@ -4344,13 +3700,13 @@ log-symbols@^4.1.0:
chalk "^4.1.0"
is-unicode-supported "^0.1.0"
-log-symbols@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-6.0.0.tgz#bb95e5f05322651cac30c0feb6404f9f2a8a9439"
- integrity sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==
+log-symbols@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93"
+ integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==
dependencies:
- chalk "^5.3.0"
- is-unicode-supported "^1.3.0"
+ chalk "^5.0.0"
+ is-unicode-supported "^1.1.0"
log-update@^2.3.0:
version "2.3.0"
@@ -4361,38 +3717,15 @@ log-update@^2.3.0:
cli-cursor "^2.0.0"
wrap-ansi "^3.0.1"
-logform@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/logform/-/logform-2.1.2.tgz#957155ebeb67a13164069825ce67ddb5bb2dd360"
- integrity sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==
- dependencies:
- colors "^1.2.1"
- fast-safe-stringify "^2.0.4"
- fecha "^2.3.3"
- ms "^2.1.1"
- triple-beam "^1.3.0"
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
-logform@^2.6.0, logform@^2.6.1:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.1.tgz#71403a7d8cae04b2b734147963236205db9b3df0"
- integrity sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==
- dependencies:
- "@colors/colors" "1.6.0"
- "@types/triple-beam" "^1.3.2"
- fecha "^4.2.0"
- ms "^2.1.1"
- safe-stable-stringify "^2.3.1"
- triple-beam "^1.3.0"
-
-lru-cache@^10.0.1, lru-cache@^10.2.0:
- version "10.4.3"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
- integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
-
-lru-cache@^11.0.0:
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.1.tgz#3a732fbfedb82c5ba7bca6564ad3f42afcb6e147"
- integrity sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==
+lowercase-keys@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2"
+ integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==
lru-cache@^5.1.1:
version "5.1.1"
@@ -4401,15 +3734,22 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
-luxon@~3.4.0:
- version "3.4.4"
- resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af"
- integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
-magic-bytes.js@^1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz#c41cf4bc2f802992b05e64962411c9dd44fdef92"
- integrity sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==
+lru-cache@^7.5.1:
+ version "7.18.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+ integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
+magic-bytes.js@^1.0.15:
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/magic-bytes.js/-/magic-bytes.js-1.0.15.tgz#3c9d2b7d45bb8432482646b5f74bbf6725274616"
+ integrity sha512-bpRmwbRHqongRhA+mXzbLWjVy7ylqmfMBYaQkSs6pac0z6hBTvsgrH0r4FBYd/UYVJBmS6Rp/O+oCCQVLzKV1g==
make-dir@^3.1.0:
version "3.1.0"
@@ -4425,11 +3765,33 @@ make-dir@^4.0.0:
dependencies:
semver "^7.5.3"
-make-error@^1.3.6:
+make-error@1.x:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+make-fetch-happen@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968"
+ integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==
+ dependencies:
+ agentkeepalive "^4.1.3"
+ cacache "^15.2.0"
+ http-cache-semantics "^4.1.0"
+ http-proxy-agent "^4.0.1"
+ https-proxy-agent "^5.0.0"
+ is-lambda "^1.0.1"
+ lru-cache "^6.0.0"
+ minipass "^3.1.3"
+ minipass-collect "^1.0.2"
+ minipass-fetch "^1.3.2"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.4"
+ negotiator "^0.6.2"
+ promise-retry "^2.0.1"
+ socks-proxy-agent "^6.0.0"
+ ssri "^8.0.0"
+
makeerror@1.0.12:
version "1.0.12"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
@@ -4437,25 +3799,20 @@ makeerror@1.0.12:
dependencies:
tmpl "1.0.5"
-math-intrinsics@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
- integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
-
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
-meow@^13.2.0:
- version "13.2.0"
- resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f"
- integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==
+meow@^12.0.1:
+ version "12.1.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.0.tgz#5f0f53c17ce6691302b49a4706d7832cd5dd5dd6"
+ integrity sha512-SvSqzS5ktjGoySdCwxQI16iO/ID1LtxM03QvJ4FF2H5cCtXLN7YbfKBCL9btqXSSuJ5TNG4UH6wvWtXZuvgvrw==
-merge-descriptors@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5"
- integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
merge-stream@^2.0.0:
version "2.0.0"
@@ -4467,17 +3824,17 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-methods@^1.1.2, methods@~1.1.2:
+methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
micromatch@^4.0.4:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
- integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
dependencies:
- braces "^3.0.3"
+ braces "^3.0.2"
picomatch "^2.3.1"
mime-db@1.52.0:
@@ -4485,7 +3842,7 @@ mime-db@1.52.0:
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -4497,16 +3854,6 @@ mime@1.6.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-mime@3:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7"
- integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
-
-mime@^2.4.4:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
- integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
-
mimic-fn@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
@@ -4522,31 +3869,29 @@ mimic-fn@^4.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
-mimic-function@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076"
- integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==
+mimic-response@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+ integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-mimic-response@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
- integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
-minimatch@9.0.5, minimatch@^9.0.0, minimatch@^9.0.4:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
- integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+mimic-response@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f"
+ integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==
+
+minimatch@9.0.3, minimatch@^9.0.0:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
dependencies:
brace-expansion "^2.0.1"
-minimatch@^10.0.0:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b"
- integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==
- dependencies:
- brace-expansion "^2.0.1"
-
-minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
+minimatch@^3.0.4, minimatch@^3.1.1:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -4565,7 +3910,46 @@ minimist@^1.2.0:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-minipass@^3.0.0:
+minipass-collect@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+ integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-fetch@^1.3.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6"
+ integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==
+ dependencies:
+ minipass "^3.1.0"
+ minipass-sized "^1.0.3"
+ minizlib "^2.0.0"
+ optionalDependencies:
+ encoding "^0.1.12"
+
+minipass-flush@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+ integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+ integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-sized@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
+ integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3:
version "3.3.6"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
@@ -4577,12 +3961,7 @@ minipass@^5.0.0:
resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
- integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-
-minizlib@^2.1.1:
+minizlib@^2.0.0, minizlib@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
@@ -4590,7 +3969,7 @@ minizlib@^2.1.1:
minipass "^3.0.0"
yallist "^4.0.0"
-mkdirp@^1.0.3:
+mkdirp@^1.0.3, mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
@@ -4600,17 +3979,17 @@ mkdirp@^2.1.3:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19"
integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==
-moment@^2.29.1:
- version "2.30.1"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
- integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
-
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
-ms@2.1.3, ms@^2.1.1, ms@^2.1.3:
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@2.1.3, ms@^2.0.0:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -4649,17 +4028,12 @@ mz@^2.4.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
-nan@^2.17.0:
- version "2.22.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.0.tgz#31bc433fc33213c97bad36404bb68063de604de3"
- integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==
-
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-negotiator@0.6.3:
+negotiator@0.6.3, negotiator@^0.6.2:
version "0.6.3"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
@@ -4671,6 +4045,11 @@ new-github-release-url@^2.0.0:
dependencies:
type-fest "^2.5.1"
+node-addon-api@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
+ integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
+
node-fetch@^2.6.7:
version "2.7.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
@@ -4678,15 +4057,31 @@ node-fetch@^2.6.7:
dependencies:
whatwg-url "^5.0.0"
+node-gyp@8.x:
+ version "8.4.1"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937"
+ integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==
+ dependencies:
+ env-paths "^2.2.0"
+ glob "^7.1.4"
+ graceful-fs "^4.2.6"
+ make-fetch-happen "^9.1.0"
+ nopt "^5.0.0"
+ npmlog "^6.0.0"
+ rimraf "^3.0.2"
+ semver "^7.3.5"
+ tar "^6.1.2"
+ which "^2.0.2"
+
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
-node-releases@^2.0.18:
- version "2.0.18"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
- integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
+node-releases@^2.0.13:
+ version "2.0.13"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
+ integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
nopt@^5.0.0:
version "5.0.0"
@@ -4695,76 +4090,88 @@ nopt@^5.0.0:
dependencies:
abbrev "1"
-normalize-package-data@^6.0.0:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506"
- integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==
+normalize-package-data@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e"
+ integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==
dependencies:
- hosted-git-info "^7.0.0"
- semver "^7.3.5"
- validate-npm-package-license "^3.0.4"
+ hosted-git-info "^4.0.1"
+ is-core-module "^2.5.0"
+ semver "^7.3.4"
+ validate-npm-package-license "^3.0.1"
normalize-path@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-np@^10.0.7:
- version "10.0.7"
- resolved "https://registry.yarnpkg.com/np/-/np-10.0.7.tgz#6f0dc3c7440c8ac95d55a2fa5d488c3d0848b7a5"
- integrity sha512-vIPKQwOYKpQU40PU5x/vLfN2haj8ObxMvR1QGt7EZnBPWdm4WEbHdumYAnMV7AeR9kACsMqcqAP37sAo5cW5jA==
+normalize-url@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+ integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
+normalize-url@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a"
+ integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==
+
+np@^8.0.4:
+ version "8.0.4"
+ resolved "https://registry.yarnpkg.com/np/-/np-8.0.4.tgz#67d68e95cf443ddff5b3aed3ceb0c2a03375be38"
+ integrity sha512-a4s1yESHcIwsrk/oaTekfbhb1R/2z2yyfVLX6Atl54w/9+QR01qeYyK3vMWgJ0UY+kYsGzQXausgvUX0pkmIMg==
dependencies:
- chalk "^5.3.0"
- chalk-template "^1.1.0"
- cosmiconfig "^8.3.6"
- del "^7.1.0"
+ chalk "^5.2.0"
+ cosmiconfig "^8.1.3"
+ del "^7.0.0"
escape-goat "^4.0.0"
escape-string-regexp "^5.0.0"
- execa "^8.0.1"
- exit-hook "^4.0.0"
+ execa "^7.1.1"
+ exit-hook "^3.2.0"
github-url-from-git "^1.5.0"
- hosted-git-info "^7.0.1"
- ignore-walk "^6.0.4"
+ has-yarn "^3.0.0"
+ hosted-git-info "^6.1.1"
+ ignore-walk "^6.0.3"
import-local "^3.1.0"
- inquirer "^9.2.15"
- is-installed-globally "^1.0.0"
+ inquirer "^9.2.6"
+ is-installed-globally "^0.4.0"
is-interactive "^2.0.0"
is-scoped "^3.0.0"
issue-regex "^4.1.0"
listr "^0.14.3"
listr-input "^0.2.1"
- log-symbols "^6.0.0"
- meow "^13.2.0"
+ log-symbols "^5.1.0"
+ meow "^12.0.1"
new-github-release-url "^2.0.0"
- npm-name "^8.0.0"
- onetime "^7.0.0"
- open "^10.0.4"
+ npm-name "^7.1.0"
+ onetime "^6.0.0"
+ open "^9.1.0"
+ ow "^1.1.1"
p-memoize "^7.1.1"
- p-timeout "^6.1.2"
+ p-timeout "^6.1.1"
path-exists "^5.0.0"
- pkg-dir "^8.0.0"
- read-package-up "^11.0.0"
- read-pkg "^9.0.1"
+ pkg-dir "^7.0.0"
+ read-pkg-up "^9.1.0"
rxjs "^7.8.1"
- semver "^7.6.0"
+ semver "^7.5.1"
symbol-observable "^4.0.0"
terminal-link "^3.0.0"
- update-notifier "^7.0.0"
+ update-notifier "^6.0.2"
-npm-name@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/npm-name/-/npm-name-8.0.0.tgz#05aeda9748706ffad66d9ecec8188b99d6e3908b"
- integrity sha512-DIuCGcKYYhASAZW6Xh/tiaGMko8IHOHe0n3zOA7SzTi0Yvy00x8L7sa5yNiZ75Ny58O/KeRtNouy8Ut6gPbKiw==
+npm-name@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/npm-name/-/npm-name-7.1.0.tgz#03fba1e9fe9d239de8c8c40abd6a37a90e9571f9"
+ integrity sha512-0Sxf+7tQUOkQ9HuYVSdvq7gZNAOPp1ZJjHiKzpJhsQw9m1YjNfARC0SxWuuUWefChsbvu+DWrwWFfGQWLHmLjg==
dependencies:
+ got "^11.8.5"
+ is-name-taken "^2.0.0"
is-scoped "^3.0.0"
is-url-superb "^6.1.0"
- ky "^1.2.0"
lodash.zip "^4.2.0"
org-regex "^1.0.0"
- p-map "^7.0.1"
- registry-auth-token "^5.0.2"
+ p-map "^5.5.0"
+ registry-auth-token "^4.2.2"
registry-url "^6.0.1"
- validate-npm-package-name "^5.0.0"
+ validate-npm-package-name "^3.0.0"
npm-run-path@^4.0.1:
version "4.0.1"
@@ -4774,9 +4181,9 @@ npm-run-path@^4.0.1:
path-key "^3.0.0"
npm-run-path@^5.1.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f"
- integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
+ integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
dependencies:
path-key "^4.0.0"
@@ -4790,6 +4197,16 @@ npmlog@^5.0.1:
gauge "^3.0.0"
set-blocking "^2.0.0"
+npmlog@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
+ integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
+ dependencies:
+ are-we-there-yet "^3.0.0"
+ console-control-strings "^1.1.0"
+ gauge "^4.0.3"
+ set-blocking "^2.0.0"
+
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
@@ -4800,20 +4217,10 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-object-hash@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
- integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
-
-object-inspect@^1.13.1:
- version "1.13.2"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
- integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
-
-omggif@^1.0.10:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19"
- integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==
+object-inspect@^1.9.0:
+ version "1.12.3"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
+ integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
on-finished@2.4.1:
version "2.4.1"
@@ -4822,20 +4229,13 @@ on-finished@2.4.1:
dependencies:
ee-first "1.1.1"
-once@^1.3.0, once@^1.3.1:
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
dependencies:
wrappy "1"
-one-time@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45"
- integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==
- dependencies:
- fn.name "1.x.x"
-
onetime@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
@@ -4857,34 +4257,15 @@ onetime@^6.0.0:
dependencies:
mimic-fn "^4.0.0"
-onetime@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60"
- integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==
+open@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6"
+ integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==
dependencies:
- mimic-function "^5.0.0"
-
-open@^10.0.4:
- version "10.1.0"
- resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1"
- integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==
- dependencies:
- default-browser "^5.2.1"
+ default-browser "^4.0.0"
define-lazy-prop "^3.0.0"
is-inside-container "^1.0.0"
- is-wsl "^3.1.0"
-
-optionator@^0.9.3:
- version "0.9.4"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
- integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
- dependencies:
- deep-is "^0.1.3"
- fast-levenshtein "^2.0.6"
- levn "^0.4.1"
- prelude-ls "^1.2.1"
- type-check "^0.4.0"
- word-wrap "^1.2.5"
+ is-wsl "^2.2.0"
ora@^5.4.1:
version "5.4.1"
@@ -4911,6 +4292,27 @@ os-tmpdir@~1.0.2:
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
+ow@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ow/-/ow-1.1.1.tgz#354a0f7df9d8d0cf961b29116daf972ef6be1632"
+ integrity sha512-sJBRCbS5vh1Jp9EOgwp1Ws3c16lJrUkJYlvWTYC03oyiYVwS/ns7lKRWow4w4XjDyTrA2pplQv4B2naWSR6yDA==
+ dependencies:
+ "@sindresorhus/is" "^5.3.0"
+ callsites "^4.0.0"
+ dot-prop "^7.2.0"
+ lodash.isequal "^4.5.0"
+ vali-date "^1.0.0"
+
+p-cancelable@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
+ integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
+
+p-cancelable@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050"
+ integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==
+
p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -4925,6 +4327,13 @@ p-limit@^3.0.2, p-limit@^3.1.0:
dependencies:
yocto-queue "^0.1.0"
+p-limit@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644"
+ integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==
+ dependencies:
+ yocto-queue "^1.0.0"
+
p-locate@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
@@ -4939,11 +4348,30 @@ p-locate@^5.0.0:
dependencies:
p-limit "^3.0.2"
+p-locate@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f"
+ integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==
+ dependencies:
+ p-limit "^4.0.0"
+
+p-lock@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-lock/-/p-lock-2.1.0.tgz#6f9dbc55d3aac5b0f75c8ec47f3a6f1b954135f8"
+ integrity sha512-pi2yT8gNhVrV4LgsUvJWQy58TXH1HG2+NXDby9+UrsS/9fXb0FJH9aCxbdHJ0EAQ6XC7ggSP6GAzuR5puDArUQ==
+
p-map@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
p-map@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/p-map/-/p-map-5.5.0.tgz#054ca8ca778dfa4cf3f8db6638ccb5b937266715"
@@ -4951,11 +4379,6 @@ p-map@^5.5.0:
dependencies:
aggregate-error "^4.0.0"
-p-map@^7.0.1:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.2.tgz#7c5119fada4755660f70199a66aa3fe2f85a1fe8"
- integrity sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==
-
p-memoize@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/p-memoize/-/p-memoize-7.1.1.tgz#53b1d0e6007288f7261cfa11a7603b84c9261bfa"
@@ -4964,35 +4387,30 @@ p-memoize@^7.1.1:
mimic-fn "^4.0.0"
type-fest "^3.0.0"
-p-timeout@^6.1.2:
- version "6.1.3"
- resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.3.tgz#9635160c4e10c7b4c3db45b7d5d26f911d9fd853"
- integrity sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==
+p-timeout@^6.1.1:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.2.tgz#22b8d8a78abf5e103030211c5fc6dee1166a6aa5"
+ integrity sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==
p-try@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-package-json-from-dist@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
- integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
-
-package-json@^10.0.0:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/package-json/-/package-json-10.0.1.tgz#e49ee07b8de63b638e7f1b5bb353733e428fe7d7"
- integrity sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==
+package-json@^8.1.0:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8"
+ integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==
dependencies:
- ky "^1.2.0"
- registry-auth-token "^5.0.2"
- registry-url "^6.0.1"
- semver "^7.6.0"
+ got "^12.1.0"
+ registry-auth-token "^5.0.1"
+ registry-url "^6.0.0"
+ semver "^7.3.7"
-pako@^1.0.11:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
- integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+package-name-conflict@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/package-name-conflict/-/package-name-conflict-1.0.3.tgz#5147d35e8ae7f93401f1b3f9f3763c070463f25c"
+ integrity sha512-DPBNWSUWC0wPofXeNThao0uP4a93J7r90UyhagmJS0QcacTTkorZwXYsOop70phn1hKdcf/2e9lJIhazS8bx5A==
parent-module@^1.0.0:
version "1.0.1"
@@ -5001,25 +4419,21 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-bmfont-ascii@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
- integrity sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==
-
-parse-bmfont-binary@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
- integrity sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==
-
-parse-bmfont-xml@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz#016b655da7aebe6da38c906aca16bf0415773767"
- integrity sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==
+parse-json-object@^1.0.5:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/parse-json-object/-/parse-json-object-1.1.0.tgz#eef60211cec368259723d8586ecec7252f8fcdb2"
+ integrity sha512-4w5s6uJY1tW9REY8UwUOyaZKSKsrbQrMEzlV/Le/g5t4iMWuuyK83pZZ0OZimSOL9iyv2ORvRSgz71Ekd7iD3g==
dependencies:
- xml-parse-from-string "^1.0.0"
- xml2js "^0.5.0"
+ types-json "^1.0.6"
-parse-json@^5.2.0:
+parse-json-object@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/parse-json-object/-/parse-json-object-2.0.1.tgz#a441bd8c36d2c33a69516286e7e4138a23607ee0"
+ integrity sha512-/oF7PUUBjCqHmMEE6xIQeX5ZokQ9+miudACzPt4KBU2qi6CxZYPdisPXx4ad7wpZJYi2ZpcW2PacLTU3De3ebw==
+ dependencies:
+ types-json "^1.2.0"
+
+parse-json@^5.0.0, parse-json@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
@@ -5029,15 +4443,6 @@ parse-json@^5.2.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
-parse-json@^8.0.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.1.0.tgz#91cdc7728004e955af9cb734de5684733b24a717"
- integrity sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==
- dependencies:
- "@babel/code-frame" "^7.22.13"
- index-to-position "^0.1.2"
- type-fest "^4.7.1"
-
parse5-htmlparser2-tree-adapter@^6.0.0:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
@@ -5090,46 +4495,20 @@ path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-path-scurry@^1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
- integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
- dependencies:
- lru-cache "^10.2.0"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
-path-scurry@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580"
- integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==
- dependencies:
- lru-cache "^11.0.0"
- minipass "^7.1.2"
-
-path-to-regexp@0.1.10:
- version "0.1.10"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b"
- integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
-peek-readable@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72"
- integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==
-
picocolors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1"
- integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
-
-picocolors@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
- integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
version "2.3.1"
@@ -5141,13 +4520,6 @@ pirates@^4.0.4:
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
-pixelmatch@^5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-5.3.0.tgz#5e5321a7abedfb7962d60dbf345deda87cb9560a"
- integrity sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==
- dependencies:
- pngjs "^6.0.0"
-
pkg-dir@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
@@ -5155,27 +4527,12 @@ pkg-dir@^4.2.0:
dependencies:
find-up "^4.0.0"
-pkg-dir@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-8.0.0.tgz#8f3de8ba83d46b72a05c80bfd4e579f060fa91e2"
- integrity sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==
- dependencies:
- find-up-simple "^1.0.0"
-
-pngjs@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821"
- integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==
-
-pngjs@^7.0.0:
+pkg-dir@^7.0.0:
version "7.0.0"
- resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-7.0.0.tgz#a8b7446020ebbc6ac739db6c5415a65d17090e26"
- integrity sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==
-
-prelude-ls@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
- integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11"
+ integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==
+ dependencies:
+ find-up "^6.3.0"
pretty-format@^29.0.0, pretty-format@^29.7.0:
version "29.7.0"
@@ -5191,10 +4548,23 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-process@^0.11.10:
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
- integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+progress@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
+
+promise-retry@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+ integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+ dependencies:
+ err-code "^2.0.2"
+ retry "^0.12.0"
prompts@^2.0.1:
version "2.4.2"
@@ -5217,15 +4587,13 @@ proxy-addr@~2.0.7:
forwarded "0.2.0"
ipaddr.js "1.9.1"
-proxy-from-env@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
- integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
-
-punycode@^2.1.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
- integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
pupa@^3.1.0:
version "3.1.0"
@@ -5235,27 +4603,42 @@ pupa@^3.1.0:
escape-goat "^4.0.0"
pure-rand@^6.0.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2"
- integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7"
+ integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==
-qs@6.13.0, qs@^6.9.1:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906"
- integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==
+qs@6.11.0:
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
+ integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
dependencies:
- side-channel "^1.0.6"
+ side-channel "^1.0.4"
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+quick-lru@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+ integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+raw-body@2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
+ integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
raw-body@2.5.2:
version "2.5.2"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
@@ -5277,29 +4660,41 @@ rc@1.2.8:
strip-json-comments "~2.0.1"
react-is@^18.0.0:
- version "18.3.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
- integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+ integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
-read-package-up@^11.0.0:
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/read-package-up/-/read-package-up-11.0.0.tgz#71fb879fdaac0e16891e6e666df22de24a48d5ba"
- integrity sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==
- dependencies:
- find-up-simple "^1.0.0"
- read-pkg "^9.0.0"
- type-fest "^4.6.0"
+read-file-safe@^1.0.5:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/read-file-safe/-/read-file-safe-1.0.10.tgz#9ac9118f12cb122614612211f90dad9daf732e39"
+ integrity sha512-qW25fd2uMX3dV6Ui/R0jYK1MhTpjx8FO/VHaHTXzwWsGnkNwLRcqYfCXd9qDM+NZ273DPUvP2RaimYuLSu1K/g==
-read-pkg@^9.0.0, read-pkg@^9.0.1:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b"
- integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==
+read-json-safe@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/read-json-safe/-/read-json-safe-1.0.5.tgz#c459443b8e6eb3a2672cf68ddc81d2f4ef95c8d7"
+ integrity sha512-SJyNY/U9+vW35FPus22Qvv1oilnR7PCfN2E70uKQEGaJS313A5/cz9Yhv7ZtWzZ+XIwrtEPxXf10BOyYemHehA==
dependencies:
- "@types/normalize-package-data" "^2.4.3"
- normalize-package-data "^6.0.0"
- parse-json "^8.0.0"
- type-fest "^4.6.0"
- unicorn-magic "^0.1.0"
+ parse-json-object "^1.0.5"
+ read-file-safe "^1.0.5"
+
+read-pkg-up@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-9.1.0.tgz#38ca48e0bc6c6b260464b14aad9bcd4e5b1fbdc3"
+ integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==
+ dependencies:
+ find-up "^6.3.0"
+ read-pkg "^7.1.0"
+ type-fest "^2.5.0"
+
+read-pkg@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-7.1.0.tgz#438b4caed1ad656ba359b3e00fd094f3c427a43e"
+ integrity sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.1"
+ normalize-package-data "^3.0.2"
+ parse-json "^5.2.0"
+ type-fest "^2.0.0"
readable-stream@2.3.7:
version "2.3.7"
@@ -5314,19 +4709,6 @@ readable-stream@2.3.7:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
-readable-stream@^2.3.6:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
- integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
readable-stream@^3.4.0, readable-stream@^3.6.0:
version "3.6.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
@@ -5336,37 +4718,31 @@ readable-stream@^3.4.0, readable-stream@^3.6.0:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
-readable-stream@^4.5.2:
- version "4.5.2"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09"
- integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==
+reflect-metadata@^0.1.13:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
+ integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
+
+regenerator-runtime@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
+ integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
+
+registry-auth-token@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac"
+ integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==
dependencies:
- abort-controller "^3.0.0"
- buffer "^6.0.3"
- events "^3.3.0"
- process "^0.11.10"
- string_decoder "^1.3.0"
+ rc "1.2.8"
-readable-web-to-node-stream@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb"
- integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==
- dependencies:
- readable-stream "^3.6.0"
-
-reflect-metadata@^0.2.1:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b"
- integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==
-
-registry-auth-token@^5.0.2:
+registry-auth-token@^5.0.1:
version "5.0.2"
resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756"
integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==
dependencies:
"@pnpm/npm-conf" "^2.1.0"
-registry-url@^6.0.1:
+registry-url@^6.0.0, registry-url@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58"
integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==
@@ -5378,6 +4754,11 @@ require-directory@^2.1.1:
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+resolve-alpn@^1.0.0, resolve-alpn@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+ integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
resolve-cwd@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
@@ -5409,6 +4790,20 @@ resolve@^1.20.0:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
+responselike@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
+ integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
+ dependencies:
+ lowercase-keys "^2.0.0"
+
+responselike@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626"
+ integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==
+ dependencies:
+ lowercase-keys "^3.0.0"
+
restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -5425,6 +4820,11 @@ restore-cursor@^3.1.0:
onetime "^5.1.0"
signal-exit "^3.0.2"
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
@@ -5437,10 +4837,12 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
-run-applescript@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb"
- integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==
+run-applescript@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c"
+ integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==
+ dependencies:
+ execa "^5.0.0"
run-async@^2.2.0, run-async@^2.4.0:
version "2.4.1"
@@ -5483,40 +4885,39 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-safe-stable-stringify@^2.3.1:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd"
- integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==
-
-"safer-buffer@>= 2.1.2 < 3":
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-sax@>=0.6.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
- integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
-
scoped-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-3.0.0.tgz#cd7ede7d942f2ae90da53272102ff2d73129c46f"
integrity sha512-yEsN6TuxZhZ1Tl9iB81frTNS292m0I/IG7+w8lTvfcJQP2x3vnpOoevjBoE3Np5A6KnZM2+RtVenihj9t6NiYg==
+semver-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5"
+ integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==
+ dependencies:
+ semver "^7.3.5"
+
semver@^6.0.0, semver@^6.3.0, semver@^6.3.1:
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3:
- version "7.6.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
- integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1, semver@^7.5.3, semver@^7.5.4:
+ version "7.5.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+ integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+ dependencies:
+ lru-cache "^6.0.0"
-send@0.19.0:
- version "0.19.0"
- resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
- integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==
+send@0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+ integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
dependencies:
debug "2.6.9"
depd "2.0.0"
@@ -5532,33 +4933,21 @@ send@0.19.0:
range-parser "~1.2.1"
statuses "2.0.1"
-serve-static@1.16.2:
- version "1.16.2"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296"
- integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==
+serve-static@1.15.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+ integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
dependencies:
- encodeurl "~2.0.0"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
parseurl "~1.3.3"
- send "0.19.0"
+ send "0.18.0"
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
-set-function-length@^1.2.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
- integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
- dependencies:
- define-data-property "^1.1.4"
- es-errors "^1.3.0"
- function-bind "^1.1.2"
- get-intrinsic "^1.2.4"
- gopd "^1.0.1"
- has-property-descriptors "^1.0.2"
-
setprototypeof@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
@@ -5572,13 +4961,6 @@ sha.js@^2.4.11:
inherits "^2.0.1"
safe-buffer "^5.0.1"
-shallow-clone@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
- integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
- dependencies:
- kind-of "^6.0.2"
-
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -5591,52 +4973,20 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-side-channel@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
- integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
+side-channel@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
dependencies:
- call-bind "^1.0.7"
- es-errors "^1.3.0"
- get-intrinsic "^1.2.4"
- object-inspect "^1.13.1"
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-signal-exit@^4.0.1, signal-exit@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
-simple-concat@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
- integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
-
-simple-get@^3.0.3:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55"
- integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==
- dependencies:
- decompress-response "^4.2.0"
- once "^1.3.1"
- simple-concat "^1.0.0"
-
-simple-swizzle@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
- integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
- dependencies:
- is-arrayish "^0.3.1"
-
-simple-xml-to-json@^1.2.2:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/simple-xml-to-json/-/simple-xml-to-json-1.2.3.tgz#79c7188ff99ae209a267b70ee0db06b0e4597787"
- integrity sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA==
-
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
@@ -5657,6 +5007,28 @@ slice-ansi@0.0.4:
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
integrity sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==
+smart-buffer@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+ integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+socks-proxy-agent@^6.0.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce"
+ integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==
+ dependencies:
+ agent-base "^6.0.2"
+ debug "^4.3.3"
+ socks "^2.6.2"
+
+socks@^2.6.2:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
+ integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
+ dependencies:
+ ip "^2.0.0"
+ smart-buffer "^4.2.0"
+
source-map-support@0.5.13:
version "0.5.13"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
@@ -5679,9 +5051,9 @@ spdx-correct@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-exceptions@^2.1.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66"
- integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
spdx-expression-parse@^3.0.0:
version "3.0.1"
@@ -5692,24 +5064,37 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
- version "3.0.20"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89"
- integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5"
+ integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+sqlite3@^5.1.6:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.6.tgz#1d4fbc90fe4fbd51e952e0a90fd8f6c2b9098e97"
+ integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==
+ dependencies:
+ "@mapbox/node-pre-gyp" "^1.0.0"
+ node-addon-api "^4.2.0"
+ tar "^6.1.11"
+ optionalDependencies:
+ node-gyp "8.x"
+
sqlstring@2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40"
integrity sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==
-stack-trace@0.0.x:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
- integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==
+ssri@^8.0.0, ssri@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af"
+ integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==
+ dependencies:
+ minipass "^3.1.1"
stack-utils@^2.0.3:
version "2.0.6"
@@ -5731,15 +5116,6 @@ string-length@^4.0.1:
char-regex "^1.0.2"
strip-ansi "^6.0.0"
-"string-width-cjs@npm:string-width@^4.2.0":
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@@ -5775,16 +5151,7 @@ string-width@^5.0.1, string-width@^5.1.2:
emoji-regex "^9.2.2"
strip-ansi "^7.0.1"
-string-width@^7.0.0, string-width@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc"
- integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==
- dependencies:
- emoji-regex "^10.3.0"
- get-east-asian-width "^1.0.0"
- strip-ansi "^7.1.0"
-
-string_decoder@^1.1.1, string_decoder@^1.3.0:
+string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
@@ -5798,13 +5165,6 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -5833,7 +5193,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
-strip-ansi@^7.0.1, strip-ansi@^7.1.0:
+strip-ansi@^7.0.1:
version "7.1.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
@@ -5865,36 +5225,6 @@ strip-json-comments@~2.0.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
-strtok3@^6.2.4:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0"
- integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==
- dependencies:
- "@tokenizer/token" "^0.3.0"
- peek-readable "^4.1.0"
-
-stubborn-fs@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/stubborn-fs/-/stubborn-fs-1.2.5.tgz#e5e244223166921ddf66ed5e062b6b3bf285bfd2"
- integrity sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==
-
-superagent@5.2.2:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/superagent/-/superagent-5.2.2.tgz#6ff726c5642795b2c27009e92687c8e69a6bb07d"
- integrity sha512-pMWBUnIllK4ZTw7p/UaobiQPwAO5w/1NRRTDpV0FTVNmECztsxKspj3ZWEordVEaqpZtmOQJJna4yTLyC/q7PQ==
- dependencies:
- component-emitter "^1.3.0"
- cookiejar "^2.1.2"
- debug "^4.1.1"
- fast-safe-stringify "^2.0.7"
- form-data "^3.0.0"
- formidable "^1.2.1"
- methods "^1.1.2"
- mime "^2.4.4"
- qs "^6.9.1"
- readable-stream "^3.4.0"
- semver "^6.3.0"
-
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -5944,10 +5274,10 @@ symbol-observable@^4.0.0:
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205"
integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==
-tar@^6.1.11:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
- integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
+tar@^6.0.2, tar@^6.1.11, tar@^6.1.2:
+ version "6.1.15"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69"
+ integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==
dependencies:
chownr "^2.0.0"
fs-minipass "^2.0.0"
@@ -5973,16 +5303,6 @@ test-exclude@^6.0.0:
glob "^7.1.4"
minimatch "^3.0.4"
-text-hex@1.0.x:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"
- integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==
-
-text-table@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
- integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
-
thenify-all@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
@@ -6002,10 +5322,10 @@ through@^2.3.6, through@^2.3.8:
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
-tinycolor2@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e"
- integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==
+titleize@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
+ integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==
tmp@^0.0.33:
version "0.0.33"
@@ -6019,6 +5339,11 @@ tmpl@1.0.5:
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -6031,70 +5356,44 @@ toidentifier@1.0.1:
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
-token-types@^4.1.1:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753"
- integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==
- dependencies:
- "@tokenizer/token" "^0.3.0"
- ieee754 "^1.2.1"
-
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-triple-beam@^1.2.0, triple-beam@^1.3.0, triple-beam@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984"
- integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==
-
-ts-api-utils@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
- integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
-
-ts-essentials@^10.0.0:
- version "10.0.2"
- resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-10.0.2.tgz#8c7aa74ed79580ffe49df5ca28d06cc6bea0ff3c"
- integrity sha512-Xwag0TULqriaugXqVdDiGZ5wuZpqABZlpwQ2Ho4GDyiu/R2Xjkp/9+zcFxL7uzeLl/QCPrflnvpVYyS3ouT7Zw==
+ts-essentials@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38"
+ integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==
ts-jest@^29.0.0:
- version "29.2.5"
- resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63"
- integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==
+ version "29.1.1"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b"
+ integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==
dependencies:
- bs-logger "^0.2.6"
- ejs "^3.1.10"
- fast-json-stable-stringify "^2.1.0"
+ bs-logger "0.x"
+ fast-json-stable-stringify "2.x"
jest-util "^29.0.0"
json5 "^2.2.3"
- lodash.memoize "^4.1.2"
- make-error "^1.3.6"
- semver "^7.6.3"
- yargs-parser "^21.1.1"
+ lodash.memoize "4.x"
+ make-error "1.x"
+ semver "^7.5.3"
+ yargs-parser "^21.0.1"
-ts-mixer@^6.0.4:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.4.tgz#1da39ceabc09d947a82140d9f09db0f84919ca28"
- integrity sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==
+ts-mixer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6"
+ integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==
tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.1.0, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.6.3:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b"
- integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==
-
-type-check@^0.4.0, type-check@~0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
- integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
- dependencies:
- prelude-ls "^1.2.1"
+tslib@^2.1.0, tslib@^2.5.0, tslib@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+ integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
type-detect@4.0.8:
version "4.0.8"
@@ -6106,12 +5405,12 @@ type-fest@^0.21.3:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
-type-fest@^1.0.2:
+type-fest@^1.0.1, type-fest@^1.0.2:
version "1.4.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
-type-fest@^2.5.1:
+type-fest@^2.0.0, type-fest@^2.11.2, type-fest@^2.13.0, type-fest@^2.5.0, type-fest@^2.5.1:
version "2.19.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
@@ -6121,16 +5420,6 @@ type-fest@^3.0.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706"
integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==
-type-fest@^4.18.2:
- version "4.40.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.40.0.tgz#62bc09caccb99a75e1ad6b9b4653e8805e5e1eee"
- integrity sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==
-
-type-fest@^4.21.0, type-fest@^4.6.0, type-fest@^4.7.1:
- version "4.26.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.1.tgz#a4a17fa314f976dd3e6d6675ef6c775c16d7955e"
- integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==
-
type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
@@ -6139,99 +5428,135 @@ type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
-typeorm@0.3.20:
- version "0.3.20"
- resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.20.tgz#4b61d737c6fed4e9f63006f88d58a5e54816b7ab"
- integrity sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typeorm@0.3.17:
+ version "0.3.17"
+ resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.17.tgz#a73c121a52e4fbe419b596b244777be4e4b57949"
+ integrity sha512-UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig==
dependencies:
"@sqltools/formatter" "^1.2.5"
app-root-path "^3.1.0"
buffer "^6.0.3"
chalk "^4.1.2"
cli-highlight "^2.1.11"
- dayjs "^1.11.9"
+ date-fns "^2.29.3"
debug "^4.3.4"
dotenv "^16.0.3"
- glob "^10.3.10"
+ glob "^8.1.0"
mkdirp "^2.1.3"
- reflect-metadata "^0.2.1"
+ reflect-metadata "^0.1.13"
sha.js "^2.4.11"
tslib "^2.5.0"
uuid "^9.0.0"
yargs "^17.6.2"
-typescript-eslint@^8.11.0:
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.11.0.tgz#74a0551972d675b4141672cec3acc5139b7399c0"
- integrity sha512-cBRGnW3FSlxaYwU8KfAewxFK5uzeOAp0l2KebIlPDOT5olVi65KDG/yjBooPBG0kGW/HLkoz1c/iuBFehcS3IA==
+types-eslintrc@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/types-eslintrc/-/types-eslintrc-1.0.3.tgz#b277d301caca6c330477cbaa67bf6f79ac3d6fee"
+ integrity sha512-zKTR6aKHEudQpl+JoZjS3qh0B5IzSpQK/BCpYBECujcnKtqL87DJJ1sJKe5B8k/y8/UJ5sukq42QDvlaJyCO2w==
dependencies:
- "@typescript-eslint/eslint-plugin" "8.11.0"
- "@typescript-eslint/parser" "8.11.0"
- "@typescript-eslint/utils" "8.11.0"
+ types-json "^1.2.2"
+
+types-json@^1.0.6, types-json@^1.2.0, types-json@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/types-json/-/types-json-1.2.2.tgz#91ebe6de59e741ab38a98b071708a29494cedfe6"
+ integrity sha512-VfVLISHypS7ayIHvhacOESOTib4Sm4mAhnsgR8fzQdGp89YoBwMqvGmqENjtYehUQzgclT+7NafpEXkK/MHKwA==
+
+types-pkg-json@^1.1.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/types-pkg-json/-/types-pkg-json-1.2.1.tgz#890fe4f231000a721299831ef3e17a489b1e635e"
+ integrity sha512-Wj75lCkPwfj1BhmaJxMPpTQj9YGpihjs3WICigt1IjTAswr7zPXP0iJYPZjU0Rw/IriODhMJjAImkCIxt9KeuQ==
+ dependencies:
+ types-eslintrc "^1.0.3"
+ types-json "^1.2.2"
typescript@^5.0.0:
- version "5.6.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b"
- integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
+ integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
-undici-types@~6.19.8:
- version "6.19.8"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
- integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
+undici-types@~5.25.1:
+ version "5.25.3"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.25.3.tgz#e044115914c85f0bcbb229f346ab739f064998c3"
+ integrity sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==
-undici@6.19.8:
- version "6.19.8"
- resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.8.tgz#002d7c8a28f8cc3a44ff33c3d4be4d85e15d40e1"
- integrity sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-unicorn-magic@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4"
- integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==
+undici@5.22.1, undici@^5.26.2:
+ version "5.27.2"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-5.27.2.tgz#a270c563aea5b46cc0df2550523638c95c5d4411"
+ integrity sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==
+ dependencies:
+ "@fastify/busboy" "^2.0.0"
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unique-string@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a"
+ integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==
+ dependencies:
+ crypto-random-string "^4.0.0"
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-update-browserslist-db@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5"
- integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==
- dependencies:
- escalade "^3.2.0"
- picocolors "^1.1.0"
+untildify@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
+ integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
-update-notifier@^7.0.0:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-7.3.1.tgz#49af1ad6acfa0ea01c0d0f3c04047c154ead7096"
- integrity sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==
+update-browserslist-db@^1.0.13:
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
+ integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
dependencies:
- boxen "^8.0.1"
- chalk "^5.3.0"
- configstore "^7.0.0"
- is-in-ci "^1.0.0"
- is-installed-globally "^1.0.0"
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
+update-notifier@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60"
+ integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==
+ dependencies:
+ boxen "^7.0.0"
+ chalk "^5.0.1"
+ configstore "^6.0.0"
+ has-yarn "^3.0.0"
+ import-lazy "^4.0.0"
+ is-ci "^3.0.1"
+ is-installed-globally "^0.4.0"
is-npm "^6.0.0"
- latest-version "^9.0.0"
+ is-yarn-global "^0.4.0"
+ latest-version "^7.0.0"
pupa "^3.1.0"
- semver "^7.6.3"
+ semver "^7.3.7"
+ semver-diff "^4.0.0"
xdg-basedir "^5.1.0"
-uri-js@^4.2.2:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
- integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
- dependencies:
- punycode "^2.1.0"
-
-utif2@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/utif2/-/utif2-4.1.0.tgz#e768d37bd619b995d56d9780b5d2b4611a3d932b"
- integrity sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==
- dependencies:
- pako "^1.0.11"
-
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -6243,20 +5568,25 @@ utils-merge@1.0.1:
integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
uuid@^9.0.0:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
- integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
+ integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
v8-to-istanbul@^9.0.1:
- version "9.3.0"
- resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175"
- integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==
+ version "9.1.3"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz#ea456604101cd18005ac2cae3cdd1aa058a6306b"
+ integrity sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==
dependencies:
"@jridgewell/trace-mapping" "^0.3.12"
"@types/istanbul-lib-coverage" "^2.0.1"
convert-source-map "^2.0.0"
-validate-npm-package-license@^3.0.4:
+vali-date@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6"
+ integrity sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==
+
+validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
@@ -6264,10 +5594,12 @@ validate-npm-package-license@^3.0.4:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
-validate-npm-package-name@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8"
- integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==
+validate-npm-package-name@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e"
+ integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==
+ dependencies:
+ builtins "^1.0.3"
vary@~1.1.2:
version "1.1.2"
@@ -6301,98 +5633,26 @@ whatwg-url@^5.0.0:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
-when-exit@^2.1.1:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/when-exit/-/when-exit-2.1.3.tgz#5831cdbed8ad4984645da98c4a00d4ee3a3757e7"
- integrity sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==
-
-which@^2.0.1:
+which@^2.0.1, which@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies:
isexe "^2.0.0"
-wide-align@^1.1.2:
+wide-align@^1.1.2, wide-align@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
dependencies:
string-width "^1.0.2 || 2 || 3 || 4"
-widest-line@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-5.0.0.tgz#b74826a1e480783345f0cd9061b49753c9da70d0"
- integrity sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==
+widest-line@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2"
+ integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==
dependencies:
- string-width "^7.0.0"
-
-winston-daily-rotate-file@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz#8cd94800025490e47c00ec892b655a5821f4266d"
- integrity sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==
- dependencies:
- file-stream-rotator "^0.6.1"
- object-hash "^3.0.0"
- triple-beam "^1.4.1"
- winston-transport "^4.7.0"
-
-winston-discord-transport@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/winston-discord-transport/-/winston-discord-transport-1.3.0.tgz#5fcef49a1a4838183921a44d6df029af55a5c8d0"
- integrity sha512-oyns2ea9cQie+qBTTgfZq17pTRie41tEIE38s4ZR5ifSp4E0n8hAD7XBoLXxV0xJwLjm8IPBKzETtG8L9AvVfg==
- dependencies:
- logform "2.1.2"
- superagent "5.2.2"
- winston-transport "4.3.0"
-
-winston-transport@4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.3.0.tgz#df68c0c202482c448d9b47313c07304c2d7c2c66"
- integrity sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==
- dependencies:
- readable-stream "^2.3.6"
- triple-beam "^1.2.0"
-
-winston-transport@^4.7.0:
- version "4.8.0"
- resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.8.0.tgz#a15080deaeb80338455ac52c863418c74fcf38ea"
- integrity sha512-qxSTKswC6llEMZKgCQdaWgDuMJQnhuvF5f2Nk3SNXc4byfQ+voo2mX1Px9dkNOuR8p0KAjfPG29PuYUSIb+vSA==
- dependencies:
- logform "^2.6.1"
- readable-stream "^4.5.2"
- triple-beam "^1.3.0"
-
-winston@^3.15.0:
- version "3.15.0"
- resolved "https://registry.yarnpkg.com/winston/-/winston-3.15.0.tgz#4df7b70be091bc1a38a4f45b969fa79589b73ff5"
- integrity sha512-RhruH2Cj0bV0WgNL+lOfoUBI4DVfdUNjVnJGVovWZmrcKtrFTTRzgXYK2O9cymSGjrERCtaAeHwMNnUWXlwZow==
- dependencies:
- "@colors/colors" "^1.6.0"
- "@dabh/diagnostics" "^2.0.2"
- async "^3.2.3"
- is-stream "^2.0.0"
- logform "^2.6.0"
- one-time "^1.0.0"
- readable-stream "^3.4.0"
- safe-stable-stringify "^2.3.1"
- stack-trace "0.0.x"
- triple-beam "^1.3.0"
- winston-transport "^4.7.0"
-
-word-wrap@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
- integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
-
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
+ string-width "^5.0.1"
wrap-ansi@^3.0.1:
version "3.0.1"
@@ -6429,20 +5689,21 @@ wrap-ansi@^8.1.0:
string-width "^5.0.1"
strip-ansi "^7.0.1"
-wrap-ansi@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e"
- integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==
- dependencies:
- ansi-styles "^6.2.1"
- string-width "^7.0.0"
- strip-ansi "^7.1.0"
-
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+write-file-atomic@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
write-file-atomic@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
@@ -6451,34 +5712,16 @@ write-file-atomic@^4.0.2:
imurmurhash "^0.1.4"
signal-exit "^3.0.7"
-ws@^8.16.0:
- version "8.18.0"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
- integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
+ws@^8.13.0:
+ version "8.13.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
+ integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
-xdg-basedir@^5.1.0:
+xdg-basedir@^5.0.1, xdg-basedir@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9"
integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==
-xml-parse-from-string@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
- integrity sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==
-
-xml2js@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7"
- integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==
- dependencies:
- sax ">=0.6.0"
- xmlbuilder "~11.0.0"
-
-xmlbuilder@~11.0.0:
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
- integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
-
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
@@ -6499,7 +5742,7 @@ yargs-parser@^20.2.2:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-yargs-parser@^21.1.1:
+yargs-parser@^21.0.1, yargs-parser@^21.1.1:
version "21.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
@@ -6535,12 +5778,7 @@ yocto-queue@^0.1.0:
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
-yoctocolors-cjs@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242"
- integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==
-
-zod@^3.23.8:
- version "3.24.3"
- resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.3.tgz#1f40f750a05e477396da64438e0e1c0995dafd87"
- integrity sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==
+yocto-queue@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
+ integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==