From 9a1684e22b91e61a123dcc413a57d239a4f9bb2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Sat, 22 Jul 2023 16:26:27 +0200 Subject: [PATCH] fix: update dependencies to latest --- .devcontainer/Dockerfile | 2 +- .devcontainer/devcontainer.json | 27 +- .devcontainer/docker-compose.yml | 12 +- .env.example | 22 +- .eslintrc.json | 1 + .github/workflows/build.yml | 2 +- .github/workflows/lint.yml | 7 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- .nycrc.json | 5 - .taprc | 8 - CONTRIBUTING.md | 4 +- Dockerfile | 11 +- README.md | 69 +- docker-compose.yml | 27 + generators/service/service.test.ts.hbs | 16 +- generators/service/service.ts.hbs | 6 +- package-lock.json | 5782 ++++------------- package.json | 60 +- src/__test__/utils/authenticateUserTest.ts | 61 +- src/application.ts | 4 +- src/index.ts | 4 +- src/models/Channel.ts | 4 +- src/models/Guild.ts | 2 +- src/models/Member.ts | 6 +- src/models/Message.ts | 2 +- src/models/OAuth.ts | 2 +- src/models/RefreshToken.ts | 4 +- src/models/User.ts | 8 +- src/models/UserSettings.ts | 2 +- .../[channelId]/__test__/delete.test.ts | 44 +- .../channels/[channelId]/__test__/get.test.ts | 42 +- .../channels/[channelId]/__test__/put.test.ts | 40 +- src/services/channels/[channelId]/delete.ts | 12 +- src/services/channels/[channelId]/get.ts | 8 +- .../[channelId]/messages/__test__/get.test.ts | 58 +- .../messages/__test__/post.test.ts | 56 +- .../channels/[channelId]/messages/get.ts | 16 +- .../channels/[channelId]/messages/post.ts | 14 +- .../[channelId]/messages/uploads/post.ts | 16 +- src/services/channels/[channelId]/put.ts | 14 +- .../guilds/[guildId]/__test__/delete.test.ts | 39 +- .../guilds/[guildId]/__test__/get.test.ts | 48 +- .../guilds/[guildId]/__test__/put.test.ts | 41 +- .../[guildId]/channels/__test__/get.test.ts | 40 +- .../[guildId]/channels/__test__/post.test.ts | 38 +- src/services/guilds/[guildId]/channels/get.ts | 12 +- .../guilds/[guildId]/channels/post.ts | 16 +- src/services/guilds/[guildId]/delete.ts | 8 +- src/services/guilds/[guildId]/get.ts | 14 +- src/services/guilds/[guildId]/icon/put.ts | 12 +- .../[guildId]/members/__test__/get.test.ts | 44 +- src/services/guilds/[guildId]/members/get.ts | 14 +- .../members/join/__test__/post.test.ts | 48 +- .../guilds/[guildId]/members/join/post.ts | 22 +- .../members/leave/__test__/delete.test.ts | 34 +- .../guilds/[guildId]/members/leave/delete.ts | 14 +- src/services/guilds/[guildId]/put.ts | 12 +- src/services/guilds/__test__/get.test.ts | 30 +- src/services/guilds/__test__/post.test.ts | 53 +- src/services/guilds/get.ts | 10 +- src/services/guilds/post.ts | 16 +- .../guilds/public/__test__/get.test.ts | 24 +- src/services/guilds/public/get.ts | 10 +- .../[messageId]/__test__/delete.test.ts | 52 +- .../messages/[messageId]/__test__/put.test.ts | 52 +- src/services/messages/[messageId]/delete.ts | 16 +- src/services/messages/[messageId]/put.ts | 18 +- .../users/[userId]/__test__/get.test.ts | 28 +- src/services/users/[userId]/get.ts | 8 +- .../users/confirm-email/__test__/get.test.ts | 20 +- src/services/users/confirm-email/get.ts | 6 +- .../users/current/__test__/get.test.ts | 22 +- .../users/current/__test__/put.test.ts | 42 +- src/services/users/current/get.ts | 8 +- src/services/users/current/logo/put.ts | 8 +- src/services/users/current/put.ts | 16 +- .../current/settings/__test__/put.test.ts | 36 +- src/services/users/current/settings/put.ts | 8 +- .../users/oauth2/[provider]/delete.ts | 12 +- .../users/oauth2/discord/__utils__/utils.ts | 2 +- .../users/oauth2/discord/add-strategy/get.ts | 6 +- .../discord/callback-add-strategy/get.ts | 8 +- .../users/oauth2/discord/callback/get.ts | 6 +- .../users/oauth2/discord/signin/get.ts | 4 +- .../users/oauth2/github/__utils__/utils.ts | 2 +- .../users/oauth2/github/add-strategy/get.ts | 6 +- .../github/callback-add-strategy/get.ts | 8 +- .../users/oauth2/github/callback/get.ts | 6 +- .../users/oauth2/github/signin/get.ts | 4 +- .../users/oauth2/google/__utils__/utils.ts | 2 +- .../users/oauth2/google/add-strategy/get.ts | 6 +- .../google/callback-add-strategy/get.ts | 8 +- .../users/oauth2/google/callback/get.ts | 6 +- .../users/oauth2/google/signin/get.ts | 4 +- .../users/refresh-token/__test__/post.test.ts | 34 +- src/services/users/refresh-token/post.ts | 10 +- .../reset-password/__test__/post.test.ts | 36 +- .../users/reset-password/__test__/put.test.ts | 20 +- src/services/users/reset-password/post.ts | 10 +- src/services/users/reset-password/put.ts | 6 +- .../users/signin/__test__/post.test.ts | 40 +- src/services/users/signin/post.ts | 8 +- .../users/signout/__test__/delete.test.ts | 20 +- .../users/signout/__test__/post.test.ts | 22 +- src/services/users/signout/delete.ts | 6 +- src/services/users/signout/post.ts | 10 +- .../users/signup/__test__/post.test.ts | 32 +- src/services/users/signup/post.ts | 12 +- src/tools/configurations.ts | 2 +- src/tools/email/emailTransporter.ts | 2 +- src/tools/email/sendEmail.ts | 12 +- .../plugins/__test__/authenticateUser.test.ts | 163 +- src/tools/plugins/__test__/socket-io.test.ts | 12 +- src/tools/plugins/authenticateUser.ts | 6 +- src/tools/plugins/socket-io.ts | 4 +- src/tools/utils/OAuthStrategy.ts | 8 +- .../utils/__test__/OAuthStrategy.test.ts | 51 +- .../utils/__test__/buildQueryURL.test.ts | 11 +- .../utils/__test__/parseStringNullish.test.ts | 24 +- src/tools/utils/buildQueryURL.ts | 4 +- src/tools/utils/jwtToken.ts | 6 +- src/tools/utils/uploadFile.ts | 3 +- 123 files changed, 2322 insertions(+), 5765 deletions(-) delete mode 100644 .nycrc.json delete mode 100644 .taprc create mode 100644 docker-compose.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 3aafaa5..82499d5 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1 @@ -FROM mcr.microsoft.com/devcontainers/javascript-node:18 +FROM mcr.microsoft.com/devcontainers/javascript-node:20 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index cb0c72e..395dc39 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -6,20 +6,19 @@ "customizations": { "vscode": { "settings": { - "remote.autoForwardPorts": false - }, - "extensions": [ - "editorconfig.editorconfig", - "esbenp.prettier-vscode", - "dbaeumer.vscode-eslint", - "davidanson.vscode-markdownlint", - "prisma.prisma", - "mikestead.dotenv", - "ms-azuretools.vscode-docker" - ] - } + "remote.autoForwardPorts": false, + "remote.localPortHost": "allInterfaces" + } + }, + "extensions": [ + "editorconfig.editorconfig", + "esbenp.prettier-vscode", + "dbaeumer.vscode-eslint", + "davidanson.vscode-markdownlint", + "prisma.prisma", + "mikestead.dotenv", + "ms-azuretools.vscode-docker" + ] }, - "forwardPorts": [8080, 5555, 5432, 1080], - "postAttachCommand": ["npm", "install"], "remoteUser": "node" } diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 52ab71e..a2773da 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.0' - services: workspace: build: @@ -8,18 +6,18 @@ services: volumes: - '..:/workspace:cached' command: 'sleep infinity' - extra_hosts: - - 'host.docker.internal:host-gateway' + network_mode: 'host' thream-database: image: 'postgres:15.3' environment: - POSTGRES_USER: 'user' + POSTGRES_USER: 'thream_user' POSTGRES_PASSWORD: 'password' POSTGRES_DB: 'thream' volumes: - - 'postgres-data:/var/lib/postgresql/data' + - 'thream-postgres-data:/var/lib/postgresql/data' restart: 'unless-stopped' + network_mode: 'host' volumes: - postgres-data: + thream-postgres-data: diff --git a/.env.example b/.env.example index 9822413..f07ad63 100644 --- a/.env.example +++ b/.env.example @@ -1,14 +1,22 @@ -API_URL=http://localhost:8080 +API_URL=http://127.0.0.1:8080 COMPOSE_PROJECT_NAME=thream-api -DATABASE_URL=postgresql://user:password@thream-database:5432/thream + +DATABASE_USER=thream_user +DATABASE_PASSWORD=password +DATABASE_NAME=thream +DATABASE_URL=postgresql://thream_user:password@127.0.0.1:5432/thream + +EMAIL_HOST=0.0.0.0 +EMAIL_PASSWORD=password +EMAIL_PORT=1025 +EMAIL_USER=no-reply@thream.fr + DISCORD_CLIENT_ID= DISCORD_CLIENT_SECRET= -EMAIL_HOST=thream-maildev -EMAIL_PASSWORD=password -EMAIL_PORT=25 -EMAIL_USER=no-reply@thream.fr + FILE_UPLOADS_API_KEY=apiKeySecret -FILE_UPLOADS_API_URL=http://host.docker.internal:8000 +FILE_UPLOADS_API_URL=http://127.0.0.1:8000 + GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= GOOGLE_CLIENT_ID= diff --git a/.eslintrc.json b/.eslintrc.json index 2180ba5..c922e6a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,7 @@ { "extends": ["conventions", "prettier"], "plugins": ["prettier", "import", "unicorn"], + "parser": "@typescript-eslint/parser", "parserOptions": { "project": "./tsconfig.json" }, diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 80cb407..8f8651e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: - name: 'Setup Node.js' uses: 'actions/setup-node@v3.6.0' with: - node-version: '18.x' + node-version: '20.x' cache: 'npm' - name: 'Install dependencies' diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7d10b16..1bcee53 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -15,7 +15,7 @@ jobs: - name: 'Setup Node.js' uses: 'actions/setup-node@v3.6.0' with: - node-version: '18.x' + node-version: '20.x' cache: 'npm' - name: 'Install dependencies' @@ -36,10 +36,5 @@ jobs: - name: 'lint:prettier' run: 'npm run lint:prettier' - - name: 'lint:dotenv' - uses: 'dotenv-linter/action-dotenv-linter@v2' - with: - github_token: ${{ secrets.github_token }} - - name: 'prisma:validate' run: 'cp .env.example .env && npm run prisma:validate' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b37b554..ed547cb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,7 +23,7 @@ jobs: - name: 'Setup Node.js' uses: 'actions/setup-node@v3.6.0' with: - node-version: '18.x' + node-version: '20.x' cache: 'npm' - name: 'Install dependencies' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 87d6224..8e22d44 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: - name: 'Setup Node.js' uses: 'actions/setup-node@v3.6.0' with: - node-version: '18.x' + node-version: '20.x' cache: 'npm' - name: 'Install dependencies' diff --git a/.nycrc.json b/.nycrc.json deleted file mode 100644 index 937a14e..0000000 --- a/.nycrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "reporter": ["text", "cobertura"], - "src": "./build", - "all": true -} diff --git a/.taprc b/.taprc deleted file mode 100644 index c9905aa..0000000 --- a/.taprc +++ /dev/null @@ -1,8 +0,0 @@ -ts: false -jsx: false -flow: false -check-coverage: false -coverage: false - -files: - - 'build/**/*.test.js' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cc39254..07c9bd6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -67,7 +67,7 @@ git commit -m "fix: should emit events to connected users" We have API REST services for the `channels`. -Here is what potentially look like a folder structure for this service : +Here is what potentially look like a folder structure for this service: ```text └── src @@ -86,7 +86,7 @@ Here is what potentially look like a folder structure for this service : └── index.ts ``` -This folder structure will map to these REST API routes : +This folder structure will map to these REST API routes: - GET `/channels` - DELETE `/channels/:channelId` diff --git a/Dockerfile b/Dockerfile index 150277f..494450a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,22 @@ -FROM node:18.16.1 AS dependencies +FROM node:20.5.0 AS dependencies WORKDIR /usr/src/app COPY ./package*.json ./ -RUN npm install +RUN npm clean-install -FROM node:18.16.1 AS builder +FROM node:20.5.0 AS builder WORKDIR /usr/src/app COPY --from=dependencies /usr/src/app/node_modules ./node_modules COPY ./ ./ RUN npm run prisma:generate && npm run build -FROM node:18.16.1 AS runner +FROM node:20.5.0 AS runner WORKDIR /usr/src/app ENV NODE_ENV=production +ENV NODE_OPTIONS=--enable-source-maps COPY --from=builder /usr/src/app/node_modules ./node_modules COPY --from=builder /usr/src/app/package.json ./package.json COPY --from=builder /usr/src/app/email ./email COPY --from=builder /usr/src/app/build ./build COPY --from=builder /usr/src/app/prisma ./prisma USER node -CMD ["node", "build/index.js"] +CMD npm run prisma:migrate:deploy && node build/index.js diff --git a/README.md b/README.md index 834793b..d729502 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

Thream/api

+

Thream/api

