diff --git a/.env.example b/.env.example index 6ad2c22f..03d1412e 100644 --- a/.env.example +++ b/.env.example @@ -30,12 +30,12 @@ SMTP_EMAIL_ADDRESS= SMTP_PASSWORD= FROM_EMAIL="your-name " -MINIO_ENDPOINT='localhost' -MINIO_PORT=9000 -MINIO_ACCESS_KEY= -MINIO_SECRET_KEY= -MINIO_USE_SSL=false -MINIO_BUCKET_NAME= +MINIO_ENDPOINT= +MINIO_PORT= +MINIO_ACCESS_KEY= +MINIO_SECRET_KEY= +MINIO_USE_SSL= +MINIO_BUCKET_NAME= JWT_SECRET=secret diff --git a/.github/workflows/auto-assign.yaml b/.github/workflows/auto-assign.yaml index be0a7689..a882dfc4 100644 --- a/.github/workflows/auto-assign.yaml +++ b/.github/workflows/auto-assign.yaml @@ -15,7 +15,40 @@ jobs: const comment = context.payload.comment; const issue = context.issue; const owner = "keyshade-xyz"; - const repo = "keyshade" + const repo = "keyshade"; + + async function updateProjectStatus(issueNumber) { + const projectsResponse = await github.rest.projects.listForRepo({ + owner, + repo, + per_page: 100, + }); + + for (const project of projectsResponse.data) { + const columnsResponse = await github.rest.projects.listColumns({ + project_id: project.id, + per_page: 100, + }); + + const inProgressColumn = columnsResponse.data.find(column => column.name === "In Progress"); + if (!inProgressColumn) continue; + + const cardsResponse = await github.rest.projects.listCards({ + column_id: inProgressColumn.id, + per_page: 100, + }); + + const issueCardExists = cardsResponse.data.some(card => card.content_id === issueNumber && card.content_type === "Issue"); + + if (!issueCardExists) { + await github.rest.projects.createCard({ + column_id: inProgressColumn.id, + content_id: issueNumber, + content_type: "Issue", + }); + } + } + } if (comment.body.startsWith('/attempt')) { if (!issue.assignee) { @@ -23,20 +56,23 @@ jobs: owner, repo, issue_number: issue.number, - assignees: [comment.user.login] + assignees: [comment.user.login], }); + await github.rest.issues.createComment({ owner, repo, issue_number: issue.number, - body: `Assigned the issue to @${comment.user.login}!` + body: `Assigned the issue to @${comment.user.login}!`, }); + + await updateProjectStatus(issue.number); } else { await github.rest.issues.createComment({ owner, repo, issue_number: issue.number, - body: 'This issue is already assigned. Tag a maintainer if you need to take over.' + body: 'This issue is already assigned. Tag a maintainer if you need to take over.', }); } } diff --git a/.github/workflows/deploy-api.yml b/.github/workflows/deploy-api.yml index 45ce9a95..0271908f 100644 --- a/.github/workflows/deploy-api.yml +++ b/.github/workflows/deploy-api.yml @@ -17,78 +17,78 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.ACCESS_KEY }} - aws-secret-access-key: ${{ secrets.SECRET_KEY }} - aws-region: ap-south-1 + # - name: Configure AWS credentials + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # aws-access-key-id: ${{ secrets.ACCESS_KEY }} + # aws-secret-access-key: ${{ secrets.SECRET_KEY }} + # aws-region: ap-south-1 - - name: Login to Amazon ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v2 + # - name: Login to Amazon ECR + # id: login-ecr + # uses: aws-actions/amazon-ecr-login@v2 - - name: Build Docker image - id: build - env: - ECR_REGISTRY: ${{ vars.ECR_REGISTRY }} - ECR_REPOSITORY: ${{ vars.ECR_API_REPOSITORY }} - run: | - # Build a docker container and push it to ECR - aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin $ECR_REGISTRY - docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_SHA::6} -t $ECR_REGISTRY/$ECR_REPOSITORY:latest -f ./apps/api/Dockerfile . - echo "Pushing image to ECR..." - docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest - docker push $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_SHA::6} - echo "name=image::$ECR_REGISTRY/$ECR_REPOSITORY:latest" >> $GITHUB_OUTPUT + # - name: Build Docker image + # id: build + # env: + # ECR_REGISTRY: ${{ vars.ECR_REGISTRY }} + # ECR_REPOSITORY: ${{ vars.ECR_API_REPOSITORY }} + # run: | + # # Build a docker container and push it to ECR + # aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin $ECR_REGISTRY + # docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_SHA::6} -t $ECR_REGISTRY/$ECR_REPOSITORY:latest -f ./apps/api/Dockerfile . + # echo "Pushing image to ECR..." + # docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest + # docker push $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_SHA::6} + # echo "name=image::$ECR_REGISTRY/$ECR_REPOSITORY:latest" >> $GITHUB_OUTPUT - setup-database: - needs: build - name: Setup Database - runs-on: ubuntu-latest - environment: alpha + # setup-database: + # needs: build + # name: Setup Database + # runs-on: ubuntu-latest + # environment: alpha - steps: - - name: Checkout - uses: actions/checkout@v4 + # steps: + # - name: Checkout + # uses: actions/checkout@v4 - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 + # - name: Install Node.js + # uses: actions/setup-node@v4 + # with: + # node-version: 20 - - name: Install pnpm - uses: pnpm/action-setup@v4 - with: - version: 9.2.0 - run_install: false + # - name: Install pnpm + # uses: pnpm/action-setup@v4 + # with: + # version: 9.2.0 + # run_install: false - - name: Deploy migrations - env: - DATABASE_URL: ${{ secrets.DATABASE_URL }} - run: pnpm db:deploy-migrations + # - name: Deploy migrations + # env: + # DATABASE_URL: ${{ secrets.DATABASE_URL }} + # run: pnpm db:deploy-migrations - deploy: - needs: [build, setup-database] - runs-on: ubuntu-latest - environment: alpha - name: Deploy API docker image for release + # deploy: + # needs: [build, setup-database] + # runs-on: ubuntu-latest + # environment: alpha + # name: Deploy API docker image for release - steps: - - name: Checkout - uses: actions/checkout@v4 + # steps: + # - name: Checkout + # uses: actions/checkout@v4 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.ACCESS_KEY }} - aws-secret-access-key: ${{ secrets.SECRET_KEY }} - aws-region: ap-south-1 + # - name: Configure AWS credentials + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # aws-access-key-id: ${{ secrets.ACCESS_KEY }} + # aws-secret-access-key: ${{ secrets.SECRET_KEY }} + # aws-region: ap-south-1 - - name: Force re-deploy task in service - id: force-redeploy - env: - ECS_CLUSTER: ${{ vars.ECS_CLUSTER }} - ECS_SERVICE: ${{ vars.ECS_API_SERVICE }} - run: | - aws ecs update-service --cluster $ECS_CLUSTER --service $ECS_SERVICE --force-new-deployment + # - name: Force re-deploy task in service + # id: force-redeploy + # env: + # ECS_CLUSTER: ${{ vars.ECS_CLUSTER }} + # ECS_SERVICE: ${{ vars.ECS_API_SERVICE }} + # run: | + # aws ecs update-service --cluster $ECS_CLUSTER --service $ECS_SERVICE --force-new-deployment diff --git a/.github/workflows/deploy-platform.yml b/.github/workflows/deploy-platform.yml index 74f293bf..8ac2eeb5 100644 --- a/.github/workflows/deploy-platform.yml +++ b/.github/workflows/deploy-platform.yml @@ -22,52 +22,52 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.ACCESS_KEY }} - aws-secret-access-key: ${{ secrets.SECRET_KEY }} - aws-region: ap-south-1 + # - name: Configure AWS credentials + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # aws-access-key-id: ${{ secrets.ACCESS_KEY }} + # aws-secret-access-key: ${{ secrets.SECRET_KEY }} + # aws-region: ap-south-1 - - name: Login to Amazon ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v2 + # - name: Login to Amazon ECR + # id: login-ecr + # uses: aws-actions/amazon-ecr-login@v2 - - name: Build Docker image - id: build - env: - ECR_REGISTRY: ${{ vars.ECR_REGISTRY }} - ECR_REPOSITORY: ${{ vars.ECR_PLATFORM_REPOSITORY }} - run: | - # Build a docker container and push it to ECR - aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin $ECR_REGISTRY - docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_SHA::6} -t $ECR_REGISTRY/$ECR_REPOSITORY:latest -f ./apps/platform/Dockerfile . - echo "Pushing image to ECR..." - docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest - docker push $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_SHA::6} - echo "name=image::$ECR_REGISTRY/$ECR_REPOSITORY:latest" >> $GITHUB_OUTPUT + # - name: Build Docker image + # id: build + # env: + # ECR_REGISTRY: ${{ vars.ECR_REGISTRY }} + # ECR_REPOSITORY: ${{ vars.ECR_PLATFORM_REPOSITORY }} + # run: | + # # Build a docker container and push it to ECR + # aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin $ECR_REGISTRY + # docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_SHA::6} -t $ECR_REGISTRY/$ECR_REPOSITORY:latest -f ./apps/platform/Dockerfile . + # echo "Pushing image to ECR..." + # docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest + # docker push $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_SHA::6} + # echo "name=image::$ECR_REGISTRY/$ECR_REPOSITORY:latest" >> $GITHUB_OUTPUT - deploy: - needs: build - runs-on: ubuntu-latest - environment: alpha - name: Deploy Platform docker image for release + # deploy: + # needs: build + # runs-on: ubuntu-latest + # environment: alpha + # name: Deploy Platform docker image for release - steps: - - name: Checkout - uses: actions/checkout@v4 + # steps: + # - name: Checkout + # uses: actions/checkout@v4 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ secrets.ACCESS_KEY }} - aws-secret-access-key: ${{ secrets.SECRET_KEY }} - aws-region: ap-south-1 + # - name: Configure AWS credentials + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # aws-access-key-id: ${{ secrets.ACCESS_KEY }} + # aws-secret-access-key: ${{ secrets.SECRET_KEY }} + # aws-region: ap-south-1 - - name: Force re-deploy task in service - id: force-redeploy - env: - ECS_CLUSTER: ${{ vars.ECS_CLUSTER }} - ECS_SERVICE: ${{ vars.ECS_PLATFORM_SERVICE }} - run: | - aws ecs update-service --cluster $ECS_CLUSTER --service $ECS_SERVICE --force-new-deployment + # - name: Force re-deploy task in service + # id: force-redeploy + # env: + # ECS_CLUSTER: ${{ vars.ECS_CLUSTER }} + # ECS_SERVICE: ${{ vars.ECS_PLATFORM_SERVICE }} + # run: | + # aws ecs update-service --cluster $ECS_CLUSTER --service $ECS_SERVICE --force-new-deployment diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml new file mode 100644 index 00000000..08ecf7ca --- /dev/null +++ b/.github/workflows/docker-ci.yml @@ -0,0 +1,22 @@ +name: Docker Check + +on: + push: + paths: + - '**Dockerfile' + pull_request: + paths: + - '**Dockerfile' +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Build Docker Image + run: | + for dir in app/*/ ; do + if [ -f "$dir/Dockerfile" ]; then + docker build -f "$dir/Dockerfile" "$dir" + fi + done diff --git a/.github/workflows/validate-api-client.yaml b/.github/workflows/validate-api-client.yaml index a5246a5a..796504a3 100644 --- a/.github/workflows/validate-api-client.yaml +++ b/.github/workflows/validate-api-client.yaml @@ -52,6 +52,10 @@ jobs: run: | pnpm run lint:api-client + - name: Build + run: | + pnpm run build:api-client + - name: Test run: | pnpm run test:api-client diff --git a/.github/workflows/validate-cli.yaml b/.github/workflows/validate-cli.yaml new file mode 100644 index 00000000..81ac44d1 --- /dev/null +++ b/.github/workflows/validate-cli.yaml @@ -0,0 +1,65 @@ +name: Validate CLI + +on: + push: + branches: + - '!develop' + - '!main' + paths: + [ + 'apps/cli/**', + '.github/workflows/validate-cli.yml', + '.github/workflows/deploy-cli.yml' + ] + pull_request: + paths: + [ + 'apps/cli/**', + '.github/workflows/deploy-cli.yml', + '.github/workflows/validate-cli.yml' + ] + +jobs: + validate: + runs-on: ubuntu-latest + name: Validate Cli + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.2.0 + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install packages + run: | + pnpm i + + - name: Lint + run: | + pnpm run lint:cli + + - name: Build + run: | + pnpm run build:cli diff --git a/.github/workflows/validate-platform.yaml b/.github/workflows/validate-platform.yaml new file mode 100644 index 00000000..c29b2b67 --- /dev/null +++ b/.github/workflows/validate-platform.yaml @@ -0,0 +1,61 @@ +name: Validate Platform + +on: + push: + branches: + - '!develop' + - '!main' + paths: + [ + 'apps/platform/**', + '.github/workflows/validate-platform.yml', + '.github/workflows/deploy-platform.yml' + ] + pull_request: + paths: + [ + 'apps/platform/**', + '.github/workflows/deploy-platform.yml', + '.github/workflows/validate-platform.yml' + ] + +jobs: + validate: + runs-on: ubuntu-latest + name: Validate Platform + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.2.0 + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install packages + run: | + pnpm i + + - name: Lint + run: | + pnpm run lint:platform \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit index f1fdd725..ed3f04a6 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -pnpm lint && pnpm format && pnpm test:api && pnpm test:api-client \ No newline at end of file +pnpm lint && pnpm format && pnpm test:api && pnpm test:api-client diff --git a/CHANGELOG.md b/CHANGELOG.md index ef833e58..85c33727 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,64 @@ +## [2.3.0](https://github.com/keyshade-xyz/keyshade/compare/v2.2.0...v2.3.0) (2024-07-29) + +### 🚀 Features + +* **api:** Add pagination metadata to Environment module ([#382](https://github.com/keyshade-xyz/keyshade/issues/382)) ([9baa344](https://github.com/keyshade-xyz/keyshade/commit/9baa344e662e8034ab184f9db2218b8d8b279c61)) +* **api:** Add pagination metadata to Event module ([#394](https://github.com/keyshade-xyz/keyshade/issues/394)) ([60010b4](https://github.com/keyshade-xyz/keyshade/commit/60010b434a15082b90b9b858e0dd9c09748661fb)) +* **api:** Add pagination metadata to Integration module ([#391](https://github.com/keyshade-xyz/keyshade/issues/391)) ([0372e36](https://github.com/keyshade-xyz/keyshade/commit/0372e3629d4d96df7d7263215f866ad8a3e70bc0)) +* **api:** Add pagination metadata to Project module ([#393](https://github.com/keyshade-xyz/keyshade/issues/393)) ([bc274fd](https://github.com/keyshade-xyz/keyshade/commit/bc274fdc241395c022fd6f209c0e951ab4c7694f)) +* **api:** Add pagination metadata to Secret module ([#389](https://github.com/keyshade-xyz/keyshade/issues/389)) ([c4cc667](https://github.com/keyshade-xyz/keyshade/commit/c4cc6676f566c6216ba2e196834aea164c682e51)) +* **api:** Add pagination metadata to Variable module ([#390](https://github.com/keyshade-xyz/keyshade/issues/390)) ([be6aabf](https://github.com/keyshade-xyz/keyshade/commit/be6aabfe218b039d65b62aa01518240487bb5836)) +* **api:** Add pagination metadata to Workspace module ([#387](https://github.com/keyshade-xyz/keyshade/issues/387)) ([a08c924](https://github.com/keyshade-xyz/keyshade/commit/a08c924dbc52ea45e793d639170333f8824eae2c)) +* **api:** Add pagination metadata to Workspace Role module ([#388](https://github.com/keyshade-xyz/keyshade/issues/388)) ([d8e8f49](https://github.com/keyshade-xyz/keyshade/commit/d8e8f491d966cb794057536922c7469ed4f8f448)) +* **api:** Create a paginate method ([#379](https://github.com/keyshade-xyz/keyshade/issues/379)) ([09576f1](https://github.com/keyshade-xyz/keyshade/commit/09576f130900ea8d89454332bef9353bfe09a0b2)) +* **api:** Create endpoint for fetching all revisions of a [secure] ([#303](https://github.com/keyshade-xyz/keyshade/issues/303)) ([de2b602](https://github.com/keyshade-xyz/keyshade/commit/de2b602dcd5bdab104d910b12761a6ec778103b8)) +* **api:** Create endpoint for fetching all revisions of a variable ([#304](https://github.com/keyshade-xyz/keyshade/issues/304)) ([9abddc1](https://github.com/keyshade-xyz/keyshade/commit/9abddc11691146045e727078b3b963f8b9c2e990)) +* **cli:** Improved the DX for list profile ([#334](https://github.com/keyshade-xyz/keyshade/issues/334)) ([6bff496](https://github.com/keyshade-xyz/keyshade/commit/6bff4964493f9919b221a5dc6fcc578bc47b2832)) +* **platform:** Add warning sonner toast for invalid otp ([#335](https://github.com/keyshade-xyz/keyshade/issues/335)) ([21513f5](https://github.com/keyshade-xyz/keyshade/commit/21513f5be6d36b308cd5926e7ad1b475f96cb668)) + +### 🐛 Bug Fixes + +* **cli:** Added parent directory check ([#359](https://github.com/keyshade-xyz/keyshade/issues/359)) ([538ea7f](https://github.com/keyshade-xyz/keyshade/commit/538ea7f2654e4f3ea06fde9fe653342ca769ce44)) +* **platform:** Platform types fixes ([#374](https://github.com/keyshade-xyz/keyshade/issues/374)) ([8e9d9ff](https://github.com/keyshade-xyz/keyshade/commit/8e9d9ffac0af1f93bb5513bf94aa3a75fb3c31c6)) + +### 📚 Documentation + +* Added docker details in setting-things-up.md ([#358](https://github.com/keyshade-xyz/keyshade/issues/358)) ([ed5093a](https://github.com/keyshade-xyz/keyshade/commit/ed5093ac5df17f8dbf4c7e286af739121b51a692)) +* Update postman workspace link ([d6aba27](https://github.com/keyshade-xyz/keyshade/commit/d6aba270a97f03f16e35b5cde75ff472641fe1a7)) +* Updated env and cli docs ([1213d2a](https://github.com/keyshade-xyz/keyshade/commit/1213d2a9b5689d44a260eff9c2e0eb8e6968c7da)) + +### 🔧 Miscellaneous Chores + +* Added next backend url in .env.example ([5695254](https://github.com/keyshade-xyz/keyshade/commit/5695254b64d3c504f7ca7cd17681f42947fef232)) +* **api-client:** Added pagination structure ([a70e957](https://github.com/keyshade-xyz/keyshade/commit/a70e957afc828be1e72d0ea958de8ba860a04b9c)) +* **api-client:** Fixed test script ([ad70819](https://github.com/keyshade-xyz/keyshade/commit/ad708190771f40596646b54fdda49a01c4742644)) +* **api-client:** Removed try-catch from tests in environment ([a64e48c](https://github.com/keyshade-xyz/keyshade/commit/a64e48cb171b3996bddb74f2cf256d4760e3ccb3)) +* **api:** Add user cache for optimization ([#386](https://github.com/keyshade-xyz/keyshade/issues/386)) ([8d730b5](https://github.com/keyshade-xyz/keyshade/commit/8d730b58830a8a0e6be6bf0fe86b3021a2d473eb)) +* **api:** Alter cache rehydration interval ([f5f9eec](https://github.com/keyshade-xyz/keyshade/commit/f5f9eec5c81b29d7f8eb1e233c4e80e4d36eb0cf)) +* **api:** Fixed naming error in variable controller ([0c5a380](https://github.com/keyshade-xyz/keyshade/commit/0c5a380fba843a2eb8a84753cfbe8b3ef86b6e31)) +* **api:** Improve handling of edge cases for paginate module ([#402](https://github.com/keyshade-xyz/keyshade/issues/402)) ([8591487](https://github.com/keyshade-xyz/keyshade/commit/8591487623c5e817ff31aedd6e8cd15074bcfc1c)) +* **api:** Minor updates to user service ([249d778](https://github.com/keyshade-xyz/keyshade/commit/249d778b94a5587b6c7da6d7afe04b9bfee5c0d6)) +* **api:** Skip workspace creation when user is admin ([#376](https://github.com/keyshade-xyz/keyshade/issues/376)) ([13f6c59](https://github.com/keyshade-xyz/keyshade/commit/13f6c59fda07e4a8b6f991e670ab055964fb2fb1)) +* **ci:** Add docker check ([#383](https://github.com/keyshade-xyz/keyshade/issues/383)) ([3119001](https://github.com/keyshade-xyz/keyshade/commit/311900177b85035d777acb6d86549cfffc71dbef)) +* **ci:** Add names to CI files ([1a7e5f6](https://github.com/keyshade-xyz/keyshade/commit/1a7e5f6c2b4e4a5aced5955a2a394f0540776cb1)) +* **ci:** Add validate CLI pipeline ([#373](https://github.com/keyshade-xyz/keyshade/issues/373)) ([a91df6c](https://github.com/keyshade-xyz/keyshade/commit/a91df6c6eedbb3e79dd77cbe42ca4836a714e8a3)) +* **ci:** Adding validate pipeline ([#372](https://github.com/keyshade-xyz/keyshade/issues/372)) ([23cf3b3](https://github.com/keyshade-xyz/keyshade/commit/23cf3b3b12719297ac00c07a20d0b57462440fef)) +* **ci:** Disabled platform and api deployments ([74d601a](https://github.com/keyshade-xyz/keyshade/commit/74d601a576986f6436314dd6631f86ee49185109)) +* **ci:** Fixed deployment scripts ([12e35db](https://github.com/keyshade-xyz/keyshade/commit/12e35db8a5d454db59c8eadaa6bd0fa0525b90b5)) +* **ci:** Fixed platform script ([d783f2a](https://github.com/keyshade-xyz/keyshade/commit/d783f2ab16c63c711a8022b145e0af085cc011de)) +* **CI:** Include migration deployment in API deploy pipeline ([dbd5222](https://github.com/keyshade-xyz/keyshade/commit/dbd5222a5081d769e47cd32231cc515bb311666b)) +* **CI:** Separated deployment and docker build jobs ([090e193](https://github.com/keyshade-xyz/keyshade/commit/090e193cb4af3771e523dd371364f2d21dd3cd03)) +* **CI:** Setup inter-job dependency ([1756727](https://github.com/keyshade-xyz/keyshade/commit/1756727849a2bfabf9d58a81e95d7b6f6c159f4a)) +* **ci:** Update auto-assign.yaml ([#375](https://github.com/keyshade-xyz/keyshade/issues/375)) ([91e0ec1](https://github.com/keyshade-xyz/keyshade/commit/91e0ec12da8c22b8b2ecec8a35aef48fc5fecc9d)) +* **cli:** Changed objects to classes ([#306](https://github.com/keyshade-xyz/keyshade/issues/306)) ([c83f2db](https://github.com/keyshade-xyz/keyshade/commit/c83f2db56ddc3256ed4df35169325cc5427b4978)) +* Removed Minio config ([8feb83a](https://github.com/keyshade-xyz/keyshade/commit/8feb83aae23b5817d5038235a3d0e59c5d12a0ff)) +* Updated deployment scripts and added health check in platform ([fcc1c3f](https://github.com/keyshade-xyz/keyshade/commit/fcc1c3fb50679073c7d3791fedafe25b1287ad0a)) + +### 🔨 Code Refactoring + +* **api:** Updated path of some endpoints in project controller ([9502678](https://github.com/keyshade-xyz/keyshade/commit/95026787df5156147a209c7f6e6b8970b33df5aa)) +* **api:** Updated Redis provider ([33491a1](https://github.com/keyshade-xyz/keyshade/commit/33491a199c5ae7f822e44936eebab964f7f93ac5)) + ## [2.2.0](https://github.com/keyshade-xyz/keyshade/compare/v2.1.0...v2.2.0) (2024-07-11) ### 🚀 Features diff --git a/apps/api/package.json b/apps/api/package.json index b4f083c0..2bba3faf 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -16,7 +16,7 @@ "db:format": "pnpm dlx prisma format --schema=src/prisma/schema.prisma", "db:reset": "pnpx dotenv-cli -e ../../.env -- pnpm dlx prisma migrate reset --force --schema=src/prisma/schema.prisma", "sourcemaps": "sentry-cli sourcemaps inject ./dist && sentry-cli sourcemaps upload ./dist || echo 'Failed to upload source maps to Sentry'", - "e2e:prepare": "cd ../../ && docker compose down && docker compose -f docker-compose-test.yml up -d && cd apps/api && pnpm db:generate-types && cross-env NODE_ENV='e2e' DATABASE_URL='postgresql://prisma:prisma@localhost:5432/tests' pnpm run db:deploy-migrations", + "e2e:prepare": "cd ../../ && docker compose down && docker compose -f docker-compose-test.yml up -d && sleep 3 && cd apps/api && pnpm db:generate-types && cross-env NODE_ENV='e2e' DATABASE_URL='postgresql://prisma:prisma@localhost:5432/tests' pnpm run db:deploy-migrations", "e2e": "pnpm run e2e:prepare && cross-env NODE_ENV='e2e' DATABASE_URL='postgresql://prisma:prisma@localhost:5432/tests' jest --runInBand --config=jest.e2e-config.ts --coverage --coverageDirectory=../../coverage-e2e/api --coverageReporters=json && pnpm run e2e:teardown", "e2e:teardown": "cd ../../ && docker compose -f docker-compose-test.yml down", "unit": "pnpm db:generate-types && jest --config=jest.config.ts" @@ -70,8 +70,7 @@ "source-map-support": "^0.5.21", "supertest": "^6.3.3", "ts-jest": "^29.1.0", - "ts-loader": "^9.4.3", - "typescript": "^5.1.3" + "ts-loader": "^9.4.3" }, "jest": { "moduleFileExtensions": [ diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index 2f492558..0bc84ee0 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -23,6 +23,7 @@ import { ScheduleModule } from '@nestjs/schedule' import { EnvSchema } from '../common/env/env.schema' import { IntegrationModule } from '../integration/integration.module' import { FeedbackModule } from '../feedback/feedback.module' +import { CacheModule } from '../cache/cache.module' @Module({ controllers: [AppController], @@ -53,7 +54,8 @@ import { FeedbackModule } from '../feedback/feedback.module' SocketModule, ProviderModule, IntegrationModule, - FeedbackModule + FeedbackModule, + CacheModule ], providers: [ { diff --git a/apps/api/src/auth/controller/auth.controller.spec.ts b/apps/api/src/auth/controller/auth.controller.spec.ts index d51abbd4..a8721683 100644 --- a/apps/api/src/auth/controller/auth.controller.spec.ts +++ b/apps/api/src/auth/controller/auth.controller.spec.ts @@ -10,6 +10,8 @@ import { ConfigService } from '@nestjs/config' import { GithubOAuthStrategyFactory } from '../../config/factory/github/github-strategy.factory' import { GoogleOAuthStrategyFactory } from '../../config/factory/google/google-strategy.factory' import { GitlabOAuthStrategyFactory } from '../../config/factory/gitlab/gitlab-strategy.factory' +import { CacheService } from '../../cache/cache.service' +import { REDIS_CLIENT } from '../../provider/redis.provider' describe('AuthController', () => { let controller: AuthController @@ -25,7 +27,20 @@ describe('AuthController', () => { ConfigService, { provide: MAIL_SERVICE, useClass: MockMailService }, JwtService, - PrismaService + PrismaService, + CacheService, + { + provide: REDIS_CLIENT, + useValue: { + publisher: { + setEx: jest.fn(), + set: jest.fn(), + get: jest.fn(), + del: jest.fn(), + keys: jest.fn() + } + } + } ] }) .overrideProvider(PrismaService) diff --git a/apps/api/src/auth/guard/auth/auth.guard.spec.ts b/apps/api/src/auth/guard/auth/auth.guard.spec.ts index 2da36533..c018193d 100644 --- a/apps/api/src/auth/guard/auth/auth.guard.spec.ts +++ b/apps/api/src/auth/guard/auth/auth.guard.spec.ts @@ -2,6 +2,6 @@ import { AuthGuard } from './auth.guard' describe('AuthGuard', () => { it('should be defined', () => { - expect(new AuthGuard(null, null, null)).toBeDefined() + expect(new AuthGuard(null, null, null, null)).toBeDefined() }) }) diff --git a/apps/api/src/auth/guard/auth/auth.guard.ts b/apps/api/src/auth/guard/auth/auth.guard.ts index ffdff70a..c0248c55 100644 --- a/apps/api/src/auth/guard/auth/auth.guard.ts +++ b/apps/api/src/auth/guard/auth/auth.guard.ts @@ -13,6 +13,7 @@ import { ONBOARDING_BYPASSED } from '../../../decorators/bypass-onboarding.decor import { AuthenticatedUserContext } from '../../auth.types' import { toSHA256 } from '../../../common/to-sha256' import { EnvSchema } from '../../../common/env/env.schema' +import { CacheService } from '../../../cache/cache.service' const X_E2E_USER_EMAIL = 'x-e2e-user-email' const X_KEYSHADE_TOKEN = 'x-keyshade-token' @@ -24,7 +25,8 @@ export class AuthGuard implements CanActivate { constructor( private readonly jwtService: JwtService, private readonly prisma: PrismaService, - private reflector: Reflector + private reflector: Reflector, + private cache: CacheService ) {} async canActivate(context: ExecutionContext): Promise { @@ -104,11 +106,15 @@ export class AuthGuard implements CanActivate { secret: process.env.JWT_SECRET }) - user = await this.prisma.user.findUnique({ - where: { - id: payload['id'] - } - }) + const cachedUser = await this.cache.getUser(payload['id']) + if (cachedUser) user = cachedUser + else { + user = await this.prisma.user.findUnique({ + where: { + id: payload['id'] + } + }) + } } catch { throw new ForbiddenException() } diff --git a/apps/api/src/auth/service/auth.service.spec.ts b/apps/api/src/auth/service/auth.service.spec.ts index 57c89764..34cd05dc 100644 --- a/apps/api/src/auth/service/auth.service.spec.ts +++ b/apps/api/src/auth/service/auth.service.spec.ts @@ -5,6 +5,8 @@ import { MAIL_SERVICE } from '../../mail/services/interface.service' import { JwtService } from '@nestjs/jwt' import { PrismaService } from '../../prisma/prisma.service' import { mockDeep } from 'jest-mock-extended' +import { CacheService } from '../../cache/cache.service' +import { REDIS_CLIENT } from '../../provider/redis.provider' describe('AuthService', () => { let service: AuthService @@ -15,7 +17,20 @@ describe('AuthService', () => { AuthService, { provide: MAIL_SERVICE, useClass: MockMailService }, JwtService, - PrismaService + PrismaService, + CacheService, + { + provide: REDIS_CLIENT, + useValue: { + publisher: { + setEx: jest.fn(), + set: jest.fn(), + get: jest.fn(), + del: jest.fn(), + keys: jest.fn() + } + } + } ] }) .overrideProvider(PrismaService) diff --git a/apps/api/src/auth/service/auth.service.ts b/apps/api/src/auth/service/auth.service.ts index 5dac0e89..1c82a738 100644 --- a/apps/api/src/auth/service/auth.service.ts +++ b/apps/api/src/auth/service/auth.service.ts @@ -18,6 +18,7 @@ import { PrismaService } from '../../prisma/prisma.service' import createUser from '../../common/create-user' import { AuthProvider } from '@prisma/client' import generateOtp from '../../common/generate-otp' +import { CacheService } from '../../cache/cache.service' @Injectable() export class AuthService { @@ -26,7 +27,8 @@ export class AuthService { constructor( @Inject(MAIL_SERVICE) private mailService: IMailService, private readonly prisma: PrismaService, - private jwt: JwtService + private jwt: JwtService, + private cache: CacheService ) { this.logger = new Logger(AuthService.name) } @@ -82,7 +84,7 @@ export class AuthService { } } }) - + this.cache.setUser(user) // Save user to cache this.logger.log(`User logged in: ${email}`) const token = await this.generateToken(user.id) diff --git a/apps/api/src/cache/cache.module.ts b/apps/api/src/cache/cache.module.ts new file mode 100644 index 00000000..c8dddd24 --- /dev/null +++ b/apps/api/src/cache/cache.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common' +import { CacheService } from './cache.service' + +@Global() +@Module({ + exports: [CacheService], + providers: [CacheService] +}) +export class CacheModule {} diff --git a/apps/api/src/cache/cache.service.spec.ts b/apps/api/src/cache/cache.service.spec.ts new file mode 100644 index 00000000..de3d09bd --- /dev/null +++ b/apps/api/src/cache/cache.service.spec.ts @@ -0,0 +1,34 @@ +import { Test, TestingModule } from '@nestjs/testing' +import { CacheService } from './cache.service' +import { REDIS_CLIENT } from '../provider/redis.provider' + +describe('CacheService', () => { + let service: CacheService + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + CacheService, + { + provide: REDIS_CLIENT, + useValue: { + publisher: { + // Add minimal mock methods as needed + setEx: jest.fn(), + set: jest.fn(), + get: jest.fn(), + del: jest.fn(), + keys: jest.fn() + } + } + } + ] + }).compile() + + service = module.get(CacheService) + }) + + it('should be defined', () => { + expect(service).toBeDefined() + }) +}) diff --git a/apps/api/src/cache/cache.service.ts b/apps/api/src/cache/cache.service.ts new file mode 100644 index 00000000..d5ecced3 --- /dev/null +++ b/apps/api/src/cache/cache.service.ts @@ -0,0 +1,54 @@ +import { Inject, Injectable, OnModuleDestroy } from '@nestjs/common' +import { RedisClientType } from 'redis' +import { User } from '@prisma/client' +import { REDIS_CLIENT } from '../provider/redis.provider' + +@Injectable() +export class CacheService implements OnModuleDestroy { + private static readonly USER_PREFIX = 'user-' + + constructor( + @Inject(REDIS_CLIENT) private redisClient: { publisher: RedisClientType } + ) {} + + private getUserKey(userId: string): string { + return `${CacheService.USER_PREFIX}${userId}` + } + + async setUser(user: User, expirationInSeconds?: number): Promise { + const key = this.getUserKey(user.id) + const userJson = JSON.stringify(user) + if (expirationInSeconds) { + await this.redisClient.publisher.setEx(key, expirationInSeconds, userJson) + } else { + await this.redisClient.publisher.set(key, userJson) + } + } + + async getUser(userId: string): Promise { + const key = this.getUserKey(userId) + const userData = await this.redisClient.publisher.get(key) + if (userData) { + return JSON.parse(userData) as User + } + return null + } + + async deleteUser(userId: string): Promise { + const key = this.getUserKey(userId) + return await this.redisClient.publisher.del(key) + } + + async clearAllUserCache(): Promise { + const keys = await this.redisClient.publisher.keys( + `${CacheService.USER_PREFIX}*` + ) + if (keys.length > 0) { + await this.redisClient.publisher.del(keys) + } + } + + async onModuleDestroy() { + await this.redisClient.publisher.quit() + } +} diff --git a/apps/api/src/common/create-user.ts b/apps/api/src/common/create-user.ts index 032d167d..89632822 100644 --- a/apps/api/src/common/create-user.ts +++ b/apps/api/src/common/create-user.ts @@ -7,11 +7,7 @@ import { Logger } from '@nestjs/common' const createUser = async ( dto: Partial & { authProvider: AuthProvider }, prisma: PrismaService -): Promise< - User & { - defaultWorkspace: Workspace - } -> => { +): Promise => { const logger = new Logger('createUser') // Create the user @@ -27,6 +23,11 @@ const createUser = async ( } }) + if (user.isAdmin) { + logger.log(`Created admin user ${user.id}`) + return user + } + // Create the user's default workspace const workspace = await createWorkspace( user, diff --git a/apps/api/src/common/paginate.spec.ts b/apps/api/src/common/paginate.spec.ts new file mode 100644 index 00000000..6c06b844 --- /dev/null +++ b/apps/api/src/common/paginate.spec.ts @@ -0,0 +1,104 @@ +import { paginate } from './paginate' + +describe('paginate', () => { + it('should paginate without default query', () => { + const totalCount = 100 + const relativeUrl = '/items' + const query = { page: 2, limit: 10 } + + const result = paginate(totalCount, relativeUrl, query) + + expect(result).toBeDefined() + expect(result).toEqual( + expect.objectContaining({ + page: 2, + perPage: 10, + pageCount: 10, + totalCount: 100 + }) + ) + expect(result.links.self).toEqual('/items?page=2&limit=10') + expect(result.links.first).toEqual('/items?page=0&limit=10') + expect(result.links.previous).toEqual('/items?page=1&limit=10') + expect(result.links.next).toEqual('/items?page=3&limit=10') + expect(result.links.last).toEqual('/items?page=9&limit=10') + }) + + it('should paginate with default query', () => { + const totalCount = 100 + const relativeUrl = '/items' + const query = { page: 5, limit: 10 } + const defaultQuery = { pricing: 'pro', filter: 'admin' } + + const result = paginate(totalCount, relativeUrl, query, defaultQuery) + + expect(result).toBeDefined() + expect(result).toEqual( + expect.objectContaining({ + page: 5, + perPage: 10, + pageCount: 10, + totalCount: 100 + }) + ) + expect(result.links.self).toEqual( + '/items?filter=admin&pricing=pro&page=5&limit=10' + ) + expect(result.links.first).toEqual( + '/items?filter=admin&pricing=pro&page=0&limit=10' + ) + expect(result.links.previous).toEqual( + '/items?filter=admin&pricing=pro&page=4&limit=10' + ) + expect(result.links.next).toEqual( + '/items?filter=admin&pricing=pro&page=6&limit=10' + ) + expect(result.links.last).toEqual( + '/items?filter=admin&pricing=pro&page=9&limit=10' + ) + }) + + it('should paginate correctly edge cases where pervious or next is null', () => { + const totalCount = 10 + const relativeUrl = '/items' + const query = { page: 0, limit: 10 } + + const result = paginate(totalCount, relativeUrl, query) + + expect(result).toBeDefined() + expect(result).toEqual( + expect.objectContaining({ + page: 0, + perPage: 10, + pageCount: 1, + totalCount: 10 + }) + ) + expect(result.links.self).toEqual('/items?page=0&limit=10') + expect(result.links.first).toEqual('/items?page=0&limit=10') + expect(result.links.previous).toBeNull() + expect(result.links.next).toBeNull() + expect(result.links.last).toEqual('/items?page=0&limit=10') + }) + + it('should receive empty object when page is greater than maximum page limit', () => { + const totalCount = 4 + const relativeUrl = '/items' + const query = { page: 3, limit: 2 } + + const result = paginate(totalCount, relativeUrl, query) + + expect(result).toBeDefined() + expect(result).toEqual({}) + }) + + it('should receive empty object when limit is 0 or undefined', () => { + const totalCount = 10 + const relativeUrl = '/items' + const query = { page: 0, limit: 0 } + const result = paginate(totalCount, relativeUrl, query) + + expect(result).toBeDefined() + expect(result).toEqual({}) + }) +}) diff --git a/apps/api/src/common/paginate.ts b/apps/api/src/common/paginate.ts new file mode 100644 index 00000000..b25f43c3 --- /dev/null +++ b/apps/api/src/common/paginate.ts @@ -0,0 +1,76 @@ +export interface PaginatedMetadata { + page: number + perPage: number + pageCount: number + totalCount: number + links: { + self: string + first: string + previous: string | null + next: string | null + last: string + } +} + +interface QueryOptions { + page: number + limit: number + sort?: string + order?: string + search?: string +} + +//convert query object to query string to use in links +const getQueryString = (query: QueryOptions) => { + return Object.keys(query) + .map((key) => `${key}=${query[key]}`) + .join('&') +} + +export const paginate = ( + totalCount: number, + relativeUrl: string, + query: QueryOptions, + defaultQuery?: Record +) => { + if (!query.limit) return {} as PaginatedMetadata + let defaultQueryStr = '' + if (defaultQuery) { + //sorting entries to make sure the order is consistent and predictable during tests + const sortedEntries = Object.entries(defaultQuery).sort(([keyA], [keyB]) => + keyA.localeCompare(keyB) + ) + //ignore keys with undefined values. Undefined values may occur when qury params are optional + defaultQueryStr = sortedEntries.reduce((res, [key, value]) => { + if (value !== undefined) { + res += `${key}=${value}&` + } + return res + }, '') + } + + const metadata = {} as PaginatedMetadata + metadata.page = query.page + metadata.perPage = query.limit + metadata.pageCount = Math.ceil(totalCount / query.limit) + metadata.totalCount = totalCount + + if (query.page >= metadata.pageCount) return {} as PaginatedMetadata + + //create links from relativeUrl , defalutQueryStr and query of type QueryOptions + metadata.links = { + self: `${relativeUrl}?${defaultQueryStr + getQueryString(query)}`, + first: `${relativeUrl}?${defaultQueryStr + getQueryString({ ...query, page: 0 })}`, + previous: + query.page === 0 + ? null + : `${relativeUrl}?${defaultQueryStr + getQueryString({ ...query, page: query.page - 1 })}`, + next: + query.page === metadata.pageCount - 1 + ? null + : `${relativeUrl}?${defaultQueryStr + getQueryString({ ...query, page: query.page + 1 })}`, + last: `${relativeUrl}?${defaultQueryStr + getQueryString({ ...query, page: metadata.pageCount - 1 })}` + } + + return metadata +} diff --git a/apps/api/src/environment/controller/environment.controller.ts b/apps/api/src/environment/controller/environment.controller.ts index f0f09f52..31d5be19 100644 --- a/apps/api/src/environment/controller/environment.controller.ts +++ b/apps/api/src/environment/controller/environment.controller.ts @@ -57,7 +57,7 @@ export class EnvironmentController { async getEnvironmentsOfProject( @CurrentUser() user: User, @Param('projectId') projectId: string, - @Query('page') page: number = 1, + @Query('page') page: number = 0, @Query('limit') limit: number = 10, @Query('sort') sort: string = 'name', @Query('order') order: string = 'asc', diff --git a/apps/api/src/environment/environment.e2e.spec.ts b/apps/api/src/environment/environment.e2e.spec.ts index 02279063..af8504d5 100644 --- a/apps/api/src/environment/environment.e2e.spec.ts +++ b/apps/api/src/environment/environment.e2e.spec.ts @@ -27,6 +27,7 @@ import { EventService } from '../event/service/event.service' import { EnvironmentService } from './service/environment.service' import { UserModule } from '../user/user.module' import { UserService } from '../user/service/user.service' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Environment Controller Tests', () => { let app: NestFastifyApplication @@ -64,6 +65,8 @@ describe('Environment Controller Tests', () => { environmentService = moduleRef.get(EnvironmentService) userService = moduleRef.get(UserService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -235,7 +238,7 @@ describe('Environment Controller Tests', () => { EventSource.ENVIRONMENT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.ENVIRONMENT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -344,7 +347,7 @@ describe('Environment Controller Tests', () => { EventSource.ENVIRONMENT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.ENVIRONMENT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -399,13 +402,27 @@ describe('Environment Controller Tests', () => { it('should be able to fetch all environments of a project', async () => { const response = await app.inject({ method: 'GET', - url: `/environment/all/${project1.id}`, + url: `/environment/all/${project1.id}?page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(2) + expect(metadata.links.self).toBe( + `/environment/all/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toBe( + `/environment/all/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toBe( + `/environment/all/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all environments of a project that does not exist', async () => { @@ -459,7 +476,7 @@ describe('Environment Controller Tests', () => { EventSource.ENVIRONMENT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.ENVIRONMENT) expect(event.triggerer).toBe(EventTriggerer.USER) diff --git a/apps/api/src/environment/service/environment.service.ts b/apps/api/src/environment/service/environment.service.ts index 4ae10629..199ab3f9 100644 --- a/apps/api/src/environment/service/environment.service.ts +++ b/apps/api/src/environment/service/environment.service.ts @@ -17,6 +17,7 @@ import { UpdateEnvironment } from '../dto/update.environment/update.environment' import { PrismaService } from '../../prisma/prisma.service' import createEvent from '../../common/create-event' import { AuthorityCheckerService } from '../../common/authority-checker.service' +import { paginate } from '../../common/paginate' @Injectable() export class EnvironmentService { @@ -171,8 +172,8 @@ export class EnvironmentService { prisma: this.prisma }) - // Get the environments - return await this.prisma.environment.findMany({ + // Get the environments for the required page + const items = await this.prisma.environment.findMany({ where: { projectId, name: { @@ -200,6 +201,24 @@ export class EnvironmentService { [sort]: order } }) + // Calculate metadata for pagination + const totalCount = await this.prisma.environment.count({ + where: { + projectId, + name: { + contains: search + } + } + }) + const metadata = paginate(totalCount, `/environment/all/${projectId}`, { + page, + limit, + sort, + order, + search + }) + + return { items, metadata } } async deleteEnvironment(user: User, environmentId: Environment['id']) { diff --git a/apps/api/src/event/event.e2e.spec.ts b/apps/api/src/event/event.e2e.spec.ts index 3ee3aa4a..747a3d71 100644 --- a/apps/api/src/event/event.e2e.spec.ts +++ b/apps/api/src/event/event.e2e.spec.ts @@ -35,6 +35,7 @@ import { EnvironmentModule } from '../environment/environment.module' import createEvent from '../common/create-event' import { VariableService } from '../variable/service/variable.service' import { VariableModule } from '../variable/variable.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Event Controller Tests', () => { let app: NestFastifyApplication @@ -80,6 +81,8 @@ describe('Event Controller Tests', () => { secretService = moduleRef.get(SecretService) variableService = moduleRef.get(VariableService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() @@ -115,9 +118,8 @@ describe('Event Controller Tests', () => { 'x-e2e-user-email': user.email } }) - expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -129,6 +131,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newWorkspace.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(newWorkspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${newWorkspace.id}?source=WORKSPACE&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${newWorkspace.id}?source=WORKSPACE&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${newWorkspace.id}?source=WORKSPACE&page=0&limit=10&search=` + ) }) it('should be able to fetch a project event', async () => { @@ -152,7 +169,7 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -164,6 +181,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newProject.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=PROJECT&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=PROJECT&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=PROJECT&page=0&limit=10&search=` + ) }) it('should be able to fetch an environment event', async () => { @@ -188,7 +220,7 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -200,6 +232,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newEnvironment.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=ENVIRONMENT&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=ENVIRONMENT&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=ENVIRONMENT&page=0&limit=10&search=` + ) }) it('should be able to fetch a secret event', async () => { @@ -230,7 +277,7 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -242,6 +289,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newSecret.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=SECRET&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=SECRET&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=SECRET&page=0&limit=10&search=` + ) }) it('should be able to fetch a variable event', async () => { @@ -272,7 +334,7 @@ describe('Event Controller Tests', () => { expect(response.statusCode).toBe(200) // expect(response.json()).toBe({}) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -284,6 +346,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newVariable.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=VARIABLE&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=VARIABLE&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=VARIABLE&page=0&limit=10&search=` + ) }) it('should be able to fetch a workspace role event', async () => { @@ -310,7 +387,7 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -322,6 +399,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newWorkspaceRole.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=WORKSPACE_ROLE&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=WORKSPACE_ROLE&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=WORKSPACE_ROLE&page=0&limit=10&search=` + ) }) it('should be able to fetch all events', async () => { @@ -334,7 +426,52 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toHaveLength(6) + expect(response.json().items).toHaveLength(6) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(6) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?page=0&limit=10&search=` + ) + }) + + it('should be able to fetch 2nd page of all events', async () => { + const response = await app.inject({ + method: 'GET', + url: `/event/${workspace.id}?page=1&limit=3&`, + headers: { + 'x-e2e-user-email': user.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().items).toHaveLength(3) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(6) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?page=1&limit=3&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?page=0&limit=3&search=` + ) + expect(metadata.links.previous).toEqual( + `/event/${workspace.id}?page=0&limit=3&search=` + ) + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?page=1&limit=3&search=` + ) }) it('should throw an error with wrong severity value', async () => { diff --git a/apps/api/src/event/service/event.service.ts b/apps/api/src/event/service/event.service.ts index 9f540d9c..c354f688 100644 --- a/apps/api/src/event/service/event.service.ts +++ b/apps/api/src/event/service/event.service.ts @@ -2,6 +2,7 @@ import { BadRequestException, Injectable } from '@nestjs/common' import { Authority, EventSeverity, EventSource, User } from '@prisma/client' import { PrismaService } from '../../prisma/prisma.service' import { AuthorityCheckerService } from '../../common/authority-checker.service' +import { paginate } from '../../common/paginate' @Injectable() export class EventService { @@ -54,6 +55,24 @@ export class EventService { } // @ts-expect-error - Prisma does not have a type for severity - return await this.prisma.event.findMany(query) + const items = await this.prisma.event.findMany(query) + + //calculate metadata for pagination + const totalCount = await this.prisma.event.count({ + where: query.where + }) + + const metadata = paginate( + totalCount, + `/event/${workspaceId}`, + { + page, + limit, + search + }, + { source } + ) + + return { items, metadata } } } diff --git a/apps/api/src/integration/controller/integration.controller.ts b/apps/api/src/integration/controller/integration.controller.ts index ef6abd6e..8aa1c2de 100644 --- a/apps/api/src/integration/controller/integration.controller.ts +++ b/apps/api/src/integration/controller/integration.controller.ts @@ -66,13 +66,12 @@ export class IntegrationController { } /* istanbul ignore next */ - // The e2e tests are not working, but the API calls work as expected @Get('all/:workspaceId') @RequiredApiKeyAuthorities(Authority.READ_INTEGRATION) async getAllIntegrations( @CurrentUser() user: User, @Param('workspaceId') workspaceId: string, - @Query('page') page: number = 1, + @Query('page') page: number = 0, @Query('limit') limit: number = 10, @Query('sort') sort: string = 'name', @Query('order') order: string = 'asc', diff --git a/apps/api/src/integration/integration.e2e.spec.ts b/apps/api/src/integration/integration.e2e.spec.ts index 1e5b4dc9..ec15adaa 100644 --- a/apps/api/src/integration/integration.e2e.spec.ts +++ b/apps/api/src/integration/integration.e2e.spec.ts @@ -26,6 +26,7 @@ import { MAIL_SERVICE } from '../mail/services/interface.service' import { MockMailService } from '../mail/services/mock.service' import { EnvironmentModule } from '../environment/environment.module' import { EnvironmentService } from '../environment/service/environment.service' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Integration Controller Tests', () => { let app: NestFastifyApplication @@ -66,6 +67,8 @@ describe('Integration Controller Tests', () => { projectService = moduleRef.get(ProjectService) environmentService = moduleRef.get(EnvironmentService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -599,6 +602,34 @@ describe('Integration Controller Tests', () => { expect(result.json().id).toEqual(integration1.id) }) + it('should be able to fetch all integrations on first page', async () => { + const result = await app.inject({ + method: 'GET', + url: `/integration/all/${workspace1.id}?page=0&limit=10`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(result.statusCode).toEqual(200) + expect(result.json().items).toHaveLength(1) + + //check metadata + const metadata = result.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/integration/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/integration/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/integration/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + }) + it('should not be able to fetch an integration that does not exist', async () => { const result = await app.inject({ method: 'GET', diff --git a/apps/api/src/integration/service/integration.service.ts b/apps/api/src/integration/service/integration.service.ts index d1f7bab2..e54f0b0e 100644 --- a/apps/api/src/integration/service/integration.service.ts +++ b/apps/api/src/integration/service/integration.service.ts @@ -18,6 +18,7 @@ import { UpdateIntegration } from '../dto/update.integration/update.integration' import { AuthorityCheckerService } from '../../common/authority-checker.service' import createEvent from '../../common/create-event' import IntegrationFactory from '../plugins/factory/integration.factory' +import { paginate } from '../../common/paginate' @Injectable() export class IntegrationService { @@ -302,7 +303,34 @@ export class IntegrationService { } }) - return integrations + //calculate metadata for pagination + const totalCount = await this.prisma.integration.count({ + where: { + name: { + contains: search + }, + workspaceId, + OR: [ + { + projectId: null + }, + { + projectId: { + in: projectIds + } + } + ] + } + }) + const metadata = paginate(totalCount, `/integration/all/${workspaceId}`, { + page, + limit, + sort, + order, + search + }) + + return { items: integrations, metadata } } async deleteIntegration(user: User, integrationId: Integration['id']) { diff --git a/apps/api/src/project/controller/project.controller.ts b/apps/api/src/project/controller/project.controller.ts index bcc8fa51..7c947dc0 100644 --- a/apps/api/src/project/controller/project.controller.ts +++ b/apps/api/src/project/controller/project.controller.ts @@ -68,7 +68,7 @@ export class ProjectController { return await this.service.forkProject(user, projectId, forkMetadata) } - @Put(':projectId/sync-fork') + @Put(':projectId/fork') @RequiredApiKeyAuthorities(Authority.READ_PROJECT, Authority.UPDATE_PROJECT) async syncFork( @CurrentUser() user: User, @@ -78,7 +78,7 @@ export class ProjectController { return await this.service.syncFork(user, projectId, hardSync) } - @Put(':projectId/unlink-fork') + @Delete(':projectId/fork') @RequiredApiKeyAuthorities(Authority.UPDATE_PROJECT) async unlinkFork( @CurrentUser() user: User, diff --git a/apps/api/src/project/project.e2e.spec.ts b/apps/api/src/project/project.e2e.spec.ts index 698dfb6e..1869bc06 100644 --- a/apps/api/src/project/project.e2e.spec.ts +++ b/apps/api/src/project/project.e2e.spec.ts @@ -38,6 +38,7 @@ import { VariableService } from '../variable/service/variable.service' import { VariableModule } from '../variable/variable.module' import { SecretModule } from '../secret/secret.module' import { EnvironmentModule } from '../environment/environment.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Project Controller Tests', () => { let app: NestFastifyApplication @@ -86,6 +87,8 @@ describe('Project Controller Tests', () => { secretService = moduleRef.get(SecretService) variableService = moduleRef.get(VariableService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -222,7 +225,7 @@ describe('Project Controller Tests', () => { EventSource.PROJECT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.PROJECT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -398,7 +401,7 @@ describe('Project Controller Tests', () => { EventSource.PROJECT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.PROJECT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -463,14 +466,29 @@ describe('Project Controller Tests', () => { it('should be able to fetch all projects of a workspace', async () => { const response = await app.inject({ method: 'GET', - url: `/project/all/${workspace1.id}?page=0`, + url: `/project/all/${workspace1.id}?page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) - expect(response.json().length).toEqual(2) + expect(response.json().items.length).toEqual(2) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(2) + expect(metadata.links.self).toBe( + `/project/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toBe( + `/project/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toEqual(null) + expect(metadata.links.next).toEqual(null) + expect(metadata.links.last).toBe( + `/project/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all projects of a non existing workspace', async () => { @@ -632,7 +650,7 @@ describe('Project Controller Tests', () => { EventSource.PROJECT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.PROJECT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -1441,7 +1459,7 @@ describe('Project Controller Tests', () => { // Sync the fork await app.inject({ method: 'PUT', - url: `/project/${forkedProject.id}/sync-fork`, + url: `/project/${forkedProject.id}/fork`, headers: { 'x-e2e-user-email': user2.email } @@ -1631,7 +1649,7 @@ describe('Project Controller Tests', () => { // Sync the fork await app.inject({ method: 'PUT', - url: `/project/${forkedProject.id}/sync-fork?hardSync=true`, + url: `/project/${forkedProject.id}/fork?hardSync=true`, headers: { 'x-e2e-user-email': user2.email } @@ -1666,7 +1684,7 @@ describe('Project Controller Tests', () => { it('should not be able to sync a project that is not forked', async () => { const response = await app.inject({ method: 'PUT', - url: `/project/${project3.id}/sync-fork`, + url: `/project/${project3.id}/fork`, headers: { 'x-e2e-user-email': user1.email } @@ -1690,8 +1708,8 @@ describe('Project Controller Tests', () => { ) const response = await app.inject({ - method: 'PUT', - url: `/project/${forkedProject.id}/unlink-fork`, + method: 'DELETE', + url: `/project/${forkedProject.id}/fork`, headers: { 'x-e2e-user-email': user2.email } @@ -1722,9 +1740,22 @@ describe('Project Controller Tests', () => { 'x-e2e-user-email': user2.email } }) - expect(response.statusCode).toBe(200) - expect(response.json()).toHaveLength(1) + expect(response.json().items).toHaveLength(1) + + //check metadata + const metadata = response.json().metadata + expect(metadata.links.self).toBe( + `/project/${project3.id}/forks?page=0&limit=10` + ) + expect(metadata.links.first).toBe( + `/project/${project3.id}/forks?page=0&limit=10` + ) + expect(metadata.links.previous).toEqual(null) + expect(metadata.links.next).toEqual(null) + expect(metadata.links.last).toBe( + `/project/${project3.id}/forks?page=0&limit=10` + ) }) it('should not contain a forked project that has access level other than GLOBAL', async () => { @@ -1754,7 +1785,7 @@ describe('Project Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toHaveLength(1) + expect(response.json().items).toHaveLength(1) }) }) }) diff --git a/apps/api/src/project/service/project.service.ts b/apps/api/src/project/service/project.service.ts index 18253372..d3bde362 100644 --- a/apps/api/src/project/service/project.service.ts +++ b/apps/api/src/project/service/project.service.ts @@ -2,7 +2,9 @@ import { BadRequestException, ConflictException, Injectable, - Logger + Logger, + NotFoundException, + UnauthorizedException } from '@nestjs/common' import { Authority, @@ -29,6 +31,7 @@ import createEvent from '../../common/create-event' import { ProjectWithSecrets } from '../project.types' import { AuthorityCheckerService } from '../../common/authority-checker.service' import { ForkProject } from '../dto/fork.project/fork.project' +import { paginate } from '../../common/paginate' @Injectable() export class ProjectService { @@ -335,13 +338,27 @@ export class ProjectService { projectId: Project['id'], forkMetadata: ForkProject ) { - const project = - await this.authorityCheckerService.checkAuthorityOverProject({ - userId: user.id, - entity: { id: projectId }, - authority: Authority.READ_PROJECT, - prisma: this.prisma - }) + const project = await this.prisma.project.findUnique({ + where: { id: projectId }, + select: { + id: true, + name: true, + description: true, + storePrivateKey: true, + accessLevel: true, + privateKey: true + } + }) + + if (!project) { + throw new NotFoundException(`Project with id ${projectId} not found`) + } + + if (project.accessLevel !== ProjectAccessLevel.GLOBAL) { + throw new UnauthorizedException( + `User with id ${user.id} does not have the authority in the project with id ${project.id}` + ) + } let workspaceId = forkMetadata.workspaceId @@ -593,19 +610,30 @@ export class ProjectService { } }) - return forks - .slice(page * limit, (page + 1) * limit) - .filter(async (fork) => { - const allowed = - (await this.authorityCheckerService.checkAuthorityOverProject({ - userId: user.id, - entity: { id: fork.id }, - authority: Authority.READ_PROJECT, - prisma: this.prisma - })) != null - - return allowed - }) + const forksAllowed = forks.filter(async (fork) => { + const allowed = + (await this.authorityCheckerService.checkAuthorityOverProject({ + userId: user.id, + entity: { id: fork.id }, + authority: Authority.READ_PROJECT, + prisma: this.prisma + })) != null + + return allowed + }) + + const items = forksAllowed.slice(page * limit, (page + 1) * limit) + //calculate metadata + const metadata = paginate( + forksAllowed.length, + `/project/${projectId}/forks`, + { + page, + limit + } + ) + + return { items, metadata } } async getProjectById(user: User, projectId: Project['id']) { @@ -638,7 +666,8 @@ export class ProjectService { prisma: this.prisma }) - return ( + //fetch projects with required properties + const items = ( await this.prisma.project.findMany({ skip: page * limit, take: limit, @@ -669,6 +698,42 @@ export class ProjectService { } }) ).map((project) => excludeFields(project, 'privateKey', 'publicKey')) + + //calculate metadata + const totalCount = await this.prisma.project.count({ + where: { + workspaceId, + OR: [ + { + name: { + contains: search + } + }, + { + description: { + contains: search + } + } + ], + workspace: { + members: { + some: { + userId: user.id + } + } + } + } + }) + + const metadata = paginate(totalCount, `/project/all/${workspaceId}`, { + page, + limit, + sort, + order, + search + }) + + return { items, metadata } } private async projectExists( diff --git a/apps/api/src/secret/controller/secret.controller.ts b/apps/api/src/secret/controller/secret.controller.ts index 59f36993..16274f11 100644 --- a/apps/api/src/secret/controller/secret.controller.ts +++ b/apps/api/src/secret/controller/secret.controller.ts @@ -101,4 +101,24 @@ export class SecretController { environmentId ) } + + @Get(':secretId/revisions/:environmentId') + @RequiredApiKeyAuthorities(Authority.READ_SECRET) + async getRevisionsOfSecret( + @CurrentUser() user: User, + @Param('secretId') secretId: string, + @Param('environmentId') environmentId: string, + @Query('page') page: number = 0, + @Query('limit') limit: number = 10, + @Query('order') order: string = 'desc' + ) { + return await this.secretService.getRevisionsOfSecret( + user, + secretId, + environmentId, + page, + limit, + order + ) + } } diff --git a/apps/api/src/secret/secret.e2e.spec.ts b/apps/api/src/secret/secret.e2e.spec.ts index dec86537..96a8eff3 100644 --- a/apps/api/src/secret/secret.e2e.spec.ts +++ b/apps/api/src/secret/secret.e2e.spec.ts @@ -36,6 +36,7 @@ import { RedisClientType } from 'redis' import { mockDeep } from 'jest-mock-extended' import { UserService } from '../user/service/user.service' import { UserModule } from '../user/user.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Secret Controller Tests', () => { let app: NestFastifyApplication @@ -81,6 +82,8 @@ describe('Secret Controller Tests', () => { eventService = moduleRef.get(EventService) userService = moduleRef.get(UserService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -288,7 +291,7 @@ describe('Secret Controller Tests', () => { EventSource.SECRET ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.SECRET) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -407,7 +410,7 @@ describe('Secret Controller Tests', () => { EventSource.SECRET ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.SECRET) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -596,16 +599,16 @@ describe('Secret Controller Tests', () => { it('should be able to fetch all secrets', async () => { const response = await app.inject({ method: 'GET', - url: `/secret/${project1.id}`, + url: `/secret/${project1.id}?page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) - expect(response.json().length).toBe(1) + expect(response.json().items.length).toBe(1) - const { secret, values } = response.json()[0] + const { secret, values } = response.json().items[0] expect(secret.id).toBeDefined() expect(secret.name).toBeDefined() expect(secret.note).toBeDefined() @@ -615,21 +618,36 @@ describe('Secret Controller Tests', () => { const value = values[0] expect(value.environment).toBeDefined() expect(value.value).not.toEqual('Secret 1 value') + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/secret/${project1.id}?decryptValue=false&page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/secret/${project1.id}?decryptValue=false&page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/secret/${project1.id}?decryptValue=false&page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should be able to fetch all secrets decrypted', async () => { const response = await app.inject({ method: 'GET', - url: `/secret/${project1.id}?decryptValue=true`, + url: `/secret/${project1.id}?decryptValue=true&page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) - expect(response.json().length).toBe(1) + expect(response.json().items.length).toBe(1) - const { secret, values } = response.json()[0] + const { secret, values } = response.json().items[0] expect(secret.id).toBeDefined() expect(secret.name).toBeDefined() expect(secret.note).toBeDefined() @@ -639,6 +657,21 @@ describe('Secret Controller Tests', () => { const value = values[0] expect(value.environment).toBeDefined() expect(value.value).toEqual('Secret 1 value') + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/secret/${project1.id}?decryptValue=true&page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/secret/${project1.id}?decryptValue=true&page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/secret/${project1.id}?decryptValue=true&page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all secrets decrypted if the project does not store the private key', async () => { @@ -878,7 +911,7 @@ describe('Secret Controller Tests', () => { EventSource.SECRET ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.SECRET) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -887,4 +920,108 @@ describe('Secret Controller Tests', () => { expect(event.workspaceId).toBe(workspace1.id) expect(event.itemId).toBe(secret1.id) }) + + //revisions test + it('should be able to fetch all revisions of secrets', async () => { + // create two more entries,totalling three versions + // checks if its able to fetch multiple revisions + await secretService.updateSecret(user1, secret1.id, { + entries: [ + { + value: 'Updated Secret 1 value', + environmentId: environment1.id + } + ] + }) + + await secretService.updateSecret(user1, secret1.id, { + entries: [ + { + value: 'Updated Secret 1 value 2', + environmentId: environment1.id + } + ] + }) + + const response = await app.inject({ + method: 'GET', + url: `/secret/${secret1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().length).toBe(3) + }) + + it('should return [] if the secret has no revision', async () => { + //returns [] if secret has no revision + await prisma.secretVersion.deleteMany({ + where: { + secretId: secret1.id + } + }) + + const response = await app.inject({ + method: 'GET', + url: `/secret/${secret1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().length).toBe(0) + }) + + it('should return error if secret doesnt exist', async () => { + //return error if secret doesnt exist + const secretid = 'nonexistentsecret' + const response = await app.inject({ + method: 'GET', + url: `/secret/${secretid}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(404) + expect(response.json().message).toEqual( + `Secret with id ${secretid} not found` + ) + }) + + it('should return error if environment doesnt exist', async () => { + //return error if environment doesnt exist + const environmentid = 'nonexistentenv' + const response = await app.inject({ + method: 'GET', + url: `/secret/${secret1.id}/revisions/${environmentid}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(404) + expect(response.json().message).toEqual( + `Environment with id ${environmentid} not found` + ) + }) + + it('returns error if secret isnt accessible', async () => { + //return error if user has no access to secret + const response = await app.inject({ + method: 'GET', + url: `/secret/${secret1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user2.email + } + }) + + expect(response.statusCode).toBe(401) + expect(response.json().message).toEqual( + `User ${user2.id} does not have the required authorities` + ) + }) }) diff --git a/apps/api/src/secret/service/secret.service.ts b/apps/api/src/secret/service/secret.service.ts index 2b38d3bf..156c5238 100644 --- a/apps/api/src/secret/service/secret.service.ts +++ b/apps/api/src/secret/service/secret.service.ts @@ -31,6 +31,7 @@ import { ChangeNotification, ChangeNotificationEvent } from 'src/socket/socket.types' +import { paginate } from '../../common/paginate' @Injectable() export class SecretService { @@ -491,6 +492,45 @@ export class SecretService { return response } + async getRevisionsOfSecret( + user: User, + secretId: Secret['id'], + environmentId: Environment['id'], + page: number, + limit: number, + order: string + ) { + // assign order to variable dynamically + const sortOrder = order === 'asc' ? 'asc' : 'desc' + //check access to secret + await this.authorityCheckerService.checkAuthorityOverSecret({ + userId: user.id, + entity: { id: secretId }, + authority: Authority.READ_SECRET, + prisma: this.prisma + }) + + await this.authorityCheckerService.checkAuthorityOverEnvironment({ + userId: user.id, + entity: { id: environmentId }, + authority: Authority.READ_ENVIRONMENT, + prisma: this.prisma + }) + + // get the revisions + const revisions = await this.prisma.secretVersion.findMany({ + where: { + secretId: secretId, + environmentId: environmentId + }, + skip: page * limit, + take: limit, + orderBy: { + version: sortOrder + } + }) + return revisions + } async getAllSecretsOfProject( user: User, @@ -615,7 +655,32 @@ export class SecretService { } } - return Array.from(secretsWithEnvironmentalValues.values()) + const items = Array.from(secretsWithEnvironmentalValues.values()) + + //Calculate pagination metadata + const totalCount = await this.prisma.secret.count({ + where: { + projectId, + name: { + contains: search + } + } + }) + + const metadata = paginate( + totalCount, + `/secret/${projectId}`, + { + page, + limit, + sort, + order, + search + }, + { decryptValue } + ) + + return { items, metadata } } private async secretExists( diff --git a/apps/api/src/user/dto/create.user/create.user.ts b/apps/api/src/user/dto/create.user/create.user.ts index aea94c1d..0f744249 100644 --- a/apps/api/src/user/dto/create.user/create.user.ts +++ b/apps/api/src/user/dto/create.user/create.user.ts @@ -1,77 +1,27 @@ -import { ApiProperty } from '@nestjs/swagger' import { IsBoolean, IsEmail, IsOptional, IsString } from 'class-validator' export class CreateUserDto { @IsString() @IsOptional() - @ApiProperty({ - name: 'name', - description: 'Full name of the user', - required: false, - type: String, - example: 'John Doe', - default: null - }) name?: string @IsString() @IsEmail() - @ApiProperty({ - name: 'email', - description: 'Email of the user', - required: true, - type: String, - example: 'johndoe@keyshade.xyz', - format: 'email', - uniqueItems: true - }) email: string @IsString() @IsOptional() - @ApiProperty({ - name: 'profilePictureUrl', - description: 'URL of the user profile picture', - required: false, - type: String, - example: 'https://example.com/profile.jpg', - default: null - }) profilePictureUrl?: string @IsBoolean() @IsOptional() - @ApiProperty({ - name: 'isActive', - description: 'Is the user active', - required: false, - type: Boolean, - example: true, - default: true - }) isActive?: boolean @IsBoolean() @IsOptional() - @ApiProperty({ - name: 'isOnboardingFinished', - description: 'Is the user onboarding finished', - required: false, - type: Boolean, - example: true, - default: false - }) isOnboardingFinished?: boolean @IsBoolean() @IsOptional() - @ApiProperty({ - name: 'isAdmin', - description: 'Is the user an admin', - required: false, - type: Boolean, - example: false, - default: false - }) isAdmin?: boolean } diff --git a/apps/api/src/user/service/user.service.ts b/apps/api/src/user/service/user.service.ts index 84ba3d6d..2b1437e6 100644 --- a/apps/api/src/user/service/user.service.ts +++ b/apps/api/src/user/service/user.service.ts @@ -72,14 +72,12 @@ export class UserService { } this.log.log(`Updating user ${user.id} with data ${dto}`) - const updatedUser = await this.prisma.user.update({ + return this.prisma.user.update({ where: { id: user.id }, data }) - - return updatedUser } async updateUser(userId: string, dto: UpdateUserDto) { @@ -116,7 +114,7 @@ export class UserService { } this.log.log(`Updating user ${userId} with data ${dto}`) - return await this.prisma.user.update({ + return this.prisma.user.update({ where: { id: userId }, @@ -202,7 +200,7 @@ export class UserService { } async getUserById(userId: string) { - return await this.prisma.user.findUnique({ + return this.prisma.user.findUnique({ where: { id: userId } @@ -216,7 +214,7 @@ export class UserService { order: string, search: string ): Promise { - return await this.prisma.user.findMany({ + return this.prisma.user.findMany({ skip: (page - 1) * limit, take: limit, orderBy: { @@ -240,11 +238,11 @@ export class UserService { } async deleteSelf(user: User) { - this.deleteUserById(user.id) + await this.deleteUserById(user.id) } async deleteUser(userId: User['id']) { - this.deleteUserById(userId) + await this.deleteUserById(userId) } private async deleteUserById(userId: User['id']) { diff --git a/apps/api/src/user/user.e2e.spec.ts b/apps/api/src/user/user.e2e.spec.ts index 2550153c..aef66a6d 100644 --- a/apps/api/src/user/user.e2e.spec.ts +++ b/apps/api/src/user/user.e2e.spec.ts @@ -130,6 +130,26 @@ describe('User Controller Tests', () => { expect(workspace.ownerId).toEqual(createUserResponse.id) }) + it('should skip workspace creation for admin users', async () => { + const createAdminUserResponse = await userService.createUser({ + email: '', + isAdmin: true, + isOnboardingFinished: true, + profilePictureUrl: null + }) + + expect(createAdminUserResponse.defaultWorkspace).toBeUndefined() + + const workspace = await prisma.workspace.findFirst({ + where: { + ownerId: createAdminUserResponse.id, + isDefault: true + } + }) + + expect(workspace).toBeNull() + }) + test('regular user should not be able to access other routes if onboarding is not finished', async () => { // Flip the user's onboarding status to false await prisma.user.update({ diff --git a/apps/api/src/variable/controller/variable.controller.ts b/apps/api/src/variable/controller/variable.controller.ts index bff96153..a890813a 100644 --- a/apps/api/src/variable/controller/variable.controller.ts +++ b/apps/api/src/variable/controller/variable.controller.ts @@ -88,7 +88,7 @@ export class VariableController { @Get('/:projectId/:environmentId') @RequiredApiKeyAuthorities(Authority.READ_VARIABLE) - async getAllSecretsOfEnvironment( + async getAllVariablesOfEnvironment( @CurrentUser() user: User, @Param('projectId') projectId: string, @Param('environmentId') environmentId: string @@ -99,4 +99,24 @@ export class VariableController { environmentId ) } + + @Get('/:variableId/revisions/:environmentId') + @RequiredApiKeyAuthorities(Authority.READ_VARIABLE) + async getRevisionsOfVariable( + @CurrentUser() user: User, + @Param('variableId') variableId: string, + @Param('environmentId') environmentId: string, + @Query('page') page: number = 0, + @Query('limit') limit: number = 10, + @Query('order') order: 'asc' | 'desc' = 'desc' + ) { + return await this.variableService.getRevisionsOfVariable( + user, + variableId, + environmentId, + page, + limit, + order + ) + } } diff --git a/apps/api/src/variable/service/variable.service.ts b/apps/api/src/variable/service/variable.service.ts index 32981ff1..38f8598e 100644 --- a/apps/api/src/variable/service/variable.service.ts +++ b/apps/api/src/variable/service/variable.service.ts @@ -28,6 +28,7 @@ import { ChangeNotification, ChangeNotificationEvent } from 'src/socket/socket.types' +import { paginate } from '../../common/paginate' @Injectable() export class VariableService { @@ -601,7 +602,64 @@ export class VariableService { } } - return Array.from(variablesWithEnvironmentalValues.values()) + const items = Array.from(variablesWithEnvironmentalValues.values()) + + //calculate metadata + const totalCount = await this.prisma.variable.count({ + where: { + projectId, + name: { + contains: search + } + } + }) + + const metadata = paginate(totalCount, `/variable/${projectId}`, { + page, + limit, + sort, + order, + search + }) + + return { items, metadata } + } + + async getRevisionsOfVariable( + user: User, + variableId: Variable['id'], + environmentId: Environment['id'], + page: number, + limit: number, + order: 'asc' | 'desc' + ) { + await this.authorityCheckerService.checkAuthorityOverVariable({ + userId: user.id, + entity: { id: variableId }, + authority: Authority.READ_VARIABLE, + prisma: this.prisma + }) + + await this.authorityCheckerService.checkAuthorityOverEnvironment({ + userId: user.id, + entity: { id: environmentId }, + authority: Authority.READ_ENVIRONMENT, + prisma: this.prisma + }) + + const revisions = await this.prisma.variableVersion.findMany({ + where: { + variableId: variableId, + environmentId: environmentId + }, + skip: page * limit, + take: limit, + orderBy: { + version: order + } + }) + + return revisions } private async variableExists( diff --git a/apps/api/src/variable/variable.e2e.spec.ts b/apps/api/src/variable/variable.e2e.spec.ts index adcd6f3b..e999b58a 100644 --- a/apps/api/src/variable/variable.e2e.spec.ts +++ b/apps/api/src/variable/variable.e2e.spec.ts @@ -36,6 +36,7 @@ import { mockDeep } from 'jest-mock-extended' import { RedisClientType } from 'redis' import { UserService } from '../user/service/user.service' import { UserModule } from '../user/user.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Variable Controller Tests', () => { let app: NestFastifyApplication @@ -83,6 +84,8 @@ describe('Variable Controller Tests', () => { eventService = moduleRef.get(EventService) userService = moduleRef.get(UserService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -289,7 +292,7 @@ describe('Variable Controller Tests', () => { EventSource.VARIABLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.VARIABLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -427,7 +430,7 @@ describe('Variable Controller Tests', () => { EventSource.VARIABLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.VARIABLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -553,7 +556,7 @@ describe('Variable Controller Tests', () => { ) }) - it('should not create a secret version entity if value-environmentId is not provided during creation', async () => { + it('should not create a variable version entity if value-environmentId is not provided during creation', async () => { const variable = await variableService.createVariable( user1, { @@ -575,16 +578,16 @@ describe('Variable Controller Tests', () => { it('should be able to fetch all variables', async () => { const response = await app.inject({ method: 'GET', - url: `/variable/${project1.id}`, + url: `/variable/${project1.id}?page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) - expect(response.json().length).toBe(1) + expect(response.json().items.length).toBe(1) - const { variable, values } = response.json()[0] + const { variable, values } = response.json().items[0] expect(variable).toBeDefined() expect(values).toBeDefined() expect(values.length).toBe(1) @@ -592,6 +595,21 @@ describe('Variable Controller Tests', () => { expect(values[0].environment.id).toBe(environment1.id) expect(variable.id).toBe(variable1.id) expect(variable.name).toBe('Variable 1') + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/variable/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/variable/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/variable/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all variables if the user has no access to the project', async () => { @@ -737,7 +755,7 @@ describe('Variable Controller Tests', () => { EventSource.VARIABLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.VARIABLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -746,4 +764,108 @@ describe('Variable Controller Tests', () => { expect(event.workspaceId).toBe(workspace1.id) expect(event.itemId).toBeDefined() }) + + //revisions test + it('should be able to fetch all revisions of variables', async () => { + // create two more entries,totalling three versions + // checks if its able to fetch multiple revisions + await variableService.updateVariable(user1, variable1.id, { + entries: [ + { + value: 'Updated Variable 1 value', + environmentId: environment1.id + } + ] + }) + + await variableService.updateVariable(user1, variable1.id, { + entries: [ + { + value: 'Updated variable 1 value 2', + environmentId: environment1.id + } + ] + }) + + const response = await app.inject({ + method: 'GET', + url: `/variable/${variable1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().length).toBe(3) + }) + + it('should return [] if the variable has no revision', async () => { + //returns [] if variable has no revision + await prisma.variableVersion.deleteMany({ + where: { + variableId: variable1.id + } + }) + + const response = await app.inject({ + method: 'GET', + url: `/variable/${variable1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().length).toBe(0) + }) + + it('should return error if variable doesnt exist', async () => { + //return error if variable doesnt exist + const variableid = 'nonexistentvariable' + const response = await app.inject({ + method: 'GET', + url: `/variable/${variableid}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(404) + expect(response.json().message).toEqual( + `Variable with id ${variableid} not found` + ) + }) + + it('should return error if environment doesnt exist', async () => { + //return error if environment doesnt exist + const environmentid = 'nonexistentenvironment' + const response = await app.inject({ + method: 'GET', + url: `/variable/${variable1.id}/revisions/${environmentid}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(404) + expect(response.json().message).toEqual( + `Environment with id ${environmentid} not found` + ) + }) + + it('returns error if variable isnt accessible', async () => { + //return error if user has no access to variable + const response = await app.inject({ + method: 'GET', + url: `/variable/${variable1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user2.email + } + }) + + expect(response.statusCode).toBe(401) + expect(response.json().message).toEqual( + `User ${user2.id} does not have the required authorities` + ) + }) }) diff --git a/apps/api/src/workspace-role/service/workspace-role.service.ts b/apps/api/src/workspace-role/service/workspace-role.service.ts index 164fc496..6212dc42 100644 --- a/apps/api/src/workspace-role/service/workspace-role.service.ts +++ b/apps/api/src/workspace-role/service/workspace-role.service.ts @@ -22,6 +22,7 @@ import createEvent from '../../common/create-event' import { WorkspaceRoleWithProjects } from '../workspace-role.types' import { v4 } from 'uuid' import { AuthorityCheckerService } from '../../common/authority-checker.service' +import { paginate, PaginatedMetadata } from '../../common/paginate' @Injectable() export class WorkspaceRoleService { @@ -303,28 +304,51 @@ export class WorkspaceRoleService { sort: string, order: string, search: string - ): Promise { + ): Promise<{ items: WorkspaceRole[]; metadata: PaginatedMetadata }> { await this.authorityCheckerService.checkAuthorityOverWorkspace({ userId: user.id, entity: { id: workspaceId }, authority: Authority.READ_WORKSPACE_ROLE, prisma: this.prisma }) - - return await this.prisma.workspaceRole.findMany({ + //get workspace roles of a workspace for given page and limit + const items = await this.prisma.workspaceRole.findMany({ where: { workspaceId, name: { contains: search } }, - skip: page * limit, take: limit, orderBy: { [sort]: order } }) + + //calculate metadata + const totalCount = await this.prisma.workspaceRole.count({ + where: { + workspaceId, + name: { + contains: search + } + } + }) + + const metadata = paginate( + totalCount, + `/workspace-role/${workspaceId}/all`, + { + page, + limit, + sort, + order, + search + } + ) + + return { items, metadata } } private async getWorkspaceRoleWithAuthority( diff --git a/apps/api/src/workspace-role/workspace-role.e2e.spec.ts b/apps/api/src/workspace-role/workspace-role.e2e.spec.ts index 95eefeca..c110cbf8 100644 --- a/apps/api/src/workspace-role/workspace-role.e2e.spec.ts +++ b/apps/api/src/workspace-role/workspace-role.e2e.spec.ts @@ -26,6 +26,7 @@ import { EventModule } from '../event/event.module' import { WorkspaceRoleService } from './service/workspace-role.service' import { UserService } from '../user/service/user.service' import { UserModule } from '../user/user.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Workspace Role Controller Tests', () => { let app: NestFastifyApplication @@ -58,6 +59,8 @@ describe('Workspace Role Controller Tests', () => { workspaceRoleService = moduleRef.get(WorkspaceRoleService) userService = moduleRef.get(UserService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -250,7 +253,7 @@ describe('Workspace Role Controller Tests', () => { EventSource.WORKSPACE_ROLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.WORKSPACE_ROLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -404,7 +407,7 @@ describe('Workspace Role Controller Tests', () => { EventSource.WORKSPACE_ROLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.WORKSPACE_ROLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -625,7 +628,7 @@ describe('Workspace Role Controller Tests', () => { EventSource.WORKSPACE_ROLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.WORKSPACE_ROLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -725,7 +728,22 @@ describe('Workspace Role Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toEqual(expect.arrayContaining(roles)) + expect(response.json().items).toEqual(expect.arrayContaining(roles)) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toBe(roles.length) + expect(metadata.links.self).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should be able to fetch all the roles of a workspace with READ_WORKSPACE_ROLE role', async () => { @@ -766,7 +784,22 @@ describe('Workspace Role Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toEqual(expect.arrayContaining(roles)) + expect(response.json().items).toEqual(expect.arrayContaining(roles)) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toBe(roles.length) + expect(metadata.links.self).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all the roles of a workspace without READ_WORKSPACE_ROLE role', async () => { diff --git a/apps/api/src/workspace/service/workspace.service.ts b/apps/api/src/workspace/service/workspace.service.ts index 2a6b9319..38753e38 100644 --- a/apps/api/src/workspace/service/workspace.service.ts +++ b/apps/api/src/workspace/service/workspace.service.ts @@ -31,6 +31,7 @@ import { v4 } from 'uuid' import createEvent from '../../common/create-event' import createWorkspace from '../../common/create-workspace' import { AuthorityCheckerService } from '../../common/authority-checker.service' +import { paginate } from '../../common/paginate' @Injectable() export class WorkspaceService { @@ -464,8 +465,8 @@ export class WorkspaceService { authority: Authority.READ_USERS, prisma: this.prisma }) - - return this.prisma.workspaceMember.findMany({ + //get all members of workspace for page with limit + const items = await this.prisma.workspaceMember.findMany({ skip: page * limit, take: limit, orderBy: { @@ -514,6 +515,37 @@ export class WorkspaceService { } } }) + + //calculate metadata for pagination + const totalCount = await this.prisma.workspaceMember.count({ + where: { + workspaceId, + user: { + OR: [ + { + name: { + contains: search + } + }, + { + email: { + contains: search + } + } + ] + } + } + }) + + const metadata = paginate(totalCount, `/workspace/${workspaceId}/members`, { + page, + limit, + sort, + order, + search + }) + + return { items, metadata } } async acceptInvitation( @@ -728,9 +760,10 @@ export class WorkspaceService { order: string, search: string ) { - return this.prisma.workspace.findMany({ + //get all workspaces of user for page with limit + const items = await this.prisma.workspace.findMany({ skip: page * limit, - take: limit, + take: Number(limit), orderBy: { [sort]: order }, @@ -754,6 +787,40 @@ export class WorkspaceService { ] } }) + + // get total count of workspaces of the user + const totalCount = await this.prisma.workspace.count({ + where: { + members: { + some: { + userId: user.id + } + }, + OR: [ + { + name: { + contains: search + } + }, + { + description: { + contains: search + } + } + ] + } + }) + + //calculate metadata for pagination + const metadata = paginate(totalCount, `/workspace`, { + page: Number(page), + limit: Number(limit), + sort, + order, + search + }) + + return { items, metadata } } async exportData(user: User, workspaceId: Workspace['id']) { diff --git a/apps/api/src/workspace/workspace.e2e.spec.ts b/apps/api/src/workspace/workspace.e2e.spec.ts index e40c546c..c50e34aa 100644 --- a/apps/api/src/workspace/workspace.e2e.spec.ts +++ b/apps/api/src/workspace/workspace.e2e.spec.ts @@ -24,6 +24,7 @@ import { EventModule } from '../event/event.module' import { UserModule } from '../user/user.module' import { UserService } from '../user/service/user.service' import { WorkspaceService } from './service/workspace.service' +import { QueryTransformPipe } from '../common/query.transform.pipe' const createMembership = async ( adminRoleId: string, @@ -75,6 +76,8 @@ describe('Workspace Controller Tests', () => { userService = moduleRef.get(UserService) workspaceService = moduleRef.get(WorkspaceService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -222,7 +225,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -340,7 +343,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -485,7 +488,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -563,7 +566,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -641,7 +644,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -719,7 +722,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -831,7 +834,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -895,7 +898,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -964,7 +967,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -1033,8 +1036,23 @@ describe('Workspace Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toBeInstanceOf(Array) - expect(response.json()).toHaveLength(1) + expect(response.json().items).toBeInstanceOf(Array) + expect(response.json().items).toHaveLength(1) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/workspace/${workspace1.id}/members?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace/${workspace1.id}/members?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace/${workspace1.id}/members?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to get all the members of the workspace if user is not a member', async () => { @@ -1150,7 +1168,53 @@ describe('Workspace Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json().length).toEqual(2) + expect(response.json().items.length).toEqual(2) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toBe(2) + expect(metadata.links.self).toEqual( + `/workspace?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace?page=0&limit=10&sort=name&order=asc&search=` + ) + }) + + it('should be able to fetch the 2nd page of the workspaces the user is a member of', async () => { + await createMembership(memberRole.id, user2.id, workspace1.id, prisma) + const response = await app.inject({ + method: 'GET', + headers: { + 'x-e2e-user-email': user2.email + }, + url: '/workspace?page=1&limit=1' + }) + + expect(response.statusCode).toBe(200) + expect(response.json().items).toHaveLength(1) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(2) + expect(metadata.links.self).toEqual( + `/workspace?page=1&limit=1&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace?page=0&limit=1&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toEqual( + `/workspace?page=0&limit=1&sort=name&order=asc&search=` + ) + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace?page=1&limit=1&sort=name&order=asc&search=` + ) }) it('should be able to transfer the ownership of the workspace', async () => { diff --git a/apps/cli/package.json b/apps/cli/package.json index 1c53fa22..d957c8f6 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "description": "CLI for keyshade", "main": "index.js", + "private": false, "type": "commonjs", "scripts": { "build": "tsup", @@ -20,19 +21,21 @@ "cli-table": "^0.3.11", "colors": "^1.4.0", "commander": "^12.1.0", + "eccrypto": "^1.1.6", "figlet": "^1.7.0", "fs": "0.0.1-security", "glob": "^11.0.0", "nodemon": "^3.1.4", "secret-scan": "workspace:*", "socket.io-client": "^4.7.5", - "typescript": "^5.5.2" + "@keyshade/api-client": "workspace:../../packages/api-client" }, "devDependencies": { "@swc/cli": "^0.4.0", "@swc/core": "^1.6.13", "@types/cli-table": "^0.3.4", "@types/figlet": "^1.5.8", + "@types/eccrypto": "^1.1.6", "@types/node": "^20.14.10", "eslint-config-standard-with-typescript": "^43.0.1", "tsup": "^8.1.2" diff --git a/apps/cli/src/commands/environment.command.ts b/apps/cli/src/commands/environment.command.ts new file mode 100644 index 00000000..27cd7f47 --- /dev/null +++ b/apps/cli/src/commands/environment.command.ts @@ -0,0 +1,26 @@ +import BaseCommand from './base.command' +import { CreateEnvironment } from './environment/create.environment' +import { DeleteEnvironment } from './environment/delete.environment' +import { GetEnvironment } from './environment/get.environment' +import { ListEnvironment } from './environment/list.environment' +import { UpdateEnvironment } from './environment/update.environment' + +export default class EnvironmentCommand extends BaseCommand { + getName(): string { + return 'environment' + } + + getDescription(): string { + return 'Manage your environments in keyshade.' + } + + getSubCommands(): BaseCommand[] { + return [ + new CreateEnvironment(), + new DeleteEnvironment(), + new GetEnvironment(), + new ListEnvironment(), + new UpdateEnvironment() + ] + } +} diff --git a/apps/cli/src/commands/environment/create.environment.ts b/apps/cli/src/commands/environment/create.environment.ts new file mode 100644 index 00000000..b5e8882f --- /dev/null +++ b/apps/cli/src/commands/environment/create.environment.ts @@ -0,0 +1,97 @@ +import BaseCommand from '../base.command' +import { text } from '@clack/prompts' +import { + type CommandActionData, + type CommandArgument, + type CommandOption +} from 'src/types/command/command.types' +import { EnvironmentController } from '@keyshade/api-client' +import { Logger } from '@/util/logger' +export class CreateEnvironment extends BaseCommand { + getName(): string { + return 'create' + } + + getDescription(): string { + return 'Create a new environment' + } + + getOptions(): CommandOption[] { + return [ + { + short: '-n', + long: '--name ', + description: 'Name of the Environment' + }, + { + short: '-d', + long: '--description ', + description: 'Description about the Environment' + } + ] + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: + 'ID of the project under which you want to add the environment' + } + ] + } + + async action({ options, args }: CommandActionData): Promise { + const [projectId] = args + const { name, description } = await this.parseInput(options) + + if (!projectId) { + Logger.error('Project ID is required') + return + } + + const apiKey = this.apiKey + + const environmentData = { + name, + description, + projectId + } + + const headers = { + 'x-keyshade-token': apiKey + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Creating Environment...') + + const { + data: environment, + error, + success + } = await environmentController.createEnvironment(environmentData, headers) + + if (success) { + Logger.info(`Environment created:${environment.name} (${environment.id})`) + } else { + Logger.error(`Failed to create environment: ${error.message}`) + } + } + + private async parseInput(options: CommandActionData['options']): Promise<{ + name: string + description?: string + }> { + let { name } = options + const { description } = options + + if (!name) { + name = await text({ + message: 'Enter the name of the Environment', + placeholder: 'env' + }) + } + + return { name, description } + } +} diff --git a/apps/cli/src/commands/environment/delete.environment.ts b/apps/cli/src/commands/environment/delete.environment.ts new file mode 100644 index 00000000..a4874360 --- /dev/null +++ b/apps/cli/src/commands/environment/delete.environment.ts @@ -0,0 +1,55 @@ +import BaseCommand from '../base.command' +import { EnvironmentController } from '@keyshade/api-client' +import { + type CommandActionData, + type CommandArgument +} from 'src/types/command/command.types' +import { Logger } from '@/util/logger' + +export class DeleteEnvironment extends BaseCommand { + getName(): string { + return 'delete' + } + + getDescription(): string { + return 'Delete an environment' + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: 'ID of the environment which you want to delete.' + } + ] + } + + async action({ args }: CommandActionData): Promise { + const [environmentId] = args + + if (!environmentId) { + Logger.error('Environment ID is required') + return + } + + const apiKey = this.apiKey + + const headers = { + 'x-keyshade-token': apiKey + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Deleting Environment...') + + const { success, error } = await environmentController.deleteEnvironment( + { id: environmentId }, + headers + ) + + if (success) { + Logger.info('Environment deleted successfully') + } else { + Logger.error(error.message) + } + } +} diff --git a/apps/cli/src/commands/environment/get.environment.ts b/apps/cli/src/commands/environment/get.environment.ts new file mode 100644 index 00000000..8e543725 --- /dev/null +++ b/apps/cli/src/commands/environment/get.environment.ts @@ -0,0 +1,62 @@ +import { Logger } from '@/util/logger' +import BaseCommand from '../base.command' +import { EnvironmentController } from '@keyshade/api-client' +import { + type CommandActionData, + type CommandArgument +} from 'src/types/command/command.types' + +export class GetEnvironment extends BaseCommand { + getName(): string { + return 'get' + } + + getDescription(): string { + return 'Get an environment' + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: 'ID of the environment which you want to fetch.' + } + ] + } + + async action({ args }: CommandActionData): Promise { + const [environmentId] = args + + if (!environmentId) { + Logger.error('Environment ID is required') + return + } + + const apiKey = this.apiKey + + const headers = { + 'x-keyshade-token': apiKey + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Fetching Environment...') + + const { + success, + error, + data: environment + } = await environmentController.getEnvironmentById( + { id: environmentId }, + headers + ) + + if (success) { + Logger.info('Environment fetched successfully:') + Logger.info( + `Environment ID: ${environment.id}, Name: ${environment.name}, Description: ${environment.description}` + ) + } else { + Logger.error(error.message) + } + } +} diff --git a/apps/cli/src/commands/environment/list.environment.ts b/apps/cli/src/commands/environment/list.environment.ts new file mode 100644 index 00000000..85adcec6 --- /dev/null +++ b/apps/cli/src/commands/environment/list.environment.ts @@ -0,0 +1,69 @@ +import BaseCommand from '../base.command' +import { EnvironmentController } from '@keyshade/api-client' +import { + type CommandActionData, + type CommandArgument +} from 'src/types/command/command.types' +import { Logger } from '@/util/logger' + +export class ListEnvironment extends BaseCommand { + getName(): string { + return 'list' + } + + getDescription(): string { + return 'List all environments under a project' + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: 'ID of the project whose environments you want.' + } + ] + } + + async action({ args }: CommandActionData): Promise { + const [projectId] = args + + if (!projectId) { + Logger.error('Project ID is required') + return + } + + const apiKey = this.apiKey + + const headers = { + 'x-keyshade-token': apiKey + } + + if (!apiKey) { + Logger.error('Base URL and API Key must be set as environment variables') + return + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Fetching all environments...') + + const { + success, + data: environments, + error + } = await environmentController.getAllEnvironmentsOfProject( + { projectId }, + headers + ) + + if (success) { + Logger.info('Fetched environments:') + environments.items.forEach((environment) => { + Logger.info( + `- ID: ${environment.id}, Name: ${environment.name}, Description: ${environment.description}` + ) + }) + } else { + Logger.error(`Failed to fetch environments: ${error.message}`) + } + } +} diff --git a/apps/cli/src/commands/environment/update.environment.ts b/apps/cli/src/commands/environment/update.environment.ts new file mode 100644 index 00000000..b1638ba6 --- /dev/null +++ b/apps/cli/src/commands/environment/update.environment.ts @@ -0,0 +1,82 @@ +import { Logger } from '@/util/logger' +import BaseCommand from '../base.command' +import { EnvironmentController } from '@keyshade/api-client' +import { + type CommandActionData, + type CommandArgument, + type CommandOption +} from 'src/types/command/command.types' + +export class UpdateEnvironment extends BaseCommand { + getName(): string { + return 'update' + } + + getDescription(): string { + return 'Update a environment' + } + + getOptions(): CommandOption[] { + return [ + { + short: '-n', + long: '--name ', + description: 'Name of the Environment' + }, + { + short: '-d', + long: '--description ', + description: 'Description about the Environment' + } + ] + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: 'ID of the environment which you want to update.' + } + ] + } + + async action({ options, args }: CommandActionData): Promise { + const [environmentId] = args + const { name, description } = options + + if (!environmentId) { + Logger.error('Environment ID is required') + return + } + + const apiKey = this.apiKey + + const headers = { + 'x-keyshade-token': apiKey + } + + const environmentData = { + name, + description, + id: environmentId + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Updating Environment...') + + const { + success, + error, + data: environment + } = await environmentController.updateEnvironment(environmentData, headers) + + if (success) { + Logger.info('Environment updated successfully') + Logger.info( + `Environment ID: ${environment.id}, Name: ${environment.name}, Description: ${environment.description}` + ) + } else { + Logger.error(error.message) + } + } +} diff --git a/apps/cli/src/commands/init.command.ts b/apps/cli/src/commands/init.command.ts index 5f9806ab..d422c0a4 100644 --- a/apps/cli/src/commands/init.command.ts +++ b/apps/cli/src/commands/init.command.ts @@ -38,6 +38,12 @@ export default class InitCommand extends BaseCommand { long: '--overwrite', description: 'Overwrite existing configuration', defaultValue: false + }, + { + short: '-q', + long: '--quit-on-decryption-failure', + description: 'Quit on decryption failure', + defaultValue: false } ] } @@ -52,7 +58,7 @@ export default class InitCommand extends BaseCommand { async action({ options }: CommandActionData): Promise { let { workspace, project, environment, privateKey } = options - const { overwrite } = options + const { overwrite, quitOnDecryptionFailure } = options intro('Configure the project for live-updates') @@ -85,7 +91,8 @@ export default class InitCommand extends BaseCommand { await writeProjectRootConfig({ workspace, project, - environment + environment, + quitOnDecryptionFailure }) await writePrivateKeyConfig({ diff --git a/apps/cli/src/commands/run.command.ts b/apps/cli/src/commands/run.command.ts index a1e9e867..0feda2bf 100644 --- a/apps/cli/src/commands/run.command.ts +++ b/apps/cli/src/commands/run.command.ts @@ -15,9 +15,12 @@ import { import { Logger } from '@/util/logger' import type { ClientRegisteredResponse, - Configuration + Configuration, + RunData } from '@/types/command/run.types' +import { decrypt } from '@/util/decrypt' + export default class RunCommand extends BaseCommand { private processEnvironmentalVariables = {} @@ -51,10 +54,9 @@ export default class RunCommand extends BaseCommand { await this.executeCommand(args[0]) } - private async fetchConfigurations(): Promise< - ProjectRootConfig & { privateKey: string } - > { - const { environment, project, workspace } = await fetchProjectRootConfig() + private async fetchConfigurations(): Promise { + const { environment, project, workspace, quitOnDecryptionFailure } = + await fetchProjectRootConfig() const privateKeyConfig = await fetchPrivateKeyConfig() const privateKey = privateKeyConfig[`${workspace}_${project}_${environment}`] @@ -67,7 +69,8 @@ export default class RunCommand extends BaseCommand { environment, project, workspace, - privateKey + privateKey, + quitOnDecryptionFailure } } @@ -78,10 +81,12 @@ export default class RunCommand extends BaseCommand { return 'ws' } - private async connectToSocket(data: ProjectRootConfig) { + private async connectToSocket(data: RunData) { Logger.info('Connecting to socket...') const host = this.baseUrl.substring(this.baseUrl.lastIndexOf('/') + 1) const websocketUrl = `${this.getWebsocketType(this.baseUrl)}://${host}/change-notifier` + const privateKey = data.privateKey + const quitOnDecryptionFailure = data.quitOnDecryptionFailure const ioClient = io(websocketUrl, { autoConnect: false, @@ -102,8 +107,27 @@ export default class RunCommand extends BaseCommand { ioClient.on('configuration-updated', async (data: Configuration) => { Logger.info( - `Configuration change received from API (name: ${data.name}, value: ${data.value})` + `Configuration change received from API (name: ${data.name})` ) + + if (!data.isPlaintext) { + try { + data.value = await decrypt(privateKey, data.value) + } catch (error) { + if (quitOnDecryptionFailure) { + Logger.error( + `Decryption failed for ${data.name}. Stopping the process.` + ) + process.exit(1) + } else { + Logger.warn( + `Decryption failed for ${data.name}. Skipping this configuration.` + ) + return + } + } + } + this.processEnvironmentalVariables[data.name] = data.value this.shouldRestart = true }) diff --git a/apps/cli/src/http/auth.ts b/apps/cli/src/http/auth.ts index bd8d9b41..d53108f7 100644 --- a/apps/cli/src/http/auth.ts +++ b/apps/cli/src/http/auth.ts @@ -1,7 +1,10 @@ import { Logger } from '@/util/logger' -const AuthController = { - async checkApiKeyValidity(baseUrl: string, apiKey: string): Promise { +class AuthController { + static async checkApiKeyValidity( + baseUrl: string, + apiKey: string + ): Promise { Logger.info('Checking API key validity...') const response = await fetch(`${baseUrl}/api/api-key/access/live-updates`, { headers: { diff --git a/apps/cli/src/http/project.ts b/apps/cli/src/http/project.ts new file mode 100644 index 00000000..e69de29b diff --git a/apps/cli/src/http/secret.ts b/apps/cli/src/http/secret.ts index 80eabf09..a5a9d0e6 100644 --- a/apps/cli/src/http/secret.ts +++ b/apps/cli/src/http/secret.ts @@ -1,7 +1,7 @@ import type { Configuration } from '@/types/command/run.types' -const SecretController = { - async fetchSecrets( +class SecretController { + static async fetchSecrets( baseUrl: string, apiKey: string, projectId: string, diff --git a/apps/cli/src/http/variable.ts b/apps/cli/src/http/variable.ts index 03e0d210..cc3a4363 100644 --- a/apps/cli/src/http/variable.ts +++ b/apps/cli/src/http/variable.ts @@ -1,7 +1,7 @@ import type { Configuration } from '@/types/command/run.types' -const VariableController = { - async fetchVariables( +class VariableController { + static async fetchVariables( baseUrl: string, apiKey: string, projectId: string, diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 1e974b4b..697192ce 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -4,6 +4,7 @@ import ProfileCommand from '@/commands/profile.command' import InitCommand from '@/commands/init.command' import RunCommand from '@/commands/run.command' import ScanCommand from '@/commands/scan.command' +import EnvironmentCommand from '@/commands/environment.command' const program = new Command() @@ -15,7 +16,8 @@ const COMMANDS: BaseCommand[] = [ new RunCommand(), new InitCommand(), new ProfileCommand(), - new ScanCommand() + new ScanCommand(), + new EnvironmentCommand() ] COMMANDS.forEach((command) => { diff --git a/apps/cli/src/types/command/run.types.d.ts b/apps/cli/src/types/command/run.types.d.ts index 79da8314..3bb79469 100644 --- a/apps/cli/src/types/command/run.types.d.ts +++ b/apps/cli/src/types/command/run.types.d.ts @@ -1,3 +1,5 @@ +import { ProjectRootConfig } from '../index.types' + export interface Configuration { name: string value: string @@ -9,3 +11,7 @@ export interface ClientRegisteredResponse { projectId: string environmentId: string } + +export interface RunData extends ProjectRootConfig { + privateKey: string +} diff --git a/apps/cli/src/types/index.types.d.ts b/apps/cli/src/types/index.types.d.ts index 5ec40ef6..561e65ef 100644 --- a/apps/cli/src/types/index.types.d.ts +++ b/apps/cli/src/types/index.types.d.ts @@ -2,6 +2,7 @@ export interface ProjectRootConfig { workspace: string project: string environment: string + quitOnDecryptionFailure: boolean } export interface ProfileConfig { @@ -12,4 +13,21 @@ export interface ProfileConfig { } } +export interface Page { + items: T[] + metadata: { + page: number + perPage: number + pageCount: number + totalCount: number + links: { + self: string + first: string + previous: string | null + next: string | null + last: string + } + } +} + export type PrivateKeyConfig = Record diff --git a/apps/cli/src/util/configuration.ts b/apps/cli/src/util/configuration.ts index bedb2a47..241667ee 100644 --- a/apps/cli/src/util/configuration.ts +++ b/apps/cli/src/util/configuration.ts @@ -4,7 +4,7 @@ import type { ProjectRootConfig } from '@/types/index.types' import { existsSync } from 'fs' -import { readFile, readdir, writeFile } from 'fs/promises' +import { readFile, readdir, writeFile, mkdir } from 'fs/promises' export const getOsType = (): 'unix' | 'windows' => { return process.platform === 'win32' ? 'windows' : 'unix' @@ -59,6 +59,7 @@ export const writeProfileConfig = async ( config: ProfileConfig ): Promise => { const path = getProfileConfigurationFilePath() + await ensureDirectoryExists(path) await writeFile(path, JSON.stringify(config, null, 2), 'utf8') } @@ -66,6 +67,7 @@ export const writePrivateKeyConfig = async ( config: PrivateKeyConfig ): Promise => { const path = getPrivateKeyConfigurationFilePath() + await ensureDirectoryExists(path) await writeFile(path, JSON.stringify(config, null, 2), 'utf8') } @@ -82,3 +84,11 @@ export const fetchUserRootConfigurationFiles = async (): Promise => { const files = await readdir(path) return `- ${files.join('\n- ')}` } + +const ensureDirectoryExists = async (path: string) => { + // Create the parent directory if it doesn't exist + const parentDirectory = path.split('/').slice(0, -1).join('/') + if (!existsSync(parentDirectory)) { + await mkdir(parentDirectory, { recursive: true }) + } +} diff --git a/apps/cli/src/util/decrypt.ts b/apps/cli/src/util/decrypt.ts new file mode 100644 index 00000000..6db7932e --- /dev/null +++ b/apps/cli/src/util/decrypt.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +import * as eccrypto from 'eccrypto' + +export const decrypt = async ( + privateKey: string, + data: string +): Promise => { + const parsed = JSON.parse(data) + + const eicesData = { + iv: Buffer.from(parsed.iv), + ephemPublicKey: Buffer.from(parsed.ephemPublicKey), + ciphertext: Buffer.from(parsed.ciphertext), + mac: Buffer.from(parsed.mac) + } + + const decrypted = await eccrypto.decrypt( + Buffer.from(privateKey, 'hex'), + eicesData + ) + + return decrypted.toString() +} diff --git a/apps/cli/tsconfig.json b/apps/cli/tsconfig.json index c0d28519..54e6e45a 100644 --- a/apps/cli/tsconfig.json +++ b/apps/cli/tsconfig.json @@ -11,7 +11,8 @@ "outDir": "./dist", "baseUrl": ".", "paths": { - "@/*": ["./src/*"] + "@/*": ["./src/*"], + "@keyshade/api-client": ["../../packages/api-client/src/index.ts"] }, "skipLibCheck": true, "strictNullChecks": false, @@ -20,6 +21,9 @@ "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true }, + "ts-node": { + "require": ["tsconfig-paths/register"] + }, "include": ["src/**/*.ts", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/apps/platform/package.json b/apps/platform/package.json index cf917e4c..b5eaaeeb 100644 --- a/apps/platform/package.json +++ b/apps/platform/package.json @@ -51,6 +51,7 @@ "@next/eslint-plugin-next": "^13.5.6", "@svgr/webpack": "^8.1.0", "@tailwindcss/forms": "^0.5.7", + "@types/dayjs-precise-range": "^1.0.5", "@types/js-cookie": "^3.0.6", "@types/react": "^18.3.1", "@types/react-dom": "^18.3.0", @@ -58,7 +59,6 @@ "eslint-config-custom": "workspace:*", "postcss": "^8.4.31", "tailwindcss": "^3.3.3", - "tsconfig": "workspace:*", - "typescript": "^4.5.3" + "tsconfig": "workspace:*" } } diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index f7c47d80..5e3d5a7e 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -28,6 +28,7 @@ COPY --from=builder /app/out/full/ . COPY turbo.json turbo.json + RUN pnpm turbo build --filter=web... FROM base AS runner diff --git a/apps/web/package.json b/apps/web/package.json index ccd603aa..0a190369 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -36,7 +36,6 @@ "eslint-config-custom": "workspace:*", "postcss": "^8.4.31", "tailwindcss": "^3.3.3", - "tsconfig": "workspace:*", - "typescript": "^4.5.3" + "tsconfig": "workspace:*" } } diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 54efb77e..185380fb 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -23,7 +23,7 @@ - [Setting things up](contributing-to-keyshade/setting-things-up.md) - [Running things locally](contributing-to-keyshade/running-things-locally/README.md) - [Running the API](contributing-to-keyshade/running-things-locally/running-the-api.md) - - [Running the Web](contributing-to-keyshade/running-things-locally/running-the-web.md) + - [Running the Web](contributing-to-keyshade/running-things-locally/running-the-web-app.md) - [Running the CLI](contributing-to-keyshade/running-things-locally/running-the-cli.md) - [API Testing](contributing-to-keyshade/running-things-locally/api-testing.md) diff --git a/docs/contributing-to-keyshade/environment-variables.md b/docs/contributing-to-keyshade/environment-variables.md index b8f10807..d20a5af9 100644 --- a/docs/contributing-to-keyshade/environment-variables.md +++ b/docs/contributing-to-keyshade/environment-variables.md @@ -4,15 +4,31 @@ description: Get to know the environment you are working with # Environment Variables +In order to run our application properly, we will need to set up some environment variables. These variables are used to configure the application and are used to connect to various services like the database, SMTP server, OAuth providers, etc. + +The environmental variables are split into two parts: Required and Optional variables. The required variables are necessary for the application to run, while the optional variables, if specified, trigger the initialization of certain services. + ## .env.example Here's the description of the environment variables used in the project. You can find the values for these variables in \`.env.example\`. +### Required - **DATABASE_URL**: The URL of the PSQL database to connect to. This is used by the [Prisma Client](https://www.prisma.io/docs/orm/prisma-client) to connect to the database. - **SMTP_HOST**: This is used to send out emails from the backend. - **SMTP_PORT:** The SMTP port as specified by your SMTP provider. - **SMTP_EMAIL_ADDRESS:** The email address you want to be sending out the emails from. - **SMTP_PASSWORD:** The app password for your email account. +- **JWT_SECRET**: The secret used to sign the JWT tokens. It is insignificant in the development environment. +- **WEB_FRONTEND_URL, WORKSPACE_FRONTEND_URL**: The URLs of the web and workspace frontend respectively. These are used in the emails sometimes and in other spaces of the application too. +- **API_PORT**: The environmental variable that specifies the port number on which the API server should listen for incoming connections. If not explicitly set, it defaults to port 4200. +- **REDIS_URL**: The required parameter URL that is used by the API to connect to the Redis instance. +- **FEEDBACK_FORWARD_EMAIL**: Feedbacks submitted by the user would be sent to this email address for the concerned authorities to view it. Ideally, in development environment, this would be your personal email address +- **NEXT_PUBLIC_BACKEND_URL**: The URL of the backend server. This is used by the frontend to make API requests to the backend. +- **FROM_EMAIL**: The display of the email sender title. + +### Optional + + - **GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, GITHUB_CALLBACK_URL:** These settings can be configured by adding an OAuth app in your GitHub account's developer section. Please note that it's not mandatory, until and unless you want to support GitHub OAuth. - **GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_CALLBACK_URL:** These settings can be configured by adding an OAuth app in your Google account's cloud platform. Please note that it's not mandatory, until and unless you want to support Google OAuth. - **GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET, GITLAB_CALLBACK_URL:** These settings can be configured by adding an OAuth app in your GitLab account's application section. Please note that it's not mandatory, until and unless you want to support GitLab OAuth. @@ -22,19 +38,10 @@ Here's the description of the environment variables used in the project. You can - **SENTRY_TRACES_SAMPLE_RATE**: The sample rate for collecting transaction traces in Sentry. It determines the percentage of transactions to capture traces for. - **SENTRY_PROFILES_SAMPLE_RATE**: The sample rate for collecting performance profiles in Sentry. It determines the percentage of requests to capture performance profiles for. - **SENTRY_ENV**: The environment in which the app is running. It can be either 'development', 'production', or 'test'. Please note that it's not mandatory, it will default to "production" enviroment for the sentry configuration. -- **FROM_EMAIL**: The display of the email sender title. -- **JWT_SECRET**: The secret used to sign the JWT tokens. It is insignificant in the development environment. -- **WEB_FRONTEND_URL, WORKSPACE_FRONTEND_URL**: The URLs of the web and workspace frontend respectively. These are used in the emails sometimes and in other spaces of the application too. -- **API_PORT**: The environmental variable that specifies the port number on which the API server should listen for incoming connections. If not explicitly set, it defaults to port 4200. - - **MINIO_ENDPOINT**: This is the endpoint of the Minio server. Minio is an open-source object storage server. - **MINIO_PORT**: The port on which the Minio server is running. - **MINIO_ACCESS_KEY**: The access key to the Minio server. - **MINIO_SECRET_KEY**: The secret key to the Minio server. - **MINIO_USE_SSL**: Whether to use SSL for the Minio connection or not. - **MINIO_BUCKET_NAME**: The name of the bucket in the Minio server where the files are stored. -- **REDIS_URL**: The required parameter URL that is used by the API to connect to the Redis instance. -- **FEEDBACK_FORWARD_EMAIL**: Feedbacks submitted by the user would be sent to this email address for the concerned authorities to view it. Ideally, in development environment, this would be your personal email address - -- **NEXT_PUBLIC_BACKEND_URL**: The URL of the backend server. This is used by the frontend to make API requests to the backend. diff --git a/docs/contributing-to-keyshade/running-things-locally/running-the-cli.md b/docs/contributing-to-keyshade/running-things-locally/running-the-cli.md index fe4d93ac..7d46d416 100644 --- a/docs/contributing-to-keyshade/running-things-locally/running-the-cli.md +++ b/docs/contributing-to-keyshade/running-things-locally/running-the-cli.md @@ -15,14 +15,8 @@ You can get started with developing the CLI using the following steps: pnpm dev:api ``` -- Run the build command to continuously build the code: +- To make a quick check of the features you have just built, run: ```bash - cd apps/cli && pnpm build:cli - ``` - -- Run the CLI: - - ```bash - cd apps/cli && node dist/index.js [subcommand] [options] - ``` + pnpm dev:cli -- + ``` \ No newline at end of file diff --git a/package.json b/package.json index fd845f09..6bfe4fad 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "keyshade-xyz", - "version": "2.2.0", + "version": "2.3.0", "license": "MPL-2.0", "private": true, "engineStrict": false, @@ -103,12 +103,14 @@ "lint:api": "turbo run lint --filter=api", "lint:web": "turbo run lint --filter=web", "lint:platform": "turbo run lint --filter=platform", + "lint:cli": "turbo run lint --filter=cli", "lint:api-client": "pnpm run --filter=api-client lint", "build": "turbo run build", "build:api": "pnpm db:generate-types && turbo run build --filter=api", "build:web": "turbo run build --filter=web", "build:platform": "turbo run build --filter=platform", "build:cli": "turbo run build --filter=cli", + "build:api-client": "pnpm run --filter=api-client build", "start": "turbo run start", "start:api": "turbo run start --filter=api", "start:web": "turbo run start --filter=web", @@ -140,6 +142,7 @@ "devDependencies": { "@sentry/cli": "^2.28.6", "@sentry/webpack-plugin": "^2.14.2", + "@types/jest": "^29.5.2", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "cross-env": "^7.0.3", @@ -148,14 +151,13 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.0.0", "husky": "^9.0.11", + "jest": "^29.7.0", "prettier": "^3.0.0", "prettier-plugin-tailwindcss": "^0.5.11", - "tsconfig": "workspace:*", - "turbo": "^1.12.4", - "@types/jest": "^29.5.2", - "jest": "^29.5.0", "ts-jest": "^29.1.0", - "tsconfig-paths": "^4.2.0" + "tsconfig": "workspace:*", + "tsconfig-paths": "^4.2.0", + "turbo": "^1.12.4" }, "dependencies": { "@semantic-release/changelog": "^6.0.3", @@ -176,6 +178,7 @@ "sharp": "^0.33.3", "tailwind-merge": "^2.3.0", "ts-node": "^10.9.2", - "zod": "^3.23.6" + "zod": "^3.23.6", + "typescript": "^5.5.2" } } diff --git a/packages/api-client/package-lock.json b/packages/api-client/package-lock.json new file mode 100644 index 00000000..8f8b3168 --- /dev/null +++ b/packages/api-client/package-lock.json @@ -0,0 +1,12 @@ +{ + "name": "api-client", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "api-client", + "version": "1.0.0" + } + } +} diff --git a/packages/api-client/package.json b/packages/api-client/package.json index 0d1f1919..cc2e290a 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -1,6 +1,7 @@ { - "name": "api-client", + "name": "@keyshade/api-client", "version": "1.0.0", + "main": "dist/src/index.js", "description": "This package holds all the API request logic", "private": true, "scripts": { @@ -8,7 +9,7 @@ "watch": "tsc -w", "start": "node dist/index.js", "dev": "npx tsc && node dist/index.js", - "test": "BACKEND_URL=http://localhost:4200 jest", + "test": "cross-env BACKEND_URL=http://localhost:4200 jest", "lint": "eslint \"{src,tests}/**/*.ts\" --fix", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"" }, diff --git a/packages/api-client/src/controllers/environment/environment.ts b/packages/api-client/src/controllers/environment/environment.ts index 70ec208d..ca57000b 100644 --- a/packages/api-client/src/controllers/environment/environment.ts +++ b/packages/api-client/src/controllers/environment/environment.ts @@ -1,4 +1,6 @@ -import client from '@package/client' +import { ClientResponse } from '../../types/index.types' +import { APIClient } from '../../core/client' +import { parseResponse } from '../../core/response-parser' import { CreateEnvironmentRequest, CreateEnvironmentResponse, @@ -10,48 +12,57 @@ import { GetEnvironmentByIdResponse, UpdateEnvironmentRequest, UpdateEnvironmentResponse -} from '@package/types/environment.types' +} from '../../types/environment.types' export default class EnvironmentController { - private static apiClient = client + private apiClient: APIClient - static async createEnvironment( + constructor(private readonly backendUrl: string) { + this.apiClient = new APIClient(this.backendUrl) + } + + async createEnvironment( request: CreateEnvironmentRequest, headers?: Record - ): Promise { - return this.apiClient.post( + ): Promise> { + const response = await this.apiClient.post( `/api/environment/${request.projectId}`, request, headers ) + + return await parseResponse(response) } - static async updateEnvironment( + async updateEnvironment( request: UpdateEnvironmentRequest, headers?: Record - ): Promise { - return this.apiClient.put( + ): Promise> { + const response = await this.apiClient.put( `/api/environment/${request.id}`, request, headers ) + + return await parseResponse(response) } - static async getEnvironmentById( + async getEnvironmentById( request: GetEnvironmentByIdRequest, - headers?: Record - ): Promise { - return this.apiClient.get( + ): Promise> { + const response = await this.apiClient.get( `/api/environment/${request.id}`, headers ) + + return await parseResponse(response) } - static async getAllEnvironmentsOfProject( + async getAllEnvironmentsOfProject( request: GetAllEnvironmentsOfProjectRequest, headers?: Record - ): Promise { + ): Promise> { let url = `/api/environment/all/${request.projectId}?` request.page && (url += `page=${request.page}&`) request.limit && (url += `limit=${request.limit}&`) @@ -59,16 +70,20 @@ export default class EnvironmentController { request.order && (url += `order=${request.order}&`) request.search && (url += `search=${request.search}&`) - return this.apiClient.get(url, headers) + const response = await this.apiClient.get(url, headers) + + return await parseResponse(response) } - static async deleteEnvironment( + async deleteEnvironment( request: DeleteEnvironmentRequest, headers?: Record - ): Promise { - return this.apiClient.delete( + ): Promise> { + const response = await this.apiClient.delete( `/api/environment/${request.id}`, headers ) + + return await parseResponse(response) } } diff --git a/packages/api-client/src/client.ts b/packages/api-client/src/core/client.ts similarity index 56% rename from packages/api-client/src/client.ts rename to packages/api-client/src/core/client.ts index aa724dd1..3ff85d6c 100644 --- a/packages/api-client/src/client.ts +++ b/packages/api-client/src/core/client.ts @@ -1,38 +1,8 @@ -interface ErrorWithResponse extends Error { - status: number - response: Record -} - -class APIClient { - private baseUrl: string +export class APIClient { + constructor(private readonly baseUrl: string) {} - private static instance: APIClient | null = null - - constructor(baseUrl: string) { - this.baseUrl = baseUrl - } - - static getInstance(): APIClient { - if (!this.instance) { - this.instance = new APIClient(process.env.BACKEND_URL as string) - } - return this.instance - } - - async request(url: string, options: RequestInit): Promise { - const response = await fetch(`${this.baseUrl}${url}`, options) - if (!response.ok) { - const error = new Error(response.statusText) as ErrorWithResponse - error.status = response.status - error.response = (await response.json()) as Record - throw error - } - - try { - return (await response.json()) as T - } catch (e) { - return response as T - } + async request(url: string, options: RequestInit): Promise { + return await fetch(`${this.baseUrl}${url}`, options) } /** @@ -40,8 +10,8 @@ class APIClient { * @param url - The URL to send the GET request to. * @returns A Promise that resolves to the response data. */ - get(url: string, headers?: Record): Promise { - return this.request(url, { + get(url: string, headers?: Record): Promise { + return this.request(url, { method: 'GET', headers: { 'Content-Type': 'application/json', @@ -58,12 +28,12 @@ class APIClient { * @param data - The data to send in the request body. * @returns A Promise that resolves to the response data. */ - post( + post( url: string, data: any, headers?: Record - ): Promise { - return this.request(url, { + ): Promise { + return this.request(url, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -81,8 +51,12 @@ class APIClient { * @param data - The data to be sent in the request body. * @returns A Promise that resolves to the response data. */ - put(url: string, data: any, headers?: Record): Promise { - return this.request(url, { + put( + url: string, + data: any, + headers?: Record + ): Promise { + return this.request(url, { method: 'PUT', headers: { 'Content-Type': 'application/json', @@ -99,8 +73,8 @@ class APIClient { * @param url - The URL to send the DELETE request to. * @returns A Promise that resolves to the response data. */ - delete(url: string, headers?: Record): Promise { - return this.request(url, { + delete(url: string, headers?: Record): Promise { + return this.request(url, { method: 'DELETE', headers: { 'Content-Type': 'application/json', @@ -110,7 +84,3 @@ class APIClient { }) } } - -const client = APIClient.getInstance() - -export default client diff --git a/packages/api-client/src/core/response-parser.ts b/packages/api-client/src/core/response-parser.ts new file mode 100644 index 00000000..ce17508d --- /dev/null +++ b/packages/api-client/src/core/response-parser.ts @@ -0,0 +1,26 @@ +import { ClientResponse, ResponseError } from '../types/index.types' + +export async function parseResponse( + response: Response +): Promise> { + if (!response.ok) { + const error = (await response.json()) as ResponseError + return { + success: false, + data: null, + error + } as ClientResponse + } + + let data: any = null + + try { + data = await response.json() + } catch (error) {} + + return { + success: true, + data, + error: null + } as ClientResponse +} diff --git a/packages/api-client/src/index.ts b/packages/api-client/src/index.ts index e69de29b..f146eff7 100644 --- a/packages/api-client/src/index.ts +++ b/packages/api-client/src/index.ts @@ -0,0 +1,3 @@ +import EnvironmentController from './controllers/environment/environment' + +export { EnvironmentController } diff --git a/packages/api-client/src/types/environment.types.d.ts b/packages/api-client/src/types/environment.types.d.ts index 14b44839..ed140704 100644 --- a/packages/api-client/src/types/environment.types.d.ts +++ b/packages/api-client/src/types/environment.types.d.ts @@ -1,3 +1,5 @@ +import { Page } from '../../../../apps/cli/src/types/index.types' + export interface CreateEnvironmentRequest { name: string description?: string @@ -53,8 +55,8 @@ export interface GetAllEnvironmentsOfProjectRequest { search?: string } -export interface GetAllEnvironmentsOfProjectResponse { - items: { +export interface GetAllEnvironmentsOfProjectResponse + extends Page<{ id: string name: string description: string | null @@ -66,8 +68,7 @@ export interface GetAllEnvironmentsOfProjectResponse { email: string profilePictureUrl: string | null } - }[] -} + }> {} export interface DeleteEnvironmentRequest { id: string diff --git a/packages/api-client/src/types/index.types.d.ts b/packages/api-client/src/types/index.types.d.ts new file mode 100644 index 00000000..3b787f86 --- /dev/null +++ b/packages/api-client/src/types/index.types.d.ts @@ -0,0 +1,28 @@ +export interface Page { + items: T[] + metadata: { + page: number + perPage: number + pageCount: number + totalCount: number + links: { + self: string + first: string + previous: string | null + next: string | null + last: string + } + } +} + +export interface ResponseError { + message: string + error: string + statusCode: number +} + +export interface ClientResponse { + success: boolean + error: ResponseError | null + data: T | null +} diff --git a/packages/api-client/tests/environment.spec.ts b/packages/api-client/tests/environment.spec.ts index be06923f..c652f67d 100644 --- a/packages/api-client/tests/environment.spec.ts +++ b/packages/api-client/tests/environment.spec.ts @@ -1,16 +1,21 @@ -import client from '@package/client' -import EnvironmentController from '@package/controllers/environment/environment' +import { APIClient } from '../src/core/client' +import EnvironmentController from '../src/controllers/environment/environment' describe('Get Environments Tests', () => { + const backendUrl = process.env.BACKEND_URL + + const client = new APIClient(backendUrl) + const environmentController = new EnvironmentController(backendUrl) + const email = 'johndoe@example.com' let projectId: string | null let workspaceId: string | null let environment: any beforeAll(async () => { - try { - //Create the user's workspace - const workspaceResponse = (await client.post( + //Create the user's workspace + const workspaceResponse = (await ( + await client.post( '/api/workspace', { name: 'My Workspace' @@ -18,12 +23,14 @@ describe('Get Environments Tests', () => { { 'x-e2e-user-email': email } - )) as any + ) + ).json()) as any - workspaceId = workspaceResponse.id + workspaceId = workspaceResponse.id - // Create a project - const projectResponse = (await client.post( + // Create a project + const projectResponse = (await ( + await client.post( `/api/project/${workspaceId}`, { name: 'Project', @@ -32,38 +39,32 @@ describe('Get Environments Tests', () => { { 'x-e2e-user-email': email } - )) as any + ) + ).json()) as any - projectId = projectResponse.id - } catch (error) { - console.error(error) - process.exit(1) - } + projectId = projectResponse.id }) afterAll(async () => { - try { - // Delete the workspace - await client.delete(`/api/workspace/${workspaceId}`, { - 'x-e2e-user-email': email - }) - } catch (error) { - console.error(error) - process.exit(1) - } + // Delete the workspace + await client.delete(`/api/workspace/${workspaceId}`, { + 'x-e2e-user-email': email + }) }) beforeEach(async () => { // Create an environment - const createEnvironmentResponse = await client.post( - `/api/environment/${projectId}`, - { - name: 'Dev' - }, - { - 'x-e2e-user-email': email - } - ) + const createEnvironmentResponse = (await ( + await client.post( + `/api/environment/${projectId}`, + { + name: 'Dev' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any environment = createEnvironmentResponse }) @@ -76,145 +77,153 @@ describe('Get Environments Tests', () => { }) it('should return a list of environments', async () => { - try { - const environments = - await EnvironmentController.getAllEnvironmentsOfProject( - { - projectId - }, - { - 'x-e2e-user-email': email - } - ) - - expect(environments).toHaveLength(2) - expect(environments[0].name).toBe('Default') - } catch (error) { - console.error(error) - process.exit(1) - } + const environments = ( + await environmentController.getAllEnvironmentsOfProject( + { + projectId, + page: 0, + limit: 10 + }, + { + 'x-e2e-user-email': email + } + ) + ).data + + expect(environments.items).toHaveLength(2) + expect(environments.items[0].name).toBe('Default') + + //check metadata + expect(environments.metadata.totalCount).toEqual(2) + expect(environments.metadata.links.self).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(environments.metadata.links.first).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(environments.metadata.links.previous).toBeNull() + expect(environments.metadata.links.next).toBeNull() + expect(environments.metadata.links.last).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should be able to fetch environment by ID', async () => { - try { - const environmentResponse = - await EnvironmentController.getEnvironmentById( - { - id: environment.id - }, - { - 'x-e2e-user-email': email - } - ) - - expect(environmentResponse.id).toBe(environment.id) - expect(environmentResponse.name).toBe('Dev') - } catch (error) { - console.error(error) - process.exit(1) - } + const environmentResponse = ( + await environmentController.getEnvironmentById( + { + id: environment.id + }, + { + 'x-e2e-user-email': email + } + ) + ).data + + expect(environmentResponse.id).toBe(environment.id) + expect(environmentResponse.name).toBe('Dev') }) it('should be able to create an environment', async () => { - try { - const createEnvironmentResponse = - await EnvironmentController.createEnvironment( - { - projectId, - name: 'Prod' - }, - { - 'x-e2e-user-email': email - } - ) - - expect(createEnvironmentResponse.name).toBe('Prod') - - const fetchEnvironmentResponse = (await client.get( - `/api/environment/${createEnvironmentResponse.id}`, + const createEnvironmentResponse = ( + await environmentController.createEnvironment( + { + projectId, + name: 'Prod' + }, { 'x-e2e-user-email': email } - )) as any + ) + ).data - expect(fetchEnvironmentResponse.name).toBe('Prod') + expect(createEnvironmentResponse.name).toBe('Prod') - // Delete the environment - await client.delete(`/api/environment/${createEnvironmentResponse.id}`, { + const fetchEnvironmentResponse = (await ( + await client.get(`/api/environment/${createEnvironmentResponse.id}`, { 'x-e2e-user-email': email }) - } catch (error) { - console.error(error) - process.exit(1) - } + ).json()) as any + + expect(fetchEnvironmentResponse.name).toBe('Prod') + + // Delete the environment + await client.delete(`/api/environment/${createEnvironmentResponse.id}`, { + 'x-e2e-user-email': email + }) }) it('should be able to update an environment', async () => { - try { - const updateEnvironmentResponse = - await EnvironmentController.updateEnvironment( - { - id: environment.id, - name: 'Prod' - }, - { - 'x-e2e-user-email': email - } - ) - - expect(updateEnvironmentResponse.name).toBe('Prod') - - const fetchEnvironmentResponse = (await client.get( - `/api/environment/${environment.id}`, + const updateEnvironmentResponse = ( + await environmentController.updateEnvironment( + { + id: environment.id, + name: 'Prod' + }, { 'x-e2e-user-email': email } - )) as any + ) + ).data + + expect(updateEnvironmentResponse.name).toBe('Prod') + + const fetchEnvironmentResponse = (await ( + await client.get(`/api/environment/${environment.id}`, { + 'x-e2e-user-email': email + }) + ).json()) as any - expect(fetchEnvironmentResponse.name).toBe('Prod') - } catch (error) { - console.error(error) - process.exit(1) - } + expect(fetchEnvironmentResponse.name).toBe('Prod') }) it('should be able to delete an environment', async () => { // Create an environment - const createEnvironmentResponse = (await client.post( - `/api/environment/${projectId}`, + const createEnvironmentResponse = (await ( + await client.post( + `/api/environment/${projectId}`, + { + name: 'Prod' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + await environmentController.deleteEnvironment( { - name: 'Prod' + id: createEnvironmentResponse.id }, { 'x-e2e-user-email': email } - )) as any + ) - try { - await EnvironmentController.deleteEnvironment( + // Check if the environment is deleted + const environments = ( + await environmentController.getAllEnvironmentsOfProject( { - id: createEnvironmentResponse.id + projectId }, { 'x-e2e-user-email': email } ) + ).data - // Check if the environment is deleted - const environments = - await EnvironmentController.getAllEnvironmentsOfProject( - { - projectId - }, - { - 'x-e2e-user-email': email - } - ) - - expect(environments).toHaveLength(2) - } catch (error) { - console.error(error) - process.exit(1) - } + expect(environments.items).toHaveLength(2) + expect(environments.metadata.totalCount).toEqual(2) + expect(environments.metadata.links.self).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(environments.metadata.links.first).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(environments.metadata.links.previous).toBeNull() + expect(environments.metadata.links.next).toBeNull() + expect(environments.metadata.links.last).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) }) }) diff --git a/packages/api-client/tsconfig.json b/packages/api-client/tsconfig.json index 17ad1248..b7b14a6a 100644 --- a/packages/api-client/tsconfig.json +++ b/packages/api-client/tsconfig.json @@ -16,11 +16,8 @@ "noImplicitAny": false, "strictBindCallApply": false, "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "paths": { - "@package/*": ["src/*"] - } + "noFallthroughCasesInSwitch": true }, "include": ["src/**/*.ts", "tests/**/*.ts"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "dist"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5f5b3f60..3e5f9aa2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,19 +10,19 @@ importers: dependencies: '@semantic-release/changelog': specifier: ^6.0.3 - version: 6.0.3(semantic-release@24.0.0) + version: 6.0.3(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/commit-analyzer': specifier: ^12.0.0 - version: 12.0.0(semantic-release@24.0.0) + version: 12.0.0(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/git': specifier: ^10.0.1 - version: 10.0.1(semantic-release@24.0.0) + version: 10.0.1(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/github': specifier: ^10.0.3 - version: 10.1.0(semantic-release@24.0.0) + version: 10.1.3(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/release-notes-generator': specifier: ^14.0.0 - version: 14.0.1(semantic-release@24.0.0) + version: 14.0.1(semantic-release@24.0.0(typescript@5.5.4)) '@sentry/node': specifier: ^7.102.0 version: 7.118.0 @@ -31,7 +31,7 @@ importers: version: 7.118.0 '@types/node': specifier: ^20.14.10 - version: 20.14.11 + version: 20.14.13 chalk: specifier: ^4.1.2 version: 4.1.2 @@ -46,7 +46,7 @@ importers: version: 8.0.0 framer-motion: specifier: ^11.2.9 - version: 11.3.6(react-dom@18.3.1)(react@18.3.1) + version: 11.3.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) million: specifier: ^3.0.5 version: 3.1.11 @@ -61,26 +61,29 @@ importers: version: 2.4.0 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.14.11)(typescript@5.5.3) + version: 10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4) + typescript: + specifier: ^5.5.2 + version: 5.5.4 zod: specifier: ^3.23.6 version: 3.23.8 devDependencies: '@sentry/cli': specifier: ^2.28.6 - version: 2.32.2 + version: 2.33.0 '@sentry/webpack-plugin': specifier: ^2.14.2 - version: 2.21.1(webpack@5.93.0) + version: 2.21.1(webpack@5.92.1(@swc/core@1.7.3)) '@types/jest': specifier: ^29.5.2 version: 29.5.12 '@typescript-eslint/eslint-plugin': specifier: ^6.0.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.3) + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^6.0.0 - version: 6.21.0(eslint@8.57.0)(typescript@5.5.3) + version: 6.21.0(eslint@8.57.0)(typescript@5.5.4) cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -95,13 +98,13 @@ importers: version: 11.1.0(eslint@8.57.0) eslint-plugin-prettier: specifier: ^5.0.0 - version: 5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.3) + version: 5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) husky: specifier: ^9.0.11 - version: 9.0.11 + version: 9.1.4 jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) prettier: specifier: ^3.0.0 version: 3.3.3 @@ -110,7 +113,7 @@ importers: version: 0.5.14(prettier@3.3.3) ts-jest: specifier: ^29.1.0 - version: 29.2.2(@babel/core@7.24.9)(jest@29.7.0)(typescript@5.5.3) + version: 29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@5.5.4) tsconfig: specifier: workspace:* version: link:packages/tsconfig @@ -128,40 +131,40 @@ importers: version: 10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/config': specifier: ^3.2.0 - version: 3.2.3(@nestjs/common@10.3.10)(rxjs@7.8.1) + version: 3.2.3(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(rxjs@7.8.1) '@nestjs/core': specifier: ^10.0.0 - version: 10.3.10(@nestjs/common@10.3.10)(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1) + version: 10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/jwt': specifier: ^10.2.0 - version: 10.2.0(@nestjs/common@10.3.10) + version: 10.2.0(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)) '@nestjs/passport': specifier: ^10.0.3 - version: 10.0.3(@nestjs/common@10.3.10)(passport@0.7.0) + version: 10.0.3(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(passport@0.7.0) '@nestjs/platform-express': specifier: ^10.0.0 - version: 10.3.10(@nestjs/common@10.3.10)(@nestjs/core@10.3.10) + version: 10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10) '@nestjs/platform-fastify': specifier: ^10.3.3 - version: 10.3.10(@nestjs/common@10.3.10)(@nestjs/core@10.3.10) + version: 10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1)) '@nestjs/platform-socket.io': specifier: ^10.3.7 - version: 10.3.10(@nestjs/common@10.3.10)(@nestjs/websockets@10.3.10)(rxjs@7.8.1) + version: 10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/websockets@10.3.10)(rxjs@7.8.1) '@nestjs/schedule': specifier: ^4.0.1 - version: 4.1.0(@nestjs/common@10.3.10)(@nestjs/core@10.3.10) + version: 4.1.0(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1)) '@nestjs/swagger': specifier: ^7.3.0 - version: 7.4.0(@nestjs/common@10.3.10)(@nestjs/core@10.3.10)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) + version: 7.4.0(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) '@nestjs/websockets': specifier: ^10.3.7 - version: 10.3.10(@nestjs/common@10.3.10)(@nestjs/core@10.3.10)(@nestjs/platform-socket.io@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1) + version: 10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10)(@nestjs/platform-socket.io@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@socket.io/redis-adapter': specifier: ^8.3.0 version: 8.3.0(socket.io-adapter@2.5.5) '@supabase/supabase-js': specifier: ^2.39.6 - version: 2.44.4 + version: 2.45.0 class-transformer: specifier: ^0.5.1 version: 0.5.1 @@ -191,7 +194,7 @@ importers: version: 2.0.0 redis: specifier: ^4.6.13 - version: 4.6.15 + version: 4.7.0 rxjs: specifier: ^7.8.1 version: 7.8.1 @@ -204,13 +207,13 @@ importers: devDependencies: '@nestjs/cli': specifier: ^10.0.0 - version: 10.4.2 + version: 10.4.2(@swc/cli@0.4.0(@swc/core@1.7.3)(chokidar@3.6.0))(@swc/core@1.7.3) '@nestjs/schematics': specifier: ^10.0.0 - version: 10.1.2(typescript@5.5.3) + version: 10.1.3(chokidar@3.6.0)(typescript@5.3.3) '@nestjs/testing': specifier: ^10.0.0 - version: 10.3.10(@nestjs/common@10.3.10)(@nestjs/core@10.3.10)(@nestjs/platform-express@10.3.10) + version: 10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10)) '@prisma/client': specifier: ^5.13.0 version: 5.17.0(prisma@5.13.0) @@ -240,10 +243,10 @@ importers: version: 7.4.2 jest: specifier: ^29.5.0 - version: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) jest-mock-extended: specifier: ^3.0.5 - version: 3.0.7(jest@29.7.0)(typescript@5.5.3) + version: 3.0.7(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)))(typescript@5.3.3) prettier: specifier: ^3.0.0 version: 3.3.3 @@ -261,13 +264,10 @@ importers: version: 6.3.4 ts-jest: specifier: ^29.1.0 - version: 29.2.2(@babel/core@7.24.9)(jest@29.7.0)(typescript@5.5.3) + version: 29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)))(typescript@5.3.3) ts-loader: specifier: ^9.4.3 - version: 9.5.1(typescript@5.5.3)(webpack@5.93.0) - typescript: - specifier: ^5.1.3 - version: 5.5.3 + version: 9.5.1(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.3)) apps/cli: dependencies: @@ -277,6 +277,9 @@ importers: '@clack/prompts': specifier: ^0.7.0 version: 0.7.0 + '@keyshade/api-client': + specifier: workspace:../../packages/api-client + version: link:../../packages/api-client chalk: specifier: ^4.1.2 version: 4.1.2 @@ -289,6 +292,9 @@ importers: commander: specifier: ^12.1.0 version: 12.1.0 + eccrypto: + specifier: ^1.1.6 + version: 1.1.6 figlet: specifier: ^1.7.0 version: 1.7.0 @@ -307,88 +313,85 @@ importers: socket.io-client: specifier: ^4.7.5 version: 4.7.5 - typescript: - specifier: ^5.5.2 - version: 5.5.3 devDependencies: '@swc/cli': specifier: ^0.4.0 - version: 0.4.0(@swc/core@1.6.13) + version: 0.4.0(@swc/core@1.7.3(@swc/helpers@0.5.2))(chokidar@3.6.0) '@swc/core': specifier: ^1.6.13 - version: 1.6.13 + version: 1.7.3(@swc/helpers@0.5.2) '@types/cli-table': specifier: ^0.3.4 version: 0.3.4 + '@types/eccrypto': + specifier: ^1.1.6 + version: 1.1.6 '@types/figlet': specifier: ^1.5.8 version: 1.5.8 '@types/node': specifier: ^20.14.10 - version: 20.14.11 + version: 20.14.13 eslint-config-standard-with-typescript: specifier: ^43.0.1 - version: 43.0.1(@typescript-eslint/eslint-plugin@6.21.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.4.0)(eslint@8.57.0)(typescript@5.5.3) - tsup: - specifier: ^8.1.2 - version: 8.1.2(@swc/core@1.6.13)(typescript@5.5.3) + version: 43.0.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4) apps/platform: dependencies: '@radix-ui/react-accordion': specifier: ^1.2.0 - version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-avatar': specifier: ^1.0.4 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-checkbox': specifier: ^1.0.4 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-context-menu': specifier: ^2.1.5 - version: 2.2.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 2.2.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': specifier: ^1.0.5 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-direction': specifier: ^1.0.1 version: 1.1.0(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.0.6 - version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-icons': specifier: ^1.3.0 version: 1.3.0(react@18.3.1) '@radix-ui/react-label': specifier: ^2.0.2 - version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-menubar': specifier: ^1.0.4 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.0.7 - version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.0.5 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.0.3 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.1.0(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-switch': specifier: ^1.0.3 - version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-table': specifier: ^8.16.0 - version: 8.19.3(react-dom@18.3.1)(react@18.3.1) + version: 8.19.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) avvvatars-react: specifier: ^0.4.2 - version: 0.4.2(csstype@3.1.3)(react-dom@18.3.1)(react@18.3.1) + version: 0.4.2(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -397,25 +400,25 @@ importers: version: 2.1.1 cmdk: specifier: ^1.0.0 - version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) dayjs: specifier: ^1.11.11 - version: 1.11.11 + version: 1.11.12 env-cmd: specifier: ^10.1.0 version: 10.1.0 framer-motion: specifier: ^11.1.7 - version: 11.3.6(react-dom@18.3.1)(react@18.3.1) + version: 11.3.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) geist: specifier: ^1.2.2 - version: 1.3.1(next@13.5.6) + version: 1.3.1(next@13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) input-otp: specifier: ^1.2.4 - version: 1.2.4(react-dom@18.3.1)(react@18.3.1) + version: 1.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) jotai: specifier: ^2.8.0 - version: 2.9.0(@types/react@18.3.3)(react@18.3.1) + version: 2.9.1(@types/react@18.3.3)(react@18.3.1) js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -424,10 +427,10 @@ importers: version: 0.340.0(react@18.3.1) next: specifier: ^13.5.6 - version: 13.5.6(@babel/core@7.24.9)(react-dom@18.3.1)(react@18.3.1) + version: 13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.3.0 - version: 0.3.0(react-dom@18.3.1)(react@18.3.1) + version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 @@ -436,13 +439,13 @@ importers: version: 18.3.1(react@18.3.1) sonner: specifier: ^1.4.41 - version: 1.5.0(react-dom@18.3.1)(react@18.3.1) + version: 1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: ^2.2.2 version: 2.4.0 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.6) + version: 1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))) zod: specifier: ^3.23.8 version: 3.23.8 @@ -452,10 +455,13 @@ importers: version: 13.5.6 '@svgr/webpack': specifier: ^8.1.0 - version: 8.1.0(typescript@4.9.5) + version: 8.1.0(typescript@5.5.4) '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.6) + version: 0.5.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))) + '@types/dayjs-precise-range': + specifier: ^1.0.5 + version: 1.0.5 '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 @@ -467,40 +473,37 @@ importers: version: 18.3.0 autoprefixer: specifier: ^10.4.16 - version: 10.4.19(postcss@8.4.39) + version: 10.4.19(postcss@8.4.40) eslint-config-custom: specifier: workspace:* version: link:../../packages/eslint-config-custom postcss: specifier: ^8.4.31 - version: 8.4.39 + version: 8.4.40 tailwindcss: specifier: ^3.3.3 - version: 3.4.6(ts-node@10.9.2) + version: 3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) tsconfig: specifier: workspace:* version: link:../../packages/tsconfig - typescript: - specifier: ^4.5.3 - version: 4.9.5 apps/web: dependencies: '@mdx-js/loader': specifier: ^3.0.1 - version: 3.0.1(webpack@5.93.0) + version: 3.0.1(webpack@5.92.1(@swc/core@1.7.3)) '@mdx-js/react': specifier: ^3.0.1 version: 3.0.1(@types/react@18.3.3)(react@18.3.1) '@next/mdx': specifier: ^14.2.3 - version: 14.2.5(@mdx-js/loader@3.0.1)(@mdx-js/react@3.0.1) + version: 14.2.5(@mdx-js/loader@3.0.1(webpack@5.92.1(@swc/core@1.7.3)))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1)) '@tsparticles/engine': specifier: ^3.3.0 version: 3.5.0 '@tsparticles/react': specifier: ^3.0.0 - version: 3.0.0(@tsparticles/engine@3.5.0)(react-dom@18.3.1)(react@18.3.1) + version: 3.0.0(@tsparticles/engine@3.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tsparticles/slim': specifier: ^3.3.0 version: 3.5.0 @@ -512,13 +515,13 @@ importers: version: 2.1.1 framer-motion: specifier: ^11.2.9 - version: 11.3.6(react-dom@18.3.1)(react@18.3.1) + version: 11.3.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) geist: specifier: ^1.2.2 - version: 1.3.1(next@13.5.6) + version: 1.3.1(next@13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) next: specifier: ^13.5.6 - version: 13.5.6(@babel/core@7.24.9)(react-dom@18.3.1)(react@18.3.1) + version: 13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -530,7 +533,7 @@ importers: version: 0.33.4 sonner: specifier: ^1.4.41 - version: 1.5.0(react-dom@18.3.1)(react@18.3.1) + version: 1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: ^2.2.1 version: 2.4.0 @@ -540,10 +543,10 @@ importers: version: 13.5.6 '@svgr/webpack': specifier: ^8.1.0 - version: 8.1.0(typescript@4.9.5) + version: 8.1.0(typescript@5.5.4) '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.6) + version: 0.5.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))) '@types/react': specifier: ^18.0.22 version: 18.3.3 @@ -552,22 +555,19 @@ importers: version: 18.3.0 autoprefixer: specifier: ^10.4.16 - version: 10.4.19(postcss@8.4.39) + version: 10.4.19(postcss@8.4.40) eslint-config-custom: specifier: workspace:* version: link:../../packages/eslint-config-custom postcss: specifier: ^8.4.31 - version: 8.4.39 + version: 8.4.40 tailwindcss: specifier: ^3.3.3 - version: 3.4.6(ts-node@10.9.2) + version: 3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) tsconfig: specifier: workspace:* version: link:../../packages/tsconfig - typescript: - specifier: ^4.5.3 - version: 4.9.5 packages/api-client: {} @@ -575,7 +575,7 @@ importers: devDependencies: '@vercel/style-guide': specifier: ^5.0.0 - version: 5.2.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.3.3)(typescript@4.9.5) + version: 5.2.0(@next/eslint-plugin-next@13.5.6)(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(prettier@3.3.3)(typescript@4.9.5) eslint-config-turbo: specifier: ^1.10.12 version: 1.13.4(eslint@8.57.0) @@ -648,23 +648,23 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.9': - resolution: {integrity: sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==} + '@babel/compat-data@7.25.2': + resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.9': - resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.24.8': - resolution: {integrity: sha512-nYAikI4XTGokU2QX7Jx+v4rxZKhKivaQaREZjuW3mrJrbdWJ5yUfohnoUULge+zEEaKjPYNxhoRgUKktjXtbwA==} + '@babel/eslint-parser@7.25.1': + resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.24.10': - resolution: {integrity: sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==} + '@babel/generator@7.25.0': + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.24.7': @@ -675,18 +675,18 @@ packages: resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.8': - resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.8': - resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} + '@babel/helper-create-class-features-plugin@7.25.0': + resolution: {integrity: sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.24.7': - resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} + '@babel/helper-create-regexp-features-plugin@7.25.2': + resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -696,18 +696,6 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.24.8': resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} @@ -716,8 +704,8 @@ packages: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.9': - resolution: {integrity: sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==} + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -730,14 +718,14 @@ packages: resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.24.7': - resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} + '@babel/helper-remap-async-to-generator@7.25.0': + resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.24.7': - resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} + '@babel/helper-replace-supers@7.25.0': + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -750,10 +738,6 @@ packages: resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} @@ -766,31 +750,37 @@ packages: resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.24.7': - resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} + '@babel/helper-wrap-function@7.25.0': + resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.8': - resolution: {integrity: sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==} + '@babel/helpers@7.25.0': + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.8': - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + '@babel/parser@7.25.0': + resolution: {integrity: sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': - resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.0': + resolution: {integrity: sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': - resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0': + resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0': + resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -801,8 +791,8 @@ packages: peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': - resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0': + resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -932,8 +922,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.24.7': - resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} + '@babel/plugin-transform-async-generator-functions@7.25.0': + resolution: {integrity: sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -950,8 +940,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.24.7': - resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} + '@babel/plugin-transform-block-scoping@7.25.0': + resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -968,8 +958,8 @@ packages: peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.24.8': - resolution: {integrity: sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==} + '@babel/plugin-transform-classes@7.25.0': + resolution: {integrity: sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -998,6 +988,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0': + resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-transform-dynamic-import@7.24.7': resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} engines: {node: '>=6.9.0'} @@ -1022,8 +1018,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.24.7': - resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} + '@babel/plugin-transform-function-name@7.25.1': + resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1034,8 +1030,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.24.7': - resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} + '@babel/plugin-transform-literals@7.25.2': + resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1064,8 +1060,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.24.7': - resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} + '@babel/plugin-transform-modules-systemjs@7.25.0': + resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1148,8 +1144,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-constant-elements@7.24.7': - resolution: {integrity: sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA==} + '@babel/plugin-transform-react-constant-elements@7.25.1': + resolution: {integrity: sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1166,8 +1162,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.24.7': - resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} + '@babel/plugin-transform-react-jsx@7.25.2': + resolution: {integrity: sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1220,8 +1216,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.24.8': - resolution: {integrity: sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==} + '@babel/plugin-transform-typescript@7.25.2': + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1250,8 +1246,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.24.8': - resolution: {integrity: sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==} + '@babel/preset-env@7.25.2': + resolution: {integrity: sha512-Y2Vkwy3ITW4id9c6KXshVV/x5yCGK7VdJmKkzOzNsDZMojRKfSA/033rRbLqlRozmhRXCejxWHLSJOg/wUHfzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1276,20 +1272,20 @@ packages: '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - '@babel/runtime@7.24.8': - resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} + '@babel/runtime@7.25.0': + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.8': - resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + '@babel/traverse@7.25.2': + resolution: {integrity: sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.9': - resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -1314,288 +1310,6 @@ packages: '@emnapi/runtime@1.2.0': resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.23.0': - resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.23.0': - resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.23.0': - resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.23.0': - resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.23.0': - resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.23.0': - resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.23.0': - resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.23.0': - resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.23.0': - resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.23.0': - resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.23.0': - resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.23.0': - resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.23.0': - resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.23.0': - resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.23.0': - resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.23.0': - resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.23.0': - resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.23.0': - resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.23.0': - resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.23.0': - resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.23.0': - resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.23.0': - resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.23.0': - resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.23.0': - resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1635,11 +1349,11 @@ packages: '@fastify/middie@8.3.1': resolution: {integrity: sha512-qrQ8U3iCdjNum3+omnIvAyz21ifFx+Pp5jYW7PJJ7b9ueKTCPXsH6vEvaZQrjEZvOpTnWte+CswfBODWD0NqYQ==} - '@floating-ui/core@1.6.4': - resolution: {integrity: sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==} + '@floating-ui/core@1.6.5': + resolution: {integrity: sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==} - '@floating-ui/dom@1.6.7': - resolution: {integrity: sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==} + '@floating-ui/dom@1.6.8': + resolution: {integrity: sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==} '@floating-ui/react-dom@2.1.1': resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} @@ -1647,8 +1361,8 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.4': - resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==} + '@floating-ui/utils@0.2.5': + resolution: {integrity: sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==} '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} @@ -2018,8 +1732,8 @@ packages: '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 '@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0 - '@nestjs/schematics@10.1.2': - resolution: {integrity: sha512-S0bMtZM5U4mAiqkhRyZkXgjmOHBS5P/lp/vEydgMR4F7csOShc3jFeKVs1Eghd9xCFezGKy3SHy7hFT6dpPhWQ==} + '@nestjs/schematics@10.1.3': + resolution: {integrity: sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg==} peerDependencies: typescript: '>=4.8.2' @@ -2871,8 +2585,8 @@ packages: peerDependencies: '@redis/client': ^1.0.0 - '@redis/client@1.5.17': - resolution: {integrity: sha512-IPvU9A31qRCZ7lds/x+ksuK/UMndd0EASveAvCvEtFFKIZjZ+m/a4a0L7S28KEWoR5ka8526hlSghDo4Hrc2Hg==} + '@redis/client@1.6.0': + resolution: {integrity: sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==} engines: {node: '>=14'} '@redis/graph@1.1.1': @@ -2880,18 +2594,18 @@ packages: peerDependencies: '@redis/client': ^1.0.0 - '@redis/json@1.0.6': - resolution: {integrity: sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw==} + '@redis/json@1.0.7': + resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} peerDependencies: '@redis/client': ^1.0.0 - '@redis/search@1.1.6': - resolution: {integrity: sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw==} + '@redis/search@1.2.0': + resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} peerDependencies: '@redis/client': ^1.0.0 - '@redis/time-series@1.0.5': - resolution: {integrity: sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==} + '@redis/time-series@1.1.0': + resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} peerDependencies: '@redis/client': ^1.0.0 @@ -2904,88 +2618,8 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.18.1': - resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.18.1': - resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.18.1': - resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.18.1': - resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-linux-arm-gnueabihf@4.18.1': - resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.18.1': - resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.18.1': - resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.18.1': - resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': - resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.18.1': - resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.18.1': - resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.18.1': - resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.18.1': - resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.18.1': - resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.18.1': - resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.18.1': - resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} - cpu: [x64] - os: [win32] - - '@rushstack/eslint-patch@1.10.3': - resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} + '@rushstack/eslint-patch@1.10.4': + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -3022,8 +2656,8 @@ packages: peerDependencies: semantic-release: '>=18.0.0' - '@semantic-release/github@10.1.0': - resolution: {integrity: sha512-g4RHBaCWJjGcEy95TeTdajlmUoP5jAaF5trGkFXHKsT/VpCwawhZbNW66+sUr0c2CIAdfpCxxmK+E7GyWBWJDw==} + '@semantic-release/github@10.1.3': + resolution: {integrity: sha512-QVw7YT3J4VqyVjOnlRsFA3OCERAJHER4QbSPupbav3ER0fawrs2BAWbQFjsr24OAD4KTTKMZsVzF+GYFWCDtaQ==} engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=20.1.0' @@ -3052,49 +2686,49 @@ packages: resolution: {integrity: sha512-F8FdL/bS8cy1SY1Gw0Mfo3ROTqlrq9Lvt5QGvhXi22dpVcDkWmoTWE2k+sMEnXOa8SdThMc/gyC8lMwHGd3kFQ==} engines: {node: '>= 14'} - '@sentry/cli-darwin@2.32.2': - resolution: {integrity: sha512-GDtePIavx3FKSRowdPdtIssahn46MfFFYNN+s7a9MjlhFwJtvC9A1bSDw7ksEtDaQolepUwmLPHaVe19y0T/zw==} + '@sentry/cli-darwin@2.33.0': + resolution: {integrity: sha512-LQFvD7uCOQ2P/vYru7IBKqJDHwJ9Rr2vqqkdjbxe2YCQS/N3NPXvi3eVM9hDJ284oyV/BMZ5lrmVTuIicf/hhw==} engines: {node: '>=10'} os: [darwin] - '@sentry/cli-linux-arm64@2.32.2': - resolution: {integrity: sha512-VECLVC1rLyvXk6rTVUfmfs4vhANjMgm4BVKGlA3rydmf2PJw2/NfipH3KeyijdE2vEoyLri+/6HH883pP0iniQ==} + '@sentry/cli-linux-arm64@2.33.0': + resolution: {integrity: sha512-mR2ZhqpU8RBVGLF5Ji19iOmVznk1B7Bzg5VhA8bVPuKsQmFN/3SyqE87IPMhwKoAsSRXyctwmbAkKs4240fxGA==} engines: {node: '>=10'} cpu: [arm64] os: [linux, freebsd] - '@sentry/cli-linux-arm@2.32.2': - resolution: {integrity: sha512-u9s08wr8bDDqsAl6pk9iGGlOHtU+T8btU6voNKy71QzeIBpV9c8VVk/OnmP9aswp/ea4NY416yjnzcTvCrFKAw==} + '@sentry/cli-linux-arm@2.33.0': + resolution: {integrity: sha512-gY1bFE7wjDJc7WiNq1AS0WrILqLLJUw6Ou4pFQS45KjaH3/XJ1eohHhGJNy/UBHJ/Gq32b/BA9vsnWTXClZJ7g==} engines: {node: '>=10'} cpu: [arm] os: [linux, freebsd] - '@sentry/cli-linux-i686@2.32.2': - resolution: {integrity: sha512-XhofQz32OqLrQK1DEOsryhT7d29Df6VkccvxueGoIt2gpXEXtgRczsUwZjZqquDdkNCt+HPj9eUGcj8pY8JkmQ==} + '@sentry/cli-linux-i686@2.33.0': + resolution: {integrity: sha512-XPIy0XpqgAposHtWsy58qsX85QnZ8q0ktBuT4skrsCrLMzfhoQg4Ua+YbUr3RvE814Rt8Hzowx2ar2Rl3pyCyw==} engines: {node: '>=10'} cpu: [x86, ia32] os: [linux, freebsd] - '@sentry/cli-linux-x64@2.32.2': - resolution: {integrity: sha512-anyng4Qqt7zX4ZY4IzDH1RJWAVZNBe6sUHcuciNy7giCU3B4/XnxAHlwYmBSN5txpaumsWdstPgRKEUJG6AOSA==} + '@sentry/cli-linux-x64@2.33.0': + resolution: {integrity: sha512-qe1DdCUv4tmqS03s8RtCkEX9vCW2G+NgOxX6jZ5jN/sKDwjUlquljqo7JHUGSupkoXmymnNPm5By3rNr6VyNHg==} engines: {node: '>=10'} cpu: [x64] os: [linux, freebsd] - '@sentry/cli-win32-i686@2.32.2': - resolution: {integrity: sha512-/auqx7QXG7F556fNK7vaB26pX7Far1CQMfI65iV4u/VWg6gV2WfvJWXB4iowhjqkYv56sZ+zOymLkEVF0R8wtg==} + '@sentry/cli-win32-i686@2.33.0': + resolution: {integrity: sha512-VEXWtJ69C3b+kuSmXQJRwdQ0ypPGH88hpqyQuosbAOIqh/sv4g9B/u1ETHZc+whLdFDpPcTLVMbLDbXTGug0Yg==} engines: {node: '>=10'} cpu: [x86, ia32] os: [win32] - '@sentry/cli-win32-x64@2.32.2': - resolution: {integrity: sha512-w7hW2sEWVYQquqdILBSFhcVW+HdoyLqVPPkLPAXRSLTwBnuni9nQEIdXr0h/7db+K3cm7PvWndp5ixVyswLHZA==} + '@sentry/cli-win32-x64@2.33.0': + resolution: {integrity: sha512-GIUKysZ1xbSklY9h1aVaLMSYLsnMSd+JuwQLR+0wKw2wJC4O5kNCPFSGikhiOZM/kvh3GO1WnXNyazFp8nLAzw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@sentry/cli@2.32.2': - resolution: {integrity: sha512-m/6Z3FWu+rTd8jepVlJPKQhvbT8vCjt0N7BSWZiEUVW/8mhwAYJiwO0b+Ch/u4IqbBg1dp3805q5TFPl4AdrNw==} + '@sentry/cli@2.33.0': + resolution: {integrity: sha512-9MOzQy1UunVBhPOfEuO0JH2ofWAMmZVavTTR/Bo2CkJwI1qjyVF0UKLTXE3l4ujiJnFufOoBsVyKmYWXFerbCw==} engines: {node: '>= 10'} hasBin: true @@ -3178,8 +2812,8 @@ packages: '@supabase/storage-js@2.6.0': resolution: {integrity: sha512-REAxr7myf+3utMkI2oOmZ6sdplMZZ71/2NEIEMBZHL9Fkmm3/JnaOZVSRqvG4LStYj2v5WhCruCzuMn6oD/Drw==} - '@supabase/supabase-js@2.44.4': - resolution: {integrity: sha512-vqtUp8umqcgj+RPUc7LiEcQmgsEWFDPJdJizRJF/5tf2zSlVB+3YbUwyQE/hLagYA8TLvGXe7oAqtYyFde6llw==} + '@supabase/supabase-js@2.45.0': + resolution: {integrity: sha512-j66Mfs8RhzCQCKxKogAFQYH9oNhRmgIdKk6pexguI2Oc7hi+nL9UNJug5aL1tKnBdaBM3h65riPLQSdL6sWa3Q==} '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} @@ -3270,68 +2904,68 @@ packages: chokidar: optional: true - '@swc/core-darwin-arm64@1.6.13': - resolution: {integrity: sha512-SOF4buAis72K22BGJ3N8y88mLNfxLNprTuJUpzikyMGrvkuBFNcxYtMhmomO0XHsgLDzOJ+hWzcgjRNzjMsUcQ==} + '@swc/core-darwin-arm64@1.7.3': + resolution: {integrity: sha512-CTkHa6MJdov9t41vuV2kmQIMu+Q19LrEHGIR/UiJYH06SC/sOu35ZZH8DyfLp9ZoaCn21gwgWd61ixOGQlwzTw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.6.13': - resolution: {integrity: sha512-AW8akFSC+tmPE6YQQvK9S2A1B8pjnXEINg+gGgw0KRUUXunvu1/OEOeC5L2Co1wAwhD7bhnaefi06Qi9AiwOag==} + '@swc/core-darwin-x64@1.7.3': + resolution: {integrity: sha512-mun623y6rCoZ2EFIYfIRqXYRFufJOopoYSJcxYhZUrfTpAvQ1zLngjQpWCUU1krggXR2U0PQj+ls0DfXUTraNg==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.6.13': - resolution: {integrity: sha512-f4gxxvDXVUm2HLYXRd311mSrmbpQF2MZ4Ja6XCQz1hWAxXdhRl1gpnZ+LH/xIfGSwQChrtLLVrkxdYUCVuIjFg==} + '@swc/core-linux-arm-gnueabihf@1.7.3': + resolution: {integrity: sha512-4Jz4UcIcvZNMp9qoHbBx35bo3rjt8hpYLPqnR4FFq6gkAsJIMFC56UhRZwdEQoDuYiOFMBnnrsg31Fyo6YQypA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.6.13': - resolution: {integrity: sha512-Nf/eoW2CbG8s+9JoLtjl9FByBXyQ5cjdBsA4efO7Zw4p+YSuXDgc8HRPC+E2+ns0praDpKNZtLvDtmF2lL+2Gg==} + '@swc/core-linux-arm64-gnu@1.7.3': + resolution: {integrity: sha512-p+U/M/oqV7HC4erQ5TVWHhJU1984QD+wQBPxslAYq751bOQGm0R/mXK42GjugqjnR6yYrAiwKKbpq4iWVXNePA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.6.13': - resolution: {integrity: sha512-2OysYSYtdw79prJYuKIiux/Gj0iaGEbpS2QZWCIY4X9sGoETJ5iMg+lY+YCrIxdkkNYd7OhIbXdYFyGs/w5LDg==} + '@swc/core-linux-arm64-musl@1.7.3': + resolution: {integrity: sha512-s6VzyaJwaRGTi2mz2h6Ywxfmgpkc69IxhuMzl+sl34plH0V0RgnZDm14HoCGIKIzRk4+a2EcBV1ZLAfWmPACQg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.6.13': - resolution: {integrity: sha512-PkR4CZYJNk5hcd2+tMWBpnisnmYsUzazI1O5X7VkIGFcGePTqJ/bWlfUIVVExWxvAI33PQFzLbzmN5scyIUyGQ==} + '@swc/core-linux-x64-gnu@1.7.3': + resolution: {integrity: sha512-IrFY48C356Z2dU2pjYg080yvMXzmSV3Lmm/Wna4cfcB1nkVLjWsuYwwRAk9CY7E19c+q8N1sMNggubAUDYoX2g==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.6.13': - resolution: {integrity: sha512-OdsY7wryTxCKwGQcwW9jwWg3cxaHBkTTHi91+5nm7hFPpmZMz1HivJrWAMwVE7iXFw+M4l6ugB/wCvpYrUAAjA==} + '@swc/core-linux-x64-musl@1.7.3': + resolution: {integrity: sha512-qoLgxBlBnnyUEDu5vmRQqX90h9jldU1JXI96e6eh2d1gJyKRA0oSK7xXmTzorv1fGHiHulv9qiJOUG+g6uzJWg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.6.13': - resolution: {integrity: sha512-ap6uNmYjwk9M/+bFEuWRNl3hq4VqgQ/Lk+ID/F5WGqczNr0L7vEf+pOsRAn0F6EV+o/nyb3ePt8rLhE/wjHpPg==} + '@swc/core-win32-arm64-msvc@1.7.3': + resolution: {integrity: sha512-OAd7jVVJ7nb0Ev80VAa1aeK+FldPeC4eZ35H4Qn6EICzIz0iqJo2T33qLKkSZiZEBKSoF4KcwrqYfkjLOp5qWg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.6.13': - resolution: {integrity: sha512-IJ8KH4yIUHTnS/U1jwQmtbfQals7zWPG0a9hbEfIr4zI0yKzjd83lmtS09lm2Q24QBWOCFGEEbuZxR4tIlvfzA==} + '@swc/core-win32-ia32-msvc@1.7.3': + resolution: {integrity: sha512-31+Le1NyfSnILFV9+AhxfFOG0DK0272MNhbIlbcv4w/iqpjkhaOnNQnLsYJD1Ow7lTX1MtIZzTjOhRlzSviRWg==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.6.13': - resolution: {integrity: sha512-f6/sx6LMuEnbuxtiSL/EkR0Y6qUHFw1XVrh6rwzKXptTipUdOY+nXpKoh+1UsBm/r7H0/5DtOdrn3q5ZHbFZjQ==} + '@swc/core-win32-x64-msvc@1.7.3': + resolution: {integrity: sha512-jVQPbYrwcuueI4QB0fHC29SVrkFOBcfIspYDlgSoHnEz6tmLMqUy+txZUypY/ZH/KaK0HEY74JkzgbRC1S6LFQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.6.13': - resolution: {integrity: sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw==} + '@swc/core@1.7.3': + resolution: {integrity: sha512-HHAlbXjWI6Kl9JmmUW1LSygT1YbblXgj2UvvDzMkTBPRzYMhW6xchxdO8HbtMPtFYRt/EQq9u1z7j4ttRSrFsA==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -3345,8 +2979,8 @@ packages: '@swc/helpers@0.5.2': resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} - '@swc/types@0.1.9': - resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} + '@swc/types@0.1.12': + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} @@ -3532,6 +3166,9 @@ packages: '@types/cors@2.8.17': resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + '@types/dayjs-precise-range@1.0.5': + resolution: {integrity: sha512-KP1jZqjEaUcdJ5JZKU5x12RsUdOG+G7XtaAMBYyhDYTIbJB//RAAOL6n4HKELzzG9OrWC+j2Ko5sa+dbSlj7bA==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -3541,8 +3178,8 @@ packages: '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/eslint@9.6.0': + resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -3625,8 +3262,8 @@ packages: '@types/multer@1.4.11': resolution: {integrity: sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==} - '@types/node@20.14.11': - resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} + '@types/node@20.14.13': + resolution: {integrity: sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3664,8 +3301,8 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/superagent@8.1.7': - resolution: {integrity: sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww==} + '@types/superagent@8.1.8': + resolution: {integrity: sha512-nTqHJ2OTa7PFEpLahzSEEeFeqbMpmcN7OeayiOc7v+xk+/vyTKljRe+o4MPqSnPeRCMvtxuLG+5QqluUVQJOnA==} '@types/supertest@6.0.2': resolution: {integrity: sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==} @@ -3682,8 +3319,8 @@ packages: '@types/validator@13.12.0': resolution: {integrity: sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==} - '@types/ws@8.5.11': - resolution: {integrity: sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==} + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -4047,9 +3684,6 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} - array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -4098,8 +3732,8 @@ packages: react: '>= 16' react-dom: '>= 16' - axe-core@4.9.1: - resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} axobject-query@3.1.1: @@ -4266,12 +3900,6 @@ packages: builtins@5.1.0: resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} - bundle-require@5.0.0: - resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' - busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -4280,10 +3908,6 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} @@ -4312,8 +3936,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001642: - resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} + caniuse-lite@1.0.30001645: + resolution: {integrity: sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -4718,8 +4342,8 @@ packages: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} - dayjs@1.11.11: - resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + dayjs@1.11.12: + resolution: {integrity: sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==} debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -4737,8 +4361,8 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -4934,8 +4558,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.4.829: - resolution: {integrity: sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw==} + electron-to-chromium@1.5.4: + resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -4971,8 +4595,8 @@ packages: resolution: {integrity: sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -5228,8 +4852,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-promise@6.4.0: - resolution: {integrity: sha512-/KWWRaD3fGkVCZsdR0RU53PSthFmoHVhZl+y9+6DqeDLSikLdlUVpVEAmI6iCRR5QyOjBYBqHZV/bdv4DJ4Gtw==} + eslint-plugin-promise@6.6.0: + resolution: {integrity: sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -5240,11 +4864,11 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react@7.34.4: - resolution: {integrity: sha512-Np+jo9bUwJNxCsT12pXtrGhJgT3T44T1sHhn1Ssr42XFn8TES0267wPGo5nNrMHi8qkyimDAX2BUmkf9pSaVzA==} + eslint-plugin-react@7.35.0: + resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==} engines: {node: '>=4'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint-plugin-testing-library@6.2.2: resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} @@ -5451,8 +5075,8 @@ packages: fast-uri@3.0.1: resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} - fast-xml-parser@4.4.0: - resolution: {integrity: sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==} + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true fastify-plugin@4.5.1: @@ -5585,8 +5209,8 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - framer-motion@11.3.6: - resolution: {integrity: sha512-olpX48qfoSIDjhw0RbolhOGBQmdMAXHHpSI0PFdTj5LeXChcf5F4ApShs0mQ6FPEPOj7dnEvSyB07UgRK5G9Jw==} + framer-motion@11.3.19: + resolution: {integrity: sha512-+luuQdx4AsamyMcvzW7jUAJYIKvQs1KE7oHvKkW3eNzmo0S+3PSDWjBuQkuIP9WyneGnKGMLUSuHs8OP7jKpQg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 @@ -5703,8 +5327,8 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-tsconfig@4.7.6: + resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} git-hooks-list@3.1.0: resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} @@ -5732,11 +5356,6 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@11.0.0: - resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} - engines: {node: 20 || >=22} - hasBin: true - glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} deprecated: Glob versions prior to v9 are no longer supported @@ -5917,8 +5536,8 @@ packages: resolution: {integrity: sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==} engines: {node: '>=18.18.0'} - husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + husky@9.1.4: + resolution: {integrity: sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==} engines: {node: '>=18'} hasBin: true @@ -5947,8 +5566,8 @@ packages: resolution: {integrity: sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==} engines: {node: '>=16.20'} - import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} hasBin: true @@ -6063,8 +5682,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} engines: {node: '>= 0.4'} is-data-view@1.0.1: @@ -6136,10 +5755,6 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -6257,12 +5872,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.0.1: - resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} - engines: {node: 20 || >=22} - - jake@10.9.1: - resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} hasBin: true @@ -6416,8 +6027,8 @@ packages: jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - jotai@2.9.0: - resolution: {integrity: sha512-MioTpMvR78IGfJ+W8EwQj3kwTkb+u0reGnTyg3oJZMWK9rK9v8NBSC9Rhrg9jrrFYA6bGZtzJa96zsuAYF6W3w==} + jotai@2.9.1: + resolution: {integrity: sha512-t4Q7FIqQB3N/1art4OcqdlEtPmQ2h4DNIzTFhvt06WE0kCpQ1QoG+1A1IGTaQBi2KdDRsnywj+ojmHHKgw6PDA==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=17.0.0' @@ -6544,8 +6155,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libphonenumber-js@1.11.4: - resolution: {integrity: sha512-F/R50HQuWWYcmU/esP5jrH5LiWYaN7DpN0a/99U8+mnGGtnx8kmRE+649dQh3v+CowXXZc8vpkf5AmYkO0AQ7Q==} + libphonenumber-js@1.11.5: + resolution: {integrity: sha512-TwHR5BZxGRODtAfz03szucAkjT5OArXr+94SMtAM2pYXIlQNVMrxvb6uSCbnaJJV6QXEyICk7+l6QPgn72WHhg==} lie@3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} @@ -6660,10 +6271,6 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.0.0: - resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} - engines: {node: 20 || >=22} - lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -6870,6 +6477,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -7077,8 +6688,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.17: - resolution: {integrity: sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} nodemailer@6.9.14: resolution: {integrity: sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==} @@ -7499,8 +7110,8 @@ packages: pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@9.3.1: - resolution: {integrity: sha512-afSfrq/hUiW/MFmQcLEwV9Zh8Ry6MrMTOyBU53o/fc0gEl+1OZ/Fks/xQCM2nOC0C/OfDtQMnT2d8c3kpcfSzA==} + pino@9.3.2: + resolution: {integrity: sha512-WtARBjgZ7LNEkrGWxMBN/jvlFiE17LTbBoH0konmBU684Kd0uIiDwBXlcTCW7iJnA6HfIKwUssS/2AC6cDEanw==} hasBin: true pirates@4.0.6: @@ -7550,26 +7161,8 @@ packages: ts-node: optional: true - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 @@ -7585,8 +7178,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.4.40: + resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -7666,8 +7259,8 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-ms@9.0.0: - resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==} + pretty-ms@9.1.0: + resolution: {integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==} engines: {node: '>=18'} prisma@5.13.0: @@ -7681,6 +7274,9 @@ packages: process-warning@3.0.0: resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + process-warning@4.0.0: + resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -7747,10 +7343,6 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - randexp@0.5.3: - resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==} - engines: {node: '>=4'} - randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -7863,8 +7455,8 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} - redis@4.6.15: - resolution: {integrity: sha512-2NtuOpMW3tnYzBw6S8mbXSX7RPzvVFCA2wFJq9oErushO2UeBkxObk+uvo7gv7n0rhWeOj/IzrHO8TjcFlRSOg==} + redis@4.7.0: + resolution: {integrity: sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==} reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -8484,8 +8076,8 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@3.4.6: - resolution: {integrity: sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==} + tailwindcss@3.4.7: + resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -8628,8 +8220,8 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-jest@29.2.2: - resolution: {integrity: sha512-sSW7OooaKT34AAngP6k1VS669a0HdLxkQZnlC7T76sckGCokXFnvJ3yRlQZGRTAoV5K19HfSgCiSwWOSIfcYlg==} + ts-jest@29.2.3: + resolution: {integrity: sha512-yCcfVdiBFngVz9/keHin9EnsrQtQtEu3nRykNy9RVp+FiPFFbPJ3Sg6Qg4+TkmH0vMP5qsTKgXSsk80HRwvdgQ==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -8786,8 +8378,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.22.0: - resolution: {integrity: sha512-hxMO1k4ip1uTVGgPbs1hVpYyhz2P91A6tQyH2H9POx3U6T3MdhIcfY8L2hRu/LRmzPFdfduOS0RIDjFlP2urPw==} + type-fest@4.23.0: + resolution: {integrity: sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==} engines: {node: '>=16'} type-is@1.6.18: @@ -8823,13 +8415,13 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true - uglify-js@3.19.0: - resolution: {integrity: sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==} + uglify-js@3.19.1: + resolution: {integrity: sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==} engines: {node: '>=0.8.0'} hasBin: true @@ -8853,8 +8445,8 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici@6.19.2: - resolution: {integrity: sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==} + undici@6.19.5: + resolution: {integrity: sha512-LryC15SWzqQsREHIOUybavaIHF5IoL0dJ9aWWxL/PgT1KfqAW5225FZpDUFlt9xiDMS2/S7DOKhFWA7RLksWdg==} engines: {node: '>=18.17'} unicode-canonical-property-names-ecmascript@2.0.0: @@ -8923,8 +8515,8 @@ packages: unplugin@1.0.1: resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} - unplugin@1.11.0: - resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} + unplugin@1.12.0: + resolution: {integrity: sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==} engines: {node: '>=14.0.0'} update-browserslist-db@1.1.0: @@ -9068,8 +8660,8 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} engines: {node: '>= 0.4'} which-collection@1.0.2: @@ -9171,8 +8763,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} hasBin: true @@ -9259,194 +8851,173 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/compat-data@7.24.9': {} + '@babel/compat-data@7.25.2': {} - '@babel/core@7.24.9': + '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.10 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) - '@babel/helpers': 7.24.8 - '@babel/parser': 7.24.8 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/generator': 7.25.0 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.0 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 convert-source-map: 2.0.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.24.8(@babel/core@7.24.9)(eslint@8.57.0)': + '@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.57.0)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.57.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.24.10': + '@babel/generator@7.25.0': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helper-compilation-targets@7.24.8': + '@babel/helper-compilation-targets@7.25.2': dependencies: - '@babel/compat-data': 7.24.9 + '@babel/compat-data': 7.25.2 '@babel/helper-validator-option': 7.24.8 browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.9)': + '@babel/helper-create-class-features-plugin@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 + '@babel/traverse': 7.25.2 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.9)': + '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 regexpu-core: 5.3.2 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.9)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.24.8 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.9 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.9 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.9 - '@babel/helper-member-expression-to-functions@7.24.8': dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.9(@babel/core@7.24.9)': + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 '@babel/helper-plugin-utils@7.24.8': {} - '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.9)': + '@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.24.7 + '@babel/helper-wrap-function': 7.25.0 + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.9)': + '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-simple-access@7.24.7': dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.9 - '@babel/helper-string-parser@7.24.8': {} '@babel/helper-validator-identifier@7.24.7': {} '@babel/helper-validator-option@7.24.8': {} - '@babel/helper-wrap-function@7.24.7': + '@babel/helper-wrap-function@7.25.0': dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helpers@7.24.8': + '@babel/helpers@7.25.0': dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.9 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 '@babel/highlight@7.24.7': dependencies: @@ -9455,658 +9026,673 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.24.8': + '@babel/parser@7.25.0': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.2 + transitivePeerDependencies: + - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.9)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.9)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.9)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.9)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.9)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.9)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.9)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.9)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.9)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.9)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-async-generator-functions@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.9) + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-classes@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) - '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/traverse': 7.25.2 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.25.0 + + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/template': 7.24.7 - '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-function-name': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.2 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-simple-access': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.24.8 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-constant-elements@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-react-constant-elements@7.25.1(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.9) - '@babel/types': 7.24.9 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-typescript@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/preset-env@7.24.8(@babel/core@7.24.9)': + '@babel/preset-env@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/compat-data': 7.24.9 - '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.24.8 + '@babel/compat-data': 7.25.2 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.9) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.9) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.9) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.9) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.9) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.9) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) core-js-compat: 3.37.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.9)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 esutils: 2.0.3 - '@babel/preset-react@7.24.7(@babel/core@7.24.9)': + '@babel/preset-react@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.24.7(@babel/core@7.24.9)': + '@babel/preset-typescript@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-typescript': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color '@babel/regjsgen@0.8.0': {} - '@babel/runtime@7.24.8': + '@babel/runtime@7.25.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.7': + '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.25.0 + '@babel/types': 7.25.2 - '@babel/traverse@7.24.8': + '@babel/traverse@7.25.2': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.10 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 - debug: 4.3.5(supports-color@8.1.1) + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.0 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + debug: 4.3.6(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.9': + '@babel/types@7.25.2': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 @@ -10288,7 +9874,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -10334,27 +9920,27 @@ snapshots: path-to-regexp: 6.2.2 reusify: 1.0.4 - '@floating-ui/core@1.6.4': + '@floating-ui/core@1.6.5': dependencies: - '@floating-ui/utils': 0.2.4 + '@floating-ui/utils': 0.2.5 - '@floating-ui/dom@1.6.7': + '@floating-ui/dom@1.6.8': dependencies: - '@floating-ui/core': 1.6.4 - '@floating-ui/utils': 0.2.4 + '@floating-ui/core': 1.6.5 + '@floating-ui/utils': 0.2.5 '@floating-ui/react-dom@2.1.1(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.7 + '@floating-ui/dom': 1.6.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/utils@0.2.4': {} + '@floating-ui/utils@0.2.5': {} '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -10460,27 +10046,62 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2)': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.7 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.13 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -10505,7 +10126,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -10523,7 +10144,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.14.11 + '@types/node': 20.14.13 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -10545,7 +10166,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.14.11 + '@types/node': 20.14.13 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -10592,7 +10213,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -10615,7 +10236,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -10652,11 +10273,11 @@ snapshots: '@lukeed/csprng@1.1.0': {} - '@mdx-js/loader@3.0.1(webpack@5.93.0)': + '@mdx-js/loader@3.0.1(webpack@5.92.1(@swc/core@1.7.3))': dependencies: '@mdx-js/mdx': 3.0.1 source-map: 0.7.4 - webpack: 5.93.0 + webpack: 5.92.1(@swc/core@1.7.3) transitivePeerDependencies: - supports-color @@ -10716,17 +10337,17 @@ snapshots: got: 11.8.6 os-filter-obj: 2.0.0 - '@nestjs/cli@10.4.2': + '@nestjs/cli@10.4.2(@swc/cli@0.4.0(@swc/core@1.7.3)(chokidar@3.6.0))(@swc/core@1.7.3)': dependencies: '@angular-devkit/core': 17.3.8(chokidar@3.6.0) '@angular-devkit/schematics': 17.3.8(chokidar@3.6.0) '@angular-devkit/schematics-cli': 17.3.8(chokidar@3.6.0) - '@nestjs/schematics': 10.1.2(chokidar@3.6.0)(typescript@5.3.3) + '@nestjs/schematics': 10.1.3(chokidar@3.6.0)(typescript@5.3.3) chalk: 4.1.2 chokidar: 3.6.0 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.92.1) + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.3)) glob: 10.4.2 inquirer: 8.2.6 node-emoji: 1.11.0 @@ -10735,8 +10356,11 @@ snapshots: tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.1.0 typescript: 5.3.3 - webpack: 5.92.1 + webpack: 5.92.1(@swc/core@1.7.3) webpack-node-externals: 3.0.0 + optionalDependencies: + '@swc/cli': 0.4.0(@swc/core@1.7.3(@swc/helpers@0.5.2))(chokidar@3.6.0) + '@swc/core': 1.7.3(@swc/helpers@0.5.2) transitivePeerDependencies: - esbuild - uglify-js @@ -10830,14 +10454,14 @@ snapshots: - supports-color - utf-8-validate - '@nestjs/schedule@4.1.0(@nestjs/common@10.3.10)(@nestjs/core@10.3.10)': + '@nestjs/schedule@4.1.0(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1))': dependencies: '@nestjs/common': 10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.3.10(@nestjs/common@10.3.10)(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1) cron: 3.1.7 uuid: 10.0.0 - '@nestjs/schematics@10.1.2(chokidar@3.6.0)(typescript@5.3.3)': + '@nestjs/schematics@10.1.3(chokidar@3.6.0)(typescript@5.3.3)': dependencies: '@angular-devkit/core': 17.3.8(chokidar@3.6.0) '@angular-devkit/schematics': 17.3.8(chokidar@3.6.0) @@ -10848,18 +10472,7 @@ snapshots: transitivePeerDependencies: - chokidar - '@nestjs/schematics@10.1.2(typescript@5.5.3)': - dependencies: - '@angular-devkit/core': 17.3.8(chokidar@3.6.0) - '@angular-devkit/schematics': 17.3.8(chokidar@3.6.0) - comment-json: 4.2.3 - jsonc-parser: 3.3.1 - pluralize: 8.0.0 - typescript: 5.5.3 - transitivePeerDependencies: - - chokidar - - '@nestjs/swagger@7.4.0(@nestjs/common@10.3.10)(@nestjs/core@10.3.10)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)': + '@nestjs/swagger@7.4.0(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)': dependencies: '@microsoft/tsdoc': 0.15.0 '@nestjs/common': 10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -10897,9 +10510,11 @@ snapshots: dependencies: glob: 7.1.7 - '@next/mdx@14.2.5(@mdx-js/loader@3.0.1)(@mdx-js/react@3.0.1)': + '@next/mdx@14.2.5(@mdx-js/loader@3.0.1(webpack@5.92.1(@swc/core@1.7.3)))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))': dependencies: - '@mdx-js/loader': 3.0.1(webpack@5.93.0) + source-map: 0.7.4 + optionalDependencies: + '@mdx-js/loader': 3.0.1(webpack@5.92.1(@swc/core@1.7.3)) '@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1) source-map: 0.7.4 @@ -11030,7 +10645,7 @@ snapshots: config-chain: 1.1.13 '@prisma/client@5.17.0(prisma@5.13.0)': - dependencies: + optionalDependencies: prisma: 5.13.0 '@prisma/debug@5.13.0': {} @@ -11058,7 +10673,7 @@ snapshots: '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/primitive@1.1.0': {} @@ -11140,7 +10755,9 @@ snapshots: '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 + react: 18.3.1 + optionalDependencies: '@types/react': 18.3.3 react: 18.3.1 @@ -11164,7 +10781,9 @@ snapshots: '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 + react: 18.3.1 + optionalDependencies: '@types/react': 18.3.3 react: 18.3.1 @@ -11175,7 +10794,7 @@ snapshots: '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -11223,7 +10842,7 @@ snapshots: '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) @@ -11262,7 +10881,9 @@ snapshots: '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 + react: 18.3.1 + optionalDependencies: '@types/react': 18.3.3 react: 18.3.1 @@ -11273,7 +10894,7 @@ snapshots: '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -11298,7 +10919,7 @@ snapshots: '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 react: 18.3.1 @@ -11395,6 +11016,11 @@ snapshots: '@radix-ui/rect': 1.1.0 '@types/react': 18.3.3 '@types/react-dom': 18.3.0 + + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -11418,7 +11044,7 @@ snapshots: '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 @@ -11437,7 +11063,7 @@ snapshots: '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 @@ -11494,150 +11120,166 @@ snapshots: '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-slot@1.1.0(@types/react@18.3.3)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-switch@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-switch@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 - '@types/react': 18.3.3 + '@babel/runtime': 7.25.0 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.3)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.3)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 - '@types/react': 18.3.3 + '@babel/runtime': 7.25.0 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.3)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 '@radix-ui/react-use-size@1.1.0(@types/react@18.3.3)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/rect@1.1.0': {} - '@redis/bloom@1.2.0(@redis/client@1.5.17)': + '@redis/bloom@1.2.0(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.17 + '@redis/client': 1.6.0 - '@redis/client@1.5.17': + '@redis/client@1.6.0': dependencies: cluster-key-slot: 1.1.2 generic-pool: 3.9.0 yallist: 4.0.0 - '@redis/graph@1.1.1(@redis/client@1.5.17)': + '@redis/graph@1.1.1(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.17 + '@redis/client': 1.6.0 - '@redis/json@1.0.6(@redis/client@1.5.17)': + '@redis/json@1.0.7(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.17 + '@redis/client': 1.6.0 - '@redis/search@1.1.6(@redis/client@1.5.17)': + '@redis/search@1.2.0(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.17 + '@redis/client': 1.6.0 - '@redis/time-series@1.0.5(@redis/client@1.5.17)': + '@redis/time-series@1.1.0(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.17 + '@redis/client': 1.6.0 '@rollup/pluginutils@5.1.0': dependencies: @@ -11645,90 +11287,42 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/rollup-android-arm-eabi@4.18.1': - optional: true - - '@rollup/rollup-android-arm64@4.18.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.18.1': - optional: true - - '@rollup/rollup-darwin-x64@4.18.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.18.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.18.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.18.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.18.1': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.18.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.18.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.18.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.18.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.18.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.18.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.18.1': - optional: true - - '@rushstack/eslint-patch@1.10.3': {} + '@rushstack/eslint-patch@1.10.4': {} '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/changelog@6.0.3(semantic-release@24.0.0)': + '@semantic-release/changelog@6.0.3(semantic-release@24.0.0(typescript@5.5.4))': dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 fs-extra: 11.2.0 lodash: 4.17.21 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) - '@semantic-release/commit-analyzer@12.0.0(semantic-release@24.0.0)': + '@semantic-release/commit-analyzer@12.0.0(semantic-release@24.0.0(typescript@5.5.4))': dependencies: conventional-changelog-angular: 7.0.0 conventional-commits-filter: 4.0.0 conventional-commits-parser: 5.0.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) import-from-esm: 1.3.4 lodash-es: 4.17.21 micromatch: 4.0.7 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) transitivePeerDependencies: - supports-color - '@semantic-release/commit-analyzer@13.0.0(semantic-release@24.0.0)': + '@semantic-release/commit-analyzer@13.0.0(semantic-release@24.0.0(typescript@5.5.4))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) import-from-esm: 1.3.4 lodash-es: 4.17.21 micromatch: 4.0.7 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) transitivePeerDependencies: - supports-color @@ -11736,21 +11330,21 @@ snapshots: '@semantic-release/error@4.0.0': {} - '@semantic-release/git@10.0.1(semantic-release@24.0.0)': + '@semantic-release/git@10.0.1(semantic-release@24.0.0(typescript@5.5.4))': dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) dir-glob: 3.0.1 execa: 5.1.1 lodash: 4.17.21 micromatch: 4.0.7 p-reduce: 2.1.0 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) transitivePeerDependencies: - supports-color - '@semantic-release/github@10.1.0(semantic-release@24.0.0)': + '@semantic-release/github@10.1.3(semantic-release@24.0.0(typescript@5.5.4))': dependencies: '@octokit/core': 6.1.2 '@octokit/plugin-paginate-rest': 11.3.3(@octokit/core@6.1.2) @@ -11758,7 +11352,7 @@ snapshots: '@octokit/plugin-throttling': 9.3.1(@octokit/core@6.1.2) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) dir-glob: 3.0.1 globby: 14.0.2 http-proxy-agent: 7.0.2 @@ -11767,12 +11361,12 @@ snapshots: lodash-es: 4.17.21 mime: 4.0.4 p-filter: 4.1.0 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@12.0.1(semantic-release@24.0.0)': + '@semantic-release/npm@12.0.1(semantic-release@24.0.0(typescript@5.5.4))': dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 @@ -11785,23 +11379,23 @@ snapshots: rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.0.2 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) semver: 7.6.3 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.0.1(semantic-release@24.0.0)': + '@semantic-release/release-notes-generator@14.0.1(semantic-release@24.0.0(typescript@5.5.4))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) get-stream: 7.0.1 import-from-esm: 1.3.4 into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) transitivePeerDependencies: - supports-color @@ -11815,9 +11409,9 @@ snapshots: '@sentry/bundler-plugin-core@2.21.1': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@sentry/babel-plugin-component-annotate': 2.21.1 - '@sentry/cli': 2.32.2 + '@sentry/cli': 2.33.0 dotenv: 16.4.5 find-up: 5.0.0 glob: 9.3.5 @@ -11827,28 +11421,28 @@ snapshots: - encoding - supports-color - '@sentry/cli-darwin@2.32.2': + '@sentry/cli-darwin@2.33.0': optional: true - '@sentry/cli-linux-arm64@2.32.2': + '@sentry/cli-linux-arm64@2.33.0': optional: true - '@sentry/cli-linux-arm@2.32.2': + '@sentry/cli-linux-arm@2.33.0': optional: true - '@sentry/cli-linux-i686@2.32.2': + '@sentry/cli-linux-i686@2.33.0': optional: true - '@sentry/cli-linux-x64@2.32.2': + '@sentry/cli-linux-x64@2.33.0': optional: true - '@sentry/cli-win32-i686@2.32.2': + '@sentry/cli-win32-i686@2.33.0': optional: true - '@sentry/cli-win32-x64@2.32.2': + '@sentry/cli-win32-x64@2.33.0': optional: true - '@sentry/cli@2.32.2': + '@sentry/cli@2.33.0': dependencies: https-proxy-agent: 5.0.1 node-fetch: 2.7.0 @@ -11856,13 +11450,13 @@ snapshots: proxy-from-env: 1.1.0 which: 2.0.2 optionalDependencies: - '@sentry/cli-darwin': 2.32.2 - '@sentry/cli-linux-arm': 2.32.2 - '@sentry/cli-linux-arm64': 2.32.2 - '@sentry/cli-linux-i686': 2.32.2 - '@sentry/cli-linux-x64': 2.32.2 - '@sentry/cli-win32-i686': 2.32.2 - '@sentry/cli-win32-x64': 2.32.2 + '@sentry/cli-darwin': 2.33.0 + '@sentry/cli-linux-arm': 2.33.0 + '@sentry/cli-linux-arm64': 2.33.0 + '@sentry/cli-linux-i686': 2.33.0 + '@sentry/cli-linux-x64': 2.33.0 + '@sentry/cli-win32-i686': 2.33.0 + '@sentry/cli-win32-x64': 2.33.0 transitivePeerDependencies: - encoding - supports-color @@ -11898,12 +11492,12 @@ snapshots: dependencies: '@sentry/types': 7.118.0 - '@sentry/webpack-plugin@2.21.1(webpack@5.93.0)': + '@sentry/webpack-plugin@2.21.1(webpack@5.92.1(@swc/core@1.7.3))': dependencies: '@sentry/bundler-plugin-core': 2.21.1 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.93.0 + webpack: 5.92.1(@swc/core@1.7.3) transitivePeerDependencies: - encoding - supports-color @@ -11928,7 +11522,7 @@ snapshots: '@socket.io/redis-adapter@8.3.0(socket.io-adapter@2.5.5)': dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) notepack.io: 3.0.1 socket.io-adapter: 2.5.5 uid2: 1.0.0 @@ -11955,7 +11549,7 @@ snapshots: dependencies: '@supabase/node-fetch': 2.6.15 '@types/phoenix': 1.6.5 - '@types/ws': 8.5.11 + '@types/ws': 8.5.12 ws: 8.18.0 transitivePeerDependencies: - bufferutil @@ -11965,7 +11559,7 @@ snapshots: dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/supabase-js@2.44.4': + '@supabase/supabase-js@2.45.0': dependencies: '@supabase/auth-js': 2.64.4 '@supabase/functions-js': 2.4.1 @@ -11977,56 +11571,56 @@ snapshots: - bufferutil - utf-8-validate - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.9)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.9)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.9)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.9)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.9)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.9)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.9)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.9)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 - '@svgr/babel-preset@8.1.0(@babel/core@7.24.9)': + '@svgr/babel-preset@8.1.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.9 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.9) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.9) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.9) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.9) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.9) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.9) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.9) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.25.2) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.25.2) - '@svgr/core@8.1.0(typescript@4.9.5)': + '@svgr/core@8.1.0(typescript@5.5.4)': dependencies: - '@babel/core': 7.24.9 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@4.9.5) + cosmiconfig: 8.3.6(typescript@5.5.4) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -12034,46 +11628,46 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0)': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.5.4))': dependencies: - '@babel/core': 7.24.9 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.9) - '@svgr/core': 8.1.0(typescript@4.9.5) + '@babel/core': 7.25.2 + '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) + '@svgr/core': 8.1.0(typescript@5.5.4) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0)(typescript@4.9.5)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.5.4))(typescript@5.5.4)': dependencies: - '@svgr/core': 8.1.0(typescript@4.9.5) - cosmiconfig: 8.3.6(typescript@4.9.5) + '@svgr/core': 8.1.0(typescript@5.5.4) + cosmiconfig: 8.3.6(typescript@5.5.4) deepmerge: 4.3.1 svgo: 3.3.2 transitivePeerDependencies: - typescript - '@svgr/webpack@8.1.0(typescript@4.9.5)': + '@svgr/webpack@8.1.0(typescript@5.5.4)': dependencies: - '@babel/core': 7.24.9 - '@babel/plugin-transform-react-constant-elements': 7.24.7(@babel/core@7.24.9) - '@babel/preset-env': 7.24.8(@babel/core@7.24.9) - '@babel/preset-react': 7.24.7(@babel/core@7.24.9) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.9) - '@svgr/core': 8.1.0(typescript@4.9.5) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0)(typescript@4.9.5) + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-constant-elements': 7.25.1(@babel/core@7.25.2) + '@babel/preset-env': 7.25.2(@babel/core@7.25.2) + '@babel/preset-react': 7.24.7(@babel/core@7.25.2) + '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) + '@svgr/core': 8.1.0(typescript@5.5.4) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.5.4)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.5.4))(typescript@5.5.4) transitivePeerDependencies: - supports-color - typescript - '@swc/cli@0.4.0(@swc/core@1.6.13)': + '@swc/cli@0.4.0(@swc/core@1.7.3(@swc/helpers@0.5.2))(chokidar@3.6.0)': dependencies: '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.6.13 + '@swc/core': 1.7.3(@swc/helpers@0.5.2) '@swc/counter': 0.1.3 commander: 8.3.0 fast-glob: 3.3.2 @@ -12082,52 +11676,55 @@ snapshots: semver: 7.6.3 slash: 3.0.0 source-map: 0.7.4 + optionalDependencies: + chokidar: 3.6.0 - '@swc/core-darwin-arm64@1.6.13': + '@swc/core-darwin-arm64@1.7.3': optional: true - '@swc/core-darwin-x64@1.6.13': + '@swc/core-darwin-x64@1.7.3': optional: true - '@swc/core-linux-arm-gnueabihf@1.6.13': + '@swc/core-linux-arm-gnueabihf@1.7.3': optional: true - '@swc/core-linux-arm64-gnu@1.6.13': + '@swc/core-linux-arm64-gnu@1.7.3': optional: true - '@swc/core-linux-arm64-musl@1.6.13': + '@swc/core-linux-arm64-musl@1.7.3': optional: true - '@swc/core-linux-x64-gnu@1.6.13': + '@swc/core-linux-x64-gnu@1.7.3': optional: true - '@swc/core-linux-x64-musl@1.6.13': + '@swc/core-linux-x64-musl@1.7.3': optional: true - '@swc/core-win32-arm64-msvc@1.6.13': + '@swc/core-win32-arm64-msvc@1.7.3': optional: true - '@swc/core-win32-ia32-msvc@1.6.13': + '@swc/core-win32-ia32-msvc@1.7.3': optional: true - '@swc/core-win32-x64-msvc@1.6.13': + '@swc/core-win32-x64-msvc@1.7.3': optional: true - '@swc/core@1.6.13': + '@swc/core@1.7.3(@swc/helpers@0.5.2)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.9 + '@swc/types': 0.1.12 optionalDependencies: - '@swc/core-darwin-arm64': 1.6.13 - '@swc/core-darwin-x64': 1.6.13 - '@swc/core-linux-arm-gnueabihf': 1.6.13 - '@swc/core-linux-arm64-gnu': 1.6.13 - '@swc/core-linux-arm64-musl': 1.6.13 - '@swc/core-linux-x64-gnu': 1.6.13 - '@swc/core-linux-x64-musl': 1.6.13 - '@swc/core-win32-arm64-msvc': 1.6.13 - '@swc/core-win32-ia32-msvc': 1.6.13 - '@swc/core-win32-x64-msvc': 1.6.13 + '@swc/core-darwin-arm64': 1.7.3 + '@swc/core-darwin-x64': 1.7.3 + '@swc/core-linux-arm-gnueabihf': 1.7.3 + '@swc/core-linux-arm64-gnu': 1.7.3 + '@swc/core-linux-arm64-musl': 1.7.3 + '@swc/core-linux-x64-gnu': 1.7.3 + '@swc/core-linux-x64-musl': 1.7.3 + '@swc/core-win32-arm64-msvc': 1.7.3 + '@swc/core-win32-ia32-msvc': 1.7.3 + '@swc/core-win32-x64-msvc': 1.7.3 + '@swc/helpers': 0.5.2 '@swc/counter@0.1.3': {} @@ -12135,7 +11732,7 @@ snapshots: dependencies: tslib: 2.6.3 - '@swc/types@0.1.9': + '@swc/types@0.1.12': dependencies: '@swc/counter': 0.1.3 @@ -12143,12 +11740,12 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/forms@0.5.7(tailwindcss@3.4.6)': + '@tailwindcss/forms@0.5.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.6(ts-node@10.9.2) + tailwindcss: 3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) - '@tanstack/react-table@8.19.3(react-dom@18.3.1)(react@18.3.1)': + '@tanstack/react-table@8.19.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/table-core': 8.19.3 react: 18.3.1 @@ -12244,7 +11841,7 @@ snapshots: dependencies: '@tsparticles/engine': 3.5.0 - '@tsparticles/react@3.0.0(@tsparticles/engine@3.5.0)(react-dom@18.3.1)(react@18.3.1)': + '@tsparticles/react@3.0.0(@tsparticles/engine@3.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tsparticles/engine': 3.5.0 react: 18.3.1 @@ -12341,42 +11938,42 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.25.0 + '@babel/types': 7.25.2 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.25.0 + '@babel/types': 7.25.2 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.2 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/responselike': 1.0.3 '@types/cli-table@0.3.4': {} '@types/connect@3.4.38': dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/cookie-parser@1.4.7': dependencies: @@ -12388,7 +11985,11 @@ snapshots: '@types/cors@2.8.17': dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 + + '@types/dayjs-precise-range@1.0.5': + dependencies: + dayjs: 1.11.12 '@types/debug@4.1.12': dependencies: @@ -12397,14 +11998,14 @@ snapshots: '@types/eccrypto@1.1.6': dependencies: '@types/expect': 1.20.4 - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/eslint-scope@3.7.7': dependencies: - '@types/eslint': 8.56.10 + '@types/eslint': 9.6.0 '@types/estree': 1.0.5 - '@types/eslint@8.56.10': + '@types/eslint@9.6.0': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -12419,7 +12020,7 @@ snapshots: '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -12435,7 +12036,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/hast@3.0.4': dependencies: @@ -12468,11 +12069,11 @@ snapshots: '@types/jsonwebtoken@9.0.5': dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/keyv@3.1.4': dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/luxon@3.4.2': {} @@ -12486,15 +12087,13 @@ snapshots: '@types/mime@1.3.5': {} - '@types/mocha@10.0.7': {} - '@types/ms@0.7.34': {} '@types/multer@1.4.11': dependencies: '@types/express': 4.17.21 - '@types/node@20.14.11': + '@types/node@20.14.13': dependencies: undici-types: 5.26.5 @@ -12519,33 +12118,34 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/semver@7.5.8': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/send': 0.17.4 '@types/stack-utils@2.0.3': {} - '@types/superagent@8.1.7': + '@types/superagent@8.1.8': dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 20.14.11 + '@types/node': 20.14.13 + form-data: 4.0.0 '@types/supertest@6.0.2': dependencies: '@types/methods': 1.1.4 - '@types/superagent': 8.1.7 + '@types/superagent': 8.1.8 '@types/unist@2.0.10': {} @@ -12555,9 +12155,9 @@ snapshots: '@types/validator@13.12.0': {} - '@types/ws@8.5.11': + '@types/ws@8.5.12': dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 '@types/yargs-parser@21.0.3': {} @@ -12565,7 +12165,7 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5)': dependencies: '@eslint-community/regexpp': 4.11.0 '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@4.9.5) @@ -12573,33 +12173,35 @@ snapshots: '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.3 ts-api-utils: 1.3.0(typescript@4.9.5) + optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.3) - typescript: 5.5.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -12609,21 +12211,23 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 + optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 - typescript: 5.5.3 + optionalDependencies: + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -12641,21 +12245,23 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5) '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@4.9.5) - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@4.9.5) + optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.3) - debug: 4.3.5(supports-color@5.5.0) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.3) - typescript: 5.5.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -12667,11 +12273,12 @@ snapshots: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 tsutils: 3.21.0(typescript@4.9.5) + optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color @@ -12680,27 +12287,29 @@ snapshots: dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 ts-api-utils: 1.3.0(typescript@4.9.5) + optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.3)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.3) - typescript: 5.5.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -12733,14 +12342,14 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.6.3 transitivePeerDependencies: @@ -12759,29 +12368,31 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vercel/style-guide@5.2.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.3.3)(typescript@4.9.5)': + '@vercel/style-guide@5.2.0(@next/eslint-plugin-next@13.5.6)(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(prettier@3.3.3)(typescript@4.9.5)': dependencies: - '@babel/core': 7.24.9 - '@babel/eslint-parser': 7.24.8(@babel/core@7.24.9)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@4.9.5) + '@babel/core': 7.25.2 + '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.0) + '@rushstack/eslint-patch': 1.10.4 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@4.9.5) - eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(jest@29.7.0)(typescript@4.9.5) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) - eslint-plugin-react: 7.34.4(eslint@8.57.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5))(eslint@8.57.0) + eslint-plugin-react: 7.35.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@4.9.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) - prettier: 3.3.3 prettier-plugin-packagejson: 2.5.1(prettier@3.3.3) + optionalDependencies: + '@next/eslint-plugin-next': 13.5.6 + eslint: 8.57.0 + prettier: 3.3.3 typescript: 4.9.5 transitivePeerDependencies: - eslint-import-resolver-node @@ -12906,13 +12517,13 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color agent-base@7.1.1: dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -12927,15 +12538,15 @@ snapshots: indent-string: 5.0.0 ajv-formats@2.1.1(ajv@8.12.0): - dependencies: + optionalDependencies: ajv: 8.12.0 ajv-formats@2.1.1(ajv@8.17.1): - dependencies: + optionalDependencies: ajv: 8.17.1 ajv-formats@3.0.1(ajv@8.17.1): - dependencies: + optionalDependencies: ajv: 8.17.1 ajv-keywords@3.5.2(ajv@6.12.6): @@ -13081,13 +12692,6 @@ snapshots: es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - array.prototype.toreversed@1.1.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.7 @@ -13119,14 +12723,14 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.19(postcss@8.4.39): + autoprefixer@10.4.19(postcss@8.4.40): dependencies: browserslist: 4.23.2 - caniuse-lite: 1.0.30001642 + caniuse-lite: 1.0.30001645 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.39 + postcss: 8.4.40 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -13138,7 +12742,7 @@ snapshots: '@fastify/error': 3.4.1 fastq: 1.17.1 - avvvatars-react@0.4.2(csstype@3.1.3)(react-dom@18.3.1)(react@18.3.1): + avvvatars-react@0.4.2(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: goober: 2.1.14(csstype@3.1.3) react: 18.3.1 @@ -13146,19 +12750,19 @@ snapshots: transitivePeerDependencies: - csstype - axe-core@4.9.1: {} + axe-core@4.10.0: {} axobject-query@3.1.1: dependencies: deep-equal: 2.2.3 - babel-jest@29.7.0(@babel/core@7.24.9): + babel-jest@29.7.0(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.9) + babel-preset-jest: 29.6.3(@babel/core@7.25.2) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -13177,56 +12781,56 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.9 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.9): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): dependencies: - '@babel/compat-data': 7.24.9 - '@babel/core': 7.24.9 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) + '@babel/compat-data': 7.25.2 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.9): + babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.9 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) core-js-compat: 3.37.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.9): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.9 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.9): - dependencies: - '@babel/core': 7.24.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.9) - - babel-preset-jest@29.6.3(@babel/core@7.24.9): - dependencies: - '@babel/core': 7.24.9 + babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + + babel-preset-jest@29.6.3(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.9) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) bail@2.0.2: {} @@ -13318,8 +12922,6 @@ snapshots: browser-or-node@2.1.1: {} - browser-stdout@1.3.1: {} - browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 @@ -13332,9 +12934,9 @@ snapshots: browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001642 - electron-to-chromium: 1.4.829 - node-releases: 2.0.17 + caniuse-lite: 1.0.30001645 + electron-to-chromium: 1.5.4 + node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.2) bs-logger@0.2.6: @@ -13370,19 +12972,12 @@ snapshots: dependencies: semver: 7.6.3 - bundle-require@5.0.0(esbuild@0.23.0): - dependencies: - esbuild: 0.23.0 - load-tsconfig: 0.2.5 - busboy@1.6.0: dependencies: streamsearch: 1.1.0 bytes@3.1.2: {} - cac@6.7.14: {} - cacheable-lookup@5.0.4: {} cacheable-request@7.0.4: @@ -13411,7 +13006,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001642: {} + caniuse-lite@1.0.30001645: {} ccount@2.0.1: {} @@ -13469,7 +13064,7 @@ snapshots: class-validator@0.14.1: dependencies: '@types/validator': 13.12.0 - libphonenumber-js: 1.11.4 + libphonenumber-js: 1.11.5 validator: 13.12.0 class-variance-authority@0.7.0: @@ -13541,10 +13136,10 @@ snapshots: cluster-key-slot@1.1.2: {} - cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -13630,8 +13225,6 @@ snapshots: consola@2.15.3: {} - consola@3.2.3: {} - content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -13703,29 +13296,32 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@8.3.6(typescript@4.9.5): + cosmiconfig@8.3.6(typescript@5.3.3): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 4.9.5 + optionalDependencies: + typescript: 5.3.3 - cosmiconfig@8.3.6(typescript@5.3.3): + cosmiconfig@8.3.6(typescript@5.5.4): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.3.3 + optionalDependencies: + typescript: 5.5.4 - cosmiconfig@9.0.0(typescript@5.5.3): + cosmiconfig@9.0.0(typescript@5.5.4): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 - typescript: 5.5.3 + optionalDependencies: + typescript: 5.5.4 create-hash@1.2.0: dependencies: @@ -13746,13 +13342,28 @@ snapshots: sha.js: 2.4.11 optional: true - create-jest@29.7.0(@types/node@20.14.11)(ts-node@10.9.2): + create-jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -13836,7 +13447,7 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 - dayjs@1.11.11: {} + dayjs@1.11.12: {} debug@2.6.9: dependencies: @@ -13846,18 +13457,12 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.5(supports-color@5.5.0): + debug@4.3.6(supports-color@5.5.0): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 5.5.0 - debug@4.3.5(supports-color@8.1.1): - dependencies: - ms: 2.1.2 - supports-color: 8.1.1 - - decamelize@4.0.0: {} - decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 @@ -13948,8 +13553,6 @@ snapshots: diff@4.0.2: {} - diff@5.2.0: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -14004,8 +13607,6 @@ snapshots: dotenv@16.4.5: {} - drange@1.1.1: {} - drbg.js@1.0.1: dependencies: browserify-aes: 1.2.0 @@ -14036,9 +13637,9 @@ snapshots: ejs@3.1.10: dependencies: - jake: 10.9.1 + jake: 10.9.2 - electron-to-chromium@1.4.829: {} + electron-to-chromium@1.5.4: {} elliptic@6.5.4: dependencies: @@ -14067,7 +13668,7 @@ snapshots: engine.io-client@6.5.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) engine.io-parser: 5.2.3 ws: 8.17.1 xmlhttprequest-ssl: 2.0.0 @@ -14082,12 +13683,12 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 20.14.11 + '@types/node': 20.14.13 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) engine.io-parser: 5.2.3 ws: 8.17.1 transitivePeerDependencies: @@ -14095,7 +13696,7 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.17.0: + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -14228,59 +13829,6 @@ snapshots: es6-promise@4.2.8: {} - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - esbuild@0.23.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.23.0 - '@esbuild/android-arm': 0.23.0 - '@esbuild/android-arm64': 0.23.0 - '@esbuild/android-x64': 0.23.0 - '@esbuild/darwin-arm64': 0.23.0 - '@esbuild/darwin-x64': 0.23.0 - '@esbuild/freebsd-arm64': 0.23.0 - '@esbuild/freebsd-x64': 0.23.0 - '@esbuild/linux-arm': 0.23.0 - '@esbuild/linux-arm64': 0.23.0 - '@esbuild/linux-ia32': 0.23.0 - '@esbuild/linux-loong64': 0.23.0 - '@esbuild/linux-mips64el': 0.23.0 - '@esbuild/linux-ppc64': 0.23.0 - '@esbuild/linux-riscv64': 0.23.0 - '@esbuild/linux-s390x': 0.23.0 - '@esbuild/linux-x64': 0.23.0 - '@esbuild/netbsd-x64': 0.23.0 - '@esbuild/openbsd-arm64': 0.23.0 - '@esbuild/openbsd-x64': 0.23.0 - '@esbuild/sunos-x64': 0.23.0 - '@esbuild/win32-arm64': 0.23.0 - '@esbuild/win32-ia32': 0.23.0 - '@esbuild/win32-x64': 0.23.0 - escalade@3.1.2: {} escape-html@1.0.3: {} @@ -14302,53 +13850,53 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-config-standard-with-typescript@43.0.1(@typescript-eslint/eslint-plugin@6.21.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.4.0)(eslint@8.57.0)(typescript@5.5.3): + eslint-config-standard-with-typescript@43.0.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4): dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.4.0)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0) eslint-plugin-n: 16.6.2(eslint@8.57.0) - eslint-plugin-promise: 6.4.0(eslint@8.57.0) - typescript: 5.5.3 + eslint-plugin-promise: 6.6.0(eslint@8.57.0) + typescript: 5.5.4 transitivePeerDependencies: - supports-color - eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.4.0)(eslint@8.57.0): + eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0): dependencies: eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0) eslint-plugin-n: 16.6.2(eslint@8.57.0) - eslint-plugin-promise: 6.4.0(eslint@8.57.0) + eslint-plugin-promise: 6.6.0(eslint@8.57.0) eslint-config-turbo@1.13.4(eslint@8.57.0): dependencies: eslint: 8.57.0 eslint-plugin-turbo: 1.13.4(eslint@8.57.0) - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)): dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.14.0 + is-core-module: 2.15.0 resolve: 1.22.8 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: - debug: 4.3.5(supports-color@8.1.1) - enhanced-resolve: 5.17.0 + debug: 4.3.6(supports-color@5.5.0) + enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.5 - is-core-module: 2.14.0 + get-tsconfig: 4.7.6 + is-core-module: 2.15.0 is-glob: 4.0.3 transitivePeerDependencies: - '@typescript-eslint/parser' @@ -14356,20 +13904,22 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@4.9.5) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@4.9.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.3) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -14394,9 +13944,35 @@ snapshots: eslint: 8.57.0 ignore: 5.3.1 - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + dependencies: + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.15.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@4.9.5) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.3) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -14405,9 +13981,9 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 - is-core-module: 2.14.0 + is-core-module: 2.15.0 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -14415,17 +13991,20 @@ snapshots: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(jest@29.7.0)(typescript@4.9.5): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5): dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) eslint: 8.57.0 - jest: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5) + jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) transitivePeerDependencies: - supports-color - typescript @@ -14436,7 +14015,7 @@ snapshots: array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 - axe-core: 4.9.1 + axe-core: 4.10.0 axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 @@ -14456,11 +14035,11 @@ snapshots: builtins: 5.1.0 eslint: 8.57.0 eslint-plugin-es-x: 7.8.0(eslint@8.57.0) - get-tsconfig: 4.7.5 + get-tsconfig: 4.7.6 globals: 13.24.0 ignore: 5.3.1 is-builtin-module: 3.2.1 - is-core-module: 2.14.0 + is-core-module: 2.15.0 minimatch: 3.1.2 resolve: 1.22.8 semver: 7.6.3 @@ -14475,20 +14054,23 @@ snapshots: resolve: 1.22.8 semver: 6.3.1 - eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0): + eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5))(eslint@8.57.0): dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(jest@29.7.0)(typescript@4.9.5) + optionalDependencies: + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5) - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3): dependencies: eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 + optionalDependencies: + '@types/eslint': 9.6.0 + eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-plugin-promise@6.4.0(eslint@8.57.0): + eslint-plugin-promise@6.6.0(eslint@8.57.0): dependencies: eslint: 8.57.0 @@ -14496,12 +14078,11 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-react@7.34.4(eslint@8.57.0): + eslint-plugin-react@7.35.0(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.0.19 @@ -14589,7 +14170,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -14729,7 +14310,7 @@ snapshots: is-plain-obj: 4.1.0 is-stream: 4.0.1 npm-run-path: 5.3.0 - pretty-ms: 9.0.0 + pretty-ms: 9.1.0 signal-exit: 4.1.0 strip-final-newline: 4.0.0 yoctocolors: 2.1.1 @@ -14786,7 +14367,7 @@ snapshots: ext-list@2.2.2: dependencies: - mime-db: 1.52.0 + mime-db: 1.53.0 ext-name@5.0.0: dependencies: @@ -14843,7 +14424,7 @@ snapshots: fast-uri@3.0.1: {} - fast-xml-parser@4.4.0: + fast-xml-parser@4.4.1: dependencies: strnum: 1.0.5 @@ -14860,7 +14441,7 @@ snapshots: fast-json-stringify: 5.16.1 find-my-way: 8.2.0 light-my-request: 5.13.0 - pino: 9.3.1 + pino: 9.3.2 process-warning: 3.0.0 proxy-addr: 2.0.7 rfdc: 1.4.1 @@ -14970,8 +14551,6 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 - flat@5.0.2: {} - flatted@3.3.1: {} for-each@0.3.3: @@ -14983,7 +14562,7 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.92.1): + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.3)): dependencies: '@babel/code-frame': 7.24.7 chalk: 4.1.2 @@ -14998,7 +14577,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.3.3 - webpack: 5.92.1 + webpack: 5.92.1(@swc/core@1.7.3) form-data@4.0.0: dependencies: @@ -15017,11 +14596,12 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@11.3.6(react-dom@18.3.1)(react@18.3.1): + framer-motion@11.3.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: + tslib: 2.6.3 + optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.3 fresh@0.5.2: {} @@ -15064,9 +14644,9 @@ snapshots: functions-have-names@1.2.3: {} - geist@1.3.1(next@13.5.6): + geist@1.3.1(next@13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: - next: 13.5.6(@babel/core@7.24.9)(react-dom@18.3.1)(react@18.3.1) + next: 13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) generic-pool@3.9.0: {} @@ -15111,7 +14691,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.5: + get-tsconfig@4.7.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -15154,15 +14734,6 @@ snapshots: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - glob@11.0.0: - dependencies: - foreground-child: 3.2.1 - jackspeak: 4.0.1 - minimatch: 10.0.1 - minipass: 7.1.2 - package-json-from-dist: 1.0.0 - path-scurry: 2.0.0 - glob@7.1.7: dependencies: fs.realpath: 1.0.0 @@ -15172,22 +14743,14 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - glob@8.1.0: + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.6 + minimatch: 3.1.2 once: 1.4.0 + path-is-absolute: 1.0.1 glob@9.3.5: dependencies: @@ -15268,7 +14831,7 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.19.0 + uglify-js: 3.19.1 has-bigints@1.0.2: {} @@ -15351,8 +14914,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - he@1.2.0: {} - hexoid@1.0.0: {} highlight.js@10.7.3: {} @@ -15386,7 +14947,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -15398,14 +14959,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -15415,7 +14976,7 @@ snapshots: human-signals@7.0.0: {} - husky@9.0.11: {} + husky@9.1.4: {} iconv-lite@0.4.24: dependencies: @@ -15436,12 +14997,12 @@ snapshots: import-from-esm@1.3.4: dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) import-meta-resolve: 4.1.0 transitivePeerDependencies: - supports-color - import-local@3.1.0: + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 @@ -15469,7 +15030,7 @@ snapshots: inline-style-parser@0.2.3: {} - input-otp@1.2.4(react-dom@18.3.1)(react@18.3.1): + input-otp@1.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -15573,7 +15134,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.14.0: + is-core-module@2.15.0: dependencies: hasown: 2.0.2 @@ -15625,8 +15186,6 @@ snapshots: is-plain-obj@1.1.0: {} - is-plain-obj@2.1.0: {} - is-plain-obj@4.1.0: {} is-reference@3.0.2: @@ -15701,8 +15260,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.24.9 - '@babel/parser': 7.24.8 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -15711,8 +15270,8 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.24.9 - '@babel/parser': 7.24.8 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.3 @@ -15727,7 +15286,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -15754,13 +15313,7 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.0.1: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jake@10.9.1: + jake@10.9.2: dependencies: async: 3.2.5 chalk: 4.1.2 @@ -15781,7 +15334,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -15801,16 +15354,35 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.14.11)(ts-node@10.9.2): + jest-cli@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-cli@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -15820,13 +15392,43 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.14.11)(ts-node@10.9.2): + jest-config@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)): + dependencies: + '@babel/core': 7.25.2 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.2) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.7 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.14.13 + ts-node: 10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 - babel-jest: 29.7.0(@babel/core@7.24.9) + babel-jest: 29.7.0(@babel/core@7.25.2) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -15845,7 +15447,9 @@ snapshots: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.14.11)(typescript@5.5.3) + optionalDependencies: + '@types/node': 20.14.13 + ts-node: 10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -15874,7 +15478,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -15884,7 +15488,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.14.11 + '@types/node': 20.14.13 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -15920,20 +15524,20 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.7(jest@29.7.0)(typescript@5.5.3): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)))(typescript@5.3.3): dependencies: - jest: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) - ts-essentials: 10.0.1(typescript@5.5.3) - typescript: 5.5.3 + jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) + ts-essentials: 10.0.1(typescript@5.3.3) + typescript: 5.3.3 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - dependencies: + optionalDependencies: jest-resolve: 29.7.0 jest-regex-util@29.6.3: {} @@ -15964,7 +15568,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -15992,7 +15596,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 chalk: 4.1.2 cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 @@ -16012,15 +15616,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.24.9 - '@babel/generator': 7.24.10 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.9) - '@babel/types': 7.24.9 + '@babel/core': 7.25.2 + '@babel/generator': 7.25.0 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) + '@babel/types': 7.25.2 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.9) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -16038,7 +15642,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -16057,7 +15661,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 20.14.13 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -16066,23 +15670,35 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.13 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.14.11)(ts-node@10.9.2): + jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -16093,13 +15709,11 @@ snapshots: jju@1.4.0: {} - jotai@2.9.0(@types/react@18.3.3)(react@18.3.1): - dependencies: + jotai@2.9.1(@types/react@18.3.3)(react@18.3.1): + optionalDependencies: '@types/react': 18.3.3 react: 18.3.1 - joycon@3.1.1: {} - js-cookie@3.0.5: {} js-tokens@4.0.0: {} @@ -16205,7 +15819,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libphonenumber-js@1.11.4: {} + libphonenumber-js@1.11.5: {} lie@3.1.1: dependencies: @@ -16230,8 +15844,6 @@ snapshots: pify: 3.0.0 strip-bom: 3.0.0 - load-tsconfig@0.2.5: {} - loader-runner@4.3.0: {} localforage@1.10.0: @@ -16277,8 +15889,6 @@ snapshots: lodash.once@4.1.1: {} - lodash.sortby@4.7.0: {} - lodash.uniqby@4.7.0: {} lodash@4.17.21: {} @@ -16302,8 +15912,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.0.0: {} - lru-cache@4.1.5: dependencies: pseudomap: 1.0.2 @@ -16662,7 +16270,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -16688,18 +16296,20 @@ snapshots: million@3.1.11: dependencies: - '@babel/core': 7.24.9 - '@babel/types': 7.24.9 + '@babel/core': 7.25.2 + '@babel/types': 7.25.2 '@rollup/pluginutils': 5.1.0 kleur: 4.1.5 - undici: 6.19.2 - unplugin: 1.11.0 + undici: 6.19.5 + unplugin: 1.12.0 transitivePeerDependencies: - rollup - supports-color mime-db@1.52.0: {} + mime-db@1.53.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 @@ -16726,10 +16336,6 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} - minimatch@10.0.1: - dependencies: - brace-expansion: 2.0.1 - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -16759,7 +16365,7 @@ snapshots: browser-or-node: 2.1.1 buffer-crc32: 1.0.0 eventemitter3: 5.0.1 - fast-xml-parser: 4.4.0 + fast-xml-parser: 4.4.1 ipaddr.js: 2.2.0 lodash: 4.17.21 mime-types: 2.1.35 @@ -16781,29 +16387,6 @@ snapshots: dependencies: obliterator: 2.0.4 - mocha@10.6.0: - dependencies: - ansi-colors: 4.1.3 - browser-stdout: 1.3.1 - chokidar: 3.6.0 - debug: 4.3.5(supports-color@8.1.1) - diff: 5.2.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 8.1.0 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 5.1.6 - ms: 2.1.3 - serialize-javascript: 6.0.2 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 6.5.1 - yargs: 16.2.0 - yargs-parser: 20.2.9 - yargs-unparser: 2.0.0 - moment@2.30.1: {} ms@2.0.0: {} @@ -16844,21 +16427,21 @@ snapshots: nerf-dart@1.0.0: {} - next-themes@0.3.0(react-dom@18.3.1)(react@18.3.1): + next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@13.5.6(@babel/core@7.24.9)(react-dom@18.3.1)(react@18.3.1): + next@13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 13.5.6 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001642 + caniuse-lite: 1.0.30001645 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.24.9)(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.25.2)(react@18.3.1) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 13.5.6 @@ -16914,14 +16497,14 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.17: {} + node-releases@2.0.18: {} nodemailer@6.9.14: {} nodemon@3.1.4: dependencies: chokidar: 3.6.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 @@ -17145,7 +16728,7 @@ snapshots: dependencies: '@babel/code-frame': 7.24.7 index-to-position: 0.1.2 - type-fest: 4.22.0 + type-fest: 4.23.0 parse-ms@4.0.0: {} @@ -17206,11 +16789,6 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-scurry@2.0.0: - dependencies: - lru-cache: 11.0.0 - minipass: 7.1.2 - path-to-regexp@0.1.7: {} path-to-regexp@3.2.0: {} @@ -17248,14 +16826,14 @@ snapshots: pino-std-serializers@7.0.0: {} - pino@9.3.1: + pino@9.3.2: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 pino-abstract-transport: 1.2.0 pino-std-serializers: 7.0.0 - process-warning: 3.0.0 + process-warning: 4.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.3 @@ -17281,37 +16859,29 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.39): + postcss-import@15.1.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 + postcss: 8.4.40 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.39): + postcss-js@4.0.1(postcss@8.4.40): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.39 + postcss: 8.4.40 - postcss-load-config@4.0.2(postcss@8.4.39)(ts-node@10.9.2): + postcss-load-config@4.0.2(postcss@8.4.40)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: lilconfig: 3.1.2 - postcss: 8.4.39 - ts-node: 10.9.2(@types/node@20.14.11)(typescript@5.5.3) - yaml: 2.4.5 - - postcss-load-config@6.0.1: - dependencies: - lilconfig: 3.1.2 - - postcss-load-config@6.0.1(tsx@4.16.2): - dependencies: - lilconfig: 3.1.2 - tsx: 4.16.2 + yaml: 2.5.0 + optionalDependencies: + postcss: 8.4.40 + ts-node: 10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4) - postcss-nested@6.0.1(postcss@8.4.39): + postcss-nested@6.2.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 + postcss: 8.4.40 postcss-selector-parser: 6.1.1 postcss-selector-parser@6.1.1: @@ -17327,7 +16897,7 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 - postcss@8.4.39: + postcss@8.4.40: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -17341,9 +16911,10 @@ snapshots: prettier-plugin-packagejson@2.5.1(prettier@3.3.3): dependencies: - prettier: 3.3.3 sort-package-json: 2.10.0 synckit: 0.9.1 + optionalDependencies: + prettier: 3.3.3 prettier-plugin-tailwindcss@0.5.14(prettier@3.3.3): dependencies: @@ -17357,7 +16928,7 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - pretty-ms@9.0.0: + pretty-ms@9.1.0: dependencies: parse-ms: 4.0.0 @@ -17369,6 +16940,8 @@ snapshots: process-warning@3.0.0: {} + process-warning@4.0.0: {} + process@0.11.10: {} progress@2.0.3: {} @@ -17429,11 +17002,6 @@ snapshots: quick-lru@5.1.1: {} - randexp@0.5.3: - dependencies: - drange: 1.1.1 - ret: 0.2.2 - randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -17466,38 +17034,42 @@ snapshots: react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.3.3 react-remove-scroll@2.5.5(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.3 use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 react-remove-scroll@2.5.7(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.3 use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.3.3 react@18.3.1: dependencies: @@ -17511,7 +17083,7 @@ snapshots: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.22.0 + type-fest: 4.23.0 read-pkg-up@7.0.1: dependencies: @@ -17531,7 +17103,7 @@ snapshots: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 8.1.0 - type-fest: 4.22.0 + type-fest: 4.23.0 unicorn-magic: 0.1.0 readable-stream@2.3.8: @@ -17568,14 +17140,14 @@ snapshots: real-require@0.2.0: {} - redis@4.6.15: + redis@4.7.0: dependencies: - '@redis/bloom': 1.2.0(@redis/client@1.5.17) - '@redis/client': 1.5.17 - '@redis/graph': 1.1.1(@redis/client@1.5.17) - '@redis/json': 1.0.6(@redis/client@1.5.17) - '@redis/search': 1.1.6(@redis/client@1.5.17) - '@redis/time-series': 1.0.5(@redis/client@1.5.17) + '@redis/bloom': 1.2.0(@redis/client@1.6.0) + '@redis/client': 1.6.0 + '@redis/graph': 1.1.1(@redis/client@1.6.0) + '@redis/json': 1.0.7(@redis/client@1.6.0) + '@redis/search': 1.2.0(@redis/client@1.6.0) + '@redis/time-series': 1.1.0(@redis/client@1.6.0) reflect-metadata@0.2.2: {} @@ -17587,7 +17159,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.4 - which-builtin-type: 1.1.3 + which-builtin-type: 1.1.4 regenerate-unicode-properties@10.1.1: dependencies: @@ -17599,7 +17171,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 regexp-tree@0.1.27: {} @@ -17679,18 +17251,18 @@ snapshots: resolve@1.19.0: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.0 path-parse: 1.0.7 resolve@1.22.8: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -17703,8 +17275,6 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - ret@0.2.2: {} - ret@0.4.3: {} reusify@1.0.4: {} @@ -17721,28 +17291,6 @@ snapshots: inherits: 2.0.4 optional: true - rollup@4.18.1: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.1 - '@rollup/rollup-android-arm64': 4.18.1 - '@rollup/rollup-darwin-arm64': 4.18.1 - '@rollup/rollup-darwin-x64': 4.18.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 - '@rollup/rollup-linux-arm-musleabihf': 4.18.1 - '@rollup/rollup-linux-arm64-gnu': 4.18.1 - '@rollup/rollup-linux-arm64-musl': 4.18.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 - '@rollup/rollup-linux-riscv64-gnu': 4.18.1 - '@rollup/rollup-linux-s390x-gnu': 4.18.1 - '@rollup/rollup-linux-x64-gnu': 4.18.1 - '@rollup/rollup-linux-x64-musl': 4.18.1 - '@rollup/rollup-win32-arm64-msvc': 4.18.1 - '@rollup/rollup-win32-ia32-msvc': 4.18.1 - '@rollup/rollup-win32-x64-msvc': 4.18.1 - fsevents: 2.3.3 - run-async@2.4.1: {} run-async@3.0.0: {} @@ -17806,16 +17354,16 @@ snapshots: secure-json-parse@2.7.0: {} - semantic-release@24.0.0(typescript@5.5.3): + semantic-release@24.0.0(typescript@5.5.4): dependencies: - '@semantic-release/commit-analyzer': 13.0.0(semantic-release@24.0.0) + '@semantic-release/commit-analyzer': 13.0.0(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 10.1.0(semantic-release@24.0.0) - '@semantic-release/npm': 12.0.1(semantic-release@24.0.0) - '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.0.0) + '@semantic-release/github': 10.1.3(semantic-release@24.0.0(typescript@5.5.4)) + '@semantic-release/npm': 12.0.1(semantic-release@24.0.0(typescript@5.5.4)) + '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.0.0(typescript@5.5.4)) aggregate-error: 5.0.0 - cosmiconfig: 9.0.0(typescript@5.5.3) - debug: 4.3.5(supports-color@8.1.1) + cosmiconfig: 9.0.0(typescript@5.5.4) + debug: 4.3.6(supports-color@5.5.0) env-ci: 11.0.0 execa: 9.3.0 figures: 6.1.0 @@ -17996,7 +17544,7 @@ snapshots: socket.io-adapter@2.5.5: dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) ws: 8.17.1 transitivePeerDependencies: - bufferutil @@ -18006,7 +17554,7 @@ snapshots: socket.io-client@4.7.5: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) engine.io-client: 6.5.4 socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -18017,7 +17565,7 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -18026,7 +17574,7 @@ snapshots: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) engine.io: 6.5.5 socket.io-adapter: 2.5.5 socket.io-parser: 4.2.4 @@ -18039,7 +17587,7 @@ snapshots: dependencies: atomic-sleep: 1.0.0 - sonner@1.5.0(react-dom@18.3.1)(react@18.3.1): + sonner@1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18081,10 +17629,6 @@ snapshots: source-map@0.7.4: {} - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - space-separated-tokens@2.0.2: {} spawn-error-forwarder@1.0.0: {} @@ -18257,11 +17801,12 @@ snapshots: dependencies: inline-style-parser: 0.2.3 - styled-jsx@5.1.1(@babel/core@7.24.9)(react@18.3.1): + styled-jsx@5.1.1(@babel/core@7.25.2)(react@18.3.1): dependencies: - '@babel/core': 7.24.9 client-only: 0.0.1 react: 18.3.1 + optionalDependencies: + '@babel/core': 7.25.2 sucrase@3.35.0: dependencies: @@ -18282,7 +17827,7 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@5.5.0) fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 @@ -18342,11 +17887,11 @@ snapshots: tailwind-merge@2.4.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.6): + tailwindcss-animate@1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))): dependencies: - tailwindcss: 3.4.6(ts-node@10.9.2) + tailwindcss: 3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) - tailwindcss@3.4.6(ts-node@10.9.2): + tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -18362,11 +17907,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.1 - postcss: 8.4.39 - postcss-import: 15.1.0(postcss@8.4.39) - postcss-js: 4.0.1(postcss@8.4.39) - postcss-load-config: 4.0.2(postcss@8.4.39)(ts-node@10.9.2) - postcss-nested: 6.0.1(postcss@8.4.39) + postcss: 8.4.40 + postcss-import: 15.1.0(postcss@8.4.40) + postcss-js: 4.0.1(postcss@8.4.40) + postcss-load-config: 4.0.2(postcss@8.4.40)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) + postcss-nested: 6.2.0(postcss@8.4.40) postcss-selector-parser: 6.1.1 resolve: 1.22.8 sucrase: 3.35.0 @@ -18384,23 +17929,16 @@ snapshots: type-fest: 2.19.0 unique-string: 3.0.0 - terser-webpack-plugin@5.3.10(webpack@5.92.1): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.31.3 - webpack: 5.92.1 - - terser-webpack-plugin@5.3.10(webpack@5.93.0): + terser-webpack-plugin@5.3.10(@swc/core@1.7.3)(webpack@5.92.1(@swc/core@1.7.3)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.3 - webpack: 5.93.0 + webpack: 5.92.1(@swc/core@1.7.3) + optionalDependencies: + '@swc/core': 1.7.3(@swc/helpers@0.5.2) terser@5.31.3: dependencies: @@ -18471,10 +18009,6 @@ snapshots: tr46@0.0.3: {} - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - traverse@0.6.8: {} tree-kill@1.2.2: {} @@ -18491,63 +18025,109 @@ snapshots: dependencies: typescript: 4.9.5 - ts-api-utils@1.3.0(typescript@5.5.3): + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: - typescript: 5.5.3 + typescript: 5.5.4 - ts-essentials@10.0.1(typescript@5.5.3): - dependencies: - typescript: 5.5.3 + ts-essentials@10.0.1(typescript@5.3.3): + optionalDependencies: + typescript: 5.3.3 ts-interface-checker@0.1.13: {} - ts-jest@29.2.2(@babel/core@7.24.9)(jest@29.7.0)(typescript@5.5.3): + ts-jest@29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)))(typescript@5.3.3): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 5.3.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.25.2 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.2) + + ts-jest@29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@5.5.4): dependencies: - '@babel/core': 7.24.9 bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.11)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.5.3 + typescript: 5.5.4 yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.25.2 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.2) - ts-loader@9.5.1(typescript@5.5.3)(webpack@5.93.0): + ts-loader@9.5.1(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.3)): dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 micromatch: 4.0.7 semver: 7.6.3 source-map: 0.7.4 - typescript: 5.5.3 - webpack: 5.93.0 + typescript: 5.3.3 + webpack: 5.92.1(@swc/core@1.7.3) + + ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.14.13 + acorn: 8.12.1 + acorn-walk: 8.3.3 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.3.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.7.3(@swc/helpers@0.5.2) + optional: true - ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.3): + ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.11 + '@types/node': 20.14.13 acorn: 8.12.1 acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.5.3 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.7.3(@swc/helpers@0.5.2) tsconfig-paths-webpack-plugin@4.1.0: dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 tsconfig-paths: 4.2.0 tsconfig-paths@3.15.0: @@ -18567,67 +18147,11 @@ snapshots: tslib@2.6.3: {} - tsup@8.1.2(@swc/core@1.6.13)(typescript@5.5.3): - dependencies: - '@swc/core': 1.6.13 - bundle-require: 5.0.0(esbuild@0.23.0) - cac: 6.7.14 - chokidar: 3.6.0 - consola: 3.2.3 - debug: 4.3.5(supports-color@5.5.0) - esbuild: 0.23.0 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 6.0.1 - resolve-from: 5.0.0 - rollup: 4.18.1 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tree-kill: 1.2.2 - typescript: 5.5.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - - tsup@8.1.2(tsx@4.16.2)(typescript@5.5.3): - dependencies: - bundle-require: 5.0.0(esbuild@0.23.0) - cac: 6.7.14 - chokidar: 3.6.0 - consola: 3.2.3 - debug: 4.3.5(supports-color@8.1.1) - esbuild: 0.23.0 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 6.0.1(tsx@4.16.2) - resolve-from: 5.0.0 - rollup: 4.18.1 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tree-kill: 1.2.2 - typescript: 5.5.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsutils@3.21.0(typescript@4.9.5): dependencies: tslib: 1.14.1 typescript: 4.9.5 - tsx@4.16.2: - dependencies: - esbuild: 0.21.5 - get-tsconfig: 4.7.5 - optionalDependencies: - fsevents: 2.3.3 - turbo-darwin-64@1.13.4: optional: true @@ -18673,7 +18197,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.22.0: {} + type-fest@4.23.0: {} type-is@1.6.18: dependencies: @@ -18718,9 +18242,9 @@ snapshots: typescript@5.3.3: {} - typescript@5.5.3: {} + typescript@5.5.4: {} - uglify-js@3.19.0: + uglify-js@3.19.1: optional: true uid2@0.0.4: {} @@ -18742,7 +18266,7 @@ snapshots: undici-types@5.26.5: {} - undici@6.19.2: {} + undici@6.19.5: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -18818,7 +18342,7 @@ snapshots: webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 - unplugin@1.11.0: + unplugin@1.12.0: dependencies: acorn: 8.12.1 chokidar: 3.6.0 @@ -18839,16 +18363,18 @@ snapshots: use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 react: 18.3.1 tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.3.3 use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.3 detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.3.3 util-deprecate@1.0.2: {} @@ -18920,8 +18446,6 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@4.0.2: {} - webpack-node-externals@3.0.0: {} webpack-sources@3.2.3: {} @@ -18930,38 +18454,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.92.1: - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.23.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.0 - es-module-lexer: 1.5.4 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.92.1) - watchpack: 2.4.1 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack@5.93.0: + webpack@5.92.1(@swc/core@1.7.3): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 @@ -18972,7 +18465,7 @@ snapshots: acorn-import-attributes: 1.9.5(acorn@8.12.1) browserslist: 4.23.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 @@ -18984,7 +18477,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.93.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.3)(webpack@5.92.1(@swc/core@1.7.3)) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -18997,12 +18490,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -19011,7 +18498,7 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 - which-builtin-type@1.1.3: + which-builtin-type@1.1.4: dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 @@ -19053,8 +18540,6 @@ snapshots: wordwrap@1.0.0: {} - workerpool@6.5.1: {} - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -19103,19 +18588,12 @@ snapshots: yallist@4.0.0: {} - yaml@2.4.5: {} + yaml@2.5.0: {} yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} - yargs-unparser@2.0.0: - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - yargs@16.2.0: dependencies: cliui: 7.0.4