@@ -18,7 +18,7 @@ Thream's Application Programming Interface (API) to stay close with your friends and communities. -It uses [Thream/file-uploads-api](https://github.com/Thream/file-uploads-api) [v1.1.5](https://github.com/Thream/file-uploads-api/releases/tag/v1.1.5). +It uses [Thream/file-uploads-api](https://github.com/Thream/file-uploads-api) [v1.1.6](https://github.com/Thream/file-uploads-api/releases/tag/v1.1.6). ## ⚙️ Getting Started @@ -37,46 +37,75 @@ git clone git@github.com:Thream/api.git # Go to the project root cd api +# Install dependencies +npm clean-install + # Configure environment variables cp .env.example .env -# Install -npm install +# Generate Prisma client types npm run prisma:generate ``` -You will need to configure the environment variables by creating an `.env` file at -the root of the project (see `.env.example`). +### Database Setup + +```sh +# Create a new user and database +psql +CREATE DATABASE thream; +CREATE USER thream_user with encrypted password 'password'; +ALTER USER thream_user WITH SUPERUSER; +``` + +### Database Production migration + +```sh +npm run prisma:migrate:deploy +``` ### Local Development environment Recommended to use [VSCode: Remote development in Containers](https://code.visualstudio.com/docs/remote/containers-tutorial). -#### Setup the database - -```sh -# Create a new user and database -psql -create database thream_database; -create user thream_user with encrypted password 'password'; -ALTER USER thream_user WITH SUPERUSER; -``` - -Replace `DATABASE_URL` inside `.env` with `postgresql://thream_user:password@localhost:5432/thream_database` +#### Database Development migration ```sh # Run Prisma migrations npm run prisma:migrate:dev + +# Reset the database (WARNING: This will delete all data) +npm run prisma:migrate:reset ``` #### Usage ```sh -# Run API npm run dev +``` -# Run Prisma Studio -npm run prisma:studio +##### Services started + +- `api`: +- [Maildev](https://maildev.github.io/maildev/): +- [Prisma Studio](https://www.prisma.io/studio): + +##### Commands + +```sh +# Build, Lint and Test +npm run build +npm run build:typescript +npm run lint:editorconfig +npm run lint:markdown +npm run lint:eslint +npm run lint:prettier +npm run test +``` + +### Production environment (with [Docker](https://www.docker.com/)) + +```sh +docker compose up --build ``` ## 💡 Contributing diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d2cf3ee --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +services: + thream-api: + container_name: 'thream-api' + image: 'thream-api' + restart: 'unless-stopped' + network_mode: 'host' + build: + context: './' + env_file: '.env' + depends_on: + - 'thream-database' + + thream-database: + container_name: 'thream-database' + image: 'postgres:15.3' + restart: 'unless-stopped' + network_mode: 'host' + env_file: '.env' + environment: + POSTGRES_USER: ${DATABASE_USER} + POSTGRES_PASSWORD: ${DATABASE_PASSWORD} + POSTGRES_DB: ${DATABASE_NAME} + volumes: + - 'thream-postgres-data:/var/lib/postgresql/data' + +volumes: + thream-postgres-data: diff --git a/generators/service/service.test.ts.hbs b/generators/service/service.test.ts.hbs index e9c56f5..dbe4d97 100644 --- a/generators/service/service.test.ts.hbs +++ b/generators/service/service.test.ts.hbs @@ -1,18 +1,20 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from 'application.js' +import { application } from '#src/application.js' {{#if shouldBeAuthenticated}} -import { authenticateUserTest } from '__test__/utils/authenticateUserTest.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' {{/if}} -import prisma from 'tools/database/prisma.js' +import prisma from '#src/tools/database/prisma.js' -await tap.test('{{httpMethod}} {{url}}', async (t) => { +await test('{{httpMethod}} {{url}}', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { {{#if shouldBeAuthenticated}} const { accessToken } = await authenticateUserTest() {{/if}} @@ -32,6 +34,6 @@ await tap.test('{{httpMethod}} {{url}}', async (t) => { payload: {} }) // const responseJson = response.json() - t.equal(response.statusCode, 200) + assert.strictEqual(response.statusCode, 200) }) }) diff --git a/generators/service/service.ts.hbs b/generators/service/service.ts.hbs index dbb4d71..af7c2e6 100644 --- a/generators/service/service.ts.hbs +++ b/generators/service/service.ts.hbs @@ -1,10 +1,10 @@ import { Static, Type } from '@sinclair/typebox' import { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from 'tools/database/prisma.js' -import { fastifyErrors } from 'models/utils.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' {{#if shouldBeAuthenticated}} -import authenticateUser from 'tools/plugins/authenticateUser.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' {{/if}} const body{{sentenceCase httpMethod}}ServiceSchema = Type.Object({ diff --git a/package-lock.json b/package-lock.json index f19d9c6..909ab49 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,35 +11,35 @@ "dependencies": { "@fastify/cors": "8.3.0", "@fastify/helmet": "11.0.0", - "@fastify/multipart": "7.7.0", - "@fastify/rate-limit": "8.0.1", + "@fastify/multipart": "7.6.0", + "@fastify/rate-limit": "8.0.3", "@fastify/sensible": "5.2.0", - "@fastify/swagger": "8.6.0", + "@fastify/swagger": "8.8.0", "@fastify/swagger-ui": "1.9.2", - "@prisma/client": "4.16.2", - "@sinclair/typebox": "0.29.0", - "@thream/socketio-jwt": "3.1.1", + "@prisma/client": "5.0.0", + "@sinclair/typebox": "0.29.6", + "@thream/socketio-jwt": "3.1.2", "axios": "1.4.0", "bcryptjs": "2.4.3", "dotenv": "16.3.1", "ejs": "3.1.9", - "fastify": "4.19.1", - "fastify-plugin": "4.5.0", + "fastify": "4.20.0", + "fastify-plugin": "4.5.1", "form-data": "4.0.0", "http-errors": "2.0.0", - "jsonwebtoken": "9.0.0", + "jsonwebtoken": "9.0.1", "ms": "2.1.3", - "nodemailer": "6.9.3", + "nodemailer": "6.9.4", "read-pkg": "8.0.0", "socket.io": "4.7.1" }, "devDependencies": { - "@commitlint/cli": "17.6.6", - "@commitlint/config-conventional": "17.6.6", + "@commitlint/cli": "17.6.7", + "@commitlint/config-conventional": "17.6.7", "@saithodev/semantic-release-backmerge": "3.2.0", "@semantic-release/git": "10.0.1", "@swc/cli": "0.1.62", - "@swc/core": "1.3.67", + "@swc/core": "1.3.70", "@tsconfig/strictest": "2.0.1", "@types/bcryptjs": "2.4.2", "@types/busboy": "1.5.0", @@ -47,36 +47,34 @@ "@types/http-errors": "2.0.1", "@types/jsonwebtoken": "9.0.2", "@types/ms": "0.7.31", - "@types/node": "20.3.3", + "@types/node": "20.4.3", "@types/nodemailer": "6.4.8", "@types/sinon": "10.0.15", - "@types/tap": "15.0.8", - "@typescript-eslint/eslint-plugin": "5.60.1", - "@typescript-eslint/parser": "5.60.1", - "c8": "8.0.0", + "@typescript-eslint/eslint-plugin": "6.1.0", + "@typescript-eslint/parser": "6.1.0", + "chokidar": "3.5.3", "concurrently": "8.2.0", "cross-env": "7.0.3", "editorconfig-checker": "5.1.1", - "eslint": "8.44.0", - "eslint-config-conventions": "10.0.0", + "eslint": "8.45.0", + "eslint-config-conventions": "11.0.1", "eslint-config-prettier": "8.8.0", "eslint-plugin-import": "2.27.5", - "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-prettier": "5.0.0", "eslint-plugin-promise": "6.1.1", - "eslint-plugin-unicorn": "47.0.0", + "eslint-plugin-unicorn": "48.0.0", "husky": "8.0.3", "lint-staged": "13.2.3", - "maildev": "2.0.5", + "maildev": "2.1.0", "markdownlint-cli2": "0.8.1", "markdownlint-rule-relative-links": "2.1.0", "plop": "3.1.2", - "prettier": "2.8.8", - "prisma": "4.16.2", + "prettier": "3.0.0", + "prisma": "5.0.0", "rimraf": "5.0.1", - "semantic-release": "21.0.6", + "semantic-release": "21.0.7", "sinon": "15.2.0", - "tap": "16.3.7", - "typescript": "5.0.4" + "typescript": "5.1.6" }, "engines": { "node": ">=16.0.0", @@ -92,19 +90,6 @@ "node": ">=0.10.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", @@ -116,222 +101,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", @@ -340,29 +109,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/highlight": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", @@ -440,22 +186,10 @@ "node": ">=4" } }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.11" @@ -464,70 +198,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -539,14 +209,14 @@ } }, "node_modules/@commitlint/cli": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.6.tgz", - "integrity": "sha512-sTKpr2i/Fjs9OmhU+beBxjPavpnLSqZaO6CzwKVq2Tc4UYVTMFgpKOslDhUBVlfAUBfjVO8ParxC/MXkIOevEA==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.7.tgz", + "integrity": "sha512-nzZmfO5KIOupYppn1MsnYX/80I+KDlxiwkks3CJT0XT+t34UgqGi3eSyEuzgcIjPlORk5/GMaAEiys78iLfGMg==", "dev": true, "dependencies": { "@commitlint/format": "^17.4.4", - "@commitlint/lint": "^17.6.6", - "@commitlint/load": "^17.5.0", + "@commitlint/lint": "^17.6.7", + "@commitlint/load": "^17.6.7", "@commitlint/read": "^17.5.1", "@commitlint/types": "^17.4.4", "execa": "^5.0.0", @@ -563,9 +233,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.6.6.tgz", - "integrity": "sha512-phqPz3BDhfj49FUYuuZIuDiw+7T6gNAEy7Yew1IBHqSohVUCWOK2FXMSAExzS2/9X+ET93g0Uz83KjiHDOOFag==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.6.7.tgz", + "integrity": "sha512-4oTpEUC0HRM54QRHBPMOJW1pETp7usxXn9RuNYNWHcmu8wi1mpws95hvS20u2n6HtIkTn0jfn7vHioCm4AGUTw==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^5.0.0" @@ -575,9 +245,9 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz", - "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz", + "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==", "dev": true, "dependencies": { "@commitlint/types": "^17.4.4", @@ -588,9 +258,9 @@ } }, "node_modules/@commitlint/ensure": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.4.4.tgz", - "integrity": "sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz", + "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==", "dev": true, "dependencies": { "@commitlint/types": "^17.4.4", @@ -627,9 +297,9 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.6.tgz", - "integrity": "sha512-4Fw875faAKO+2nILC04yW/2Vy/wlV3BOYCSQ4CEFzriPEprc1Td2LILmqmft6PDEK5Sr14dT9tEzeaZj0V56Gg==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.7.tgz", + "integrity": "sha512-vqyNRqtbq72P2JadaoWiuoLtXIs9SaAWDqdtef6G2zsoXqKFc7vqj1f+thzVgosXG3X/5K9jNp+iYijmvOfc/g==", "dev": true, "dependencies": { "@commitlint/types": "^17.4.4", @@ -640,14 +310,14 @@ } }, "node_modules/@commitlint/lint": { - "version": "17.6.6", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.6.tgz", - "integrity": "sha512-5bN+dnHcRLkTvwCHYMS7Xpbr+9uNi0Kq5NR3v4+oPNx6pYXt8ACuw9luhM/yMgHYwW0ajIR20wkPAFkZLEMGmg==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.7.tgz", + "integrity": "sha512-TW+AozfuOFMrHn+jdwtz0IWu8REKFp0eryOvoBp2r8IXNc4KihKB1spAiUB6SFyHD6hVVeolz12aHnJ3Mb+xVQ==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^17.6.6", - "@commitlint/parse": "^17.6.5", - "@commitlint/rules": "^17.6.5", + "@commitlint/is-ignored": "^17.6.7", + "@commitlint/parse": "^17.6.7", + "@commitlint/rules": "^17.6.7", "@commitlint/types": "^17.4.4" }, "engines": { @@ -655,14 +325,14 @@ } }, "node_modules/@commitlint/load": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz", - "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.6.7.tgz", + "integrity": "sha512-QZ2rJTbX55BQdYrCm/p6+hh/pFBgC9nTJxfsrK6xRPe2thiQzHN0AQDBqBwAirn6gIkHrjIbCbtAE6kiDYLjrw==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^17.4.4", + "@commitlint/config-validator": "^17.6.7", "@commitlint/execute-rule": "^17.4.0", - "@commitlint/resolve-extends": "^17.4.4", + "@commitlint/resolve-extends": "^17.6.7", "@commitlint/types": "^17.4.4", "@types/node": "*", "chalk": "^4.1.0", @@ -689,9 +359,9 @@ } }, "node_modules/@commitlint/parse": { - "version": "17.6.5", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.6.5.tgz", - "integrity": "sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.6.7.tgz", + "integrity": "sha512-ibO03BgEns+JJpohpBZYD49mCdSNMg6fTv7vA5yqzEFWkBQk5NWhEBw2yG+Z1UClStIRkMkAYyI2HzoQG9tCQQ==", "dev": true, "dependencies": { "@commitlint/types": "^17.4.4", @@ -719,12 +389,12 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz", - "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz", + "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^17.4.4", + "@commitlint/config-validator": "^17.6.7", "@commitlint/types": "^17.4.4", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", @@ -736,12 +406,12 @@ } }, "node_modules/@commitlint/rules": { - "version": "17.6.5", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.5.tgz", - "integrity": "sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==", + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.7.tgz", + "integrity": "sha512-x/SDwDTN3w3Gr5xkhrIORu96rlKCc8ZLYEMXRqi9+MB33st2mKcGvKa5uJuigHlbl3xm75bAAubATrodVrjguQ==", "dev": true, "dependencies": { - "@commitlint/ensure": "^17.4.4", + "@commitlint/ensure": "^17.6.7", "@commitlint/message": "^17.4.2", "@commitlint/to-lines": "^17.4.0", "@commitlint/types": "^17.4.4", @@ -796,16 +466,6 @@ "node": ">=12" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -822,9 +482,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.0.tgz", + "integrity": "sha512-uiPeRISaglZnaZk8vwrjQZ1CxogZeY/4IYft6gBOTqu1WhVXWmCmZMWxUv2Q/pxSvPdp1JPaO62kLOcOkMqWrw==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -950,25 +610,24 @@ } }, "node_modules/@fastify/multipart": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@fastify/multipart/-/multipart-7.7.0.tgz", - "integrity": "sha512-lE5v6+MVbLYmPL8yUHrvyezEOLQbZulEPL8itwGqPbNxL2pWdAN1HWEZ7f3VdwyR6wmQdOcpfZ0zdCU4BbWKzw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@fastify/multipart/-/multipart-7.6.0.tgz", + "integrity": "sha512-mQoz0SMxk1WAYLYvQypoj3GYhCbmhnFl2LdleTzKQ4HgPfhVcMT014uln2wgzRh2y+gL74b/+j0mMVgvOKpqpQ==", "dependencies": { "@fastify/busboy": "^1.0.0", "@fastify/deepmerge": "^1.0.0", "@fastify/error": "^3.0.0", - "@fastify/swagger": "^8.3.1", - "@fastify/swagger-ui": "^1.8.0", "end-of-stream": "^1.4.4", "fastify-plugin": "^4.0.0", + "hexoid": "^1.0.0", "secure-json-parse": "^2.4.0", "stream-wormhole": "^1.1.0" } }, "node_modules/@fastify/rate-limit": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@fastify/rate-limit/-/rate-limit-8.0.1.tgz", - "integrity": "sha512-sKztox9tAhKYJadS7yD7mBamNs8sLP/OlBjX6prGzlL3+q4cxPE2UafW8QF5s4+BuUyssQ7FabSlgieqyk4JZg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@fastify/rate-limit/-/rate-limit-8.0.3.tgz", + "integrity": "sha512-7wbSKXGKKLI1VkpW2XvS7SFg4n4/uzYt0YA5O2pfCcM6PYaBSV3VhSKGJ9/hJceCSH+zNEDRrWpufqxbcDkTZg==", "dependencies": { "fastify-plugin": "^4.0.0", "ms": "^2.1.3", @@ -1016,9 +675,9 @@ } }, "node_modules/@fastify/swagger": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@fastify/swagger/-/swagger-8.6.0.tgz", - "integrity": "sha512-PGde7ryn0nsX/BpSrjP4Ade8RK2M0uBIU4Iow3Qt3kWa/70p1fM7AW28kS3dKERnwT0VwrUdxU3ftrRI+DsNTw==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@fastify/swagger/-/swagger-8.8.0.tgz", + "integrity": "sha512-tYI2lbItb4yg9FhQj+leK6DdIBICLbXkSR2vZjo117ygHyYQLxw2v0ere/d2PtDmYAx7SOJzxvg3w6y0Sxc3iw==", "dependencies": { "fastify-plugin": "^4.0.0", "json-schema-resolver": "^2.0.0", @@ -1145,132 +804,10 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1283,21 +820,15 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@lukeed/ms": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.1.tgz", @@ -1361,58 +892,58 @@ } }, "node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", - "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", + "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", "dev": true, "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", + "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", "dev": true, "dependencies": { - "@octokit/types": "^9.0.0", + "@octokit/types": "^11.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", + "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", "dev": true, "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", + "@octokit/request": "^8.0.1", + "@octokit/types": "^11.0.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/openapi-types": { @@ -1422,118 +953,87 @@ "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.1.2.tgz", - "integrity": "sha512-Jx8KuKqEAVRsK6fMzZKv3h6UH9/NRDHsDRtUAROqqmZlCptM///Uef7A1ViZ/cbDplekz7VbDWdFLAZ/mpuDww==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", + "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", "dev": true, "dependencies": { - "@octokit/tsconfig": "^2.0.0", - "@octokit/types": "^9.3.2" + "@octokit/types": "^11.0.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=4" + "@octokit/core": ">=5" } }, "node_modules/@octokit/plugin-retry": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-5.0.4.tgz", - "integrity": "sha512-hw00fDIhOgijy4aSxS6weWF5uqZVeoiC/AptLLyjL8KFCJRGRaXfcfgj76h/Z3cSLTjRsEIQnNCTig8INttL/g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", + "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", "dev": true, "dependencies": { - "@octokit/request-error": "^4.0.1", - "@octokit/types": "^10.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", "bottleneck": "^2.15.3" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-retry/node_modules/@octokit/request-error": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-4.0.2.tgz", - "integrity": "sha512-uqwUEmZw3x4I9DGYq9fODVAAvcLsPQv97NRycP6syEFu5916M189VnNBW2zANNwqg3OiligNcAey7P0SET843w==", - "dev": true, - "dependencies": { - "@octokit/types": "^10.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", - "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "@octokit/core": ">=5" } }, "node_modules/@octokit/plugin-throttling": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-6.1.0.tgz", - "integrity": "sha512-JqMbTiPC0sUSTsLQsdq3JVx1mx8UtTo5mwR80YqPXE93+XhevvSyOR1rO2Z+NbO/r0TK4hqFJSSi/9oIZBxZTg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", + "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", "dev": true, "dependencies": { - "@octokit/types": "^9.0.0", + "@octokit/types": "^11.0.0", "bottleneck": "^2.15.3" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": "^4.0.0" + "@octokit/core": "^5.0.0" } }, "node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", + "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", "dev": true, "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.1.0", "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", + "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", "dev": true, "dependencies": { - "@octokit/types": "^9.0.0", + "@octokit/types": "^11.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, - "node_modules/@octokit/tsconfig": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-2.0.0.tgz", - "integrity": "sha512-tWnrai3quGt8+gRN2edzo9fmraWekeryXPeXDomMw2oFSpu/lH3VSWGn/q4V+rwjTRMeeXk/ci623/01Zet4VQ==", - "dev": true - }, "node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", + "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", "dev": true, "dependencies": { "@octokit/openapi-types": "^18.0.0" @@ -1549,6 +1049,26 @@ "node": ">=14" } }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -1591,15 +1111,15 @@ } }, "node_modules/@prisma/client": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.16.2.tgz", - "integrity": "sha512-qCoEyxv1ZrQ4bKy39GnylE8Zq31IRmm8bNhNbZx7bF2cU5aiCCnSa93J2imF88MBjn7J9eUQneNxUQVJdl/rPQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.0.0.tgz", + "integrity": "sha512-XlO5ELNAQ7rV4cXIDJUNBEgdLwX3pjtt9Q/RHqDpGf43szpNJx2hJnggfFs7TKNx0cOFsl6KJCSfqr5duEU/bQ==", "hasInstallScript": true, "dependencies": { - "@prisma/engines-version": "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81" + "@prisma/engines-version": "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584" }, "engines": { - "node": ">=14.17" + "node": ">=16.13" }, "peerDependencies": { "prisma": "*" @@ -1611,16 +1131,16 @@ } }, "node_modules/@prisma/engines": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.16.2.tgz", - "integrity": "sha512-vx1nxVvN4QeT/cepQce68deh/Turxy5Mr+4L4zClFuK1GlxN3+ivxfuv+ej/gvidWn1cE1uAhW7ALLNlYbRUAw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.0.0.tgz", + "integrity": "sha512-kyT/8fd0OpWmhAU5YnY7eP31brW1q1YrTGoblWrhQJDiN/1K+Z8S1kylcmtjqx5wsUGcP1HBWutayA/jtyt+sg==", "devOptional": true, "hasInstallScript": true }, "node_modules/@prisma/engines-version": { - "version": "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81.tgz", - "integrity": "sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg==" + "version": "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584.tgz", + "integrity": "sha512-HHiUF6NixsldsP3JROq07TYBLEjXFKr6PdH8H4gK/XAoTmIplOJBCgrIUMrsRAnEuGyRoRLXKXWUb943+PFoKQ==" }, "node_modules/@saithodev/semantic-release-backmerge": { "version": "3.2.0", @@ -1719,15 +1239,15 @@ } }, "node_modules/@semantic-release/github": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.3.tgz", - "integrity": "sha512-X6gq4USKVlCxPwIIyXb99jU7gwVWlnsKOevs+OyABRdoqc+OIRITbFmrrYU3eE1vGMGk+Qu/GAoLUQQQwC3YOA==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", + "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", "dev": true, "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^7.0.0", - "@octokit/plugin-retry": "^5.0.0", - "@octokit/plugin-throttling": "^6.0.0", + "@octokit/core": "^5.0.0", + "@octokit/plugin-paginate-rest": "^8.0.0", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^7.0.0", "@semantic-release/error": "^4.0.0", "aggregate-error": "^4.0.1", "debug": "^4.3.4", @@ -1813,14 +1333,14 @@ } }, "node_modules/@semantic-release/github/node_modules/globby": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.1.tgz", - "integrity": "sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, "dependencies": { "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" }, @@ -1845,9 +1365,9 @@ } }, "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", - "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -2095,9 +1615,9 @@ } }, "node_modules/@semantic-release/release-notes-generator": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.3.tgz", - "integrity": "sha512-NU77dWKQf+QcZrv/Hcp3DPeSxglPu8hYKCipGxAPpeaneLkg6S0zfTVug4tg4mfDhZHC6RtoI7ljQDK8VoJ2Dw==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", + "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", "dev": true, "dependencies": { "conventional-changelog-angular": "^6.0.0", @@ -2109,7 +1629,7 @@ "import-from": "^4.0.0", "into-stream": "^7.0.0", "lodash-es": "^4.17.21", - "read-pkg-up": "^9.0.0" + "read-pkg-up": "^10.0.0" }, "engines": { "node": ">=18" @@ -2230,48 +1750,30 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@semantic-release/release-notes-generator/node_modules/read-pkg": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@semantic-release/release-notes-generator/node_modules/read-pkg-up": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", + "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", "dev": true, "dependencies": { "find-up": "^6.3.0", - "read-pkg": "^7.1.0", - "type-fest": "^2.5.0" + "read-pkg": "^8.0.0", + "type-fest": "^3.12.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@semantic-release/release-notes-generator/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, "engines": { - "node": ">=12.20" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2290,9 +1792,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.29.0.tgz", - "integrity": "sha512-htPaB6O/USun7JviXuzHnIchTbwgSdKijwt/ho8l9agmvbFcYnrSPOi2qNRzqNOBnHjXMUPoCXri4C6SwkOy3g==" + "version": "0.29.6", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.29.6.tgz", + "integrity": "sha512-aX5IFYWlMa7tQ8xZr3b2gtVReCvg7f3LEhjir/JAjX2bJCMVJA5tIPv30wTD4KDfcwMd7DDYY3hFDeGmOgtrZQ==" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", @@ -2387,9 +1889,9 @@ } }, "node_modules/@swc/core": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.67.tgz", - "integrity": "sha512-9DROjzfAEt0xt0CDkOYsWpkUPyne8fl5ggWGon049678BOM7p0R0dmaalZGAsKatG5vYP1IWSKWsKhJIubDCsQ==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.70.tgz", + "integrity": "sha512-LWVWlEDLlOD25PvA2NEz41UzdwXnlDyBiZbe69s3zM0DfCPwZXLUm79uSqH9ItsOjTrXSL5/1+XUL6C/BZwChA==", "dev": true, "hasInstallScript": true, "engines": { @@ -2400,16 +1902,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.67", - "@swc/core-darwin-x64": "1.3.67", - "@swc/core-linux-arm-gnueabihf": "1.3.67", - "@swc/core-linux-arm64-gnu": "1.3.67", - "@swc/core-linux-arm64-musl": "1.3.67", - "@swc/core-linux-x64-gnu": "1.3.67", - "@swc/core-linux-x64-musl": "1.3.67", - "@swc/core-win32-arm64-msvc": "1.3.67", - "@swc/core-win32-ia32-msvc": "1.3.67", - "@swc/core-win32-x64-msvc": "1.3.67" + "@swc/core-darwin-arm64": "1.3.70", + "@swc/core-darwin-x64": "1.3.70", + "@swc/core-linux-arm-gnueabihf": "1.3.70", + "@swc/core-linux-arm64-gnu": "1.3.70", + "@swc/core-linux-arm64-musl": "1.3.70", + "@swc/core-linux-x64-gnu": "1.3.70", + "@swc/core-linux-x64-musl": "1.3.70", + "@swc/core-win32-arm64-msvc": "1.3.70", + "@swc/core-win32-ia32-msvc": "1.3.70", + "@swc/core-win32-x64-msvc": "1.3.70" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -2421,9 +1923,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.67.tgz", - "integrity": "sha512-zCT2mCkOBVNf5uJDcQ3A9KDoO1OEaGdfjsRTZTo7sejDd9AXLfJg+xgyCBBrK2jNS/uWcT21IvSv3LqKp4K8pA==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.70.tgz", + "integrity": "sha512-31+mcl0dgdRHvZRjhLOK9V6B+qJ7nxDZYINr9pBlqGWxknz37Vld5KK19Kpr79r0dXUZvaaelLjCnJk9dA2PcQ==", "cpu": [ "arm64" ], @@ -2437,9 +1939,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.67.tgz", - "integrity": "sha512-hXTVsfTatPEec5gFVyjGj3NccKZsYj/OXyHn6XA+l3Q76lZzGm2ISHdku//XNwXu8OmJ0HhS7LPsC4XXwxXQhg==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.70.tgz", + "integrity": "sha512-GMFJ65E18zQC80t0os+TZvI+8lbRuitncWVge/RXmXbVLPRcdykP4EJ87cqzcG5Ah0z18/E0T+ixD6jHRisrYQ==", "cpu": [ "x64" ], @@ -2453,9 +1955,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.67.tgz", - "integrity": "sha512-l8AKL0RkDL5FRTeWMmjoz9zvAc37amxC+0rheaNwE+gZya7ObyNjnIYz5FwN+3y+z6JFU7LS2x/5f6iwruv6pg==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.70.tgz", + "integrity": "sha512-wjhCwS8LCiAq2VedF1b4Bryyw68xZnfMED4pLRazAl8BaUlDFANfRBORNunxlfHQj4V3x39IaiLgCZRHMdzXBg==", "cpu": [ "arm" ], @@ -2469,9 +1971,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.67.tgz", - "integrity": "sha512-S8zOB1AXEpb7kmtgMaFNeLAj01VOky4B0RNZ+uJWigdrDiFT67FeZzNHUNmNSOU0QM79G+Lie/xD/beqEw0vDg==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.70.tgz", + "integrity": "sha512-9D/Rx67cAOnMiexvCqARxvhj7coRajTp5HlJHuf+rfwMqI2hLhpO9/pBMQxBUAWxODO/ksQ/OF+GJRjmtWw/2A==", "cpu": [ "arm64" ], @@ -2485,9 +1987,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.67.tgz", - "integrity": "sha512-Fex8J8ASrt13pmOr2xWh41tEeKWwXYGk3sV8L/aGHiYtIJEUi2f+RtMx3jp7LIdOD8pQptor7i5WBlfR9jhp8A==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.70.tgz", + "integrity": "sha512-gkjxBio7XD+1GlQVVyPP/qeFkLu83VhRHXaUrkNYpr5UZG9zZurBERT9nkS6Y+ouYh+Q9xmw57aIyd2KvD2zqQ==", "cpu": [ "arm64" ], @@ -2501,9 +2003,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.67.tgz", - "integrity": "sha512-9bz9/bMphrv5vDg0os/d8ve0QgFpDzJgZgHUaHiGwcmfnlgdOSAaYJLIvWdcGTjZuQeV4L0m+iru357D9TXEzA==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.70.tgz", + "integrity": "sha512-/nCly+V4xfMVwfEUoLLAukxUSot/RcSzsf6GdsGTjFcrp5sZIntAjokYRytm3VT1c2TK321AfBorsi9R5w8Y7Q==", "cpu": [ "x64" ], @@ -2517,9 +2019,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.67.tgz", - "integrity": "sha512-ED0H6oLvQmhgo9zs8usmEA/lcZPGTu7K9og9K871b7HhHX0h/R+Xg2pb5KD7S/GyUHpfuopxjVROm+h6X1jMUA==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.70.tgz", + "integrity": "sha512-HoOsPJbt361KGKaivAK0qIiYARkhzlxeAfvF5NlnKxkIMOZpQ46Lwj3tR0VWohKbrhS+cYKFlVuDi5XnDkx0XA==", "cpu": [ "x64" ], @@ -2533,9 +2035,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.67.tgz", - "integrity": "sha512-J1yFDLgPFeRtA8t5E159OXX+ww1gbkFg70yr4OP7EsOkOD1uMkuTf9yK/woHfsaVJlUYjJHzw7MkUIEgQBucqQ==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.70.tgz", + "integrity": "sha512-hm4IBK/IaRil+aj1cWU6f0GyAdHpw/Jr5nyFYLM2c/tt7w2t5hgb8NjzM2iM84lOClrig1fG6edj2vCF1dFzNQ==", "cpu": [ "arm64" ], @@ -2549,9 +2051,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.67.tgz", - "integrity": "sha512-bK11/KtasewqHxzkjKUBXRE9MSAidbZCxrgJUd49bItG2N/DHxkwMYu8Xkh5VDHdTYWv/2idYtf/VM9Yi+53qw==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.70.tgz", + "integrity": "sha512-5cgKUKIT/9Fp5fCA+zIjYCQ4dSvjFYOeWGZR3QiTXGkC4bGa1Ji9SEPyeIAX0iruUnKjYaZB9RvHK2tNn7RLrQ==", "cpu": [ "ia32" ], @@ -2565,9 +2067,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.67.tgz", - "integrity": "sha512-GxzUU3+NA3cPcYxCxtfSQIS2ySD7Z8IZmKTVaWA9GOUQbKLyCE8H5js31u39+0op/1gNgxOgYFDoj2lUyvLCqw==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.70.tgz", + "integrity": "sha512-LE8lW46+TQBzVkn2mHBlk8DIElPIZ2dO5P8AbJiARNBAnlqQWu67l9gWM89UiZ2l33J2cI37pHzON3tKnT8f9g==", "cpu": [ "x64" ], @@ -2593,11 +2095,11 @@ } }, "node_modules/@thream/socketio-jwt": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@thream/socketio-jwt/-/socketio-jwt-3.1.1.tgz", - "integrity": "sha512-U3Zk6+nyAsr6gv69QkJat5tjE9PiEKCP9fWeY741ml2HNic5aE0omeuTzjOFnPvlLLaMn02DEVNgo2t6QwxOhA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@thream/socketio-jwt/-/socketio-jwt-3.1.2.tgz", + "integrity": "sha512-2TZnFrEVcHIpf7nfPyq5c+Pr6Q82ikzuaykXoR9jGQdWcw84aRS/7ZdusL+v3Aq3hasBqkyh21EW+y6HQbGteg==", "dependencies": { - "jsonwebtoken": "9.0.0" + "jsonwebtoken": "9.0.1" }, "engines": { "node": ">=16.0.0", @@ -2679,12 +2181,6 @@ "@types/responselike": "^1.0.0" } }, - "node_modules/@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true - }, "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", @@ -2732,12 +2228,6 @@ "rxjs": "^7.2.0" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, "node_modules/@types/json-schema": { "version": "7.0.12", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", @@ -2791,9 +2281,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" + "version": "20.4.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.3.tgz", + "integrity": "sha512-Yu3+r4Mn/iY6Mf0aihncZQ1qOjOUrCiodbHHY1hds5O+7BbKp9t+Li7zLO13zO8j9L2C6euz8xsYQP0rjGvVXw==" }, "node_modules/@types/nodemailer": { "version": "6.4.8", @@ -2839,15 +2329,6 @@ "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", "dev": true }, - "node_modules/@types/tap": { - "version": "15.0.8", - "resolved": "https://registry.npmjs.org/@types/tap/-/tap-15.0.8.tgz", - "integrity": "sha512-ZfeoiZlLIaFi4t6wccwbTEicrHREkP0bOq8dZVi/nWvG5F8O7LlS2cSUZBiOW/D4cgWS/p2uhM3lJoyzFAl80w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/through": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", @@ -2858,32 +2339,34 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz", - "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.1.0.tgz", + "integrity": "sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/type-utils": "5.60.1", - "@typescript-eslint/utils": "5.60.1", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.1.0", + "@typescript-eslint/type-utils": "6.1.0", + "@typescript-eslint/utils": "6.1.0", + "@typescript-eslint/visitor-keys": "6.1.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2891,26 +2374,42 @@ } } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz", - "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/typescript-estree": "5.60.1", + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.1.0.tgz", + "integrity": "sha512-hIzCPvX4vDs4qL07SYzyomamcs2/tQYXg5DtdAfj35AyJ5PIUqhsLf4YrEIFzZcND7R2E8tpQIZKayxg8/6Wbw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.1.0", + "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/typescript-estree": "6.1.0", + "@typescript-eslint/visitor-keys": "6.1.0", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2919,16 +2418,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", - "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.1.0.tgz", + "integrity": "sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1" + "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/visitor-keys": "6.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2936,25 +2435,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz", - "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.1.0.tgz", + "integrity": "sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.60.1", - "@typescript-eslint/utils": "5.60.1", + "@typescript-eslint/typescript-estree": "6.1.0", + "@typescript-eslint/utils": "6.1.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2963,12 +2462,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", - "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.1.0.tgz", + "integrity": "sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2976,21 +2475,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", - "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.1.0.tgz", + "integrity": "sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1", + "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/visitor-keys": "6.1.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -3002,43 +2501,72 @@ } } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", - "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/typescript-estree": "5.60.1", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.1.0.tgz", + "integrity": "sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.1.0", + "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/typescript-estree": "6.1.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", - "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz", + "integrity": "sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.1", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.1.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -3080,9 +2608,9 @@ } }, "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3262,18 +2790,6 @@ "node": ">= 8" } }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/arch": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", @@ -3424,6 +2940,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -3447,15 +2983,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "node_modules/async-hook-domain": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", - "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3553,6 +3080,15 @@ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/bin-check": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", @@ -3717,9 +3253,9 @@ } }, "node_modules/bin-version-check/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3740,15 +3276,6 @@ "node": ">=8" } }, - "node_modules/bind-obj-methods": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", - "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/bl": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", @@ -3840,6 +3367,18 @@ "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", "dev": true }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3867,38 +3406,6 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -3927,12 +3434,6 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -3945,6 +3446,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -3954,114 +3470,6 @@ "node": ">= 0.8" } }, - "node_modules/c8": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-8.0.0.tgz", - "integrity": "sha512-XHA5vSfCLglAc0Xt8eLBZMv19lgiBSjnb1FLAQgnwkuhJYEonpilhEB4Ea3jPAbm0FhD6VVJrc0z73jPe7JyGQ==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/c8/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/c8/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/c8/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/c8/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/c8/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/c8/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -4104,21 +3512,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -4186,26 +3579,6 @@ "node": ">=8" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, "node_modules/capital-case": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", @@ -4449,14 +3822,17 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/cliui/node_modules/emoji-regex": { @@ -4525,15 +3901,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -4560,12 +3927,6 @@ "node": ">= 10" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -4576,12 +3937,6 @@ "dot-prop": "^5.1.0" } }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -4749,9 +4104,9 @@ } }, "node_modules/conventional-changelog-writer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.0.tgz", - "integrity": "sha512-8PyWTnn7zBIt9l4hj4UusFs1TyG+9Ulu1zlOAc72L7Sdv9Hsc8E86ot7htY3HXCVhXHB/NO0pVGvZpwsyJvFfw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", "dev": true, "dependencies": { "conventional-commits-filter": "^3.0.0", @@ -4759,7 +4114,7 @@ "handlebars": "^4.7.7", "json-stringify-safe": "^5.0.1", "meow": "^8.1.2", - "semver": "^6.3.0", + "semver": "^7.0.0", "split": "^1.0.1" }, "bin": { @@ -4769,15 +4124,6 @@ "node": ">=14" } }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/conventional-commits-filter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", @@ -4811,12 +4157,6 @@ "node": ">=10" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -5136,28 +4476,148 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/default-require-extensions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", "dev": true, "dependencies": { - "strip-bom": "^4.0.0" + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-require-extensions/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "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": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=14.18.0" + } + }, + "node_modules/default-browser/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defaults": { @@ -5181,6 +4641,18 @@ "node": ">=10" } }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -5341,9 +4813,9 @@ } }, "node_modules/dompurify": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz", - "integrity": "sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==", + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", + "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==", "dev": true }, "node_modules/dot-case": { @@ -5388,6 +4860,12 @@ "readable-stream": "^2.0.2" } }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/duplexer2/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -5469,12 +4947,6 @@ "node": ">=0.10.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", - "dev": true - }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -5698,18 +5170,19 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -5729,14 +5202,18 @@ "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -5785,12 +5262,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5838,15 +5309,6 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5858,9 +5320,9 @@ } }, "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", + "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -5888,7 +5350,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -5900,7 +5361,6 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -5914,9 +5374,9 @@ } }, "node_modules/eslint-config-conventions": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-conventions/-/eslint-config-conventions-10.0.0.tgz", - "integrity": "sha512-X18p1/POZeYHTg05DnJYaLUSKcg/UtSSE2fL3lJfUCs2iice+bTPF6q1eHZZJUn5EQZ6oWh/x5Wx6aoZFahKeg==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-conventions/-/eslint-config-conventions-11.0.1.tgz", + "integrity": "sha512-Q64CuntM0w2eh5CjtEG0GuomdzxuGo+UIKlRAZDCQWAxfCteD6LUEIV+DAtfDOl3xTvDySCEh9Q7kOOkYMiuCA==", "dev": true, "engines": { "node": ">=16.0.0", @@ -5926,7 +5386,7 @@ "eslint": "^8.44.0", "eslint-plugin-import": "^2.27.5", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-unicorn": "^47.0.0" + "eslint-plugin-unicorn": "^48.0.0" } }, "node_modules/eslint-config-prettier": { @@ -6038,30 +5498,38 @@ } }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" }, "engines": { - "node": ">=12.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } @@ -6080,12 +5548,12 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "47.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz", - "integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==", + "version": "48.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.0.tgz", + "integrity": "sha512-8fk/v3p1ro34JSVDBEmtOq6EEQRpMR0iTir79q69KnXFZ6DJyPkT3RAi+ZoTqhQMdDSpGh8BGR68ne1sP5cnAA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-validator-identifier": "^7.22.5", "@eslint-community/eslint-utils": "^4.4.0", "ci-info": "^3.8.0", "clean-regexp": "^1.0.0", @@ -6096,10 +5564,9 @@ "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.24", + "regexp-tree": "^0.1.27", "regjsparser": "^0.10.0", - "safe-regex": "^2.1.1", - "semver": "^7.3.8", + "semver": "^7.5.4", "strip-indent": "^3.0.0" }, "engines": { @@ -6109,20 +5576,38 @@ "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=8.38.0" + "eslint": ">=8.44.0" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", + "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { @@ -6153,31 +5638,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6185,9 +5645,9 @@ "dev": true }, "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { "acorn": "^8.9.0", @@ -6226,15 +5686,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -6247,7 +5698,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -6256,15 +5707,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -6299,12 +5741,6 @@ "node": ">=0.8.x" } }, - "node_modules/events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", - "dev": true - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6488,9 +5924,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6562,9 +5998,9 @@ "integrity": "sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg==" }, "node_modules/fastify": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.19.1.tgz", - "integrity": "sha512-99r7xae02BUWI1H8exJidkFJXi/SUZpO18YIJ6SSWIB1bb5CN659ga0iB85oLD+C4D9LeTOKplOJ1/YcFsK7oQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.20.0.tgz", + "integrity": "sha512-zWWi5KGAb1YZ6fyrnFnA1CA1EZHkGM6YuELgB3QpS3l4lLRy14W1cc16b4KGPH/zQ98WCSdS+T41JkHY3eq1oA==", "dependencies": { "@fastify/ajv-compiler": "^3.5.0", "@fastify/error": "^3.2.0", @@ -6585,9 +6021,9 @@ } }, "node_modules/fastify-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.0.tgz", - "integrity": "sha512-79ak0JxddO0utAXAQ5ccKhvs6vX2MGyHHMMsmZkBANrq3hXc1CHzvNPHOcvTsVMEPl5I+NT+RO4YKMGehOfSIg==" + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", + "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==" }, "node_modules/fastq": { "version": "1.15.0", @@ -6751,23 +6187,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, "node_modules/find-my-way": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-7.6.2.tgz", @@ -6812,12 +6231,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", - "dev": true - }, "node_modules/findup-sync": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", @@ -6962,16 +6375,31 @@ } }, "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/form-data": { @@ -7014,6 +6442,12 @@ "readable-stream": "^2.0.0" } }, + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/from2/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -7044,32 +6478,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", - "dev": true - }, "node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -7108,12 +6516,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/function-loop": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", - "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", - "dev": true - }, "node_modules/function.prototype.name": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", @@ -7141,15 +6543,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -7174,15 +6567,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -7225,6 +6609,12 @@ "traverse": "~0.6.6" } }, + "node_modules/git-log-parser/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/git-log-parser/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -7489,12 +6879,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -7619,31 +7003,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/header-case": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", @@ -7662,6 +7021,14 @@ "node": ">=16.0.0" } }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -7710,12 +7077,6 @@ "node": ">=12" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -8258,6 +7619,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8291,6 +7667,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-interactive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", @@ -8485,16 +7879,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -8503,12 +7893,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -8554,10 +7938,37 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/isbinaryfile": { @@ -8603,175 +8014,22 @@ "node": ">=10.13" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", - "dev": true, - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jackspeak": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.2.tgz", - "integrity": "sha512-GHeGTmnuaHnvS+ZctRB01bfxARuu9wW83ENbuiweu07SFcVlZrJpcshSre/keGT7YGBhLHg/+rXCNSrsEHKU4Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", "dev": true, "dependencies": { - "cliui": "^7.0.4" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jake": { @@ -8927,15 +8185,15 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, "bin": { "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" } }, "node_modules/jsonfile": { @@ -8976,9 +8234,9 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", "dependencies": { "jws": "^3.2.2", "lodash": "^4.17.21", @@ -9016,9 +8274,9 @@ } }, "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -9046,42 +8304,6 @@ "node": ">= 0.8.0" } }, - "node_modules/libtap": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.1.tgz", - "integrity": "sha512-S9v19shLTigoMn3c02V7LZ4t09zxmVP3r3RbEAwuHFYeKgF+ESFJxoQ0PMFKW4XdgQhcjVBEwDoopG6WROq/gw==", - "dev": true, - "dependencies": { - "async-hook-domain": "^2.0.4", - "bind-obj-methods": "^3.0.0", - "diff": "^4.0.2", - "function-loop": "^2.0.1", - "minipass": "^3.1.5", - "own-or": "^1.0.0", - "own-or-env": "^1.0.2", - "signal-exit": "^3.0.4", - "stack-utils": "^2.0.4", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "tcompare": "^5.0.6", - "trivial-deferred": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/libtap/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/liftoff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-4.0.0.tgz", @@ -9463,12 +8685,6 @@ "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "dev": true }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -9683,9 +8899,9 @@ } }, "node_modules/maildev": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/maildev/-/maildev-2.0.5.tgz", - "integrity": "sha512-iwBss8fIQuQ8ycgszp7+T1+SjDobnwzLgjSwMcFoW0uJYNHfwQQeuC4+XL7/BH+uju5PeBtwzODuCJqScbnf6g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/maildev/-/maildev-2.1.0.tgz", + "integrity": "sha512-lCgcUbKENKui3IXo9Jb3ToD0ia23izb0NRWT+Y9Z7534gS2/t2VScbcZwm3i3BGcNSKs0aYXswX7eH2JYEDkVg==", "dev": true, "dependencies": { "addressparser": "1.0.1", @@ -9701,7 +8917,7 @@ "nodemailer": "^6.7.2", "rimraf": "^3.0.2", "smtp-server": "3.11.0", - "socket.io": "4.4.1", + "socket.io": "4.6.0", "uue": "3.1.2" }, "bin": { @@ -9730,9 +8946,9 @@ } }, "node_modules/maildev/node_modules/engine.io": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", - "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -9744,7 +8960,7 @@ "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" + "ws": "~8.11.0" }, "engines": { "node": ">=10.0.0" @@ -9807,46 +9023,26 @@ } }, "node_modules/maildev/node_modules/socket.io": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", - "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.0.tgz", + "integrity": "sha512-b65bp6INPk/BMMrIgVvX12x3Q+NqlGqSlTuvKQWt0BUJ3Hyy3JangBl7fEoWZTXbOKlCqNPbQ6MbWgok/km28w==", "dev": true, "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", - "socket.io-parser": "~4.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/maildev/node_modules/socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", - "dev": true - }, - "node_modules/maildev/node_modules/socket.io-parser": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", - "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", - "dev": true, - "dependencies": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" + "engine.io": "~6.4.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/maildev/node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -9864,30 +9060,6 @@ } } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -10053,9 +9225,9 @@ } }, "node_modules/marked": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.0.tgz", - "integrity": "sha512-z3/nBe7aTI8JDszlYLk7dDVNpngjw0o1ZJtrA9kIfkkHcIF+xH7mO23aISl4WxP83elU+MFROgahqdpd05lMEQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.1.tgz", + "integrity": "sha512-bTmmGdEINWmOMDjnPWDxGPQ4qkDLeYorpYbEtFOXzOruTwUE671q4Guiuchn4N8h/v6NGd7916kXsm3Iz4iUSg==", "dev": true, "bin": { "marked": "bin/marked.js" @@ -10112,9 +9284,9 @@ } }, "node_modules/marked-terminal/node_modules/type-fest": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", - "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, "engines": { "node": ">=14.16" @@ -10309,15 +9481,12 @@ } }, "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/mkdirp": { @@ -10448,48 +9617,6 @@ "lodash": "^4.17.21" } }, - "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-plop": { "version": "0.31.1", "resolved": "https://registry.npmjs.org/node-plop/-/node-plop-0.31.1.tgz", @@ -10515,14 +9642,14 @@ } }, "node_modules/node-plop/node_modules/globby": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.1.tgz", - "integrity": "sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, "dependencies": { "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" }, @@ -10545,28 +9672,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, "node_modules/nodemailer": { - "version": "6.9.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz", - "integrity": "sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==", + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.4.tgz", + "integrity": "sha512-CXjQvrQZV4+6X5wP6ZIgdehJamI63MFoYFGGPtHudWym9qaEHDNdPzaj5bfMCvxG1vhAileSWW90q7nL0N36mA==", "engines": { "node": ">=6.0.0" } @@ -10608,15 +9717,17 @@ } }, "node_modules/npm": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.7.2.tgz", - "integrity": "sha512-LLoOudiSURxzRxfGj+vsD+hKKv2EfxyshDOznxruIkZMouvbaF5sFm4yAwHqxS8aVaOdRl03pRmGpcrFMqMt3g==", + "version": "9.8.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", + "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", "@npmcli/config", + "@npmcli/fs", "@npmcli/map-workspaces", "@npmcli/package-json", + "@npmcli/promise-spawn", "@npmcli/run-script", "abbrev", "archy", @@ -10682,15 +9793,17 @@ "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.2.10", + "@npmcli/arborist": "^6.3.0", "@npmcli/config": "^6.2.1", + "@npmcli/fs": "^3.1.0", "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^3.1.1", + "@npmcli/package-json": "^4.0.1", + "@npmcli/promise-spawn": "^6.0.2", "@npmcli/run-script": "^6.0.2", "abbrev": "^2.0.0", "archy": "~1.0.0", "cacache": "^17.1.3", - "chalk": "^5.2.0", + "chalk": "^5.3.0", "ci-info": "^3.8.0", "cli-columns": "^4.0.0", "cli-table3": "^0.6.3", @@ -10705,18 +9818,18 @@ "is-cidr": "^4.0.2", "json-parse-even-better-errors": "^3.0.0", "libnpmaccess": "^7.0.2", - "libnpmdiff": "^5.0.18", - "libnpmexec": "^6.0.1", - "libnpmfund": "^4.0.18", + "libnpmdiff": "^5.0.19", + "libnpmexec": "^6.0.3", + "libnpmfund": "^4.0.19", "libnpmhook": "^9.0.3", "libnpmorg": "^5.0.4", - "libnpmpack": "^5.0.18", - "libnpmpublish": "^7.4.0", + "libnpmpack": "^5.0.19", + "libnpmpublish": "^7.5.0", "libnpmsearch": "^6.0.2", "libnpmteam": "^5.0.3", "libnpmversion": "^4.0.2", "make-fetch-happen": "^11.1.1", - "minimatch": "^9.0.0", + "minimatch": "^9.0.3", "minipass": "^5.0.0", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", @@ -10736,10 +9849,10 @@ "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", "read": "^2.1.0", - "semver": "^7.5.2", - "sigstore": "^1.6.0", + "semver": "^7.5.4", + "sigstore": "^1.7.0", "ssri": "^10.0.4", - "supports-color": "^9.3.1", + "supports-color": "^9.4.0", "tar": "^6.1.15", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", @@ -10852,7 +9965,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "6.2.10", + "version": "6.3.0", "dev": true, "inBundle": true, "license": "ISC", @@ -10864,7 +9977,7 @@ "@npmcli/metavuln-calculator": "^5.0.0", "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^3.0.0", + "@npmcli/package-json": "^4.0.0", "@npmcli/query": "^3.0.0", "@npmcli/run-script": "^6.0.0", "bin-links": "^4.0.1", @@ -11025,17 +10138,18 @@ } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "3.1.1", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/git": "^4.1.0", "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.1", - "proc-log": "^3.0.0" + "proc-log": "^3.0.0", + "semver": "^7.5.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -11101,14 +10215,13 @@ } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "1.0.0", + "version": "1.0.2", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" + "tuf-js": "^1.1.7" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -11281,7 +10394,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/bin-links": { - "version": "4.0.1", + "version": "4.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -11370,7 +10483,7 @@ } }, "node_modules/npm/node_modules/chalk": { - "version": "5.2.0", + "version": "5.3.0", "dev": true, "inBundle": true, "license": "MIT", @@ -12096,12 +11209,12 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "5.0.18", + "version": "5.0.19", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^6.2.10", + "@npmcli/arborist": "^6.3.0", "@npmcli/disparity-colors": "^3.0.0", "@npmcli/installed-package-contents": "^2.0.2", "binary-extensions": "^2.2.0", @@ -12116,12 +11229,12 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "6.0.1", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^6.2.10", + "@npmcli/arborist": "^6.3.0", "@npmcli/run-script": "^6.0.0", "ci-info": "^3.7.1", "npm-package-arg": "^10.1.0", @@ -12138,12 +11251,12 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "4.0.18", + "version": "4.0.19", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^6.2.10" + "@npmcli/arborist": "^6.3.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -12176,12 +11289,12 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "5.0.18", + "version": "5.0.19", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^6.2.10", + "@npmcli/arborist": "^6.3.0", "@npmcli/run-script": "^6.0.0", "npm-package-arg": "^10.1.0", "pacote": "^15.0.8" @@ -12191,7 +11304,7 @@ } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "7.4.0", + "version": "7.5.0", "dev": true, "inBundle": true, "license": "ISC", @@ -12286,7 +11399,7 @@ } }, "node_modules/npm/node_modules/minimatch": { - "version": "9.0.1", + "version": "9.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -13203,7 +12316,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.5.2", + "version": "7.5.4", "dev": true, "inBundle": true, "license": "ISC", @@ -13269,15 +12382,14 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "1.6.0", + "version": "1.7.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" + "@sigstore/tuf": "^1.0.1", + "make-fetch-happen": "^11.0.1" }, "bin": { "sigstore": "bin/sigstore.js" @@ -13432,7 +12544,7 @@ } }, "node_modules/npm/node_modules/supports-color": { - "version": "9.3.1", + "version": "9.4.0", "dev": true, "inBundle": true, "license": "MIT", @@ -13733,246 +12845,11 @@ "license": "ISC" }, "node_modules/nwsapi": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz", - "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/nyc/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/nyc/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/nyc/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -14128,20 +13005,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/openapi-types": { "version": "12.1.3", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==" }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -14273,21 +13159,6 @@ "node": ">=0.10.0" } }, - "node_modules/own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", - "dev": true - }, - "node_modules/own-or-env": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", - "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", - "dev": true, - "dependencies": { - "own-or": "^1.0.0" - } - }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -14466,27 +13337,12 @@ } }, "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "engines": { - "node": ">=6" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/param-case": { @@ -14642,13 +13498,13 @@ } }, "node_modules/path-scurry": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.0.tgz", - "integrity": "sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -14666,15 +13522,6 @@ "node": "14 || >=16.14" } }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -14847,15 +13694,6 @@ "node": ">=4" } }, - "node_modules/pkg-conf/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/pkg-conf/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -14865,70 +13703,6 @@ "node": ">=4" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/plop": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/plop/-/plop-3.1.2.tgz", @@ -14982,15 +13756,15 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -15009,20 +13783,19 @@ } }, "node_modules/prisma": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.16.2.tgz", - "integrity": "sha512-SYCsBvDf0/7XSJyf2cHTLjLeTLVXYfqp7pG5eEVafFLeT0u/hLFz/9W196nDRGUOo1JfPatAEb+uEnTQImQC1g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.0.0.tgz", + "integrity": "sha512-KYWk83Fhi1FH59jSpavAYTt2eoMVW9YKgu8ci0kuUnt6Dup5Qy47pcB4/TLmiPAbhGrxxSz7gsSnJcCmkyPANA==", "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "4.16.2" + "@prisma/engines": "5.0.0" }, "bin": { - "prisma": "build/index.js", - "prisma2": "build/index.js" + "prisma": "build/index.js" }, "engines": { - "node": ">=14.17" + "node": ">=16.13" } }, "node_modules/process": { @@ -15039,18 +13812,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/process-warning": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", @@ -15350,6 +14111,15 @@ "node": ">=8" } }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/read-pkg-up/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -15375,9 +14145,9 @@ } }, "node_modules/read-pkg-up/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -15460,9 +14230,9 @@ } }, "node_modules/read-pkg/node_modules/type-fest": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", - "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "engines": { "node": ">=14.16" }, @@ -15471,14 +14241,15 @@ } }, "node_modules/readable-stream": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.1.tgz", - "integrity": "sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", - "process": "^0.11.10" + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -15633,18 +14404,6 @@ "jsesc": "bin/jsesc" } }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -15662,12 +14421,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -15805,33 +14558,17 @@ "balanced-match": "^1.0.0" } }, - "node_modules/rimraf/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rimraf/node_modules/glob": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.1.tgz", - "integrity": "sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==", + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.10.0" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/cjs/src/bin.js" @@ -15843,28 +14580,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", - "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -15876,25 +14595,19 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/rimraf/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/run-async": { @@ -15938,6 +14651,24 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -15957,15 +14688,6 @@ } ] }, - "node_modules/safe-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", - "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", - "dev": true, - "dependencies": { - "regexp-tree": "~0.1.1" - } - }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -16020,9 +14742,9 @@ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" }, "node_modules/semantic-release": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.6.tgz", - "integrity": "sha512-NDyosObAwUNzPpdf+mpL49Xy+5iYHjdWM34LBNdbdYv9vBLbw+eCCDihxcqPh+f9m4ZzlBrYCkHUaZv2vPGW9A==", + "version": "21.0.7", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", + "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", "dev": true, "dependencies": { "@semantic-release/commit-analyzer": "^10.0.0", @@ -16047,7 +14769,7 @@ "micromatch": "^4.0.2", "p-each-series": "^3.0.0", "p-reduce": "^3.0.0", - "read-pkg-up": "^9.1.0", + "read-pkg-up": "^10.0.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", "semver-diff": "^4.0.0", @@ -16342,36 +15064,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/read-pkg": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/semantic-release/node_modules/read-pkg-up": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", + "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", "dev": true, "dependencies": { "find-up": "^6.3.0", - "read-pkg": "^7.1.0", - "type-fest": "^2.5.0" + "read-pkg": "^8.0.0", + "type-fest": "^3.12.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -16390,12 +15094,12 @@ } }, "node_modules/semantic-release/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, "engines": { - "node": ">=12.20" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -16546,12 +15250,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, "node_modules/set-cookie-parser": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", @@ -16895,25 +15593,6 @@ "node": ">= 8" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/spawn-command": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", @@ -16926,58 +15605,6 @@ "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", "dev": true }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/spawn-wrap/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/spawn-wrap/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -17041,33 +15668,6 @@ "node": ">= 6" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -17101,6 +15701,12 @@ "readable-stream": "^2.0.2" } }, + "node_modules/stream-combiner2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/stream-combiner2/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -17143,7 +15749,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -17423,2117 +16028,39 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "node_modules/tap": { - "version": "16.3.7", - "resolved": "https://registry.npmjs.org/tap/-/tap-16.3.7.tgz", - "integrity": "sha512-AaovVsfXVKcIf9eD1NxgwIqSDz5LauvybTpS6bjAKVYqz3+iavHC1abwxTkXmswb2n7eq8qKLt8DvY3D6iWcYA==", - "bundleDependencies": [ - "ink", - "treport", - "@types/react", - "@isaacs/import-jsx", - "react" - ], + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", "dev": true, "dependencies": { - "@isaacs/import-jsx": "^4.0.1", - "@types/react": "^17.0.52", - "chokidar": "^3.3.0", - "findit": "^2.0.0", - "foreground-child": "^2.0.0", - "fs-exists-cached": "^1.0.0", - "glob": "^7.2.3", - "ink": "^3.2.0", - "isexe": "^2.0.0", - "istanbul-lib-processinfo": "^2.0.3", - "jackspeak": "^1.4.2", - "libtap": "^1.4.0", - "minipass": "^3.3.4", - "mkdirp": "^1.0.4", - "nyc": "^15.1.0", - "opener": "^1.5.1", - "react": "^17.0.2", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.6", - "source-map-support": "^0.5.16", - "tap-mocha-reporter": "^5.0.3", - "tap-parser": "^11.0.2", - "tap-yaml": "^1.0.2", - "tcompare": "^5.0.7", - "treport": "^3.0.4", - "which": "^2.0.2" - }, - "bin": { - "tap": "bin/run.js" + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=12" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "peerDependencies": { - "coveralls": "^3.1.1", - "flow-remove-types": ">=2.112.0", - "ts-node": ">=8.5.2", - "typescript": ">=3.7.2" - }, - "peerDependenciesMeta": { - "coveralls": { - "optional": true - }, - "flow-remove-types": { - "optional": true - }, - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/tap-mocha-reporter": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", - "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", - "dev": true, - "dependencies": { - "color-support": "^1.1.0", - "debug": "^4.1.1", - "diff": "^4.0.1", - "escape-string-regexp": "^2.0.0", - "glob": "^7.0.5", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "unicode-length": "^2.0.2" - }, - "bin": { - "tap-mocha-reporter": "index.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tap-mocha-reporter/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tap-mocha-reporter/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap-mocha-reporter/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tap-parser": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.2.tgz", - "integrity": "sha512-6qGlC956rcORw+fg7Fv1iCRAY8/bU9UabUAhs3mXRH6eRmVZcNPLheSXCYaVaYeSwx5xa/1HXZb1537YSvwDZg==", - "dev": true, - "dependencies": { - "events-to-array": "^1.0.1", - "minipass": "^3.1.6", - "tap-yaml": "^1.0.0" - }, - "bin": { - "tap-parser": "bin/cmd.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tap-yaml": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.2.tgz", - "integrity": "sha512-GegASpuqBnRNdT1U+yuUPZ8rEU64pL35WPBpCISWwff4dErS2/438barz7WFJl4Nzh3Y05tfPidZnH+GaV1wMg==", - "dev": true, - "dependencies": { - "yaml": "^1.10.2" - } - }, - "node_modules/tap-yaml/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tap/node_modules/@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tap/node_modules/@babel/code-frame": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/compat-data": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/core": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/tap/node_modules/@babel/generator": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helpers": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/highlight": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/parser": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/template": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/traverse": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/types": { - "version": "7.22.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@isaacs/import-jsx": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-react-jsx": "^7.3.0", - "caller-path": "^3.0.1", - "find-cache-dir": "^3.2.0", - "make-dir": "^3.0.2", - "resolve-from": "^3.0.0", - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tap/node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tap/node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tap/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/tap/node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/@types/prop-types": { - "version": "15.7.5", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/@types/react": { - "version": "17.0.62", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/tap/node_modules/@types/scheduler": { - "version": "0.16.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/@types/yoga-layout": { - "version": "1.9.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "inBundle": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/ansicolors": { - "version": "0.3.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/auto-bind": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/tap/node_modules/browserslist": { - "version": "4.21.9", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/tap/node_modules/caller-callsite": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/caller-path": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "caller-callsite": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/caniuse-lite": { - "version": "1.0.30001506", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "inBundle": true, - "license": "CC-BY-4.0" - }, - "node_modules/tap/node_modules/cardinal": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, - "node_modules/tap/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/ci-info": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/cli-boxes": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/code-excerpt": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "convert-to-spaces": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tap/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/convert-to-spaces": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/tap/node_modules/csstype": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/tap/node_modules/electron-to-chromium": { - "version": "1.4.438", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tap/node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/events-to-array": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/tap/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tap/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/tap/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/ink": { - "version": "3.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "auto-bind": "4.0.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "code-excerpt": "^3.0.0", - "indent-string": "^4.0.0", - "is-ci": "^2.0.0", - "lodash": "^4.17.20", - "patch-console": "^1.0.0", - "react-devtools-core": "^4.19.1", - "react-reconciler": "^0.26.2", - "scheduler": "^0.20.2", - "signal-exit": "^3.0.2", - "slice-ansi": "^3.0.0", - "stack-utils": "^2.0.2", - "string-width": "^4.2.2", - "type-fest": "^0.12.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0", - "ws": "^7.5.5", - "yoga-layout-prebuilt": "^1.9.6" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": ">=16.8.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/tap/node_modules/ink/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/ink/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/tap/node_modules/ink/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/ink/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/ink/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/ink/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/is-ci": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/tap/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/json5": { - "version": "2.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/tap/node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/tap/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tap/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/node-releases": { - "version": "2.0.12", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/once": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/tap/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/patch-console": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/react": { - "version": "17.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/react-devtools-core": { - "version": "4.27.8", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/tap/node_modules/react-reconciler": { - "version": "0.26.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "react": "^17.0.2" - } - }, - "node_modules/tap/node_modules/redeyed": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "esprima": "~4.0.0" - } - }, - "node_modules/tap/node_modules/resolve-from": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tap/node_modules/scheduler": { - "version": "0.20.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/tap/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tap/node_modules/shell-quote": { - "version": "1.8.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tap/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/stack-utils": { - "version": "2.0.6", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/tap-parser": { - "version": "11.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "events-to-array": "^1.0.1", - "minipass": "^3.1.6", - "tap-yaml": "^1.0.0" - }, - "bin": { - "tap-parser": "bin/cmd.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tap/node_modules/tap-yaml": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yaml": "^1.10.2" - } - }, - "node_modules/tap/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/treport": { - "version": "3.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/import-jsx": "^4.0.1", - "cardinal": "^2.1.1", - "chalk": "^3.0.0", - "ink": "^3.2.0", - "ms": "^2.1.2", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "unicode-length": "^2.0.2" - }, - "peerDependencies": { - "react": "^17.0.2" - } - }, - "node_modules/tap/node_modules/treport/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/treport/node_modules/chalk": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/treport/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/treport/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/treport/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/treport/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/type-fest": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/unicode-length": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.0.0" - } - }, - "node_modules/tap/node_modules/update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/tap/node_modules/widest-line": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/ws": { - "version": "7.5.9", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/tap/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/tap/node_modules/yoga-layout-prebuilt": { - "version": "1.10.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@types/yoga-layout": "1.9.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tcompare": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", - "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", - "dev": true, - "dependencies": { - "diff": "^4.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tcompare/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" + "url": "https://opencollective.com/unts" } }, "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=14.16" } }, "node_modules/tempy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz", - "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", "dev": true, "dependencies": { "is-stream": "^3.0.0", - "temp-dir": "^2.0.0", + "temp-dir": "^3.0.0", "type-fest": "^2.12.2", "unique-string": "^3.0.0" }, @@ -19568,40 +16095,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/text-decoding": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", @@ -19676,6 +16169,18 @@ "tslib": "^2.0.3" } }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -19688,15 +16193,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -19821,13 +16317,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/trivial-deferred": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.1.2.tgz", - "integrity": "sha512-vDPiDBC3hyP6O4JrJYMImW3nl3c03Tsj9fEXc7Qc/XKa1O7gf5ZtFfIR/E0dun9SnDHdwjna1Z2rSzYgqpxh/g==", + "node_modules/ts-api-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", + "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, "node_modules/ts-node": { @@ -19903,45 +16402,12 @@ "strip-bom": "^3.0.0" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/tslib": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", "dev": true }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -19987,6 +16453,57 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -20001,26 +16518,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/uc.micro": { @@ -20066,15 +16574,6 @@ "node": ">=0.10.0" } }, - "node_modules/unicode-length": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.1.0.tgz", - "integrity": "sha512-4bV582zTV9Q02RXBxSUMiuN/KHo5w4aTojuKTNT96DIKps/SIawFp7cS5Mu25VuY1AioGXrmYyzKZUzh8OqoUw==", - "dev": true, - "dependencies": { - "punycode": "^2.0.0" - } - }, "node_modules/unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", @@ -20114,34 +16613,13 @@ "node": ">= 0.8" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "engines": { + "node": ">=8" } }, "node_modules/upper-case": { @@ -20223,35 +16701,12 @@ "node": ">=0.8.0" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/v8flags": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.0.tgz", @@ -20395,24 +16850,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true - }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -20525,18 +16973,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", @@ -20631,20 +17067,6 @@ "node": ">=10" } }, - "node_modules/yargs/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", diff --git a/package.json b/package.json index 9b3049e..560f70e 100644 --- a/package.json +++ b/package.json @@ -27,10 +27,10 @@ "lint:commit": "commitlint", "lint:editorconfig": "editorconfig-checker", "lint:markdown": "markdownlint-cli2", - "lint:eslint": "eslint . --ignore-path .gitignore", - "lint:prettier": "prettier . --check --ignore-path .gitignore", + "lint:eslint": "eslint . --max-warnings 0 --report-unused-disable-directives --ignore-path .gitignore", + "lint:prettier": "prettier . --check", "lint:staged": "lint-staged", - "test": "cross-env NODE_ENV=test c8 tap", + "test": "cross-env NODE_ENV=test node --enable-source-maps --test build/", "prisma:validate": "prisma validate", "prisma:generate": "prisma generate", "prisma:studio": "prisma studio --browser=none", @@ -42,35 +42,35 @@ "dependencies": { "@fastify/cors": "8.3.0", "@fastify/helmet": "11.0.0", - "@fastify/multipart": "7.7.0", - "@fastify/rate-limit": "8.0.1", + "@fastify/multipart": "7.6.0", + "@fastify/rate-limit": "8.0.3", "@fastify/sensible": "5.2.0", - "@fastify/swagger": "8.6.0", + "@fastify/swagger": "8.8.0", "@fastify/swagger-ui": "1.9.2", - "@prisma/client": "4.16.2", - "@sinclair/typebox": "0.29.0", - "@thream/socketio-jwt": "3.1.1", + "@prisma/client": "5.0.0", + "@sinclair/typebox": "0.29.6", + "@thream/socketio-jwt": "3.1.2", "axios": "1.4.0", "bcryptjs": "2.4.3", "dotenv": "16.3.1", "ejs": "3.1.9", - "fastify": "4.19.1", - "fastify-plugin": "4.5.0", + "fastify": "4.20.0", + "fastify-plugin": "4.5.1", "form-data": "4.0.0", "http-errors": "2.0.0", - "jsonwebtoken": "9.0.0", + "jsonwebtoken": "9.0.1", "ms": "2.1.3", - "nodemailer": "6.9.3", + "nodemailer": "6.9.4", "read-pkg": "8.0.0", "socket.io": "4.7.1" }, "devDependencies": { - "@commitlint/cli": "17.6.6", - "@commitlint/config-conventional": "17.6.6", + "@commitlint/cli": "17.6.7", + "@commitlint/config-conventional": "17.6.7", "@saithodev/semantic-release-backmerge": "3.2.0", "@semantic-release/git": "10.0.1", "@swc/cli": "0.1.62", - "@swc/core": "1.3.67", + "@swc/core": "1.3.70", "@tsconfig/strictest": "2.0.1", "@types/bcryptjs": "2.4.2", "@types/busboy": "1.5.0", @@ -78,35 +78,33 @@ "@types/http-errors": "2.0.1", "@types/jsonwebtoken": "9.0.2", "@types/ms": "0.7.31", - "@types/node": "20.3.3", + "@types/node": "20.4.3", "@types/nodemailer": "6.4.8", "@types/sinon": "10.0.15", - "@types/tap": "15.0.8", - "@typescript-eslint/eslint-plugin": "5.60.1", - "@typescript-eslint/parser": "5.60.1", - "c8": "8.0.0", + "@typescript-eslint/eslint-plugin": "6.1.0", + "@typescript-eslint/parser": "6.1.0", + "chokidar": "3.5.3", "concurrently": "8.2.0", "cross-env": "7.0.3", "editorconfig-checker": "5.1.1", - "eslint": "8.44.0", - "eslint-config-conventions": "10.0.0", + "eslint": "8.45.0", + "eslint-config-conventions": "11.0.1", "eslint-config-prettier": "8.8.0", "eslint-plugin-import": "2.27.5", - "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-prettier": "5.0.0", "eslint-plugin-promise": "6.1.1", - "eslint-plugin-unicorn": "47.0.0", + "eslint-plugin-unicorn": "48.0.0", "husky": "8.0.3", "lint-staged": "13.2.3", - "maildev": "2.0.5", + "maildev": "2.1.0", "markdownlint-cli2": "0.8.1", "markdownlint-rule-relative-links": "2.1.0", "plop": "3.1.2", - "prettier": "2.8.8", - "prisma": "4.16.2", + "prettier": "3.0.0", + "prisma": "5.0.0", "rimraf": "5.0.1", - "semantic-release": "21.0.6", + "semantic-release": "21.0.7", "sinon": "15.2.0", - "tap": "16.3.7", - "typescript": "5.0.4" + "typescript": "5.1.6" } } diff --git a/src/__test__/utils/authenticateUserTest.ts b/src/__test__/utils/authenticateUserTest.ts index 7715571..cc88da9 100644 --- a/src/__test__/utils/authenticateUserTest.ts +++ b/src/__test__/utils/authenticateUserTest.ts @@ -1,45 +1,46 @@ import type { User } from '@prisma/client' import sinon from 'sinon' -import { refreshTokenExample } from '../../models/RefreshToken.js' -import type { UserJWT } from '../../models/User.js' -import { userExample } from '../../models/User.js' -import { userSettingsExample } from '../../models/UserSettings.js' +import { refreshTokenExample } from '#src/models/RefreshToken.js' +import type { UserJWT } from '#src/models/User.js' +import { userExample } from '#src/models/User.js' +import { userSettingsExample } from '#src/models/UserSettings.js' import { generateAccessToken, generateRefreshToken -} from '../../tools/utils/jwtToken.js' -import prisma from '../../tools/database/prisma.js' +} from '#src/tools/utils/jwtToken.js' +import prisma from '#src/tools/database/prisma.js' + +const userStubValue = { + findUnique: async () => { + return userExample + } +} +const userSettingStubValue = { + findFirst: async () => { + return userSettingsExample + } +} +const oAuthStubValue = { + findMany: async () => { + return [] + } +} +const refreshTokenStubValue = { + create: async () => { + return refreshTokenExample + } +} export const authenticateUserTest = async (): Promise<{ accessToken: string refreshToken: string user: User - userStubValue: any - userSettingStubValue: any - oAuthStubValue: any - refreshTokenStubValue: any + userStubValue: typeof userStubValue + userSettingStubValue: typeof userSettingStubValue + oAuthStubValue: typeof oAuthStubValue + refreshTokenStubValue: typeof refreshTokenStubValue }> => { - const userStubValue = { - findUnique: async () => { - return userExample - } - } - const userSettingStubValue = { - findFirst: async () => { - return userSettingsExample - } - } - const oAuthStubValue = { - findMany: async () => { - return [] - } - } - const refreshTokenStubValue = { - create: async () => { - return refreshTokenExample - } - } sinon.stub(prisma, 'user').value(userStubValue) sinon.stub(prisma, 'userSetting').value(userSettingStubValue) sinon.stub(prisma, 'oAuth').value(oAuthStubValue) diff --git a/src/application.ts b/src/application.ts index d52c21b..5377dfc 100644 --- a/src/application.ts +++ b/src/application.ts @@ -8,8 +8,8 @@ import fastifyRateLimit from '@fastify/rate-limit' import fastifySensible from '@fastify/sensible' import { readPackage } from 'read-pkg' -import { services } from './services/index.js' -import fastifySocketIo from './tools/plugins/socket-io.js' +import { services } from '#src/services/index.js' +import fastifySocketIo from '#src/tools/plugins/socket-io.js' dotenv.config() const packageJSON = await readPackage() diff --git a/src/index.ts b/src/index.ts index a0270e0..7257b86 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,8 @@ -import { application } from './application.js' +import { application } from '#src/application.js' import { HOST, PORT } from '#src/tools/configurations.js' const address = await application.listen({ port: PORT, host: HOST }) -console.log('\u001B[36m%s\u001B[0m', `🚀 Server listening at ${address}`) +console.log(`Server listening at ${address}`) diff --git a/src/models/Channel.ts b/src/models/Channel.ts index e8ba00a..3f57bb2 100644 --- a/src/models/Channel.ts +++ b/src/models/Channel.ts @@ -1,8 +1,8 @@ import { Type } from '@sinclair/typebox' import type { Channel } from '@prisma/client' -import { date, id } from './utils.js' -import { guildExample } from './Guild.js' +import { date, id } from '#src/models/utils.js' +import { guildExample } from '#src/models/Guild.js' export const types = [Type.Literal('text')] diff --git a/src/models/Guild.ts b/src/models/Guild.ts index f7b8681..46bff33 100644 --- a/src/models/Guild.ts +++ b/src/models/Guild.ts @@ -1,7 +1,7 @@ import type { Guild } from '@prisma/client' import { Type } from '@sinclair/typebox' -import { date, id } from './utils.js' +import { date, id } from '#src/models/utils.js' export const guildSchema = { id, diff --git a/src/models/Member.ts b/src/models/Member.ts index e0f5531..d780b1f 100644 --- a/src/models/Member.ts +++ b/src/models/Member.ts @@ -1,9 +1,9 @@ import { Type } from '@sinclair/typebox' import type { Member } from '@prisma/client' -import { date, id } from './utils.js' -import { guildExample } from './Guild.js' -import { userExample } from './User.js' +import { date, id } from '#src/models/utils.js' +import { guildExample } from '#src/models/Guild.js' +import { userExample } from '#src/models/User.js' export const memberSchema = { id, diff --git a/src/models/Message.ts b/src/models/Message.ts index 3a576a6..e43ad24 100644 --- a/src/models/Message.ts +++ b/src/models/Message.ts @@ -1,7 +1,7 @@ import type { Message } from '@prisma/client' import { Type } from '@sinclair/typebox' -import { date, id } from './utils.js' +import { date, id } from '#src/models/utils.js' export const types = [Type.Literal('text'), Type.Literal('file')] diff --git a/src/models/OAuth.ts b/src/models/OAuth.ts index e85794f..06c12c8 100644 --- a/src/models/OAuth.ts +++ b/src/models/OAuth.ts @@ -1,6 +1,6 @@ import { Type } from '@sinclair/typebox' -import { date, id } from './utils.js' +import { date, id } from '#src/models/utils.js' export const providers = ['Google', 'GitHub', 'Discord'] as const export const strategies = [...providers, 'Local'] as const diff --git a/src/models/RefreshToken.ts b/src/models/RefreshToken.ts index caf6fe0..276290d 100644 --- a/src/models/RefreshToken.ts +++ b/src/models/RefreshToken.ts @@ -1,8 +1,8 @@ import type { RefreshToken } from '@prisma/client' import { Type } from '@sinclair/typebox' -import { userExample } from './User.js' -import { date, id } from './utils.js' +import { userExample } from '#src/models/User.js' +import { date, id } from '#src/models/utils.js' export const refreshTokensSchema = { id, diff --git a/src/models/User.ts b/src/models/User.ts index 57b1c60..19b12db 100644 --- a/src/models/User.ts +++ b/src/models/User.ts @@ -2,10 +2,10 @@ import type { User } from '@prisma/client' import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' -import type { AuthenticationStrategy } from './OAuth.js' -import { strategiesTypebox } from './OAuth.js' -import { userSettingsSchema } from './UserSettings.js' -import { date, id } from './utils.js' +import type { AuthenticationStrategy } from '#src/models/OAuth.js' +import { strategiesTypebox } from '#src/models/OAuth.js' +import { userSettingsSchema } from '#src/models/UserSettings.js' +import { date, id } from '#src/models/utils.js' export interface UserJWT { id: number diff --git a/src/models/UserSettings.ts b/src/models/UserSettings.ts index 63142b5..f72d9d2 100644 --- a/src/models/UserSettings.ts +++ b/src/models/UserSettings.ts @@ -2,7 +2,7 @@ import type { UserSetting } from '@prisma/client' import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' -import { date, id } from './utils.js' +import { date, id } from '#src/models/utils.js' export const languages = [Type.Literal('fr'), Type.Literal('en')] export const themes = [Type.Literal('light'), Type.Literal('dark')] diff --git a/src/services/channels/[channelId]/__test__/delete.test.ts b/src/services/channels/[channelId]/__test__/delete.test.ts index 6b40605..3b65595 100644 --- a/src/services/channels/[channelId]/__test__/delete.test.ts +++ b/src/services/channels/[channelId]/__test__/delete.test.ts @@ -1,18 +1,20 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { channelExample } from '../../../../models/Channel.js' -import { memberExample } from '../../../../models/Member.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { channelExample } from '#src/models/Channel.js' +import { memberExample } from '#src/models/Member.js' -await tap.test('DELETE /channels/[channelId]', async (t) => { +await test('DELETE /channels/[channelId]', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const defaultChannelId = 5 const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ @@ -45,14 +47,14 @@ await tap.test('DELETE /channels/[channelId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.id, channelExample.id) - t.equal(responseJson.name, channelExample.name) - t.equal(responseJson.guildId, channelExample.guildId) - t.equal(responseJson.defaultChannelId, defaultChannelId) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.id, channelExample.id) + assert.strictEqual(responseJson.name, channelExample.name) + assert.strictEqual(responseJson.guildId, channelExample.guildId) + assert.strictEqual(responseJson.defaultChannelId, defaultChannelId) }) - await t.test('fails if there is only one channel', async (t) => { + await t.test('fails if there is only one channel', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -74,10 +76,10 @@ await tap.test('DELETE /channels/[channelId]', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test('fails if the channel is not found', async (t) => { + await t.test('fails if the channel is not found', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -91,10 +93,10 @@ await tap.test('DELETE /channels/[channelId]', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the member is not found', async (t) => { + await t.test('fails if the member is not found', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -113,10 +115,10 @@ await tap.test('DELETE /channels/[channelId]', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the member is not owner', async (t) => { + await t.test('fails if the member is not owner', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -138,6 +140,6 @@ await tap.test('DELETE /channels/[channelId]', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/channels/[channelId]/__test__/get.test.ts b/src/services/channels/[channelId]/__test__/get.test.ts index 3232f1d..a1b0d39 100644 --- a/src/services/channels/[channelId]/__test__/get.test.ts +++ b/src/services/channels/[channelId]/__test__/get.test.ts @@ -1,18 +1,20 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { channelExample } from '../../../../models/Channel.js' -import { memberExample } from '../../../../models/Member.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { channelExample } from '#src/models/Channel.js' +import { memberExample } from '#src/models/Member.js' -await tap.test('GET /channels/[channelId]', async (t) => { +await test('GET /channels/[channelId]', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -32,13 +34,13 @@ await tap.test('GET /channels/[channelId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.channel.id, channelExample.id) - t.equal(responseJson.channel.name, channelExample.name) - t.equal(responseJson.channel.guildId, channelExample.guildId) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.channel.id, channelExample.id) + assert.strictEqual(responseJson.channel.name, channelExample.name) + assert.strictEqual(responseJson.channel.guildId, channelExample.guildId) }) - await t.test('fails with not found member', async (t) => { + await t.test('fails with not found member', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -58,11 +60,11 @@ await tap.test('GET /channels/[channelId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'Channel not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'Channel not found') }) - await t.test('fails with not found channel', async (t) => { + await t.test('fails with not found channel', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -82,15 +84,15 @@ await tap.test('GET /channels/[channelId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'Channel not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'Channel not found') }) - await t.test('fails with unauthenticated user', async (t) => { + await t.test('fails with unauthenticated user', async () => { const response = await application.inject({ method: 'GET', url: '/channels/1' }) - t.equal(response.statusCode, 401) + assert.strictEqual(response.statusCode, 401) }) }) diff --git a/src/services/channels/[channelId]/__test__/put.test.ts b/src/services/channels/[channelId]/__test__/put.test.ts index 188776f..d551d83 100644 --- a/src/services/channels/[channelId]/__test__/put.test.ts +++ b/src/services/channels/[channelId]/__test__/put.test.ts @@ -1,20 +1,22 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { channelExample } from '../../../../models/Channel.js' -import { memberExample } from '../../../../models/Member.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { channelExample } from '#src/models/Channel.js' +import { memberExample } from '#src/models/Member.js' const newName = 'new channel name' -await tap.test('PUT /channels/[channelId]', async (t) => { +await test('PUT /channels/[channelId]', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const defaultChannelId = 5 const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ @@ -48,14 +50,14 @@ await tap.test('PUT /channels/[channelId]', async (t) => { payload: { name: newName } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.id, channelExample.id) - t.equal(responseJson.name, newName) - t.equal(responseJson.guildId, channelExample.guildId) - t.equal(responseJson.defaultChannelId, defaultChannelId) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.id, channelExample.id) + assert.strictEqual(responseJson.name, newName) + assert.strictEqual(responseJson.guildId, channelExample.guildId) + assert.strictEqual(responseJson.defaultChannelId, defaultChannelId) }) - await t.test('fails if the channel is not found', async (t) => { + await t.test('fails if the channel is not found', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -75,10 +77,10 @@ await tap.test('PUT /channels/[channelId]', async (t) => { }, payload: { name: newName } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the member is not found', async (t) => { + await t.test('fails if the member is not found', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -98,10 +100,10 @@ await tap.test('PUT /channels/[channelId]', async (t) => { }, payload: { name: newName } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the member is not owner', async (t) => { + await t.test('fails if the member is not owner', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -124,6 +126,6 @@ await tap.test('PUT /channels/[channelId]', async (t) => { }, payload: { name: newName } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/channels/[channelId]/delete.ts b/src/services/channels/[channelId]/delete.ts index 7fbd526..b32688a 100644 --- a/src/services/channels/[channelId]/delete.ts +++ b/src/services/channels/[channelId]/delete.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { channelSchema } from '../../../models/Channel.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { channelSchema } from '#src/models/Channel.js' const parametersSchema = Type.Object({ channelId: channelSchema.id @@ -48,8 +48,8 @@ export const deleteChannelService: FastifyPluginAsync = async (fastify) => { if (request.user == null) { throw fastify.httpErrors.forbidden() } - const { user } = request - const { channelId } = request.params + const { user, params } = request + const { channelId } = params const channelCheck = await prisma.channel.findUnique({ where: { id: channelId } }) diff --git a/src/services/channels/[channelId]/get.ts b/src/services/channels/[channelId]/get.ts index 5bf4907..ab255e2 100644 --- a/src/services/channels/[channelId]/get.ts +++ b/src/services/channels/[channelId]/get.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { channelSchema } from '../../../models/Channel.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { channelSchema } from '#src/models/Channel.js' const parametersSchema = Type.Object({ channelId: channelSchema.id diff --git a/src/services/channels/[channelId]/messages/__test__/get.test.ts b/src/services/channels/[channelId]/messages/__test__/get.test.ts index 4ed4ea6..829e1eb 100644 --- a/src/services/channels/[channelId]/messages/__test__/get.test.ts +++ b/src/services/channels/[channelId]/messages/__test__/get.test.ts @@ -1,20 +1,22 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../../application.js' -import { authenticateUserTest } from '../../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../../tools/database/prisma.js' -import { channelExample } from '../../../../../models/Channel.js' -import { memberExample } from '../../../../../models/Member.js' -import { userExample } from '../../../../../models/User.js' -import { messageExample } from '../../../../../models/Message.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { channelExample } from '#src/models/Channel.js' +import { memberExample } from '#src/models/Member.js' +import { userExample } from '#src/models/User.js' +import { messageExample } from '#src/models/Message.js' -await tap.test('GET /channels/[channelId]/messages', async (t) => { +await test('GET /channels/[channelId]/messages', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -42,19 +44,19 @@ await tap.test('GET /channels/[channelId]/messages', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.length, 1) - t.equal(responseJson[0].id, messageExample.id) - t.equal(responseJson[0].value, messageExample.value) - t.equal(responseJson[0].type, messageExample.type) - t.equal(responseJson[0].mimetype, messageExample.mimetype) - t.equal(responseJson[0].member.id, memberExample.id) - t.equal(responseJson[0].member.isOwner, memberExample.isOwner) - t.equal(responseJson[0].member.user.id, userExample.id) - t.equal(responseJson[0].member.user.name, userExample.name) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.length, 1) + assert.strictEqual(responseJson[0].id, messageExample.id) + assert.strictEqual(responseJson[0].value, messageExample.value) + assert.strictEqual(responseJson[0].type, messageExample.type) + assert.strictEqual(responseJson[0].mimetype, messageExample.mimetype) + assert.strictEqual(responseJson[0].member.id, memberExample.id) + assert.strictEqual(responseJson[0].member.isOwner, memberExample.isOwner) + assert.strictEqual(responseJson[0].member.user.id, userExample.id) + assert.strictEqual(responseJson[0].member.user.name, userExample.name) }) - await t.test('fails with not found channel', async (t) => { + await t.test('fails with not found channel', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -77,11 +79,11 @@ await tap.test('GET /channels/[channelId]/messages', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'Channel not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'Channel not found') }) - await t.test('fails with not found member', async (t) => { + await t.test('fails with not found member', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -101,15 +103,15 @@ await tap.test('GET /channels/[channelId]/messages', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'Channel not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'Channel not found') }) - await t.test('fails with unauthenticated user', async (t) => { + await t.test('fails with unauthenticated user', async () => { const response = await application.inject({ method: 'GET', url: `/channels/1/messages` }) - t.equal(response.statusCode, 401) + assert.strictEqual(response.statusCode, 401) }) }) diff --git a/src/services/channels/[channelId]/messages/__test__/post.test.ts b/src/services/channels/[channelId]/messages/__test__/post.test.ts index 4b9cf46..4e2e891 100644 --- a/src/services/channels/[channelId]/messages/__test__/post.test.ts +++ b/src/services/channels/[channelId]/messages/__test__/post.test.ts @@ -1,20 +1,22 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../../application.js' -import { authenticateUserTest } from '../../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../../tools/database/prisma.js' -import { channelExample } from '../../../../../models/Channel.js' -import { memberExample } from '../../../../../models/Member.js' -import { userExample } from '../../../../../models/User.js' -import { messageExample } from '../../../../../models/Message.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { channelExample } from '#src/models/Channel.js' +import { memberExample } from '#src/models/Member.js' +import { userExample } from '#src/models/User.js' +import { messageExample } from '#src/models/Message.js' -await tap.test('POST /channels/[channelId]/messages', async (t) => { +await test('POST /channels/[channelId]/messages', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -43,18 +45,18 @@ await tap.test('POST /channels/[channelId]/messages', async (t) => { payload: { value: messageExample.value } }) const responseJson = response.json() - t.equal(response.statusCode, 201) - t.equal(responseJson.id, messageExample.id) - t.equal(responseJson.value, messageExample.value) - t.equal(responseJson.type, messageExample.type) - t.equal(responseJson.mimetype, messageExample.mimetype) - t.equal(responseJson.member.id, memberExample.id) - t.equal(responseJson.member.isOwner, memberExample.isOwner) - t.equal(responseJson.member.user.id, userExample.id) - t.equal(responseJson.member.user.name, userExample.name) + assert.strictEqual(response.statusCode, 201) + assert.strictEqual(responseJson.id, messageExample.id) + assert.strictEqual(responseJson.value, messageExample.value) + assert.strictEqual(responseJson.type, messageExample.type) + assert.strictEqual(responseJson.mimetype, messageExample.mimetype) + assert.strictEqual(responseJson.member.id, memberExample.id) + assert.strictEqual(responseJson.member.isOwner, memberExample.isOwner) + assert.strictEqual(responseJson.member.user.id, userExample.id) + assert.strictEqual(responseJson.member.user.name, userExample.name) }) - await t.test('fails with no message value', async (t) => { + await t.test('fails with no message value', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -77,10 +79,10 @@ await tap.test('POST /channels/[channelId]/messages', async (t) => { }, payload: {} }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test('fails with not found channel', async (t) => { + await t.test('fails with not found channel', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -104,11 +106,11 @@ await tap.test('POST /channels/[channelId]/messages', async (t) => { payload: { value: messageExample.value } }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'Channel not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'Channel not found') }) - await t.test('fails with not found member', async (t) => { + await t.test('fails with not found member', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'channel').value({ findUnique: async () => { @@ -129,7 +131,7 @@ await tap.test('POST /channels/[channelId]/messages', async (t) => { payload: { value: messageExample.value } }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'Channel not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'Channel not found') }) }) diff --git a/src/services/channels/[channelId]/messages/get.ts b/src/services/channels/[channelId]/messages/get.ts index cc9a42d..ac9ee19 100644 --- a/src/services/channels/[channelId]/messages/get.ts +++ b/src/services/channels/[channelId]/messages/get.ts @@ -2,17 +2,17 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../../models/utils.js' -import authenticateUser from '../../../../tools/plugins/authenticateUser.js' -import { messageSchema } from '../../../../models/Message.js' -import { memberSchema } from '../../../../models/Member.js' -import { userPublicWithoutSettingsSchema } from '../../../../models/User.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { messageSchema } from '#src/models/Message.js' +import { memberSchema } from '#src/models/Member.js' +import { userPublicWithoutSettingsSchema } from '#src/models/User.js' import { getPaginationOptions, queryPaginationObjectSchema -} from '../../../../tools/database/pagination.js' -import { channelSchema } from '../../../../models/Channel.js' +} from '#src/tools/database/pagination.js' +import { channelSchema } from '#src/models/Channel.js' type QuerySchemaType = Static diff --git a/src/services/channels/[channelId]/messages/post.ts b/src/services/channels/[channelId]/messages/post.ts index 3c1a1e8..d542bdd 100644 --- a/src/services/channels/[channelId]/messages/post.ts +++ b/src/services/channels/[channelId]/messages/post.ts @@ -2,13 +2,13 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../../models/utils.js' -import authenticateUser from '../../../../tools/plugins/authenticateUser.js' -import { messageSchema } from '../../../../models/Message.js' -import { channelSchema } from '../../../../models/Channel.js' -import { memberSchema } from '../../../../models/Member.js' -import { userPublicWithoutSettingsSchema } from '../../../../models/User.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { messageSchema } from '#src/models/Message.js' +import { channelSchema } from '#src/models/Channel.js' +import { memberSchema } from '#src/models/Member.js' +import { userPublicWithoutSettingsSchema } from '#src/models/User.js' const parametersSchema = Type.Object({ channelId: channelSchema.id diff --git a/src/services/channels/[channelId]/messages/uploads/post.ts b/src/services/channels/[channelId]/messages/uploads/post.ts index 2e8faaf..2cdf235 100644 --- a/src/services/channels/[channelId]/messages/uploads/post.ts +++ b/src/services/channels/[channelId]/messages/uploads/post.ts @@ -3,14 +3,14 @@ import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' import fastifyMultipart from '@fastify/multipart' -import prisma from '../../../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../../../models/utils.js' -import authenticateUser from '../../../../../tools/plugins/authenticateUser.js' -import { messageSchema } from '../../../../../models/Message.js' -import { memberSchema } from '../../../../../models/Member.js' -import { userPublicWithoutSettingsSchema } from '../../../../../models/User.js' -import { channelSchema } from '../../../../../models/Channel.js' -import { uploadFile } from '../../../../../tools/utils/uploadFile.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { messageSchema } from '#src/models/Message.js' +import { memberSchema } from '#src/models/Member.js' +import { userPublicWithoutSettingsSchema } from '#src/models/User.js' +import { channelSchema } from '#src/models/Channel.js' +import { uploadFile } from '#src/tools/utils/uploadFile.js' const parametersSchema = Type.Object({ channelId: channelSchema.id diff --git a/src/services/channels/[channelId]/put.ts b/src/services/channels/[channelId]/put.ts index bada11d..cfb3ed4 100644 --- a/src/services/channels/[channelId]/put.ts +++ b/src/services/channels/[channelId]/put.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { channelSchema } from '../../../models/Channel.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { channelSchema } from '#src/models/Channel.js' const bodyPutServiceSchema = Type.Object({ name: channelSchema.name @@ -56,9 +56,9 @@ export const putChannelService: FastifyPluginAsync = async (fastify) => { if (request.user == null) { throw fastify.httpErrors.forbidden() } - const { user } = request - const { channelId } = request.params - const { name } = request.body + const { user, params, body } = request + const { channelId } = params + const { name } = body const channelCheck = await prisma.channel.findUnique({ where: { id: channelId } }) diff --git a/src/services/guilds/[guildId]/__test__/delete.test.ts b/src/services/guilds/[guildId]/__test__/delete.test.ts index a4a23c3..45eed09 100644 --- a/src/services/guilds/[guildId]/__test__/delete.test.ts +++ b/src/services/guilds/[guildId]/__test__/delete.test.ts @@ -1,18 +1,20 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { memberExample } from '../../../../models/Member.js' -import { guildExample } from '../../../../models/Guild.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' -await tap.test('DELETE /guilds/[guildId]', async (t) => { +await test('DELETE /guilds/[guildId]', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds and delete the guild', async (t) => { + await t.test('succeeds and delete the guild', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -36,13 +38,13 @@ await tap.test('DELETE /guilds/[guildId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.id, guildExample.id) - t.equal(responseJson.name, guildExample.name) - t.equal(responseJson.description, guildExample.description) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.id, guildExample.id) + assert.strictEqual(responseJson.name, guildExample.name) + assert.strictEqual(responseJson.description, guildExample.description) }) - await t.test("fails if the guild doesn't exist", async (t) => { + await t.test("fails if the guild doesn't exist", async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -56,10 +58,10 @@ await tap.test('DELETE /guilds/[guildId]', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the user is not the owner', async (t) => { + await t.test('fails if the user is not the owner', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -78,7 +80,10 @@ await tap.test('DELETE /guilds/[guildId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 400) - t.equal(responseJson.message, 'You should be an owner of the guild') + assert.strictEqual(response.statusCode, 400) + assert.strictEqual( + responseJson.message, + 'You should be an owner of the guild' + ) }) }) diff --git a/src/services/guilds/[guildId]/__test__/get.test.ts b/src/services/guilds/[guildId]/__test__/get.test.ts index 0b725cb..46d0222 100644 --- a/src/services/guilds/[guildId]/__test__/get.test.ts +++ b/src/services/guilds/[guildId]/__test__/get.test.ts @@ -1,22 +1,24 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { memberExample } from '../../../../models/Member.js' -import { guildExample } from '../../../../models/Guild.js' -import { userExample } from '../../../../models/User.js' -import { channelExample } from '../../../../models/Channel.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' +import { userExample } from '#src/models/User.js' +import { channelExample } from '#src/models/Channel.js' const defaultChannelId = 5 -await tap.test('GET /guilds/[guildId]', async (t) => { +await test('GET /guilds/[guildId]', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken, user } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -43,17 +45,17 @@ await tap.test('GET /guilds/[guildId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.member.id, memberExample.id) - t.equal(responseJson.member.isOwner, memberExample.isOwner) - t.equal(responseJson.member.user.name, user.name) - t.equal(responseJson.member.user.email, null) - t.equal(responseJson.guild.id, guildExample.id) - t.equal(responseJson.guild.name, guildExample.name) - t.equal(responseJson.guild.defaultChannelId, defaultChannelId) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.member.id, memberExample.id) + assert.strictEqual(responseJson.member.isOwner, memberExample.isOwner) + assert.strictEqual(responseJson.member.user.name, user.name) + assert.strictEqual(responseJson.member.user.email, null) + assert.strictEqual(responseJson.guild.id, guildExample.id) + assert.strictEqual(responseJson.guild.name, guildExample.name) + assert.strictEqual(responseJson.guild.defaultChannelId, defaultChannelId) }) - await t.test('fails with not found member/guild', async (t) => { + await t.test('fails with not found member/guild', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -68,15 +70,15 @@ await tap.test('GET /guilds/[guildId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'Member not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'Member not found') }) - await t.test('fails with unauthenticated user', async (t) => { + await t.test('fails with unauthenticated user', async () => { const response = await application.inject({ method: 'GET', url: '/guilds/1' }) - t.equal(response.statusCode, 401) + assert.strictEqual(response.statusCode, 401) }) }) diff --git a/src/services/guilds/[guildId]/__test__/put.test.ts b/src/services/guilds/[guildId]/__test__/put.test.ts index 0882988..552cdc1 100644 --- a/src/services/guilds/[guildId]/__test__/put.test.ts +++ b/src/services/guilds/[guildId]/__test__/put.test.ts @@ -1,23 +1,25 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { memberExample } from '../../../../models/Member.js' -import { guildExample } from '../../../../models/Guild.js' -import { channelExample } from '../../../../models/Channel.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' +import { channelExample } from '#src/models/Channel.js' const defaultChannelId = 5 const newName = 'New guild name' const newDescription = 'New guild description' -await tap.test('PUT /guilds/[guildId]', async (t) => { +await test('PUT /guilds/[guildId]', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds and edit the guild', async (t) => { + await t.test('succeeds and edit the guild', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -57,13 +59,13 @@ await tap.test('PUT /guilds/[guildId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.name, newName) - t.equal(responseJson.description, newDescription) - t.equal(responseJson.defaultChannelId, defaultChannelId) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.name, newName) + assert.strictEqual(responseJson.description, newDescription) + assert.strictEqual(responseJson.defaultChannelId, defaultChannelId) }) - await t.test("fails if the guild doesn't exist", async (t) => { + await t.test("fails if the guild doesn't exist", async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -81,10 +83,10 @@ await tap.test('PUT /guilds/[guildId]', async (t) => { description: newDescription } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the user is not the owner', async (t) => { + await t.test('fails if the user is not the owner', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -107,7 +109,10 @@ await tap.test('PUT /guilds/[guildId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 400) - t.equal(responseJson.message, 'You should be an owner of the guild') + assert.strictEqual(response.statusCode, 400) + assert.strictEqual( + responseJson.message, + 'You should be an owner of the guild' + ) }) }) diff --git a/src/services/guilds/[guildId]/channels/__test__/get.test.ts b/src/services/guilds/[guildId]/channels/__test__/get.test.ts index 030c0a7..7437174 100644 --- a/src/services/guilds/[guildId]/channels/__test__/get.test.ts +++ b/src/services/guilds/[guildId]/channels/__test__/get.test.ts @@ -1,19 +1,21 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../../application.js' -import { authenticateUserTest } from '../../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../../tools/database/prisma.js' -import { memberExample } from '../../../../../models/Member.js' -import { guildExample } from '../../../../../models/Guild.js' -import { channelExample } from '../../../../../models/Channel.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' +import { channelExample } from '#src/models/Channel.js' -await tap.test('GET /guilds/[guildId]/channels', async (t) => { +await test('GET /guilds/[guildId]/channels', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -33,14 +35,14 @@ await tap.test('GET /guilds/[guildId]/channels', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.length, 1) - t.equal(responseJson[0].id, channelExample.id) - t.equal(responseJson[0].name, channelExample.name) - t.equal(responseJson[0].guildId, channelExample.guildId) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.length, 1) + assert.strictEqual(responseJson[0].id, channelExample.id) + assert.strictEqual(responseJson[0].name, channelExample.name) + assert.strictEqual(responseJson[0].guildId, channelExample.guildId) }) - await t.test('fails with not found member/guild', async (t) => { + await t.test('fails with not found member/guild', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -55,15 +57,15 @@ await tap.test('GET /guilds/[guildId]/channels', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'Member not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'Member not found') }) - await t.test('fails with unauthenticated user', async (t) => { + await t.test('fails with unauthenticated user', async () => { const response = await application.inject({ method: 'GET', url: '/guilds/1/channels' }) - t.equal(response.statusCode, 401) + assert.strictEqual(response.statusCode, 401) }) }) diff --git a/src/services/guilds/[guildId]/channels/__test__/post.test.ts b/src/services/guilds/[guildId]/channels/__test__/post.test.ts index 43543a1..2d3571a 100644 --- a/src/services/guilds/[guildId]/channels/__test__/post.test.ts +++ b/src/services/guilds/[guildId]/channels/__test__/post.test.ts @@ -1,21 +1,23 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../../application.js' -import { authenticateUserTest } from '../../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../../tools/database/prisma.js' -import { memberExample } from '../../../../../models/Member.js' -import { guildExample } from '../../../../../models/Guild.js' -import { channelExample } from '../../../../../models/Channel.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' +import { channelExample } from '#src/models/Channel.js' const defaultChannelId = 5 -await tap.test('POST /guilds/[guildId]/channels', async (t) => { +await test('POST /guilds/[guildId]/channels', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -42,14 +44,14 @@ await tap.test('POST /guilds/[guildId]/channels', async (t) => { payload: { name: channelExample.name } }) const responseJson = response.json() - t.equal(response.statusCode, 201) - t.equal(responseJson.id, channelExample.id) - t.equal(responseJson.name, channelExample.name) - t.equal(responseJson.guildId, channelExample.guildId) - t.equal(responseJson.defaultChannelId, defaultChannelId) + assert.strictEqual(response.statusCode, 201) + assert.strictEqual(responseJson.id, channelExample.id) + assert.strictEqual(responseJson.name, channelExample.name) + assert.strictEqual(responseJson.guildId, channelExample.guildId) + assert.strictEqual(responseJson.defaultChannelId, defaultChannelId) }) - await t.test('fails if the member is not found', async (t) => { + await t.test('fails if the member is not found', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -64,10 +66,10 @@ await tap.test('POST /guilds/[guildId]/channels', async (t) => { }, payload: { name: channelExample.name } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the member is not owner', async (t) => { + await t.test('fails if the member is not owner', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -85,6 +87,6 @@ await tap.test('POST /guilds/[guildId]/channels', async (t) => { }, payload: { name: channelExample.name } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/guilds/[guildId]/channels/get.ts b/src/services/guilds/[guildId]/channels/get.ts index 0c0359c..64b4cc7 100644 --- a/src/services/guilds/[guildId]/channels/get.ts +++ b/src/services/guilds/[guildId]/channels/get.ts @@ -2,15 +2,15 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../../models/utils.js' -import authenticateUser from '../../../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../../../models/Guild.js' -import { channelSchema } from '../../../../models/Channel.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' +import { channelSchema } from '#src/models/Channel.js' import { getPaginationOptions, queryPaginationObjectSchema -} from '../../../../tools/database/pagination.js' +} from '#src/tools/database/pagination.js' type QuerySchemaType = Static diff --git a/src/services/guilds/[guildId]/channels/post.ts b/src/services/guilds/[guildId]/channels/post.ts index e87f005..8486e37 100644 --- a/src/services/guilds/[guildId]/channels/post.ts +++ b/src/services/guilds/[guildId]/channels/post.ts @@ -2,11 +2,11 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../../models/utils.js' -import authenticateUser from '../../../../tools/plugins/authenticateUser.js' -import { channelSchema } from '../../../../models/Channel.js' -import { guildSchema } from '../../../../models/Guild.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { channelSchema } from '#src/models/Channel.js' +import { guildSchema } from '#src/models/Guild.js' const bodyPostServiceSchema = Type.Object({ name: channelSchema.name @@ -57,9 +57,9 @@ export const postChannelService: FastifyPluginAsync = async (fastify) => { if (request.user == null) { throw fastify.httpErrors.forbidden() } - const { user } = request - const { guildId } = request.params - const { name } = request.body + const { user, params, body } = request + const { guildId } = params + const { name } = body const member = await prisma.member.findFirst({ where: { guildId, userId: user.current.id } }) diff --git a/src/services/guilds/[guildId]/delete.ts b/src/services/guilds/[guildId]/delete.ts index a8aa263..905094e 100644 --- a/src/services/guilds/[guildId]/delete.ts +++ b/src/services/guilds/[guildId]/delete.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../../models/Guild.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' const parametersSchema = Type.Object({ guildId: guildSchema.id diff --git a/src/services/guilds/[guildId]/get.ts b/src/services/guilds/[guildId]/get.ts index 0deb0b6..9569a2f 100644 --- a/src/services/guilds/[guildId]/get.ts +++ b/src/services/guilds/[guildId]/get.ts @@ -2,13 +2,13 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../../models/Guild.js' -import { memberSchema } from '../../../models/Member.js' -import { userPublicWithoutSettingsSchema } from '../../../models/User.js' -import { channelSchema } from '../../../models/Channel.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' +import { memberSchema } from '#src/models/Member.js' +import { userPublicWithoutSettingsSchema } from '#src/models/User.js' +import { channelSchema } from '#src/models/Channel.js' const parametersSchema = Type.Object({ guildId: guildSchema.id diff --git a/src/services/guilds/[guildId]/icon/put.ts b/src/services/guilds/[guildId]/icon/put.ts index a004d5e..d07659f 100644 --- a/src/services/guilds/[guildId]/icon/put.ts +++ b/src/services/guilds/[guildId]/icon/put.ts @@ -3,12 +3,12 @@ import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' import fastifyMultipart from '@fastify/multipart' -import authenticateUser from '../../../../tools/plugins/authenticateUser.js' -import { fastifyErrors } from '../../../../models/utils.js' -import prisma from '../../../../tools/database/prisma.js' -import { uploadFile } from '../../../../tools/utils/uploadFile.js' -import { guildSchema } from '../../../../models/Guild.js' -import { channelSchema } from '../../../../models/Channel.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { fastifyErrors } from '#src/models/utils.js' +import prisma from '#src/tools/database/prisma.js' +import { uploadFile } from '#src/tools/utils/uploadFile.js' +import { guildSchema } from '#src/models/Guild.js' +import { channelSchema } from '#src/models/Channel.js' const parametersSchema = Type.Object({ guildId: guildSchema.id diff --git a/src/services/guilds/[guildId]/members/__test__/get.test.ts b/src/services/guilds/[guildId]/members/__test__/get.test.ts index 0d336ac..c74d5cb 100644 --- a/src/services/guilds/[guildId]/members/__test__/get.test.ts +++ b/src/services/guilds/[guildId]/members/__test__/get.test.ts @@ -1,19 +1,21 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../../application.js' -import { authenticateUserTest } from '../../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../../tools/database/prisma.js' -import { memberExample } from '../../../../../models/Member.js' -import { guildExample } from '../../../../../models/Guild.js' -import { userExample } from '../../../../../models/User.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' +import { userExample } from '#src/models/User.js' -await tap.test('GET /guilds/[guildId]/members', async (t) => { +await test('GET /guilds/[guildId]/members', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -31,16 +33,16 @@ await tap.test('GET /guilds/[guildId]/members', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.length, 1) - t.equal(responseJson[0].id, memberExample.id) - t.equal(responseJson[0].isOwner, memberExample.isOwner) - t.equal(responseJson[0].user.id, userExample.id) - t.equal(responseJson[0].user.name, userExample.name) - t.equal(responseJson[0].user.email, null) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.length, 1) + assert.strictEqual(responseJson[0].id, memberExample.id) + assert.strictEqual(responseJson[0].isOwner, memberExample.isOwner) + assert.strictEqual(responseJson[0].user.id, userExample.id) + assert.strictEqual(responseJson[0].user.name, userExample.name) + assert.strictEqual(responseJson[0].user.email, null) }) - await t.test('fails with not found member/guild', async (t) => { + await t.test('fails with not found member/guild', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -55,15 +57,15 @@ await tap.test('GET /guilds/[guildId]/members', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'Member not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'Member not found') }) - await t.test('fails with unauthenticated user', async (t) => { + await t.test('fails with unauthenticated user', async () => { const response = await application.inject({ method: 'GET', url: '/guilds/1/members' }) - t.equal(response.statusCode, 401) + assert.strictEqual(response.statusCode, 401) }) }) diff --git a/src/services/guilds/[guildId]/members/get.ts b/src/services/guilds/[guildId]/members/get.ts index ea3767c..cf3f2d8 100644 --- a/src/services/guilds/[guildId]/members/get.ts +++ b/src/services/guilds/[guildId]/members/get.ts @@ -2,16 +2,16 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../../models/utils.js' -import authenticateUser from '../../../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../../../models/Guild.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' import { getPaginationOptions, queryPaginationObjectSchema -} from '../../../../tools/database/pagination.js' -import { memberSchema } from '../../../../models/Member.js' -import { userPublicWithoutSettingsSchema } from '../../../../models/User.js' +} from '#src/tools/database/pagination.js' +import { memberSchema } from '#src/models/Member.js' +import { userPublicWithoutSettingsSchema } from '#src/models/User.js' type QuerySchemaType = Static diff --git a/src/services/guilds/[guildId]/members/join/__test__/post.test.ts b/src/services/guilds/[guildId]/members/join/__test__/post.test.ts index 9acb8f7..c5dfe4b 100644 --- a/src/services/guilds/[guildId]/members/join/__test__/post.test.ts +++ b/src/services/guilds/[guildId]/members/join/__test__/post.test.ts @@ -1,22 +1,24 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../../../application.js' -import { authenticateUserTest } from '../../../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../../../tools/database/prisma.js' -import { memberExample } from '../../../../../../models/Member.js' -import { guildExample } from '../../../../../../models/Guild.js' -import { userExample } from '../../../../../../models/User.js' -import { channelExample } from '../../../../../../models/Channel.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' +import { userExample } from '#src/models/User.js' +import { channelExample } from '#src/models/Channel.js' const defaultChannelId = 5 -await tap.test('POST /guilds/[guildId]/members/join', async (t) => { +await test('POST /guilds/[guildId]/members/join', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -44,17 +46,17 @@ await tap.test('POST /guilds/[guildId]/members/join', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 201) - t.equal(responseJson.id, memberExample.id) - t.equal(responseJson.userId, memberExample.userId) - t.equal(responseJson.user.name, userExample.name) - t.equal(responseJson.user.email, null) - t.equal(responseJson.guild.id, guildExample.id) - t.equal(responseJson.guild.name, guildExample.name) - t.equal(responseJson.guild.defaultChannelId, channelExample.id) + assert.strictEqual(response.statusCode, 201) + assert.strictEqual(responseJson.id, memberExample.id) + assert.strictEqual(responseJson.userId, memberExample.userId) + assert.strictEqual(responseJson.user.name, userExample.name) + assert.strictEqual(responseJson.user.email, null) + assert.strictEqual(responseJson.guild.id, guildExample.id) + assert.strictEqual(responseJson.guild.name, guildExample.name) + assert.strictEqual(responseJson.guild.defaultChannelId, channelExample.id) }) - await t.test('fails if the guild is not found', async (t) => { + await t.test('fails if the guild is not found', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -78,10 +80,10 @@ await tap.test('POST /guilds/[guildId]/members/join', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the user is already in the guild', async (t) => { + await t.test('fails if the user is already in the guild', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -109,7 +111,7 @@ await tap.test('POST /guilds/[guildId]/members/join', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 400) - t.equal(responseJson.defaultChannelId, defaultChannelId) + assert.strictEqual(response.statusCode, 400) + assert.strictEqual(responseJson.defaultChannelId, defaultChannelId) }) }) diff --git a/src/services/guilds/[guildId]/members/join/post.ts b/src/services/guilds/[guildId]/members/join/post.ts index 81f80b6..e3045a9 100644 --- a/src/services/guilds/[guildId]/members/join/post.ts +++ b/src/services/guilds/[guildId]/members/join/post.ts @@ -2,17 +2,13 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../../../tools/database/prisma.js' -import { - fastifyErrors, - fastifyErrorsSchema, - id -} from '../../../../../models/utils.js' -import authenticateUser from '../../../../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../../../../models/Guild.js' -import { memberSchema } from '../../../../../models/Member.js' -import { userPublicWithoutSettingsSchema } from '../../../../../models/User.js' -import { channelSchema } from '../../../../../models/Channel.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors, fastifyErrorsSchema, id } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' +import { memberSchema } from '#src/models/Member.js' +import { userPublicWithoutSettingsSchema } from '#src/models/User.js' +import { channelSchema } from '#src/models/Channel.js' const parametersSchema = Type.Object({ guildId: guildSchema.id @@ -62,8 +58,8 @@ export const postMemberService: FastifyPluginAsync = async (fastify) => { if (request.user == null) { throw fastify.httpErrors.forbidden() } - const { user } = request - const { guildId } = request.params + const { user, params } = request + const { guildId } = params const guild = await prisma.guild.findUnique({ where: { id: guildId diff --git a/src/services/guilds/[guildId]/members/leave/__test__/delete.test.ts b/src/services/guilds/[guildId]/members/leave/__test__/delete.test.ts index 94a9c1d..7f35831 100644 --- a/src/services/guilds/[guildId]/members/leave/__test__/delete.test.ts +++ b/src/services/guilds/[guildId]/members/leave/__test__/delete.test.ts @@ -1,18 +1,20 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../../../application.js' -import { authenticateUserTest } from '../../../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../../../tools/database/prisma.js' -import { memberExample } from '../../../../../../models/Member.js' -import { guildExample } from '../../../../../../models/Guild.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' -await tap.test('DELETE /guilds/[guildId]/members/leave', async (t) => { +await test('DELETE /guilds/[guildId]/members/leave', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() const member = { ...memberExample, @@ -34,13 +36,13 @@ await tap.test('DELETE /guilds/[guildId]/members/leave', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.id, member.id) - t.equal(responseJson.isOwner, member.isOwner) - t.equal(responseJson.userId, member.userId) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.id, member.id) + assert.strictEqual(responseJson.isOwner, member.isOwner) + assert.strictEqual(responseJson.userId, member.userId) }) - await t.test('fails if the member is not found', async (t) => { + await t.test('fails if the member is not found', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'member').value({ findFirst: async () => { @@ -54,10 +56,10 @@ await tap.test('DELETE /guilds/[guildId]/members/leave', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the member is owner', async (t) => { + await t.test('fails if the member is owner', async () => { const { accessToken } = await authenticateUserTest() const member = { ...memberExample, @@ -75,6 +77,6 @@ await tap.test('DELETE /guilds/[guildId]/members/leave', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/guilds/[guildId]/members/leave/delete.ts b/src/services/guilds/[guildId]/members/leave/delete.ts index bb21d8d..f235a84 100644 --- a/src/services/guilds/[guildId]/members/leave/delete.ts +++ b/src/services/guilds/[guildId]/members/leave/delete.ts @@ -2,11 +2,11 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../../../models/utils.js' -import authenticateUser from '../../../../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../../../../models/Guild.js' -import { memberSchema } from '../../../../../models/Member.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' +import { memberSchema } from '#src/models/Member.js' const parametersSchema = Type.Object({ guildId: guildSchema.id @@ -46,8 +46,8 @@ export const deleteMemberService: FastifyPluginAsync = async (fastify) => { if (request.user == null) { throw fastify.httpErrors.forbidden() } - const { user } = request - const { guildId } = request.params + const { user, params } = request + const { guildId } = params const member = await prisma.member.findFirst({ where: { guildId, userId: user.current.id } }) diff --git a/src/services/guilds/[guildId]/put.ts b/src/services/guilds/[guildId]/put.ts index 11b3ddc..b670201 100644 --- a/src/services/guilds/[guildId]/put.ts +++ b/src/services/guilds/[guildId]/put.ts @@ -2,12 +2,12 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../../models/Guild.js' -import { parseStringNullish } from '../../../tools/utils/parseStringNullish.js' -import { channelSchema } from '../../../models/Channel.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' +import { parseStringNullish } from '#src/tools/utils/parseStringNullish.js' +import { channelSchema } from '#src/models/Channel.js' const parametersSchema = Type.Object({ guildId: guildSchema.id diff --git a/src/services/guilds/__test__/get.test.ts b/src/services/guilds/__test__/get.test.ts index 82d1484..968ce08 100644 --- a/src/services/guilds/__test__/get.test.ts +++ b/src/services/guilds/__test__/get.test.ts @@ -1,19 +1,21 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../application.js' -import { authenticateUserTest } from '../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../tools/database/prisma.js' -import { memberExample } from '../../../models/Member.js' -import { guildExample } from '../../../models/Guild.js' -import { channelExample } from '../../../models/Channel.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' +import { channelExample } from '#src/models/Channel.js' -await tap.test('GET /guilds', async (t) => { +await test('GET /guilds', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'guild').value({ findUnique: async () => { @@ -38,10 +40,10 @@ await tap.test('GET /guilds', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.length, 1) - t.equal(responseJson[0].name, guildExample.name) - t.equal(responseJson[0].description, guildExample.description) - t.equal(responseJson[0].defaultChannelId, channelExample.id) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.length, 1) + assert.strictEqual(responseJson[0].name, guildExample.name) + assert.strictEqual(responseJson[0].description, guildExample.description) + assert.strictEqual(responseJson[0].defaultChannelId, channelExample.id) }) }) diff --git a/src/services/guilds/__test__/post.test.ts b/src/services/guilds/__test__/post.test.ts index f6f5af8..f34f348 100644 --- a/src/services/guilds/__test__/post.test.ts +++ b/src/services/guilds/__test__/post.test.ts @@ -1,20 +1,22 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../application.js' -import { authenticateUserTest } from '../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../tools/database/prisma.js' -import { memberExample } from '../../../models/Member.js' -import { guildExample } from '../../../models/Guild.js' -import { channelExample } from '../../../models/Channel.js' -import { userExample } from '../../../models/User.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { memberExample } from '#src/models/Member.js' +import { guildExample } from '#src/models/Guild.js' +import { channelExample } from '#src/models/Channel.js' +import { userExample } from '#src/models/User.js' -await tap.test('POST /guilds', async (t) => { +await test('POST /guilds', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken, user } = await authenticateUserTest() sinon.stub(prisma, 'guild').value({ create: async () => { @@ -49,21 +51,24 @@ await tap.test('POST /guilds', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 201) - t.equal(responseJson.guild.id, guildExample.id) - t.equal(responseJson.guild.name, guildExample.name) - t.equal(responseJson.guild.description, guildExample.description) - t.equal(responseJson.guild.members.length, 1) - t.equal(responseJson.guild.members[0].userId, user.id) - t.equal(responseJson.guild.members[0].user.name, user.name) - t.equal(responseJson.guild.members[0].guildId, guildExample.id) - t.equal(responseJson.guild.members[0].isOwner, memberExample.isOwner) - t.equal(responseJson.guild.channels.length, 1) - t.equal(responseJson.guild.channels[0].id, channelExample.id) - t.equal(responseJson.guild.channels[0].guildId, guildExample.id) + assert.strictEqual(response.statusCode, 201) + assert.strictEqual(responseJson.guild.id, guildExample.id) + assert.strictEqual(responseJson.guild.name, guildExample.name) + assert.strictEqual(responseJson.guild.description, guildExample.description) + assert.strictEqual(responseJson.guild.members.length, 1) + assert.strictEqual(responseJson.guild.members[0].userId, user.id) + assert.strictEqual(responseJson.guild.members[0].user.name, user.name) + assert.strictEqual(responseJson.guild.members[0].guildId, guildExample.id) + assert.strictEqual( + responseJson.guild.members[0].isOwner, + memberExample.isOwner + ) + assert.strictEqual(responseJson.guild.channels.length, 1) + assert.strictEqual(responseJson.guild.channels[0].id, channelExample.id) + assert.strictEqual(responseJson.guild.channels[0].guildId, guildExample.id) }) - await t.test('fails with empty name and description', async (t) => { + await t.test('fails with empty name and description', async () => { const { accessToken } = await authenticateUserTest() const response = await application.inject({ method: 'POST', @@ -72,6 +77,6 @@ await tap.test('POST /guilds', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/guilds/get.ts b/src/services/guilds/get.ts index 94a5912..d1c9e51 100644 --- a/src/services/guilds/get.ts +++ b/src/services/guilds/get.ts @@ -2,14 +2,14 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../tools/database/prisma.js' -import { fastifyErrors, id } from '../../models/utils.js' -import authenticateUser from '../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../models/Guild.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors, id } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' import { getPaginationOptions, queryPaginationObjectSchema -} from '../../tools/database/pagination.js' +} from '#src/tools/database/pagination.js' type QuerySchemaType = Static diff --git a/src/services/guilds/post.ts b/src/services/guilds/post.ts index ab68523..0faa943 100644 --- a/src/services/guilds/post.ts +++ b/src/services/guilds/post.ts @@ -2,14 +2,14 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../tools/database/prisma.js' -import { fastifyErrors } from '../../models/utils.js' -import authenticateUser from '../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../models/Guild.js' -import { channelSchema } from '../../models/Channel.js' -import { memberSchema } from '../../models/Member.js' -import { userPublicWithoutSettingsSchema } from '../../models/User.js' -import { parseStringNullish } from '../../tools/utils/parseStringNullish.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' +import { channelSchema } from '#src/models/Channel.js' +import { memberSchema } from '#src/models/Member.js' +import { userPublicWithoutSettingsSchema } from '#src/models/User.js' +import { parseStringNullish } from '#src/tools/utils/parseStringNullish.js' const bodyPostServiceSchema = Type.Object({ name: guildSchema.name, diff --git a/src/services/guilds/public/__test__/get.test.ts b/src/services/guilds/public/__test__/get.test.ts index bf260fd..1b971db 100644 --- a/src/services/guilds/public/__test__/get.test.ts +++ b/src/services/guilds/public/__test__/get.test.ts @@ -1,17 +1,19 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { guildExample } from '../../../../models/Guild.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { guildExample } from '#src/models/Guild.js' -await tap.test('GET /guilds/public', async (t) => { +await test('GET /guilds/public', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'guild').value({ findMany: async () => { @@ -31,9 +33,9 @@ await tap.test('GET /guilds/public', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.length, 1) - t.equal(responseJson[0].name, guildExample.name) - t.equal(responseJson[0].membersCount, 2) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.length, 1) + assert.strictEqual(responseJson[0].name, guildExample.name) + assert.strictEqual(responseJson[0].membersCount, 2) }) }) diff --git a/src/services/guilds/public/get.ts b/src/services/guilds/public/get.ts index 5e8d119..3b705c8 100644 --- a/src/services/guilds/public/get.ts +++ b/src/services/guilds/public/get.ts @@ -2,14 +2,14 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { guildSchema } from '../../../models/Guild.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { guildSchema } from '#src/models/Guild.js' import { getPaginationOptions, queryPaginationSchema -} from '../../../tools/database/pagination.js' +} from '#src/tools/database/pagination.js' const querySchema = Type.Object({ search: Type.Optional(Type.String()), diff --git a/src/services/messages/[messageId]/__test__/delete.test.ts b/src/services/messages/[messageId]/__test__/delete.test.ts index c4a3939..0af1a15 100644 --- a/src/services/messages/[messageId]/__test__/delete.test.ts +++ b/src/services/messages/[messageId]/__test__/delete.test.ts @@ -1,20 +1,22 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { messageExample } from '../../../../models/Message.js' -import { memberExample } from '../../../../models/Member.js' -import { userExample } from '../../../../models/User.js' -import { channelExample } from '../../../../models/Channel.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { messageExample } from '#src/models/Message.js' +import { memberExample } from '#src/models/Member.js' +import { userExample } from '#src/models/User.js' +import { channelExample } from '#src/models/Channel.js' -await tap.test('DELETE /messsages/[messageId]', async (t) => { +await test('DELETE /messsages/[messageId]', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'message').value({ findFirst: async () => { @@ -43,18 +45,18 @@ await tap.test('DELETE /messsages/[messageId]', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.id, messageExample.id) - t.equal(responseJson.value, messageExample.value) - t.equal(responseJson.type, messageExample.type) - t.equal(responseJson.mimetype, messageExample.mimetype) - t.equal(responseJson.member.id, memberExample.id) - t.equal(responseJson.member.isOwner, memberExample.isOwner) - t.equal(responseJson.member.user.id, userExample.id) - t.equal(responseJson.member.user.name, userExample.name) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.id, messageExample.id) + assert.strictEqual(responseJson.value, messageExample.value) + assert.strictEqual(responseJson.type, messageExample.type) + assert.strictEqual(responseJson.mimetype, messageExample.mimetype) + assert.strictEqual(responseJson.member.id, memberExample.id) + assert.strictEqual(responseJson.member.isOwner, memberExample.isOwner) + assert.strictEqual(responseJson.member.user.id, userExample.id) + assert.strictEqual(responseJson.member.user.name, userExample.name) }) - await t.test('fails if the message is not found', async (t) => { + await t.test('fails if the message is not found', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'message').value({ findFirst: async () => { @@ -68,10 +70,10 @@ await tap.test('DELETE /messsages/[messageId]', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the member is not found', async (t) => { + await t.test('fails if the member is not found', async () => { const { accessToken } = await authenticateUserTest() sinon.stub(prisma, 'message').value({ findFirst: async () => { @@ -93,10 +95,10 @@ await tap.test('DELETE /messsages/[messageId]', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the member is not owner of the message', async (t) => { + await t.test('fails if the member is not owner of the message', async () => { const { accessToken } = await authenticateUserTest() const randomUserIdOwnerOfMessage = 14 sinon.stub(prisma, 'message').value({ @@ -122,6 +124,6 @@ await tap.test('DELETE /messsages/[messageId]', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/messages/[messageId]/__test__/put.test.ts b/src/services/messages/[messageId]/__test__/put.test.ts index bdd9642..fe2db7e 100644 --- a/src/services/messages/[messageId]/__test__/put.test.ts +++ b/src/services/messages/[messageId]/__test__/put.test.ts @@ -1,20 +1,22 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { messageExample } from '../../../../models/Message.js' -import { memberExample } from '../../../../models/Member.js' -import { userExample } from '../../../../models/User.js' -import { channelExample } from '../../../../models/Channel.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { messageExample } from '#src/models/Message.js' +import { memberExample } from '#src/models/Member.js' +import { userExample } from '#src/models/User.js' +import { channelExample } from '#src/models/Channel.js' -await tap.test('PUT /messsages/[messageId]', async (t) => { +await test('PUT /messsages/[messageId]', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken } = await authenticateUserTest() const newValue = 'some message' sinon.stub(prisma, 'message').value({ @@ -48,18 +50,18 @@ await tap.test('PUT /messsages/[messageId]', async (t) => { payload: { value: newValue } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.id, messageExample.id) - t.equal(responseJson.value, newValue) - t.equal(responseJson.type, messageExample.type) - t.equal(responseJson.mimetype, messageExample.mimetype) - t.equal(responseJson.member.id, memberExample.id) - t.equal(responseJson.member.isOwner, memberExample.isOwner) - t.equal(responseJson.member.user.id, userExample.id) - t.equal(responseJson.member.user.name, userExample.name) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.id, messageExample.id) + assert.strictEqual(responseJson.value, newValue) + assert.strictEqual(responseJson.type, messageExample.type) + assert.strictEqual(responseJson.mimetype, messageExample.mimetype) + assert.strictEqual(responseJson.member.id, memberExample.id) + assert.strictEqual(responseJson.member.isOwner, memberExample.isOwner) + assert.strictEqual(responseJson.member.user.id, userExample.id) + assert.strictEqual(responseJson.member.user.name, userExample.name) }) - await t.test('fails if the message is not found', async (t) => { + await t.test('fails if the message is not found', async () => { const { accessToken } = await authenticateUserTest() const newValue = 'some message' sinon.stub(prisma, 'message').value({ @@ -75,10 +77,10 @@ await tap.test('PUT /messsages/[messageId]', async (t) => { }, payload: { value: newValue } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) - await t.test('fails if the member is not found', async (t) => { + await t.test('fails if the member is not found', async () => { const { accessToken } = await authenticateUserTest() const newValue = 'some message' sinon.stub(prisma, 'message').value({ @@ -102,12 +104,12 @@ await tap.test('PUT /messsages/[messageId]', async (t) => { }, payload: { value: newValue } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) await t.test( 'fails if the member is not the owner of the message', - async (t) => { + async () => { const { accessToken } = await authenticateUserTest() const newValue = 'some message' const randomUserIdOwnerOfMessage = 14 @@ -135,7 +137,7 @@ await tap.test('PUT /messsages/[messageId]', async (t) => { }, payload: { value: newValue } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) } ) }) diff --git a/src/services/messages/[messageId]/delete.ts b/src/services/messages/[messageId]/delete.ts index a4fea74..8f13e86 100644 --- a/src/services/messages/[messageId]/delete.ts +++ b/src/services/messages/[messageId]/delete.ts @@ -2,12 +2,12 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { messageSchema } from '../../../models/Message.js' -import { memberSchema } from '../../../models/Member.js' -import { userPublicWithoutSettingsSchema } from '../../../models/User.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { messageSchema } from '#src/models/Message.js' +import { memberSchema } from '#src/models/Member.js' +import { userPublicWithoutSettingsSchema } from '#src/models/User.js' const parametersSchema = Type.Object({ messageId: messageSchema.id @@ -53,8 +53,8 @@ export const deleteMessageService: FastifyPluginAsync = async (fastify) => { if (request.user == null) { throw fastify.httpErrors.forbidden() } - const { user } = request - const { messageId } = request.params + const { user, params } = request + const { messageId } = params const messageCheck = await prisma.message.findFirst({ where: { id: messageId }, include: { diff --git a/src/services/messages/[messageId]/put.ts b/src/services/messages/[messageId]/put.ts index 8c38f54..ee4b890 100644 --- a/src/services/messages/[messageId]/put.ts +++ b/src/services/messages/[messageId]/put.ts @@ -2,12 +2,12 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { messageSchema } from '../../../models/Message.js' -import { memberSchema } from '../../../models/Member.js' -import { userPublicWithoutSettingsSchema } from '../../../models/User.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { messageSchema } from '#src/models/Message.js' +import { memberSchema } from '#src/models/Member.js' +import { userPublicWithoutSettingsSchema } from '#src/models/User.js' const bodyPutServiceSchema = Type.Object({ value: messageSchema.value @@ -61,9 +61,9 @@ export const putMessageService: FastifyPluginAsync = async (fastify) => { if (request.user == null) { throw fastify.httpErrors.forbidden() } - const { user } = request - const { messageId } = request.params - const { value } = request.body + const { user, params, body } = request + const { messageId } = params + const { value } = body const messageCheck = await prisma.message.findFirst({ where: { id: messageId, type: 'text' }, include: { diff --git a/src/services/users/[userId]/__test__/get.test.ts b/src/services/users/[userId]/__test__/get.test.ts index 07553b5..49bc3e3 100644 --- a/src/services/users/[userId]/__test__/get.test.ts +++ b/src/services/users/[userId]/__test__/get.test.ts @@ -1,17 +1,19 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import prisma from '../../../../tools/database/prisma.js' -import { userExample } from '../../../../models/User.js' -import { userSettingsExample } from '../../../../models/UserSettings.js' +import { application } from '#src/application.js' +import prisma from '#src/tools/database/prisma.js' +import { userExample } from '#src/models/User.js' +import { userSettingsExample } from '#src/models/UserSettings.js' -await tap.test('GET /users/[userId]', async (t) => { +await test('GET /users/[userId]', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { sinon.stub(prisma, 'guild').value({ findMany: async () => { return [] @@ -32,12 +34,12 @@ await tap.test('GET /users/[userId]', async (t) => { url: `/users/${userExample.id}` }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.user.id, userExample.id) - t.equal(responseJson.user.name, userExample.name) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.user.id, userExample.id) + assert.strictEqual(responseJson.user.name, userExample.name) }) - await t.test('fails with not found user', async (t) => { + await t.test('fails with not found user', async () => { sinon.stub(prisma, 'userSetting').value({ findFirst: async () => { return null @@ -48,7 +50,7 @@ await tap.test('GET /users/[userId]', async (t) => { url: `/users/1` }) const responseJson = response.json() - t.equal(response.statusCode, 404) - t.equal(responseJson.message, 'User not found') + assert.strictEqual(response.statusCode, 404) + assert.strictEqual(responseJson.message, 'User not found') }) }) diff --git a/src/services/users/[userId]/get.ts b/src/services/users/[userId]/get.ts index 532d07e..84d0df6 100644 --- a/src/services/users/[userId]/get.ts +++ b/src/services/users/[userId]/get.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import { userPublicSchema } from '../../../models/User.js' -import { guildSchema } from '../../../models/Guild.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import { userPublicSchema } from '#src/models/User.js' +import { guildSchema } from '#src/models/Guild.js' const parametersGetUserSchema = Type.Object({ userId: userPublicSchema.id diff --git a/src/services/users/confirm-email/__test__/get.test.ts b/src/services/users/confirm-email/__test__/get.test.ts index 7335c10..17966d5 100644 --- a/src/services/users/confirm-email/__test__/get.test.ts +++ b/src/services/users/confirm-email/__test__/get.test.ts @@ -1,16 +1,18 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import prisma from '../../../../tools/database/prisma.js' -import { userExample } from '../../../../models/User.js' +import { application } from '#src/application.js' +import prisma from '#src/tools/database/prisma.js' +import { userExample } from '#src/models/User.js' -await tap.test('GET /users/confirm-email', async (t) => { +await test('GET /users/confirm-email', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { sinon.stub(prisma, 'user').value({ findFirst: async () => { return userExample @@ -26,10 +28,10 @@ await tap.test('GET /users/confirm-email', async (t) => { temporaryToken: userExample.temporaryToken ?? '' } }) - t.equal(response.statusCode, 200) + assert.strictEqual(response.statusCode, 200) }) - await t.test('should fails with invalid `temporaryToken`', async (t) => { + await t.test('should fails with invalid `temporaryToken`', async () => { sinon.stub(prisma, 'user').value({ findFirst: async () => { return null @@ -45,6 +47,6 @@ await tap.test('GET /users/confirm-email', async (t) => { temporaryToken: userExample.temporaryToken ?? '' } }) - t.equal(response.statusCode, 403) + assert.strictEqual(response.statusCode, 403) }) }) diff --git a/src/services/users/confirm-email/get.ts b/src/services/users/confirm-email/get.ts index 82ea005..a1f239e 100644 --- a/src/services/users/confirm-email/get.ts +++ b/src/services/users/confirm-email/get.ts @@ -2,9 +2,9 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import { userSchema } from '../../../models/User.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import { userSchema } from '#src/models/User.js' const queryGetConfirmEmailSchema = Type.Object({ redirectURI: Type.Optional(Type.String({ format: 'uri-reference' })), diff --git a/src/services/users/current/__test__/get.test.ts b/src/services/users/current/__test__/get.test.ts index 4e1721f..61b73c4 100644 --- a/src/services/users/current/__test__/get.test.ts +++ b/src/services/users/current/__test__/get.test.ts @@ -1,15 +1,17 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' -await tap.test('GET /users/current', async (t) => { +await test('GET /users/current', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken, user } = await authenticateUserTest() const response = await application.inject({ method: 'GET', @@ -19,16 +21,16 @@ await tap.test('GET /users/current', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.user.name, user.name) - t.strictSame(responseJson.user.strategies, ['Local']) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.user.name, user.name) + assert.deepStrictEqual(responseJson.user.strategies, ['Local']) }) - await t.test('fails with unauthenticated user', async (t) => { + await t.test('fails with unauthenticated user', async () => { const response = await application.inject({ method: 'GET', url: '/users/current' }) - t.equal(response.statusCode, 401) + assert.strictEqual(response.statusCode, 401) }) }) diff --git a/src/services/users/current/__test__/put.test.ts b/src/services/users/current/__test__/put.test.ts index e718793..6c1f864 100644 --- a/src/services/users/current/__test__/put.test.ts +++ b/src/services/users/current/__test__/put.test.ts @@ -1,16 +1,18 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import prisma from '../../../../tools/database/prisma.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' +import { application } from '#src/application.js' +import prisma from '#src/tools/database/prisma.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' -await tap.test('PUT /users/current', async (t) => { +await test('PUT /users/current', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds with valid accessToken and valid name', async (t) => { + await t.test('succeeds with valid accessToken and valid name', async () => { const newName = 'John Doe' const { accessToken, user, userStubValue } = await authenticateUserTest() sinon.stub(prisma, 'user').value({ @@ -36,11 +38,11 @@ await tap.test('PUT /users/current', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.user.name, newName) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.user.name, newName) }) - await t.test('succeeds and only update the status', async (t) => { + await t.test('succeeds and only update the status', async () => { const newStatus = '👀 Working on secret projects...' const { accessToken, user, userStubValue } = await authenticateUserTest() sinon.stub(prisma, 'user').value({ @@ -66,12 +68,12 @@ await tap.test('PUT /users/current', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.user.name, user.name) - t.equal(responseJson.user.status, newStatus) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.user.name, user.name) + assert.strictEqual(responseJson.user.status, newStatus) }) - await t.test('fails with name already used', async (t) => { + await t.test('fails with name already used', async () => { const newName = 'John Doe' const { accessToken, user, userStubValue } = await authenticateUserTest() sinon.stub(prisma, 'user').value({ @@ -90,10 +92,10 @@ await tap.test('PUT /users/current', async (t) => { name: newName } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test('fails with invalid website url', async (t) => { + await t.test('fails with invalid website url', async () => { const newWebsite = 'invalid website url' const { accessToken } = await authenticateUserTest() const response = await application.inject({ @@ -106,10 +108,10 @@ await tap.test('PUT /users/current', async (t) => { website: newWebsite } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test('succeeds with valid website url', async (t) => { + await t.test('succeeds with valid website url', async () => { const newWebsite = 'https://somerandomwebsite.com' const { accessToken, user, userStubValue } = await authenticateUserTest() sinon.stub(prisma, 'user').value({ @@ -135,8 +137,8 @@ await tap.test('PUT /users/current', async (t) => { } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.user.name, user.name) - t.equal(responseJson.user.website, newWebsite) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.user.name, user.name) + assert.strictEqual(responseJson.user.website, newWebsite) }) }) diff --git a/src/services/users/current/get.ts b/src/services/users/current/get.ts index cdf3df0..d66f5a1 100644 --- a/src/services/users/current/get.ts +++ b/src/services/users/current/get.ts @@ -1,9 +1,9 @@ import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { userCurrentSchema } from '../../../models/User.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { userCurrentSchema } from '#src/models/User.js' const getCurrentUserSchema: FastifySchema = { description: 'GET the current connected user', diff --git a/src/services/users/current/logo/put.ts b/src/services/users/current/logo/put.ts index 89c4419..58f744c 100644 --- a/src/services/users/current/logo/put.ts +++ b/src/services/users/current/logo/put.ts @@ -2,10 +2,10 @@ import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' import fastifyMultipart from '@fastify/multipart' -import authenticateUser from '../../../../tools/plugins/authenticateUser.js' -import { fastifyErrors } from '../../../../models/utils.js' -import prisma from '../../../../tools/database/prisma.js' -import { uploadFile } from '../../../../tools/utils/uploadFile.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { fastifyErrors } from '#src/models/utils.js' +import prisma from '#src/tools/database/prisma.js' +import { uploadFile } from '#src/tools/utils/uploadFile.js' const putServiceSchema: FastifySchema = { description: 'Edit the current connected user logo', diff --git a/src/services/users/current/put.ts b/src/services/users/current/put.ts index 9afa8d3..b15dfcb 100644 --- a/src/services/users/current/put.ts +++ b/src/services/users/current/put.ts @@ -4,14 +4,14 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' -import { userCurrentSchema, userSchema } from '../../../models/User.js' -import { sendEmail } from '../../../tools/email/sendEmail.js' -import { API_URL } from '../../../tools/configurations.js' -import type { Language, Theme } from '../../../models/UserSettings.js' -import { parseStringNullish } from '../../../tools/utils/parseStringNullish.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { userCurrentSchema, userSchema } from '#src/models/User.js' +import { sendEmail } from '#src/tools/email/sendEmail.js' +import { API_URL } from '#src/tools/configurations.js' +import type { Language, Theme } from '#src/models/UserSettings.js' +import { parseStringNullish } from '#src/tools/utils/parseStringNullish.js' const bodyPutServiceSchema = Type.Object({ name: Type.Optional(userSchema.name), diff --git a/src/services/users/current/settings/__test__/put.test.ts b/src/services/users/current/settings/__test__/put.test.ts index 2541496..c5d8ff9 100644 --- a/src/services/users/current/settings/__test__/put.test.ts +++ b/src/services/users/current/settings/__test__/put.test.ts @@ -1,19 +1,21 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../../application.js' -import { authenticateUserTest } from '../../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../../tools/database/prisma.js' -import { userSettingsExample } from '../../../../../models/UserSettings.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { userSettingsExample } from '#src/models/UserSettings.js' -await tap.test('PUT /users/current/settings', async (t) => { +await test('PUT /users/current/settings', async (t) => { t.afterEach(() => { sinon.restore() }) await t.test( 'succeeds and edit the theme, language, isPublicEmail and isPublicGuilds', - async (t) => { + async () => { const newSettings = { theme: 'light', language: 'fr', @@ -42,15 +44,21 @@ await tap.test('PUT /users/current/settings', async (t) => { payload: newSettings }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.settings.theme, newSettings.theme) - t.equal(responseJson.settings.language, newSettings.language) - t.equal(responseJson.settings.isPublicEmail, newSettings.isPublicEmail) - t.equal(responseJson.settings.isPublicGuilds, newSettings.isPublicGuilds) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.settings.theme, newSettings.theme) + assert.strictEqual(responseJson.settings.language, newSettings.language) + assert.strictEqual( + responseJson.settings.isPublicEmail, + newSettings.isPublicEmail + ) + assert.strictEqual( + responseJson.settings.isPublicGuilds, + newSettings.isPublicGuilds + ) } ) - await t.test('fails with invalid language', async (t) => { + await t.test('fails with invalid language', async () => { const newSettings = { language: 'somerandomlanguage' } @@ -75,6 +83,6 @@ await tap.test('PUT /users/current/settings', async (t) => { }, payload: newSettings }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/users/current/settings/put.ts b/src/services/users/current/settings/put.ts index fc0ce62..53bce39 100644 --- a/src/services/users/current/settings/put.ts +++ b/src/services/users/current/settings/put.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../../models/utils.js' -import authenticateUser from '../../../../tools/plugins/authenticateUser.js' -import { userSettingsSchema } from '../../../../models/UserSettings.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { userSettingsSchema } from '#src/models/UserSettings.js' const bodyPutServiceSchema = Type.Object({ theme: Type.Optional(userSettingsSchema.theme), diff --git a/src/services/users/oauth2/[provider]/delete.ts b/src/services/users/oauth2/[provider]/delete.ts index 6adbde8..516701a 100644 --- a/src/services/users/oauth2/[provider]/delete.ts +++ b/src/services/users/oauth2/[provider]/delete.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../../models/utils.js' -import authenticateUser from '../../../../tools/plugins/authenticateUser.js' -import { oauthSchema } from '../../../../models/OAuth.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' +import { oauthSchema } from '#src/models/OAuth.js' const parametersSchema = Type.Object({ provider: oauthSchema.provider @@ -45,8 +45,8 @@ export const deleteProviderService: FastifyPluginAsync = async (fastify) => { if (request.user == null) { throw fastify.httpErrors.forbidden() } - const { user } = request - const { provider } = request.params + const { user, params } = request + const { provider } = params const OAuths = await prisma.oAuth.findMany({ where: { userId: user.current.id } }) diff --git a/src/services/users/oauth2/discord/__utils__/utils.ts b/src/services/users/oauth2/discord/__utils__/utils.ts index 0af0a88..0990da2 100644 --- a/src/services/users/oauth2/discord/__utils__/utils.ts +++ b/src/services/users/oauth2/discord/__utils__/utils.ts @@ -2,7 +2,7 @@ import querystring from 'node:querystring' import axios from 'axios' -import { OAuthStrategy } from '../../../../../tools/utils/OAuthStrategy.js' +import { OAuthStrategy } from '#src/tools/utils/OAuthStrategy.js' export const DISCORD_PROVIDER = 'Discord' export const DISCORD_BASE_URL = 'https://discord.com/api/v10' diff --git a/src/services/users/oauth2/discord/add-strategy/get.ts b/src/services/users/oauth2/discord/add-strategy/get.ts index 92c06c2..9030706 100644 --- a/src/services/users/oauth2/discord/add-strategy/get.ts +++ b/src/services/users/oauth2/discord/add-strategy/get.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { DISCORD_BASE_URL, DISCORD_CLIENT_ID } from '../__utils__/utils.js' -import authenticateUser from '../../../../../tools/plugins/authenticateUser.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' const querySchema = Type.Object({ redirectURI: Type.String({ format: 'uri-reference' }) diff --git a/src/services/users/oauth2/discord/callback-add-strategy/get.ts b/src/services/users/oauth2/discord/callback-add-strategy/get.ts index 086a959..b5f9a9d 100644 --- a/src/services/users/oauth2/discord/callback-add-strategy/get.ts +++ b/src/services/users/oauth2/discord/callback-add-strategy/get.ts @@ -2,11 +2,11 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { discordStrategy, getDiscordUserData } from '../__utils__/utils.js' -import { buildQueryURL } from '../../../../../tools/utils/buildQueryURL.js' -import { getUserWithBearerToken } from '../../../../../tools/plugins/authenticateUser.js' +import { buildQueryURL } from '#src/tools/utils/buildQueryURL.js' +import { getUserWithBearerToken } from '#src/tools/plugins/authenticateUser.js' const querySchema = Type.Object({ code: Type.String(), diff --git a/src/services/users/oauth2/discord/callback/get.ts b/src/services/users/oauth2/discord/callback/get.ts index 6536a90..39351f2 100644 --- a/src/services/users/oauth2/discord/callback/get.ts +++ b/src/services/users/oauth2/discord/callback/get.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { discordStrategy, getDiscordUserData } from '../__utils__/utils.js' -import { buildQueryURL } from '../../../../../tools/utils/buildQueryURL.js' +import { buildQueryURL } from '#src/tools/utils/buildQueryURL.js' const querySchema = Type.Object({ code: Type.String(), diff --git a/src/services/users/oauth2/discord/signin/get.ts b/src/services/users/oauth2/discord/signin/get.ts index 6ff47a1..c61ef97 100644 --- a/src/services/users/oauth2/discord/signin/get.ts +++ b/src/services/users/oauth2/discord/signin/get.ts @@ -2,8 +2,8 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { DISCORD_BASE_URL, DISCORD_CLIENT_ID } from '../__utils__/utils.js' const querySchema = Type.Object({ diff --git a/src/services/users/oauth2/github/__utils__/utils.ts b/src/services/users/oauth2/github/__utils__/utils.ts index 2f3d750..3032676 100644 --- a/src/services/users/oauth2/github/__utils__/utils.ts +++ b/src/services/users/oauth2/github/__utils__/utils.ts @@ -2,7 +2,7 @@ import querystring from 'node:querystring' import axios from 'axios' -import { OAuthStrategy } from '../../../../../tools/utils/OAuthStrategy.js' +import { OAuthStrategy } from '#src/tools/utils/OAuthStrategy.js' export const GITHUB_PROVIDER = 'GitHub' export const GITHUB_BASE_URL = 'https://github.com' diff --git a/src/services/users/oauth2/github/add-strategy/get.ts b/src/services/users/oauth2/github/add-strategy/get.ts index a9c3379..75edc0d 100644 --- a/src/services/users/oauth2/github/add-strategy/get.ts +++ b/src/services/users/oauth2/github/add-strategy/get.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { GITHUB_BASE_URL, GITHUB_CLIENT_ID } from '../__utils__/utils.js' -import authenticateUser from '../../../../../tools/plugins/authenticateUser.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' const querySchema = Type.Object({ redirectURI: Type.String({ format: 'uri-reference' }) diff --git a/src/services/users/oauth2/github/callback-add-strategy/get.ts b/src/services/users/oauth2/github/callback-add-strategy/get.ts index 3eba3ff..ebd9fb3 100644 --- a/src/services/users/oauth2/github/callback-add-strategy/get.ts +++ b/src/services/users/oauth2/github/callback-add-strategy/get.ts @@ -2,11 +2,11 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { githubStrategy, getGitHubUserData } from '../__utils__/utils.js' -import { buildQueryURL } from '../../../../../tools/utils/buildQueryURL.js' -import { getUserWithBearerToken } from '../../../../../tools/plugins/authenticateUser.js' +import { buildQueryURL } from '#src/tools/utils/buildQueryURL.js' +import { getUserWithBearerToken } from '#src/tools/plugins/authenticateUser.js' const querySchema = Type.Object({ code: Type.String(), diff --git a/src/services/users/oauth2/github/callback/get.ts b/src/services/users/oauth2/github/callback/get.ts index 5b4824a..a14f9d9 100644 --- a/src/services/users/oauth2/github/callback/get.ts +++ b/src/services/users/oauth2/github/callback/get.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { githubStrategy, getGitHubUserData } from '../__utils__/utils.js' -import { buildQueryURL } from '../../../../../tools/utils/buildQueryURL.js' +import { buildQueryURL } from '#src/tools/utils/buildQueryURL.js' const querySchema = Type.Object({ code: Type.String(), diff --git a/src/services/users/oauth2/github/signin/get.ts b/src/services/users/oauth2/github/signin/get.ts index 5a92781..783a5ef 100644 --- a/src/services/users/oauth2/github/signin/get.ts +++ b/src/services/users/oauth2/github/signin/get.ts @@ -2,8 +2,8 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { GITHUB_BASE_URL, GITHUB_CLIENT_ID } from '../__utils__/utils.js' const querySchema = Type.Object({ diff --git a/src/services/users/oauth2/google/__utils__/utils.ts b/src/services/users/oauth2/google/__utils__/utils.ts index c6488fe..ba4e78f 100644 --- a/src/services/users/oauth2/google/__utils__/utils.ts +++ b/src/services/users/oauth2/google/__utils__/utils.ts @@ -2,7 +2,7 @@ import querystring from 'node:querystring' import axios from 'axios' -import { OAuthStrategy } from '../../../../../tools/utils/OAuthStrategy.js' +import { OAuthStrategy } from '#src/tools/utils/OAuthStrategy.js' export const GOOGLE_PROVIDER = 'Google' export const GOOGLE_BASE_URL = 'https://accounts.google.com/o/oauth2/v2/auth' diff --git a/src/services/users/oauth2/google/add-strategy/get.ts b/src/services/users/oauth2/google/add-strategy/get.ts index f28f163..c8294b0 100644 --- a/src/services/users/oauth2/google/add-strategy/get.ts +++ b/src/services/users/oauth2/google/add-strategy/get.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { GOOGLE_BASE_URL, GOOGLE_CLIENT_ID } from '../__utils__/utils.js' -import authenticateUser from '../../../../../tools/plugins/authenticateUser.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' const querySchema = Type.Object({ redirectURI: Type.String({ format: 'uri-reference' }) diff --git a/src/services/users/oauth2/google/callback-add-strategy/get.ts b/src/services/users/oauth2/google/callback-add-strategy/get.ts index 5fa1480..ba87be5 100644 --- a/src/services/users/oauth2/google/callback-add-strategy/get.ts +++ b/src/services/users/oauth2/google/callback-add-strategy/get.ts @@ -2,11 +2,11 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { googleStrategy, getGoogleUserData } from '../__utils__/utils.js' -import { buildQueryURL } from '../../../../../tools/utils/buildQueryURL.js' -import { getUserWithBearerToken } from '../../../../../tools/plugins/authenticateUser.js' +import { buildQueryURL } from '#src/tools/utils/buildQueryURL.js' +import { getUserWithBearerToken } from '#src/tools/plugins/authenticateUser.js' const querySchema = Type.Object({ code: Type.String(), diff --git a/src/services/users/oauth2/google/callback/get.ts b/src/services/users/oauth2/google/callback/get.ts index d496378..188f52a 100644 --- a/src/services/users/oauth2/google/callback/get.ts +++ b/src/services/users/oauth2/google/callback/get.ts @@ -2,10 +2,10 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { googleStrategy, getGoogleUserData } from '../__utils__/utils.js' -import { buildQueryURL } from '../../../../../tools/utils/buildQueryURL.js' +import { buildQueryURL } from '#src/tools/utils/buildQueryURL.js' const querySchema = Type.Object({ code: Type.String(), diff --git a/src/services/users/oauth2/google/signin/get.ts b/src/services/users/oauth2/google/signin/get.ts index edcf1ec..483f989 100644 --- a/src/services/users/oauth2/google/signin/get.ts +++ b/src/services/users/oauth2/google/signin/get.ts @@ -2,8 +2,8 @@ import type { Static } from '@sinclair/typebox' import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import { API_URL } from '../../../../../tools/configurations.js' -import { fastifyErrors } from '../../../../../models/utils.js' +import { API_URL } from '#src/tools/configurations.js' +import { fastifyErrors } from '#src/models/utils.js' import { GOOGLE_BASE_URL, GOOGLE_CLIENT_ID } from '../__utils__/utils.js' const querySchema = Type.Object({ diff --git a/src/services/users/refresh-token/__test__/post.test.ts b/src/services/users/refresh-token/__test__/post.test.ts index eef9c35..7c22795 100644 --- a/src/services/users/refresh-token/__test__/post.test.ts +++ b/src/services/users/refresh-token/__test__/post.test.ts @@ -1,19 +1,21 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' import jwt from 'jsonwebtoken' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' -import { refreshTokenExample } from '../../../../models/RefreshToken.js' -import { expiresIn } from '../../../../tools/utils/jwtToken.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' +import { refreshTokenExample } from '#src/models/RefreshToken.js' +import { expiresIn } from '#src/tools/utils/jwtToken.js' -await tap.test('POST /users/refresh-token', async (t) => { +await test('POST /users/refresh-token', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { refreshToken, refreshTokenStubValue } = await authenticateUserTest() sinon.stub(prisma, 'refreshToken').value({ ...refreshTokenStubValue, @@ -31,13 +33,13 @@ await tap.test('POST /users/refresh-token', async (t) => { payload: { refreshToken } }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.type, 'Bearer') - t.equal(responseJson.expiresIn, expiresIn) - t.type(responseJson.accessToken, 'string') + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.type, 'Bearer') + assert.strictEqual(responseJson.expiresIn, expiresIn) + assert.strictEqual(typeof responseJson.accessToken, 'string') }) - await t.test('fails with refreshToken not saved in database', async (t) => { + await t.test('fails with refreshToken not saved in database', async () => { sinon.stub(prisma, 'refreshToken').value({ findFirst: async () => { return null @@ -48,10 +50,10 @@ await tap.test('POST /users/refresh-token', async (t) => { url: '/users/refresh-token', payload: { refreshToken: 'somerandomtoken' } }) - t.equal(response.statusCode, 403) + assert.strictEqual(response.statusCode, 403) }) - await t.test('fails with invalid jwt refreshToken', async (t) => { + await t.test('fails with invalid jwt refreshToken', async () => { const { refreshToken, refreshTokenStubValue } = await authenticateUserTest() sinon.stub(prisma, 'refreshToken').value({ ...refreshTokenStubValue, @@ -67,6 +69,6 @@ await tap.test('POST /users/refresh-token', async (t) => { url: '/users/refresh-token', payload: { refreshToken } }) - t.equal(response.statusCode, 403) + assert.strictEqual(response.statusCode, 403) }) }) diff --git a/src/services/users/refresh-token/post.ts b/src/services/users/refresh-token/post.ts index 7e434f5..60ddb9d 100644 --- a/src/services/users/refresh-token/post.ts +++ b/src/services/users/refresh-token/post.ts @@ -3,15 +3,15 @@ import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' import jwt from 'jsonwebtoken' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' import { generateAccessToken, jwtSchema, expiresIn -} from '../../../tools/utils/jwtToken.js' -import type { UserRefreshJWT } from '../../../models/User.js' -import { JWT_REFRESH_SECRET } from '../../../tools/configurations.js' +} from '#src/tools/utils/jwtToken.js' +import type { UserRefreshJWT } from '#src/models/User.js' +import { JWT_REFRESH_SECRET } from '#src/tools/configurations.js' const bodyPostRefreshTokenSchema = Type.Object({ refreshToken: jwtSchema.refreshToken diff --git a/src/services/users/reset-password/__test__/post.test.ts b/src/services/users/reset-password/__test__/post.test.ts index 3d31b53..097a4da 100644 --- a/src/services/users/reset-password/__test__/post.test.ts +++ b/src/services/users/reset-password/__test__/post.test.ts @@ -1,19 +1,21 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' import ms from 'ms' -import { application } from '../../../../application.js' -import prisma from '../../../../tools/database/prisma.js' -import { userExample } from '../../../../models/User.js' -import { userSettingsExample } from '../../../../models/UserSettings.js' -import { emailTransporter } from '../../../../tools/email/emailTransporter.js' +import { application } from '#src/application.js' +import prisma from '#src/tools/database/prisma.js' +import { userExample } from '#src/models/User.js' +import { userSettingsExample } from '#src/models/UserSettings.js' +import { emailTransporter } from '#src/tools/email/emailTransporter.js' -await tap.test('POST /users/reset-password', async (t) => { +await test('POST /users/reset-password', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { sinon.stub(prisma, 'user').value({ findUnique: async () => { return userExample @@ -37,10 +39,10 @@ await tap.test('POST /users/reset-password', async (t) => { url: '/users/reset-password?redirectURI=https://redirecturi.com', payload: { email: userExample.email } }) - t.equal(response.statusCode, 200) + assert.strictEqual(response.statusCode, 200) }) - await t.test("fails with email that doesn't exist", async (t) => { + await t.test("fails with email that doesn't exist", async () => { sinon.stub(prisma, 'user').value({ findUnique: async () => { return null @@ -51,10 +53,10 @@ await tap.test('POST /users/reset-password', async (t) => { url: '/users/reset-password?redirectURI=https://redirecturi.com', payload: { email: userExample.email } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test('fails with unconfirmed account', async (t) => { + await t.test('fails with unconfirmed account', async () => { sinon.stub(prisma, 'user').value({ findUnique: async () => { return { @@ -68,10 +70,10 @@ await tap.test('POST /users/reset-password', async (t) => { url: '/users/reset-password?redirectURI=https://redirecturi.com', payload: { email: userExample.email } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test("fails if userSettings doesn't exist", async (t) => { + await t.test("fails if userSettings doesn't exist", async () => { sinon.stub(prisma, 'user').value({ findUnique: async () => { return userExample @@ -87,10 +89,10 @@ await tap.test('POST /users/reset-password', async (t) => { url: '/users/reset-password?redirectURI=https://redirecturi.com', payload: { email: userExample.email } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test('fails with a request already in progress', async (t) => { + await t.test('fails with a request already in progress', async () => { sinon.stub(prisma, 'user').value({ findUnique: async () => { return { @@ -110,6 +112,6 @@ await tap.test('POST /users/reset-password', async (t) => { url: '/users/reset-password?redirectURI=https://redirecturi.com', payload: { email: userExample.email } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/users/reset-password/__test__/put.test.ts b/src/services/users/reset-password/__test__/put.test.ts index 931c19c..8c7436a 100644 --- a/src/services/users/reset-password/__test__/put.test.ts +++ b/src/services/users/reset-password/__test__/put.test.ts @@ -1,17 +1,19 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' import ms from 'ms' -import { application } from '../../../../application.js' -import prisma from '../../../../tools/database/prisma.js' -import { userExample } from '../../../../models/User.js' +import { application } from '#src/application.js' +import prisma from '#src/tools/database/prisma.js' +import { userExample } from '#src/models/User.js' -await tap.test('PUT /users/reset-password', async (t) => { +await test('PUT /users/reset-password', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const temporaryToken = 'random-token' sinon.stub(prisma, 'user').value({ findFirst: async () => { @@ -38,10 +40,10 @@ await tap.test('PUT /users/reset-password', async (t) => { temporaryToken: userExample.temporaryToken } }) - t.equal(response.statusCode, 200) + assert.strictEqual(response.statusCode, 200) }) - await t.test('fails with expired temporaryToken', async (t) => { + await t.test('fails with expired temporaryToken', async () => { const temporaryToken = 'random-token' sinon.stub(prisma, 'user').value({ findFirst: async () => { @@ -63,6 +65,6 @@ await tap.test('PUT /users/reset-password', async (t) => { temporaryToken: userExample.temporaryToken } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/users/reset-password/post.ts b/src/services/users/reset-password/post.ts index 467dfcb..85a1938 100644 --- a/src/services/users/reset-password/post.ts +++ b/src/services/users/reset-password/post.ts @@ -5,11 +5,11 @@ import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' import ms from 'ms' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import { userSchema } from '../../../models/User.js' -import { sendEmail } from '../../../tools/email/sendEmail.js' -import type { Language, Theme } from '../../../models/UserSettings.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import { userSchema } from '#src/models/User.js' +import { sendEmail } from '#src/tools/email/sendEmail.js' +import type { Language, Theme } from '#src/models/UserSettings.js' const queryPostResetPasswordSchema = Type.Object({ redirectURI: Type.String({ format: 'uri-reference' }) diff --git a/src/services/users/reset-password/put.ts b/src/services/users/reset-password/put.ts index 84abf2d..94d756f 100644 --- a/src/services/users/reset-password/put.ts +++ b/src/services/users/reset-password/put.ts @@ -3,9 +3,9 @@ import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' import bcrypt from 'bcryptjs' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import { userSchema } from '../../../models/User.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import { userSchema } from '#src/models/User.js' const bodyPutResetPasswordSchema = Type.Object({ password: userSchema.password, diff --git a/src/services/users/signin/__test__/post.test.ts b/src/services/users/signin/__test__/post.test.ts index b2de702..90a3a5e 100644 --- a/src/services/users/signin/__test__/post.test.ts +++ b/src/services/users/signin/__test__/post.test.ts @@ -1,24 +1,26 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' import bcrypt from 'bcryptjs' -import { application } from '../../../../application.js' -import prisma from '../../../../tools/database/prisma.js' -import { userExample } from '../../../../models/User.js' -import { refreshTokenExample } from '../../../../models/RefreshToken.js' -import { expiresIn } from '../../../../tools/utils/jwtToken.js' +import { application } from '#src/application.js' +import prisma from '#src/tools/database/prisma.js' +import { userExample } from '#src/models/User.js' +import { refreshTokenExample } from '#src/models/RefreshToken.js' +import { expiresIn } from '#src/tools/utils/jwtToken.js' const payload = { email: userExample.email, password: userExample.password } -await tap.test('POST /users/signin', async (t) => { +await test('POST /users/signin', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { sinon.stub(prisma, 'user').value({ findUnique: async () => { return { @@ -38,12 +40,12 @@ await tap.test('POST /users/signin', async (t) => { payload }) const responseJson = response.json() - t.equal(response.statusCode, 200) - t.equal(responseJson.type, 'Bearer') - t.equal(responseJson.expiresIn, expiresIn) + assert.strictEqual(response.statusCode, 200) + assert.strictEqual(responseJson.type, 'Bearer') + assert.strictEqual(responseJson.expiresIn, expiresIn) }) - await t.test('fails with invalid user', async (t) => { + await t.test('fails with invalid user', async () => { sinon.stub(prisma, 'user').value({ findUnique: () => { return null @@ -54,10 +56,10 @@ await tap.test('POST /users/signin', async (t) => { url: '/users/signin', payload }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test('fails with invalid email', async (t) => { + await t.test('fails with invalid email', async () => { sinon.stub(prisma, 'user').value({ findUnique: () => { return null @@ -71,10 +73,10 @@ await tap.test('POST /users/signin', async (t) => { email: 'incorrect-email' } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test("fails if user hasn't got a password", async (t) => { + await t.test("fails if user hasn't got a password", async () => { sinon.stub(prisma, 'user').value({ findUnique: () => { return { @@ -88,10 +90,10 @@ await tap.test('POST /users/signin', async (t) => { url: '/users/signin', payload }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test('fails with incorrect password', async (t) => { + await t.test('fails with incorrect password', async () => { sinon.stub(prisma, 'user').value({ findUnique: async () => { return userExample @@ -105,6 +107,6 @@ await tap.test('POST /users/signin', async (t) => { password: 'incorrect-password' } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/users/signin/post.ts b/src/services/users/signin/post.ts index 16f3940..0350c08 100644 --- a/src/services/users/signin/post.ts +++ b/src/services/users/signin/post.ts @@ -3,15 +3,15 @@ import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' import bcrypt from 'bcryptjs' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import { userSchema } from '../../../models/User.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import { userSchema } from '#src/models/User.js' import { generateAccessToken, generateRefreshToken, jwtSchema, expiresIn -} from '../../../tools/utils/jwtToken.js' +} from '#src/tools/utils/jwtToken.js' const bodyPostSigninSchema = Type.Object({ email: userSchema.email, diff --git a/src/services/users/signout/__test__/delete.test.ts b/src/services/users/signout/__test__/delete.test.ts index b45e680..9bbe8b6 100644 --- a/src/services/users/signout/__test__/delete.test.ts +++ b/src/services/users/signout/__test__/delete.test.ts @@ -1,16 +1,18 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import { authenticateUserTest } from '../../../../__test__/utils/authenticateUserTest.js' -import prisma from '../../../../tools/database/prisma.js' +import { application } from '#src/application.js' +import { authenticateUserTest } from '#src/__test__/utils/authenticateUserTest.js' +import prisma from '#src/tools/database/prisma.js' -await tap.test('DELETE /users/signout', async (t) => { +await test('DELETE /users/signout', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { const { accessToken, refreshTokenStubValue } = await authenticateUserTest() sinon.stub(prisma, 'refreshToken').value({ ...refreshTokenStubValue, @@ -25,14 +27,14 @@ await tap.test('DELETE /users/signout', async (t) => { authorization: `Bearer ${accessToken}` } }) - t.equal(response.statusCode, 200) + assert.strictEqual(response.statusCode, 200) }) - await t.test('fails with empty authorized header', async (t) => { + await t.test('fails with empty authorized header', async () => { const response = await application.inject({ method: 'DELETE', url: '/users/signout' }) - t.equal(response.statusCode, 401) + assert.strictEqual(response.statusCode, 401) }) }) diff --git a/src/services/users/signout/__test__/post.test.ts b/src/services/users/signout/__test__/post.test.ts index 6692302..0034c70 100644 --- a/src/services/users/signout/__test__/post.test.ts +++ b/src/services/users/signout/__test__/post.test.ts @@ -1,18 +1,20 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' import jwt from 'jsonwebtoken' -import { application } from '../../../../application.js' -import prisma from '../../../../tools/database/prisma.js' -import { refreshTokenExample } from '../../../../models/RefreshToken.js' -import type { UserRefreshJWT } from '../../../../models/User.js' +import { application } from '#src/application.js' +import prisma from '#src/tools/database/prisma.js' +import { refreshTokenExample } from '#src/models/RefreshToken.js' +import type { UserRefreshJWT } from '#src/models/User.js' -await tap.test('POST /users/signout', async (t) => { +await test('POST /users/signout', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { sinon.stub(prisma, 'refreshToken').value({ findFirst: async () => { return refreshTokenExample @@ -32,10 +34,10 @@ await tap.test('POST /users/signout', async (t) => { url: '/users/signout', payload: { refreshToken: 'jwt token' } }) - t.equal(response.statusCode, 200) + assert.strictEqual(response.statusCode, 200) }) - await t.test('fails with invalid refreshToken', async (t) => { + await t.test('fails with invalid refreshToken', async () => { sinon.stub(prisma, 'refreshToken').value({ findFirst: async () => { return null @@ -46,6 +48,6 @@ await tap.test('POST /users/signout', async (t) => { url: '/users/signout', payload: { refreshToken: 'somerandomtoken' } }) - t.equal(response.statusCode, 404) + assert.strictEqual(response.statusCode, 404) }) }) diff --git a/src/services/users/signout/delete.ts b/src/services/users/signout/delete.ts index f84077f..b8f0254 100644 --- a/src/services/users/signout/delete.ts +++ b/src/services/users/signout/delete.ts @@ -1,9 +1,9 @@ import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import authenticateUser from '../../../tools/plugins/authenticateUser.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import authenticateUser from '#src/tools/plugins/authenticateUser.js' const deleteSignoutSchema: FastifySchema = { description: 'Signout the user to every connected devices', diff --git a/src/services/users/signout/post.ts b/src/services/users/signout/post.ts index b3cc681..b58f064 100644 --- a/src/services/users/signout/post.ts +++ b/src/services/users/signout/post.ts @@ -3,11 +3,11 @@ import { Type } from '@sinclair/typebox' import type { FastifyPluginAsync, FastifySchema } from 'fastify' import jwt from 'jsonwebtoken' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import { JWT_REFRESH_SECRET } from '../../../tools/configurations.js' -import type { UserRefreshJWT } from '../../../models/User.js' -import { jwtSchema } from '../../../tools/utils/jwtToken.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import { JWT_REFRESH_SECRET } from '#src/tools/configurations.js' +import type { UserRefreshJWT } from '#src/models/User.js' +import { jwtSchema } from '#src/tools/utils/jwtToken.js' const bodyPostSignoutSchema = Type.Object({ refreshToken: jwtSchema.refreshToken diff --git a/src/services/users/signup/__test__/post.test.ts b/src/services/users/signup/__test__/post.test.ts index 70685aa..b487900 100644 --- a/src/services/users/signup/__test__/post.test.ts +++ b/src/services/users/signup/__test__/post.test.ts @@ -1,11 +1,13 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { application } from '../../../../application.js' -import prisma from '../../../../tools/database/prisma.js' -import { userExample } from '../../../../models/User.js' -import { userSettingsExample } from '../../../../models/UserSettings.js' -import { emailTransporter } from '../../../../tools/email/emailTransporter.js' +import { application } from '#src/application.js' +import prisma from '#src/tools/database/prisma.js' +import { userExample } from '#src/models/User.js' +import { userSettingsExample } from '#src/models/UserSettings.js' +import { emailTransporter } from '#src/tools/email/emailTransporter.js' const payload = { name: userExample.name, @@ -15,12 +17,12 @@ const payload = { language: userSettingsExample.language } -await tap.test('POST /users/signup', async (t) => { +await test('POST /users/signup', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('succeeds', async (t) => { + await t.test('succeeds', async () => { sinon.stub(prisma, 'user').value({ findFirst: async () => { return null @@ -41,12 +43,12 @@ await tap.test('POST /users/signup', async (t) => { payload }) const responseJson = response.json() - t.equal(response.statusCode, 201) - t.equal(responseJson.user.name, userExample.name) - t.equal(responseJson.user.email, userExample.email) + assert.strictEqual(response.statusCode, 201) + assert.strictEqual(responseJson.user.name, userExample.name) + assert.strictEqual(responseJson.user.email, userExample.email) }) - await t.test('fails with invalid email', async (t) => { + await t.test('fails with invalid email', async () => { sinon.stub(prisma, 'user').value({ findFirst: async () => { return null @@ -61,10 +63,10 @@ await tap.test('POST /users/signup', async (t) => { email: 'incorrect-email@abc' } }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) - await t.test('fails with already taken `name` or `email`', async (t) => { + await t.test('fails with already taken `name` or `email`', async () => { sinon.stub(prisma, 'user').value({ findFirst: async () => { return userExample @@ -76,6 +78,6 @@ await tap.test('POST /users/signup', async (t) => { url: '/users/signup', payload }) - t.equal(response.statusCode, 400) + assert.strictEqual(response.statusCode, 400) }) }) diff --git a/src/services/users/signup/post.ts b/src/services/users/signup/post.ts index e4e4150..506d367 100644 --- a/src/services/users/signup/post.ts +++ b/src/services/users/signup/post.ts @@ -5,12 +5,12 @@ import { Type } from '@sinclair/typebox' import bcrypt from 'bcryptjs' import type { FastifyPluginAsync, FastifySchema } from 'fastify' -import prisma from '../../../tools/database/prisma.js' -import { fastifyErrors } from '../../../models/utils.js' -import type { BodyUserSchemaType } from '../../../models/User.js' -import { bodyUserSchema, userPublicSchema } from '../../../models/User.js' -import { sendEmail } from '../../../tools/email/sendEmail.js' -import { API_URL } from '../../../tools/configurations.js' +import prisma from '#src/tools/database/prisma.js' +import { fastifyErrors } from '#src/models/utils.js' +import type { BodyUserSchemaType } from '#src/models/User.js' +import { bodyUserSchema, userPublicSchema } from '#src/models/User.js' +import { sendEmail } from '#src/tools/email/sendEmail.js' +import { API_URL } from '#src/tools/configurations.js' const queryPostSignupSchema = Type.Object({ redirectURI: Type.Optional(Type.String({ format: 'uri-reference' })) diff --git a/src/tools/configurations.ts b/src/tools/configurations.ts index 28f51db..63439a0 100644 --- a/src/tools/configurations.ts +++ b/src/tools/configurations.ts @@ -4,7 +4,7 @@ import dotenv from 'dotenv' dotenv.config() -export const PORT = parseInt(process.env['PORT'] ?? '8080', 10) +export const PORT = Number.parseInt(process.env['PORT'] ?? '8080', 10) export const HOST = process.env['HOST'] ?? '0.0.0.0' export const API_URL = process.env['API_URL'] ?? `http://${HOST}:${PORT}` export const FILE_UPLOADS_API_URL = diff --git a/src/tools/email/emailTransporter.ts b/src/tools/email/emailTransporter.ts index 55c3a7b..8d94aa1 100644 --- a/src/tools/email/emailTransporter.ts +++ b/src/tools/email/emailTransporter.ts @@ -3,7 +3,7 @@ import nodemailer from 'nodemailer' import type SMTPTransport from 'nodemailer/lib/smtp-transport/index.js' dotenv.config() -const EMAIL_PORT = parseInt(process.env['EMAIL_PORT'] ?? '465', 10) +const EMAIL_PORT = Number.parseInt(process.env['EMAIL_PORT'] ?? '465', 10) export const EMAIL_INFO: SMTPTransport.Options = { host: process.env['EMAIL_HOST'], diff --git a/src/tools/email/sendEmail.ts b/src/tools/email/sendEmail.ts index ce7ad01..e3a5f1e 100644 --- a/src/tools/email/sendEmail.ts +++ b/src/tools/email/sendEmail.ts @@ -3,9 +3,15 @@ import { URL, fileURLToPath } from 'node:url' import ejs from 'ejs' -import type { Language, Theme } from '../../models/UserSettings.js' -import { EMAIL_LOCALES_URL, EMAIL_TEMPLATE_URL } from '../configurations.js' -import { emailTransporter, EMAIL_INFO } from './emailTransporter.js' +import type { Language, Theme } from '#src/models/UserSettings.js' +import { + EMAIL_LOCALES_URL, + EMAIL_TEMPLATE_URL +} from '#src/tools/configurations.js' +import { + emailTransporter, + EMAIL_INFO +} from '#src/tools/email/emailTransporter.js' interface EmailTranslation { subject: string diff --git a/src/tools/plugins/__test__/authenticateUser.test.ts b/src/tools/plugins/__test__/authenticateUser.test.ts index 83088e9..314383e 100644 --- a/src/tools/plugins/__test__/authenticateUser.test.ts +++ b/src/tools/plugins/__test__/authenticateUser.test.ts @@ -1,98 +1,97 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' import httpErrors from 'http-errors' import jwt from 'jsonwebtoken' -import { getUserWithBearerToken } from '../authenticateUser.js' -import prisma from '../../database/prisma.js' -import { userExample } from '../../../models/User.js' +import { getUserWithBearerToken } from '#src/tools/plugins/authenticateUser.js' +import prisma from '#src/tools/database/prisma.js' +import { userExample } from '#src/models/User.js' const { Unauthorized, Forbidden, BadRequest } = httpErrors -await tap.test( - 'tools/plugins/authenticateUser - getUserWithBearerToken', - async (t) => { - t.afterEach(() => { - sinon.restore() - }) +await test('tools/plugins/authenticateUser - getUserWithBearerToken', async (t) => { + t.afterEach(() => { + sinon.restore() + }) - await t.test('shoulds succeeds with the right information', async (t) => { + await t.test('shoulds succeeds with the right information', async () => { + sinon.stub(prisma, 'user').value({ + findUnique: async () => { + return userExample + } + }) + const currentStrategy = 'Local' + sinon.stub(jwt, 'verify').value(() => { + return { id: userExample.id, currentStrategy } + }) + const userWithBearerToken = await getUserWithBearerToken('Bearer token') + assert.strictEqual(userWithBearerToken.current.id, userExample.id) + assert.strictEqual(userWithBearerToken.current.name, userExample.name) + assert.strictEqual(userWithBearerToken.accessToken, 'token') + assert.strictEqual(userWithBearerToken.currentStrategy, currentStrategy) + }) + + await t.test( + 'shoulds throws `Unauthorized` if `bearerToken` is not a string', + async () => { + await assert.rejects(getUserWithBearerToken(undefined), Unauthorized) + } + ) + + await t.test( + 'shoulds throws `Unauthorized` if `bearerToken` is not to the right format: `"Bearer token"`', + async () => { + await assert.rejects(getUserWithBearerToken('Bearer'), Unauthorized) + await assert.rejects(getUserWithBearerToken(''), Unauthorized) + await assert.rejects( + getUserWithBearerToken('Bearer token token2'), + Unauthorized + ) + } + ) + + await t.test( + 'shoulds throws `Forbidden` if invalid `bearerToken` by `jwt.verify`', + async () => { + sinon.stub(jwt, 'verify').value(() => { + throw new Error('Invalid token') + }) + await assert.rejects(getUserWithBearerToken('Bearer token'), Forbidden) + } + ) + + await t.test( + "shoulds throws `Forbidden` if the user doesn't exist", + async () => { sinon.stub(prisma, 'user').value({ findUnique: async () => { - return userExample + return null } }) - const currentStrategy = 'Local' sinon.stub(jwt, 'verify').value(() => { - return { id: userExample.id, currentStrategy } + return { id: userExample.id } }) - const userWithBearerToken = await getUserWithBearerToken('Bearer token') - t.equal(userWithBearerToken.current.id, userExample.id) - t.equal(userWithBearerToken.current.name, userExample.name) - t.equal(userWithBearerToken.accessToken, 'token') - t.equal(userWithBearerToken.currentStrategy, currentStrategy) - }) + await assert.rejects(getUserWithBearerToken('Bearer token'), Forbidden) + } + ) - await t.test( - 'shoulds throws `Unauthorized` if `bearerToken` is not a string', - async (t) => { - await t.rejects(getUserWithBearerToken(undefined), Unauthorized) - } - ) - - await t.test( - 'shoulds throws `Unauthorized` if `bearerToken` is not to the right format: `"Bearer token"`', - async (t) => { - await t.rejects(getUserWithBearerToken('Bearer'), Unauthorized) - await t.rejects(getUserWithBearerToken(''), Unauthorized) - await t.rejects( - getUserWithBearerToken('Bearer token token2'), - Unauthorized - ) - } - ) - - await t.test( - 'shoulds throws `Forbidden` if invalid `bearerToken` by `jwt.verify`', - async (t) => { - sinon.stub(jwt, 'verify').value(() => { - throw new Error('Invalid token') - }) - await t.rejects(getUserWithBearerToken('Bearer token'), Forbidden) - } - ) - - await t.test( - "shoulds throws `Forbidden` if the user doesn't exist", - async (t) => { - sinon.stub(prisma, 'user').value({ - findUnique: async () => { - return null + await t.test( + 'shoulds throws `BadRequest` if the user account is not confirmed', + async () => { + sinon.stub(prisma, 'user').value({ + findUnique: async () => { + return { + ...userExample, + isConfirmed: false } - }) - sinon.stub(jwt, 'verify').value(() => { - return { id: userExample.id } - }) - await t.rejects(getUserWithBearerToken('Bearer token'), Forbidden) - } - ) - - await t.test( - 'shoulds throws `BadRequest` if the user account is not confirmed', - async (t) => { - sinon.stub(prisma, 'user').value({ - findUnique: async () => { - return { - ...userExample, - isConfirmed: false - } - } - }) - sinon.stub(jwt, 'verify').value(() => { - return { id: userExample.id, currentStrategy: 'Local' } - }) - await t.rejects(getUserWithBearerToken('Bearer token'), BadRequest) - } - ) - } -) + } + }) + sinon.stub(jwt, 'verify').value(() => { + return { id: userExample.id, currentStrategy: 'Local' } + }) + await assert.rejects(getUserWithBearerToken('Bearer token'), BadRequest) + } + ) +}) diff --git a/src/tools/plugins/__test__/socket-io.test.ts b/src/tools/plugins/__test__/socket-io.test.ts index 81fc29a..b39ecf8 100644 --- a/src/tools/plugins/__test__/socket-io.test.ts +++ b/src/tools/plugins/__test__/socket-io.test.ts @@ -1,17 +1,19 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import fastify from 'fastify' -import fastifySocketIo from '../socket-io.js' +import fastifySocketIo from '#src/tools/plugins/socket-io.js' -await tap.test('tools/plugins/socket-io', async (t) => { - await t.test('should close socket server on fastify close', async (t) => { +await test('tools/plugins/socket-io', async (t) => { + await t.test('should close socket server on fastify close', async () => { const PORT = 3030 const application = fastify() await application.register(fastifySocketIo) await application.listen({ port: PORT }) - t.not(application.io, null) + assert.notStrictEqual(application.io, null) await application.close() }) }) diff --git a/src/tools/plugins/authenticateUser.ts b/src/tools/plugins/authenticateUser.ts index b5b7b14..ba2e46c 100644 --- a/src/tools/plugins/authenticateUser.ts +++ b/src/tools/plugins/authenticateUser.ts @@ -2,9 +2,9 @@ import fastifyPlugin from 'fastify-plugin' import httpErrors from 'http-errors' import jwt from 'jsonwebtoken' -import prisma from '../database/prisma.js' -import type { UserJWT, UserRequest } from '../../models/User.js' -import { JWT_ACCESS_SECRET } from '../configurations.js' +import prisma from '#src/tools/database/prisma.js' +import type { UserJWT, UserRequest } from '#src/models/User.js' +import { JWT_ACCESS_SECRET } from '#src/tools/configurations.js' const { Unauthorized, Forbidden, BadRequest } = httpErrors diff --git a/src/tools/plugins/socket-io.ts b/src/tools/plugins/socket-io.ts index 8aa681e..63c9126 100644 --- a/src/tools/plugins/socket-io.ts +++ b/src/tools/plugins/socket-io.ts @@ -3,8 +3,8 @@ import type { ServerOptions } from 'socket.io' import { Server as SocketIoServer } from 'socket.io' import { authorize } from '@thream/socketio-jwt' -import prisma from '../database/prisma.js' -import { JWT_ACCESS_SECRET } from '../configurations.js' +import prisma from '#src/tools/database/prisma.js' +import { JWT_ACCESS_SECRET } from '#src/tools/configurations.js' interface EmitEventOptions { event: string diff --git a/src/tools/utils/OAuthStrategy.ts b/src/tools/utils/OAuthStrategy.ts index fd62598..f6b87fe 100644 --- a/src/tools/utils/OAuthStrategy.ts +++ b/src/tools/utils/OAuthStrategy.ts @@ -3,10 +3,10 @@ import { expiresIn, generateAccessToken, generateRefreshToken -} from './jwtToken.js' -import prisma from '../database/prisma.js' -import type { ProviderOAuth } from '../../models/OAuth.js' -import type { UserRequest } from '../../models/User.js' +} from '#src/tools/utils/jwtToken.js' +import prisma from '#src/tools/database/prisma.js' +import type { ProviderOAuth } from '#src/models/OAuth.js' +import type { UserRequest } from '#src/models/User.js' interface ProviderData { name: string diff --git a/src/tools/utils/__test__/OAuthStrategy.test.ts b/src/tools/utils/__test__/OAuthStrategy.test.ts index 3db68a7..ff5cda1 100644 --- a/src/tools/utils/__test__/OAuthStrategy.test.ts +++ b/src/tools/utils/__test__/OAuthStrategy.test.ts @@ -1,21 +1,23 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' + import sinon from 'sinon' -import { userExample } from '../../../models/User.js' -import { userSettingsExample } from '../../../models/UserSettings.js' -import { OAuthStrategy } from '../OAuthStrategy.js' -import prisma from '../../database/prisma.js' -import { refreshTokenExample } from '../../../models/RefreshToken.js' +import { userExample } from '#src/models/User.js' +import { userSettingsExample } from '#src/models/UserSettings.js' +import { OAuthStrategy } from '#src/tools/utils/OAuthStrategy.js' +import prisma from '#src/tools/database/prisma.js' +import { refreshTokenExample } from '#src/models/RefreshToken.js' const oauthStrategy = new OAuthStrategy('Discord') -await tap.test('tools/utils/OAuthStrategy', async (t) => { +await test('tools/utils/OAuthStrategy', async (t) => { await t.test('callbackSignin', async (t) => { t.afterEach(() => { sinon.restore() }) - await t.test('should signup the user', async (t) => { + await t.test('should signup the user', async () => { const name = 'Martin' const id = '12345' sinon.stub(prisma, 'user').value({ @@ -60,7 +62,7 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { const userCreateSpy = sinon.spy(prisma.user, 'create') const userSettingCreateSpy = sinon.spy(prisma.userSetting, 'create') await oauthStrategy.callbackSignin({ id, name }) - t.equal( + assert.strictEqual( oAuthCreateSpy.calledWith({ data: { userId: userExample.id, @@ -70,7 +72,7 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { }), true ) - t.equal( + assert.strictEqual( oAuthFindFirstSpy.calledWith({ where: { provider: 'Discord', @@ -79,9 +81,9 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { }), true ) - t.equal(userCountSpy.calledWith({ where: { name } }), true) - t.equal(userCreateSpy.calledWith({ data: { name } }), true) - t.equal( + assert.strictEqual(userCountSpy.calledWith({ where: { name } }), true) + assert.strictEqual(userCreateSpy.calledWith({ data: { name } }), true) + assert.strictEqual( userSettingCreateSpy.calledWith({ data: { userId: userExample.id @@ -97,7 +99,7 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { sinon.restore() }) - await t.test('should add the strategy to the user', async (t) => { + await t.test('should add the strategy to the user', async () => { const name = userExample.name const id = '12345' sinon.stub(prisma, 'oAuth').value({ @@ -121,8 +123,8 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { { id, name }, { accessToken: '123', current: userExample, currentStrategy: 'Local' } ) - t.equal(result, 'success') - t.equal( + assert.strictEqual(result, 'success') + assert.strictEqual( oAuthCreateSpy.calledWith({ data: { userId: userExample.id, @@ -132,7 +134,7 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { }), true ) - t.equal( + assert.strictEqual( oAuthFindFirstSpy.calledWith({ where: { provider: 'Discord', @@ -145,7 +147,7 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { await t.test( 'should not add the strategy if the account of the provider is already used', - async (t) => { + async () => { const name = userExample.name const id = '12345' sinon.stub(prisma, 'oAuth').value({ @@ -165,8 +167,11 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { { id, name }, { accessToken: '123', current: userExample, currentStrategy: 'Local' } ) - t.equal(result, 'This account is already used by someone else') - t.equal( + assert.strictEqual( + result, + 'This account is already used by someone else' + ) + assert.strictEqual( oAuthFindFirstSpy.calledWith({ where: { provider: 'Discord', @@ -180,7 +185,7 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { await t.test( 'should not add the strategy if the user is already connected with it', - async (t) => { + async () => { const name = userExample.name const id = '12345' sinon.stub(prisma, 'oAuth').value({ @@ -200,8 +205,8 @@ await tap.test('tools/utils/OAuthStrategy', async (t) => { { id, name }, { accessToken: '123', current: userExample, currentStrategy: 'Local' } ) - t.equal(result, 'You are already using this account') - t.equal( + assert.strictEqual(result, 'You are already using this account') + assert.strictEqual( oAuthFindFirstSpy.calledWith({ where: { provider: 'Discord', diff --git a/src/tools/utils/__test__/buildQueryURL.test.ts b/src/tools/utils/__test__/buildQueryURL.test.ts index 41912f8..78635c1 100644 --- a/src/tools/utils/__test__/buildQueryURL.test.ts +++ b/src/tools/utils/__test__/buildQueryURL.test.ts @@ -1,21 +1,22 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' import { buildQueryURL } from '../buildQueryURL.js' -await tap.test('tools/utils/buildQueryUrl', async (t) => { - t.equal( +await test('tools/utils/buildQueryUrl', async () => { + assert.strictEqual( buildQueryURL('http://localhost:8080', { test: 'query' }), 'http://localhost:8080/?test=query' ) - t.equal( + assert.strictEqual( buildQueryURL('http://localhost:8080/', { test: 'query' }), 'http://localhost:8080/?test=query' ) - t.equal( + assert.strictEqual( buildQueryURL('http://localhost:3000', { test: 'query', code: 'abc' diff --git a/src/tools/utils/__test__/parseStringNullish.test.ts b/src/tools/utils/__test__/parseStringNullish.test.ts index e848612..05aed0b 100644 --- a/src/tools/utils/__test__/parseStringNullish.test.ts +++ b/src/tools/utils/__test__/parseStringNullish.test.ts @@ -1,27 +1,31 @@ -import tap from 'tap' +import test from 'node:test' +import assert from 'node:assert/strict' import { parseStringNullish } from '../parseStringNullish.js' const defaultString = 'defaultString' -await tap.test('tools/utils/parseStringNullish', async (t) => { +await test('tools/utils/parseStringNullish', async (t) => { await t.test( 'returns `defaultString` if `string === undefined`', - async (t) => { - t.equal(parseStringNullish(defaultString, undefined), defaultString) + async () => { + assert.strictEqual( + parseStringNullish(defaultString, undefined), + defaultString + ) } ) - await t.test('returns `null` if `string === null`', async (t) => { - t.equal(parseStringNullish(defaultString, null), null) + await t.test('returns `null` if `string === null`', async () => { + assert.strictEqual(parseStringNullish(defaultString, null), null) }) - await t.test('returns `null` if `string.length === 0`', async (t) => { - t.equal(parseStringNullish(defaultString, ''), null) + await t.test('returns `null` if `string.length === 0`', async () => { + assert.strictEqual(parseStringNullish(defaultString, ''), null) }) - await t.test('returns `string` if `string.length > 0`', async (t) => { + await t.test('returns `string` if `string.length > 0`', async () => { const string = 'myString' - t.equal(parseStringNullish(defaultString, string), string) + assert.strictEqual(parseStringNullish(defaultString, string), string) }) }) diff --git a/src/tools/utils/buildQueryURL.ts b/src/tools/utils/buildQueryURL.ts index 74be040..a413e57 100644 --- a/src/tools/utils/buildQueryURL.ts +++ b/src/tools/utils/buildQueryURL.ts @@ -9,8 +9,8 @@ export const buildQueryURL = ( queryObject: ObjectAny ): string => { const url = new URL(baseURL) - Object.entries(queryObject).forEach(([query, value]) => { + for (const [query, value] of Object.entries(queryObject)) { url.searchParams.append(query, value) - }) + } return url.href } diff --git a/src/tools/utils/jwtToken.ts b/src/tools/utils/jwtToken.ts index 8074b4a..eb9d9f8 100644 --- a/src/tools/utils/jwtToken.ts +++ b/src/tools/utils/jwtToken.ts @@ -4,13 +4,13 @@ import { Type } from '@sinclair/typebox' import jwt from 'jsonwebtoken' import ms from 'ms' -import prisma from '../database/prisma.js' -import type { UserJWT } from '../../models/User.js' +import prisma from '#src/tools/database/prisma.js' +import type { UserJWT } from '#src/models/User.js' import { JWT_ACCESS_EXPIRES_IN, JWT_ACCESS_SECRET, JWT_REFRESH_SECRET -} from '../configurations.js' +} from '#src/tools/configurations.js' export interface ResponseJWT { accessToken: string diff --git a/src/tools/utils/uploadFile.ts b/src/tools/utils/uploadFile.ts index 5ae0543..99f084e 100644 --- a/src/tools/utils/uploadFile.ts +++ b/src/tools/utils/uploadFile.ts @@ -8,7 +8,7 @@ import type { SavedMultipartFile } from '@fastify/multipart' import { FILE_UPLOADS_API_KEY, FILE_UPLOADS_API_URL -} from '../configurations.js' +} from '#src/tools/configurations.js' export const fileUploadAPI = axios.create({ baseURL: FILE_UPLOADS_API_URL, @@ -44,6 +44,7 @@ export const uploadFile = async ( } }) } catch (error) { + console.error(error) throw fastify.httpErrors.requestHeaderFieldsTooLarge( `File should be less than ${MAXIMUM_FILE_SIZE}mb.` )