From c957ed6a1dc7185263bae5e8a729b6d709a1e4e8 Mon Sep 17 00:00:00 2001 From: Moroine Date: Mon, 23 Oct 2023 12:11:09 +0200 Subject: [PATCH 01/15] feat: stack upgrade --- .bin/scripts/build-images.sh | 6 +- .bin/scripts/buildkitd.toml | 7 + .bin/scripts/seed-update.sh | 2 + .bin/scripts/setup-local-env.sh | 6 + .dockerignore | 10 +- .github/workflows/deploy_preview.yml | 138 ++++++++++++++++++ .github/workflows/gitguardian.yml | 21 +++ .github/workflows/merge_queue.yml | 10 ++ .github/workflows/release.yml | 4 +- .infra/ansible/tasks/preview_pr.yml | 14 +- .infra/docker-compose.preview-system.yml | 2 +- .infra/docker-compose.preview.yml | 2 +- .infra/docker-compose.production.yml | 10 +- .infra/docker-compose.recette.yml | 5 +- .infra/files/scripts/cli.sh | 5 + .prettierignore | 1 + .talismanrc | 4 + Dockerfile | 23 +-- package.json | 17 ++- release.config.js | 2 +- server/package.json | 12 +- server/src/commands.ts | 4 +- server/src/common/actions/job.actions.ts | 89 ++++++++--- server/src/common/model/job.model.ts | 56 ++++++- .../migrations/20231023100539-clear-jobs.ts | 5 + server/src/jobs/crons_actions.ts | 45 ++++-- server/src/jobs/jobs.ts | 33 +++-- server/src/jobs/jobs_actions.ts | 29 ++-- server/tests/jobs/jobs_actions.test.ts | 8 +- server/tsconfig.json | 10 +- server/tsup.config.ts | 11 +- shared/package.json | 1 + shared/tsconfig.json | 10 +- ui/config.public.ts | 21 +-- ui/next.config.js | 2 +- ui/sentry.client.config.ts | 5 +- ui/sentry.edge.config.ts | 4 +- ui/sentry.server.config.ts | 4 +- ui/tsconfig.json | 4 +- yarn.lock | 12 ++ 40 files changed, 498 insertions(+), 156 deletions(-) create mode 100644 .bin/scripts/buildkitd.toml create mode 100644 .github/workflows/deploy_preview.yml create mode 100644 .github/workflows/gitguardian.yml create mode 100644 .github/workflows/merge_queue.yml create mode 100755 .infra/files/scripts/cli.sh create mode 100644 server/src/db/migrations/20231023100539-clear-jobs.ts diff --git a/.bin/scripts/build-images.sh b/.bin/scripts/build-images.sh index cedefda2d..14ad780dc 100755 --- a/.bin/scripts/build-images.sh +++ b/.bin/scripts/build-images.sh @@ -24,7 +24,7 @@ if [[ $# == "0" ]]; then fi; set +e -docker buildx create --name mna --driver docker-container --bootstrap --use 2> /dev/null +docker buildx create --name mna-tdb --driver docker-container --config "$SCRIPT_DIR/buildkitd.toml" 2> /dev/null set -e if [[ ! -z "${CI:-}" ]]; then @@ -36,4 +36,6 @@ fi export CHANNEL=$(get_channel $VERSION) # "$@" is the list of environements -docker buildx bake --builder mna --${mode} "$@" +docker buildx bake --builder mna-tdb --${mode} "$@" +docker builder prune --builder mna-tdb --keep-storage 20GB --force +docker buildx stop --builder mna-tdb diff --git a/.bin/scripts/buildkitd.toml b/.bin/scripts/buildkitd.toml new file mode 100644 index 000000000..ae44e38aa --- /dev/null +++ b/.bin/scripts/buildkitd.toml @@ -0,0 +1,7 @@ +[worker.oci] + max-parallelism = 2 + +[[worker.oci.gcpolicy]] + all = true + keepBytes = "20GB" + keepDuration = "72h" diff --git a/.bin/scripts/seed-update.sh b/.bin/scripts/seed-update.sh index 3b216e3b8..90e6ca408 100755 --- a/.bin/scripts/seed-update.sh +++ b/.bin/scripts/seed-update.sh @@ -9,6 +9,8 @@ else shift fi +echo "base de donnée cible: $TARGET_DB" + read -p "La base de donnée contient-elle des données sensible ? [Y/n]: " response case $response in [nN][oO]|[nN]) diff --git a/.bin/scripts/setup-local-env.sh b/.bin/scripts/setup-local-env.sh index 0ccf354ab..38052c664 100755 --- a/.bin/scripts/setup-local-env.sh +++ b/.bin/scripts/setup-local-env.sh @@ -10,6 +10,12 @@ ANSIBLE_CONFIG="${ROOT_DIR}/.infra/ansible/ansible.cfg" ansible all \ --extra-vars "@${ROOT_DIR}/.infra/vault/vault.yml" \ --vault-password-file="${SCRIPT_DIR}/get-vault-password-client.sh" +echo "PUBLIC_VERSION=0.0.0-local" >> "${ROOT_DIR}/server/.env" + echo "NEXT_PUBLIC_ENV=local" >> "${ROOT_DIR}/ui/.env" echo "NEXT_PUBLIC_VERSION=0.0.0-local" >> "${ROOT_DIR}/ui/.env" echo "NEXT_PUBLIC_API_PORT=5001" >> "${ROOT_DIR}/ui/.env" + +yarn build:dev +yarn cli migrations:up +yarn cli indexes:create diff --git a/.dockerignore b/.dockerignore index 30b260e8f..761c1851c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,14 +1,18 @@ * -!/server -/server/.env -/server/.env.local +!/server/src +!/server/static +!/server/package.json +!/server/tsconfig.json +!/server/tsoa.json +!/server/tsup.config.ts !/shared !/ui /ui/.env /ui/.next +/ui/.eslintrc.js !/package.json !/.yarn/cache diff --git a/.github/workflows/deploy_preview.yml b/.github/workflows/deploy_preview.yml new file mode 100644 index 000000000..66e5910ed --- /dev/null +++ b/.github/workflows/deploy_preview.yml @@ -0,0 +1,138 @@ +name: Deploy Preview +on: + issue_comment: + types: [created] + +jobs: + debug: + runs-on: ubuntu-latest + steps: + - uses: hmarr/debug-action@v2 + + deploy_preview: + if: github.event.comment.body == ':rocket:' && github.event.issue.pull_request + concurrency: + group: ${{ github.workflow }}-${{ github.event.issue.id }} + cancel-in-progress: true + name: Deploy Preview ${{ github.event.issue.number }} + runs-on: ubuntu-latest + steps: + - name: React to comment + uses: dkershner6/reaction-action@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commentId: ${{ github.event.comment.id }} + reaction: "+1" + + - id: "get-branch" + run: echo "branch=$(gh pr view $PR_NO --repo $REPO --json headRefName --jq '.headRefName')" >> $GITHUB_OUTPUT + env: + REPO: ${{ github.repository }} + PR_NO: ${{ github.event.issue.number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ steps.get-branch.outputs.branch }} + + - name: Create LFS file list + run: git lfs ls-files --long | cut -d ' ' -f1 | sort > .lfs-assets-id + + - name: LFS Cache + uses: actions/cache@v3 + with: + path: .git/lfs/objects + key: ${{ runner.os }}-lfs-${{ hashFiles('.lfs-assets-id') }} + restore-keys: | + ${{ runner.os }}-lfs- + + - name: Git LFS Pull + run: git lfs pull + + - name: Install SSH key + uses: shimataro/ssh-key-action@v2 + with: + name: github_actions + key: ${{ secrets.DEPLOY_SSH_PRIVATE_KEY }} + known_hosts: ${{ vars.SSH_KNOWN_HOSTS }} + config: | + Host * + IdentityFile ~/.ssh/github_actions + + - name: Create vault pwd file + run: echo ${{ secrets.VAULT_PWD }} > .infra/.vault_pwd.txt + + - name: Install jmespath + run: | + sudo pipx inject ansible-core jmespath + + - name: Run playbook + run: .bin/mna-lba deploy preview "${{ github.event.issue.number }}" + env: + ANSIBLE_VAULT_PASSWORD_FILE: .infra/.vault_pwd.txt + ANSIBLE_REMOTE_USER: deploy + ANSIBLE_BECOME_PASS: ${{ secrets.DEPLOY_PASS }} + + - name: Encrypt Error log on failure + run: .bin/mna-lba deploy:log:encrypt + if: failure() + env: + ANSIBLE_VAULT_PASSWORD_FILE: .infra/.vault_pwd.txt + + - name: Upload failure artifacts on failure + if: failure() + uses: actions/upload-artifact@v3 + with: + name: error-logs + path: /tmp/deploy_error.log.gpg + + - name: Preview Summary when failed + if: failure() + run: echo 'You can get error logs using `.bin/mna-lba deploy:log:decrypt ${{ github.run_id }}`' >> $GITHUB_STEP_SUMMARY + + - name: Preview Summary + run: echo 'https://${{ github.event.issue.number }}.labonnealternance-preview.apprentissage.beta.gouv.fr/ 🚀' >> $GITHUB_STEP_SUMMARY + + - name: Comment PR Preview + if: github.event.issue.state != 'closed' + uses: thollander/actions-comment-pull-request@v2 + with: + message: | + ### :rocket: Prévisualisation + https://${{ github.event.issue.number }}.labonnealternance-preview.apprentissage.beta.gouv.fr/ + + To re-deploy just add a comment with :rocket: + comment_tag: deployment + mode: recreate + pr_number: ${{ github.event.issue.number }} + + - name: Comment PR Preview when failed + if: failure() && github.event.issue.state != 'closed' + uses: thollander/actions-comment-pull-request@v2 + with: + message: | + ### :ambulance: Prévisualisation failed + + https://${{ github.event.issue.number }}.labonnealternance-preview.apprentissage.beta.gouv.fr/ + + You can get error logs using `.bin/mna-lba deploy:log:decrypt ${{ github.run_id }}` + + To re-deploy just add a comment with :rocket: + comment_tag: deployment + mode: recreate + pr_number: ${{ github.event.issue.number }} + + - name: Comment PR Preview when cancelled + if: cancelled() && github.event.issue.state != 'closed' + uses: thollander/actions-comment-pull-request@v2 + with: + message: | + ### :ambulance: Prévisualisation cancelled + + https://${{ github.event.issue.number }}.labonnealternance-preview.apprentissage.beta.gouv.fr/ + + To re-deploy just add a comment with :rocket: + comment_tag: deployment + mode: recreate + pr_number: ${{ github.event.issue.number }} diff --git a/.github/workflows/gitguardian.yml b/.github/workflows/gitguardian.yml new file mode 100644 index 000000000..de2c1838d --- /dev/null +++ b/.github/workflows/gitguardian.yml @@ -0,0 +1,21 @@ +name: GitGuardian scan + +on: [push, pull_request] + +jobs: + scanning: + name: GitGuardian scan + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 # fetch all history so multiple commits can be scanned + - name: GitGuardian scan + uses: GitGuardian/ggshield-action@v1.16.0 + env: + GITHUB_PUSH_BEFORE_SHA: ${{ github.event.before }} + GITHUB_PUSH_BASE_SHA: ${{ github.event.base }} + GITHUB_PULL_BASE_SHA: ${{ github.event.pull_request.base.sha }} + GITHUB_DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} + GITGUARDIAN_API_KEY: ${{ secrets.GITGUARDIAN_API_KEY }} diff --git a/.github/workflows/merge_queue.yml b/.github/workflows/merge_queue.yml new file mode 100644 index 000000000..d0cde7c1d --- /dev/null +++ b/.github/workflows/merge_queue.yml @@ -0,0 +1,10 @@ +name: Merge Queue +on: + merge_group: + types: [checks_requested] + +jobs: + tests: + uses: "./.github/workflows/ci.yml" + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b54cb1d05..b59f6ee3d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,6 +10,8 @@ jobs: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} release: + concurrency: + group: "release-${{ github.workflow }}-${{ github.ref }}" permissions: write-all outputs: VERSION: ${{ steps.get-version.outputs.VERSION }} @@ -66,7 +68,7 @@ jobs: deploy: concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: "deploy-${{ github.workflow }}-${{ github.ref }}" needs: ["release"] name: Deploy ${{ needs.release.outputs.VERSION }} on recette uses: "./.github/workflows/_deploy.yml" diff --git a/.infra/ansible/tasks/preview_pr.yml b/.infra/ansible/tasks/preview_pr.yml index f9d53f75b..1956dfd76 100644 --- a/.infra/ansible/tasks/preview_pr.yml +++ b/.infra/ansible/tasks/preview_pr.yml @@ -68,7 +68,7 @@ - name: "[{{ pr_number }}] Build local images 0.0.0-{{ pr_number }}" shell: - cmd: ".bin/mna-tdb preview:build 0.0.0-{{ pr_number }} load preview" + cmd: "flock --verbose --close /tmp/deployment_build.lock .bin/mna-tdb preview:build 0.0.0-{{ pr_number }} load preview" chdir: "/opt/app/projects/{{ pr_number }}/repository" async: 900 # max 15 minutes poll: 15 # check every 15s @@ -83,16 +83,18 @@ chdir: /opt/app cmd: docker exec nginx-proxy-acme /app/force_renew + - name: "[{{ pr_number }}] Seed database" + shell: + chdir: "/opt/app" + cmd: "flock --verbose --close /tmp/deployment_seed.lock /opt/app/scripts/seed.sh preview_{{ pr_number | default('00') }}" + async: 900 # max 15 minutes + poll: 15 # check every 15s + - name: "[{{ pr_number }}] Execute MongoDB migrations" shell: chdir: "/opt/app/projects/{{ pr_number }}" cmd: "docker compose run --rm server yarn cli migrations:up" - - name: "[{{ pr_number }}] Seed database" - shell: - chdir: "/opt/app" - cmd: "/opt/app/scripts/seed.sh preview_{{ pr_number | default('00') }}" - - name: "[{{ pr_number }}] Preview URL" debug: msg: "{{ vault[env_type].MNA_TDB_PUBLIC_URL }}" diff --git a/.infra/docker-compose.preview-system.yml b/.infra/docker-compose.preview-system.yml index 28f8b2ef9..332a7117a 100644 --- a/.infra/docker-compose.preview-system.yml +++ b/.infra/docker-compose.preview-system.yml @@ -91,7 +91,7 @@ services: - /opt/app/configs/mailpit/auth:/auth environment: - MP_DATA_FILE=/data/mailpit.db - - MP_UI_AUTH_FILE=/auth/auth + - MP_UI_AUTH_FILE=/auth - VIRTUAL_HOST=smtp.{{dns_name}} - VIRTUAL_PATH=/ - VIRTUAL_PORT=8025 diff --git a/.infra/docker-compose.preview.yml b/.infra/docker-compose.preview.yml index 82e8c19f6..88739f791 100644 --- a/.infra/docker-compose.preview.yml +++ b/.infra/docker-compose.preview.yml @@ -4,7 +4,7 @@ x-default: &default deploy: resources: limits: - memory: 256m + memory: 2g restart: always networks: - mna_network diff --git a/.infra/docker-compose.production.yml b/.infra/docker-compose.production.yml index ae9427cb0..490c5efa6 100644 --- a/.infra/docker-compose.production.yml +++ b/.infra/docker-compose.production.yml @@ -9,9 +9,11 @@ x-deploy-default: &deploy-default parallelism: 1 delay: 10s rollback_config: - parallelism: 0 + parallelism: 1 + delay: 10s restart_policy: window: 360s + delay: 30s # Max 24hours max_attempts: 240 @@ -27,7 +29,7 @@ services: <<: *deploy-default resources: limits: - memory: 1g + memory: 2g replicas: 2 env_file: .env_server volumes: @@ -52,7 +54,7 @@ services: <<: *deploy-default resources: limits: - memory: 1g + memory: 2g command: ["yarn", "cli", "queue_processor:start"] env_file: .env_server volumes: @@ -71,7 +73,7 @@ services: <<: *deploy-default resources: limits: - memory: 1g + memory: 2g command: ["yarn", "cli", "job_processor:start"] env_file: .env_server volumes: diff --git a/.infra/docker-compose.recette.yml b/.infra/docker-compose.recette.yml index b79369e97..665a9dc87 100644 --- a/.infra/docker-compose.recette.yml +++ b/.infra/docker-compose.recette.yml @@ -9,8 +9,11 @@ services: memory: 128m update_config: failure_action: rollback + parallelism: 1 + delay: 10s rollback_config: - parallelism: 0 + parallelism: 1 + delay: 10s restart_policy: window: 360s # Max 24hours diff --git a/.infra/files/scripts/cli.sh b/.infra/files/scripts/cli.sh new file mode 100755 index 000000000..f286141d4 --- /dev/null +++ b/.infra/files/scripts/cli.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail +#Needs to be run as sudo + +docker compose run --rm --no-deps server yarn cli "$@" diff --git a/.prettierignore b/.prettierignore index 7edff856e..79f80ccb7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,3 @@ .yarn .talismanrc +.infra/files/configs/mongodb/seed.gpg diff --git a/.talismanrc b/.talismanrc index 87adb07be..be9f68fa3 100644 --- a/.talismanrc +++ b/.talismanrc @@ -13,6 +13,10 @@ fileignoreconfig: checksum: 920950cddadd6683cfeb4b678051e935d9e9bdf62a557a9119b45a2e03cf155f - filename: .github/workflows/ci.yml checksum: 9e279ec421f82277240a958eec081cdb098a7e602bfd41e023013362ad365cfb +- filename: .github/workflows/deploy_preview.yml + checksum: 461208e3c293062c405f4dacdda6bf3b87153cb43da80698f7c97a4be76375f0 +- filename: .github/workflows/gitguardian.yml + checksum: 6570536d75569b3826026d9126cff26fc4de473afbab8adbfc9fab833362fb79 - filename: .github/workflows/preview.yml checksum: dbe369785961ffb27ed90dbdd9842d14cedc621a2d32f430710515457b05fa51 - filename: .github/workflows/preview_cleanup.yml diff --git a/Dockerfile b/Dockerfile index 98f3b13e6..e733eea6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ COPY ui/package.json ui/package.json COPY server/package.json server/package.json COPY shared/package.json shared/package.json -RUN yarn install --immutable +RUN --mount=type=cache,target=/app/.yarn/cache yarn install --immutable FROM builder_root as root WORKDIR /app @@ -27,14 +27,12 @@ COPY ./shared ./shared RUN yarn --cwd server build # Removing dev dependencies -RUN yarn workspaces focus --all --production -# Cache is not needed anymore -RUN rm -rf .yarn/cache +RUN --mount=type=cache,target=/app/.yarn/cache yarn workspaces focus --all --production # Production image, copy all the files and run next FROM node:20-alpine AS server WORKDIR /app -RUN apk add --update \ +RUN --mount=type=cache,target=/var/cache/apk apk add --update \ curl \ && rm -rf /var/cache/apk/* @@ -73,8 +71,7 @@ ARG PUBLIC_ENV ENV NEXT_PUBLIC_ENV=$PUBLIC_ENV RUN yarn --cwd ui build -# Cache is not needed anymore -RUN rm -rf .yarn/cache +# RUN --mount=type=cache,target=/app/ui/.next/cache yarn --cwd ui build # Production image, copy all the files and run next FROM node:20-alpine AS ui @@ -84,13 +81,19 @@ ENV NODE_ENV production # Uncomment the following line in case you want to disable telemetry during runtime. ENV NEXT_TELEMETRY_DISABLED 1 +ARG PUBLIC_VERSION +ENV NEXT_PUBLIC_VERSION=$PUBLIC_VERSION + +ARG PUBLIC_ENV +ENV NEXT_PUBLIC_ENV=$PUBLIC_ENV + RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs # You only need to copy next.config.js if you are NOT using the default configuration -COPY --from=builder_ui /app/ui/next.config.js /app/ -COPY --from=builder_ui /app/ui/public /app/ui/public -COPY --from=builder_ui /app/ui/package.json /app/ui/package.json +COPY --from=builder_ui --chown=nextjs:nodejs /app/ui/next.config.js /app/ +COPY --from=builder_ui --chown=nextjs:nodejs /app/ui/public /app/ui/public +COPY --from=builder_ui --chown=nextjs:nodejs /app/ui/package.json /app/ui/package.json # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing diff --git a/package.json b/package.json index 79fe63e48..76ba1fc00 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,16 @@ "author": "MNA", "license": "MIT", "private": true, + "packageManager": "yarn@3.6.1", "engines": { "node": ">=20", "npm": "please-use-yarn" }, + "workspaces": [ + "ui", + "server", + "shared" + ], "scripts": { "setup": ".bin/mna-tdb init:env", "dev": "yarn services:start; yarn foreach:parallel run dev", @@ -26,12 +32,13 @@ "services:stop": "docker compose down", "services:clean": "yarn services:stop; docker system prune --volumes", "seed:update": "./.bin/mna-tdb seed:update", - "lint": "eslint --ignore-path .gitignore --cache .", + "lint": "eslint --ignore-path .gitignore --cache --ext .js,.jsx,.ts,.tsx .", + "lint:fix": "yarn lint --fix", "prettier:fix": "prettier --write -u .", "prettier:check": "prettier --check -u .", "release": "semantic-release", "release:interactive": "./.bin/mna-tdb release:interactive", - "prepare": "husky install", + "postinstall": "husky install", "talisman:add-exception": "yarn node-talisman --githook pre-commit -i", "test": "cross-env NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest", "test:ci": "yarn test --ci -w 2", @@ -43,11 +50,6 @@ "foreach:parallel": "yarn foreach:seq -pi", "foreach:ci": "yarn foreach:seq -p" }, - "workspaces": [ - "ui", - "server", - "shared" - ], "devDependencies": { "@commitlint/cli": "^17.7.1", "@commitlint/config-conventional": "^17.7.0", @@ -94,7 +96,6 @@ "prettier --write -u" ] }, - "packageManager": "yarn@3.6.1", "resolutions": { "zod@3.21.4": "patch:zod@npm%3A3.21.4#./.yarn/patches/zod-npm-3.21.4-9f570b215c.patch" } diff --git a/release.config.js b/release.config.js index c2e3fc01d..2f2cb80f1 100644 --- a/release.config.js +++ b/release.config.js @@ -1,5 +1,5 @@ module.exports = { - branches: ["master", { name: "next", channel: "next", prerelease: "rc" }], + branches: ["master", { name: "hotfix", channel: "hotfix", prerelease: "hotfix" }], repositoryUrl: "https://github.com/mission-apprentissage/flux-retour-cfas.git", plugins: [ "@semantic-release/commit-analyzer", diff --git a/server/package.json b/server/package.json index 65ee53be6..155dcb3af 100644 --- a/server/package.json +++ b/server/package.json @@ -6,12 +6,16 @@ "author": "MNA", "license": "MIT", "type": "module", + "engines": { + "node": ">=20", + "npm": "please-use-yarn" + }, "scripts": { "cli": "node dist/index.js", + "build:dev": "tsup-node", + "dev": "tsup-node --env.TSUP_WATCH true", "init:dev": "yarn cli init:dev", - "dev": "tsup-node --watch", "build": "tsup-node --env.NODE_ENV production", - "build:dev": "tsup-node", "typecheck": "tsc --noEmit" }, "dependencies": { @@ -100,10 +104,6 @@ "zod-express-middleware": "1.4.0", "zod-to-json-schema": "3.21.4" }, - "engines": { - "node": ">=20", - "npm": "please-use-yarn" - }, "prettier": { "printWidth": 120, "bracketSpacing": true, diff --git a/server/src/commands.ts b/server/src/commands.ts index adc70855c..22ba76afc 100644 --- a/server/src/commands.ts +++ b/server/src/commands.ts @@ -18,10 +18,11 @@ import { updateUserPassword } from "./jobs/users/update-user-password"; async function startJobProcessor(signal: AbortSignal) { logger.info(`Process jobs queue - start`); - if (config.env !== "local") { + if (config.env !== "local" && config.env !== "preview") { await addJob({ name: "crons:init", queued: true, + payload: {}, }); } @@ -60,6 +61,7 @@ program .configureHelp({ sortSubcommands: true, }) + .showSuggestionAfterError() .hook("preAction", (_, actionCommand) => { const command = actionCommand.name(); // on définit le module du logger en global pour distinguer les logs des jobs diff --git a/server/src/common/actions/job.actions.ts b/server/src/common/actions/job.actions.ts index 1110a6597..51c0ccfa0 100644 --- a/server/src/common/actions/job.actions.ts +++ b/server/src/common/actions/job.actions.ts @@ -1,48 +1,97 @@ -import { Filter, FindOptions, MatchKeysAndValues, ObjectId, WithoutId } from "mongodb"; +import Boom from "boom"; +import { MatchKeysAndValues, ObjectId, FindOptions, Filter } from "mongodb"; import { jobsDb } from "../model/collections"; -import { IJob } from "../model/job.model"; -import { getDbCollection } from "../mongodb"; +import { IJob, IJobsCron, IJobsCronTask, IJobsSimple } from "../model/job.model"; -type CreateJobParam = Pick; +type CreateJobSimpleParams = Pick; -/** - * Création d'un job - */ -export const createJob = async ({ +export const createJobSimple = async ({ name, - type = "simple", payload, scheduled_for = new Date(), sync = false, +}: CreateJobSimpleParams): Promise => { + const job: IJobsSimple = { + _id: new ObjectId(), + name, + type: "simple", + status: sync ? "will_start" : "pending", + payload, + updated_at: new Date(), + created_at: new Date(), + scheduled_for, + sync, + }; + await jobsDb().insertOne(job); + return job; +}; + +type CreateJobCronParams = Pick; + +export const createJobCron = async ({ + name, cron_string, -}: CreateJobParam): Promise => { - const job: WithoutId = { + scheduled_for = new Date(), + sync = false, +}: CreateJobCronParams): Promise => { + const job: IJobsCron = { + _id: new ObjectId(), name, - type, + type: "cron", status: sync ? "will_start" : "pending", - ...(payload ? { payload } : {}), - ...(cron_string ? { cron_string } : {}), + cron_string, updated_at: new Date(), created_at: new Date(), scheduled_for, sync, }; - const { insertedId: _id } = await getDbCollection("jobs").insertOne(job); - return { ...job, _id }; + await jobsDb().insertOne(job); + return job; +}; + +export const updateJobCron = async (id: ObjectId, cron_string: IJobsCron["cron_string"]): Promise => { + const data = { + status: "pending", + cron_string, + updated_at: new Date(), + }; + const job = await jobsDb().findOneAndUpdate(id, data, { returnDocument: "after" }); + if (!job.value || job.value.type !== "cron") { + throw Boom.internal("Not found"); + } + return job.value; +}; + +type CreateJobCronTaskParams = Pick; + +export const createJobCronTask = async ({ name, scheduled_for }: CreateJobCronTaskParams): Promise => { + const job: IJobsCronTask = { + _id: new ObjectId(), + name, + type: "cron_task", + status: "pending", + updated_at: new Date(), + created_at: new Date(), + scheduled_for, + sync: false, + }; + await jobsDb().insertOne(job); + return job; }; -export const findJob = async (filter: Filter, options?: FindOptions): Promise => { +export const findJob = async (filter: Filter, options?: FindOptions): Promise => { return await jobsDb().findOne(filter, options); }; -export const findJobs = async (filter: Filter, options?: FindOptions): Promise => { - return await jobsDb().find(filter, options).toArray(); +export const findJobs = async (filter: Filter, options?: FindOptions): Promise => { + // @ts-expect-error + return await jobsDb().find(filter, options).toArray(); }; /** * Mise à jour d'un job */ export const updateJob = async (_id: ObjectId, data: MatchKeysAndValues) => { - return getDbCollection("jobs").updateOne({ _id }, { $set: { ...data, updated_at: new Date() } }); + return jobsDb().updateOne({ _id }, { $set: { ...data, updated_at: new Date() } }); }; diff --git a/server/src/common/model/job.model.ts b/server/src/common/model/job.model.ts index 2ac2005f3..c9fd193d8 100644 --- a/server/src/common/model/job.model.ts +++ b/server/src/common/model/job.model.ts @@ -1,6 +1,8 @@ import { Jsonify } from "type-fest"; import { z } from "zod"; +import { CronName, CronsMap } from "@/jobs/jobs"; + import { IModelDescriptor, zObjectId } from "./common"; const collectionName = "jobs" as const; @@ -11,29 +13,71 @@ const indexes: IModelDescriptor["indexes"] = [ [{ ended_at: 1 }, { expireAfterSeconds: 3600 * 24 * 90 }], // 3 mois ]; -export const ZJob = z +export const ZJobSimple = z .object({ _id: zObjectId, name: z.string().describe("Le nom de la tâche"), - type: z.enum(["simple", "cron", "cron_task"]).describe("Type du job simple ou cron"), + type: z.literal("simple"), status: z .enum(["pending", "will_start", "running", "finished", "blocked", "errored"]) .describe("Statut courant du job"), - sync: z.boolean().optional().describe("Si le job est synchrone"), + sync: z.boolean().describe("Si le job est synchrone"), payload: z.record(z.unknown()).optional().describe("La donnée liéé à la tâche"), output: z.record(z.unknown()).optional().describe("Les valeurs de retours du job"), - cron_string: z.string().optional().describe("standard cron string exemple: '*/2 * * * *'"), scheduled_for: z.date().describe("Date de lancement programmée"), started_at: z.date().optional().describe("Date de lancement"), ended_at: z.date().optional().describe("Date de fin d'execution"), - updated_at: z.date().optional().describe("Date de mise à jour en base de données"), - created_at: z.date().optional().describe("Date d'ajout en base de données"), + updated_at: z.date().describe("Date de mise à jour en base de données"), + created_at: z.date().describe("Date d'ajout en base de données"), + }) + .strict(); + +export const ZJobCron = z + .object({ + _id: zObjectId, + name: z + .enum>(Object.keys(CronsMap) as any) + .describe("Le nom de la tâche"), + type: z.literal("cron"), + status: z + .enum(["pending", "will_start", "running", "finished", "blocked", "errored"]) + .describe("Statut courant du job"), + sync: z.boolean().describe("Si le job est synchrone"), + cron_string: z.string().describe("standard cron string exemple: '*/2 * * * *'"), + scheduled_for: z.date().describe("Date de lancement programmée"), + updated_at: z.date().describe("Date de mise à jour en base de données"), + created_at: z.date().describe("Date d'ajout en base de données"), }) .strict(); +export const ZJobCronTask = z + .object({ + _id: zObjectId, + name: z + .enum>(Object.keys(CronsMap) as any) + .describe("Le nom de la tâche"), + type: z.literal("cron_task"), + status: z + .enum(["pending", "will_start", "running", "finished", "blocked", "errored"]) + .describe("Statut courant du job"), + sync: z.boolean().describe("Si le job est synchrone"), + scheduled_for: z.date().describe("Date de lancement programmée"), + started_at: z.date().optional().describe("Date de lancement"), + ended_at: z.date().optional().describe("Date de fin d'execution"), + updated_at: z.date().describe("Date de mise à jour en base de données"), + created_at: z.date().describe("Date d'ajout en base de données"), + }) + .strict(); + +const ZJob = z.discriminatedUnion("type", [ZJobSimple, ZJobCron, ZJobCronTask]); + export type IJob = z.output; export type IJobJson = Jsonify>; +export type IJobsSimple = z.output; +export type IJobsCron = z.output; +export type IJobsCronTask = z.output; + export default { zod: ZJob, indexes, diff --git a/server/src/db/migrations/20231023100539-clear-jobs.ts b/server/src/db/migrations/20231023100539-clear-jobs.ts new file mode 100644 index 000000000..9b9921c3b --- /dev/null +++ b/server/src/db/migrations/20231023100539-clear-jobs.ts @@ -0,0 +1,5 @@ +import { Db } from "mongodb"; + +export const up = async (db: Db) => { + await db.collection("jobs").deleteMany({}); +}; diff --git a/server/src/jobs/crons_actions.ts b/server/src/jobs/crons_actions.ts index 16cc3d781..8cd06ed10 100644 --- a/server/src/jobs/crons_actions.ts +++ b/server/src/jobs/crons_actions.ts @@ -1,9 +1,19 @@ import cronParser from "cron-parser"; import logger from "@/common/logger"; +import { IJobsCron } from "@/common/model/job.model"; import { getDbCollection } from "@/common/mongodb"; - -import { createJob, findJob, findJobs, updateJob } from "../common/actions/job.actions"; +import config from "@/config"; + +import { + createJobCron, + createJobCronTask, + createJobSimple, + findJob, + findJobs, + updateJob, + updateJobCron, +} from "../common/actions/job.actions"; import { CRONS } from "./jobs"; import { addJob } from "./jobs_actions"; @@ -16,6 +26,10 @@ function parseCronString(cronString: string, options: { currentDate: string } | } export async function cronsInit() { + if (config.env === "preview") { + return; + } + logger.info(`Crons - initialise crons in DB`); const crons = Object.values(CRONS); @@ -27,7 +41,7 @@ export async function cronsInit() { }); await getDbCollection("jobs").deleteMany({ name: { $nin: crons.map((c) => c.name) }, - status: "pending", + status: { $in: ["pending", "will_start"] }, type: "cron_task", }); @@ -38,30 +52,33 @@ export async function cronsInit() { }); if (!cronJob) { - await createJob({ + await createJobCron({ name: cron.name, - type: "cron", cron_string: cron.cron_string, scheduled_for: new Date(), + sync: true, }); schedulerRequired = true; - } else if (cronJob.cron_string !== cron.cron_string) { - await updateJob(cronJob._id, { - cron_string: cron.cron_string, + } else if (cronJob.type === "cron" && cronJob.cron_string !== cron.cron_string) { + await updateJobCron(cronJob._id, cron.cron_string); + await getDbCollection("jobs").deleteMany({ + name: cronJob.name, + status: { $in: ["pending", "will_start"] }, + type: "cron_task", }); schedulerRequired = true; } } if (schedulerRequired) { - await addJob({ name: "crons:scheduler", queued: true }); + await addJob({ name: "crons:scheduler", queued: true, payload: {} }); } } export async function cronsScheduler(): Promise { logger.info(`Crons - Check and run crons`); - const crons = await findJobs( + const crons = await findJobs( { type: "cron", scheduled_for: { $lte: new Date() }, @@ -73,8 +90,7 @@ export async function cronsScheduler(): Promise { const next = parseCronString(cron.cron_string ?? "", { currentDate: cron.scheduled_for, }).next(); - await createJob({ - type: "cron_task", + await createJobCronTask({ name: cron.name, scheduled_for: next.toDate(), }); @@ -93,9 +109,10 @@ export async function cronsScheduler(): Promise { if (!cron) return; cron.scheduled_for.setSeconds(cron.scheduled_for.getSeconds() + 1); // add DELTA of 1 sec - await createJob({ - type: "simple", + await createJobSimple({ name: "crons:scheduler", scheduled_for: cron.scheduled_for, + sync: false, + payload: {}, }); } diff --git a/server/src/jobs/jobs.ts b/server/src/jobs/jobs.ts index 6e21abb6f..4e6bcf9d9 100644 --- a/server/src/jobs/jobs.ts +++ b/server/src/jobs/jobs.ts @@ -1,5 +1,5 @@ import logger from "@/common/logger"; -import { IJob } from "@/common/model/job.model"; +import { IJobsCronTask, IJobsSimple } from "@/common/model/job.model"; import { create as createMigration, status as statusMigration, up as upMigration } from "@/jobs/migrations/migrations"; import { clear, clearUsers } from "./clear/clear-all"; @@ -50,15 +50,8 @@ import { } from "./users/generate-password-update-token"; import { updateUsersApiSeeders } from "./users/update-apiSeeders"; -interface CronDef { - name: string; - cron_string: string; - handler: () => Promise; -} - -export const CRONS: Record = { +export const CronsMap = { "Run daily jobs each day at 02h30": { - name: "Run daily jobs each day at 02h30", cron_string: "30 2 * * *", handler: async () => { // # Remplissage des organismes issus du référentiel @@ -98,7 +91,6 @@ export const CRONS: Record = { }, "Send reminder emails at 7h": { - name: "Send reminder daily at 7h", cron_string: "0 7 * * *", handler: async () => { await addJob({ name: "send-reminder-emails", queued: true }); @@ -107,7 +99,6 @@ export const CRONS: Record = { }, "Run hydrate contrats DECA job each day at 19h45": { - name: "Run hydrate contrats DECA job each day at 19h45", cron_string: "45 19 * * *", handler: async () => { // # Remplissage des contrats DECA @@ -119,19 +110,31 @@ export const CRONS: Record = { // TODO : Checker si coté métier l'archivage est toujours prévu ? // "Run archive dossiers apprenants & effectifs job each first day of month at 12h45": { - // name: "Run archive dossiers apprenants & effectifs job each first day of month at 12h45", // cron_string: "45 12 1 * *", // handler: async () => { // // run-archive-job.sh yarn cli archive:dossiersApprenantsEffectifs // return 0; // }, // }, -}; +} satisfies Record>; + +export type CronName = keyof typeof CronsMap; + +interface CronDef { + name: CronName; + cron_string: string; + handler: () => Promise; +} + +export const CRONS: CronDef[] = Object.entries(CronsMap).map(([name, cronDef]) => ({ + ...cronDef, + name: name as CronName, +})); -export async function runJob(job: IJob): Promise { +export async function runJob(job: IJobsCronTask | IJobsSimple): Promise { return executeJob(job, async () => { if (job.type === "cron_task") { - return CRONS[job.name].handler(); + return CronsMap[job.name].handler(); } switch (job.name) { case "init:dev": diff --git a/server/src/jobs/jobs_actions.ts b/server/src/jobs/jobs_actions.ts index 0da6bba99..371e5a93f 100644 --- a/server/src/jobs/jobs_actions.ts +++ b/server/src/jobs/jobs_actions.ts @@ -1,26 +1,27 @@ import { captureException, getCurrentHub, runWithAsyncContext } from "@sentry/node"; +import Boom from "boom"; import { formatDuration, intervalToDuration } from "date-fns"; import logger from "@/common/logger"; import { jobsDb } from "@/common/model/collections"; -import { IJob } from "@/common/model/job.model"; +import { IJob, IJobsSimple } from "@/common/model/job.model"; import { sleep } from "@/common/utils/asyncUtils"; -import { createJob, updateJob } from "../common/actions/job.actions"; +import { createJobSimple, updateJob } from "../common/actions/job.actions"; import { runJob } from "./jobs"; +type AddJobSimpleParams = Pick & + Partial> & { queued?: boolean }; + export async function addJob({ name, - type = "simple", - payload = {}, + payload, scheduled_for = new Date(), queued = false, -}: Pick & - Partial> & { queued?: boolean }): Promise { - const job = await createJob({ +}: AddJobSimpleParams): Promise { + const job = await createJobSimple({ name, - type, payload, scheduled_for, sync: !queued, @@ -50,6 +51,10 @@ export async function processor(signal: AbortSignal): Promise { ); if (nextJob) { + if (nextJob.type === "cron") { + throw Boom.internal("Unexpected"); + } + logger.info({ job: nextJob.name }, "job will start"); await runJob(nextJob); } else { @@ -107,11 +112,11 @@ const runner = async (job: IJob, jobFunc: () => Promise): Promise Promise) { return runWithAsyncContext(async () => { const hub = getCurrentHub(); - const transaction = hub.startTransaction({ + const transaction = hub?.startTransaction({ name: `JOB: ${job.name}`, op: "processor.job", }); - hub.configureScope((scope) => { + hub?.configureScope((scope) => { scope.setSpan(transaction); scope.setTag("job", job.name); scope.setContext("job", job); @@ -120,8 +125,8 @@ export function executeJob(job: IJob, jobFunc: () => Promise) { try { return await runner(job, jobFunc); } finally { - transaction.setMeasurement("job.execute", Date.now() - start, "millisecond"); - transaction.finish(); + transaction?.setMeasurement("job.execute", Date.now() - start, "millisecond"); + transaction?.finish(); } }); } diff --git a/server/tests/jobs/jobs_actions.test.ts b/server/tests/jobs/jobs_actions.test.ts index 8b1d40cdf..fc676a263 100644 --- a/server/tests/jobs/jobs_actions.test.ts +++ b/server/tests/jobs/jobs_actions.test.ts @@ -3,7 +3,7 @@ import * as Sentry from "@sentry/node"; import { advanceTo, clear } from "jest-date-mock"; import sentryTestkit from "sentry-testkit"; -import { createJob, findJob } from "@/common/actions/job.actions"; +import { createJobSimple, findJob } from "@/common/actions/job.actions"; import { getSentryOptions } from "@/common/services/sentry/sentry"; import { executeJob } from "@/jobs/jobs_actions"; import { useMongo } from "@tests/jest/setupMongo"; @@ -39,9 +39,8 @@ describe("executeJob", () => { useMongo(); describe("when job is success", () => { it("should return exit code", async () => { - const job = await createJob({ + const job = await createJobSimple({ name: "success:job", - type: "simple", payload: { name: "Moroine" }, scheduled_for: timings.scheduled_for, sync: true, @@ -89,9 +88,8 @@ describe("executeJob", () => { describe("when job fails", () => { it("should return exit code", async () => { - const job = await createJob({ + const job = await createJobSimple({ name: "failure:job", - type: "simple", payload: { name: "Moroine" }, scheduled_for: timings.scheduled_for, sync: true, diff --git a/server/tsconfig.json b/server/tsconfig.json index 04ff57a1a..525d27ca8 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -1,7 +1,5 @@ { "files": ["src/types.d.ts"], - "include": ["./**/*.ts", "./**/*.js"], - "exclude": ["**/node_modules", "coverage", "dist"], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Projects */ @@ -14,11 +12,10 @@ /* Modules */ "module": "ESNext", // TODO: maybe nodenext ? "moduleResolution": "node", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@tests/*": ["./tests/*"], - "shared": ["../shared"] + "shared/*": ["../shared/*"] }, "resolveJsonModule": true, /* JavaScript Support */ @@ -28,6 +25,7 @@ /* Interop Constraints */ "esModuleInterop": true, "isolatedModules": true, + "forceConsistentCasingInFileNames": true, /* Type Checking */ "strict": true, "noImplicitAny": false, @@ -35,5 +33,7 @@ "skipLibCheck": true, /* Output Formatting */ "pretty": true - } + }, + "include": ["./**/*.ts", "./**/*.js"], + "exclude": ["**/node_modules", "coverage", "dist"] } diff --git a/server/tsup.config.ts b/server/tsup.config.ts index 8236794ff..d747122f3 100644 --- a/server/tsup.config.ts +++ b/server/tsup.config.ts @@ -4,22 +4,23 @@ import { basename } from "node:path"; import { defineConfig } from "tsup"; export default defineConfig((options) => { - const files = fs.readdirSync("./src/db/migrations"); - const isDev = options.env?.NODE_ENV !== "production"; + const isWatched = options.env?.TSUP_WATCH === "true"; + const migrationFiles = fs.readdirSync("./src/db/migrations"); const entry: Record = { index: isDev ? "src/dev.ts" : "src/main.ts", }; - for (const file of files) { + for (const file of migrationFiles) { entry[`db/migrations/${basename(file, ".ts")}`] = `src/db/migrations/${file}`; } return { entry, - watch: isDev && options.watch ? ["./src", "../shared/src"] : false, - onSuccess: isDev && options.watch ? "yarn cli start --withProcessor" : "", + watch: isWatched ? ["./src", "../shared"] : false, + onSuccess: isWatched ? "yarn cli start --withProcessor" : "", + ignoreWatch: ["../shared/node_modules/**"], // In watch mode doesn't exit cleanly as it causes EADDRINUSE error killSignal: "SIGKILL", target: "es2022", diff --git a/shared/package.json b/shared/package.json index 8f5a23185..9f9263fba 100644 --- a/shared/package.json +++ b/shared/package.json @@ -15,6 +15,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@asteasolutions/zod-to-openapi": "^6.2.0", "date-fns": "^2.30.0", "date-fns-tz": "^2.0.0", "json-schema-to-ts": "^2.9.2", diff --git a/shared/tsconfig.json b/shared/tsconfig.json index 1adac3132..0271fc6b5 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -1,13 +1,14 @@ { - "include": ["."], - "exclude": ["**/node_modules", ".next/*"], + "include": ["**/*.ts"], + "exclude": ["**/node_modules"], "compilerOptions": { + "incremental": true, "strictPropertyInitialization": false, "declarationMap": true, "listEmittedFiles": false, "listFiles": false, "pretty": true, - "isolatedModules": false, + "isolatedModules": true, "lib": ["ES2023"] /* Emit ECMAScript-standard-compliant class fields. */, "module": "ESNext" /* Specify what module code is generated. */, "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, @@ -20,7 +21,6 @@ "declaration": true, "noEmit": true, "forceConsistentCasingInFileNames": true, - "allowJs": false, - "baseUrl": "./" + "allowJs": false } } diff --git a/ui/config.public.ts b/ui/config.public.ts index 121dd7712..a76f7f4f5 100644 --- a/ui/config.public.ts +++ b/ui/config.public.ts @@ -2,7 +2,8 @@ export interface PublicConfig { sentry_dsn: string; baseUrl: string; host: string; - env: "local" | "dev" | "recette" | "production" | "preview"; + env: "local" | "recette" | "production" | "preview"; + version: string; } const SENTRY_DSN = "https://362c29c6acbe4a599640109d87e77beb@o4504570758561792.ingest.sentry.io/4504570760265728"; @@ -15,6 +16,7 @@ function getProductionPublicConfig(): PublicConfig { env: "production", host, baseUrl: `https://${host}`, + version: getVersion(), }; } @@ -26,17 +28,7 @@ function getRecettePublicConfig(): PublicConfig { env: "recette", host, baseUrl: `https://${host}`, - }; -} - -function getDevPublicConfig(): PublicConfig { - const host = "cfas-dev.apprentissage.beta.gouv.fr"; - - return { - sentry_dsn: SENTRY_DSN, - env: "dev", - host, - baseUrl: `https://${host}`, + version: getVersion(), }; } @@ -55,6 +47,7 @@ function getPreviewPublicConfig(): PublicConfig { env: "preview", host, baseUrl: `https://${host}`, + version: getVersion(), }; } @@ -66,6 +59,7 @@ function getLocalPublicConfig(): PublicConfig { env: "local", host, baseUrl: `http://${host}:${process.env.NEXT_PUBLIC_API_PORT}`, + version: getVersion(), }; } @@ -84,7 +78,6 @@ function getEnv(): PublicConfig["env"] { switch (env) { case "production": case "recette": - case "dev": case "preview": case "local": return env; @@ -99,8 +92,6 @@ function getPublicConfig(): PublicConfig { return getProductionPublicConfig(); case "recette": return getRecettePublicConfig(); - case "dev": - return getDevPublicConfig(); case "preview": return getPreviewPublicConfig(); case "local": diff --git a/ui/next.config.js b/ui/next.config.js index 4f006fd36..ad2643b91 100644 --- a/ui/next.config.js +++ b/ui/next.config.js @@ -29,11 +29,11 @@ const nextConfig = { transpilePackages: ["shared"], poweredByHeader: false, swcMinify: true, - output: "standalone", experimental: { appDir: false, typedRoutes: true, }, + output: "standalone", eslint: { dirs: ["."], }, diff --git a/ui/sentry.client.config.ts b/ui/sentry.client.config.ts index c4f5cc7fc..2b391ce82 100644 --- a/ui/sentry.client.config.ts +++ b/ui/sentry.client.config.ts @@ -10,10 +10,10 @@ import { publicConfig } from "./config.public"; Sentry.init({ dsn: publicConfig.sentry_dsn, tracesSampleRate: publicConfig.env === "production" ? 0.1 : 1.0, - tracePropagationTargets: [/\.apprentissage\.beta\.gouv\.fr$/], + tracePropagationTargets: [/^https:\/\/[^/]*\.apprentissage\.beta\.gouv\.fr/, publicConfig.baseUrl, /^\//], environment: publicConfig.env, enabled: publicConfig.env !== "local", - // debug: true, + release: publicConfig.version, normalizeDepth: 8, // replaysOnErrorSampleRate: 1.0, // replaysSessionSampleRate: 0.1, @@ -22,6 +22,7 @@ Sentry.init({ // maskAllText: true, // blockAllMedia: true, // }), + // new Sentry.BrowserTracing(), // @ts-ignore new ExtraErrorData({ depth: 8 }), // @ts-ignore diff --git a/ui/sentry.edge.config.ts b/ui/sentry.edge.config.ts index a661bed10..280fcb1b2 100644 --- a/ui/sentry.edge.config.ts +++ b/ui/sentry.edge.config.ts @@ -11,10 +11,10 @@ import { publicConfig } from "./config.public"; Sentry.init({ dsn: publicConfig.sentry_dsn, tracesSampleRate: publicConfig.env === "production" ? 0.1 : 1.0, - tracePropagationTargets: [/\.apprentissage\.beta\.gouv\.fr$/], + tracePropagationTargets: [/^https:\/\/[^/]*\.apprentissage\.beta\.gouv\.fr/, publicConfig.baseUrl], environment: publicConfig.env, enabled: publicConfig.env !== "local", - // debug: true, + release: publicConfig.version, normalizeDepth: 8, integrations: [ new Sentry.Integrations.Http({ tracing: true }), diff --git a/ui/sentry.server.config.ts b/ui/sentry.server.config.ts index 139e05c8d..08bd2a823 100644 --- a/ui/sentry.server.config.ts +++ b/ui/sentry.server.config.ts @@ -10,10 +10,10 @@ import { publicConfig } from "./config.public"; Sentry.init({ dsn: publicConfig.sentry_dsn, tracesSampleRate: publicConfig.env === "production" ? 0.1 : 1.0, - tracePropagationTargets: [/\.apprentissage\.beta\.gouv\.fr$/], + tracePropagationTargets: [/^https:\/\/[^/]*\.apprentissage\.beta\.gouv\.fr/, publicConfig.baseUrl], environment: publicConfig.env, enabled: publicConfig.env !== "local", - // debug: true, + release: publicConfig.version, normalizeDepth: 8, integrations: [ new Sentry.Integrations.Http({ tracing: true }), diff --git a/ui/tsconfig.json b/ui/tsconfig.json index c21fe2353..cbf84c9a3 100644 --- a/ui/tsconfig.json +++ b/ui/tsconfig.json @@ -18,7 +18,7 @@ "isolatedModules": true, "jsx": "preserve", "paths": { - "@/*": ["*"], + "@/*": ["./*"], "shared": ["../shared"] }, "plugins": [ @@ -28,5 +28,5 @@ ] }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "public"] } diff --git a/yarn.lock b/yarn.lock index 2d3fdda04..29f54d03a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -87,6 +87,17 @@ __metadata: languageName: node linkType: hard +"@asteasolutions/zod-to-openapi@npm:^6.2.0": + version: 6.2.0 + resolution: "@asteasolutions/zod-to-openapi@npm:6.2.0" + dependencies: + openapi3-ts: ^4.1.2 + peerDependencies: + zod: ^3.20.2 + checksum: 27106e47676fe87c8acf29ba8a9a61270d4a26ecd386c3fbe5f65b1517af9a2948544338a0e82de3091c112316ebc3c75adc1e7cf88a0e626b8680c21b8f5f17 + languageName: node + linkType: hard + "@aws-crypto/crc32@npm:3.0.0": version: 3.0.0 resolution: "@aws-crypto/crc32@npm:3.0.0" @@ -18616,6 +18627,7 @@ request-debug@latest: version: 0.0.0-use.local resolution: "shared@workspace:shared" dependencies: + "@asteasolutions/zod-to-openapi": ^6.2.0 bson: ^5.4.0 date-fns: ^2.30.0 date-fns-tz: ^2.0.0 From 5df8b228878adb4fc5359732978ef1a2000d6d8d Mon Sep 17 00:00:00 2001 From: Moroine Date: Mon, 23 Oct 2023 13:22:56 +0200 Subject: [PATCH 02/15] chore: release hotfix --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b59f6ee3d..765e86629 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,7 +1,7 @@ name: Release version on: push: - branches: [master] + branches: [master, hotfix] jobs: tests: From 29eaf7fbedc79e71c2be96595881b1d56fc22e83 Mon Sep 17 00:00:00 2001 From: Moroine Date: Mon, 23 Oct 2023 14:39:01 +0200 Subject: [PATCH 03/15] chore: fix test max workers --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 76ba1fc00..a0ef2f176 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "release:interactive": "./.bin/mna-tdb release:interactive", "postinstall": "husky install", "talisman:add-exception": "yarn node-talisman --githook pre-commit -i", - "test": "cross-env NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest", + "test": "cross-env NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest -w 50%", "test:ci": "yarn test --ci -w 2", "test:watch": "yarn test --watch", "typecheck": "yarn foreach:parallel run typecheck", From f7c036594674b26c076be5f7447b312175af03e0 Mon Sep 17 00:00:00 2001 From: Moroine Date: Mon, 23 Oct 2023 15:18:28 +0200 Subject: [PATCH 04/15] chore: reduce to 1 worker in CI --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a0ef2f176..fd449f0bc 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "postinstall": "husky install", "talisman:add-exception": "yarn node-talisman --githook pre-commit -i", "test": "cross-env NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest -w 50%", - "test:ci": "yarn test --ci -w 2", + "test:ci": "yarn test --ci -w 1", "test:watch": "yarn test --watch", "typecheck": "yarn foreach:parallel run typecheck", "typecheck:ci": "yarn foreach:ci run typecheck", From 17a937d52e7dc0a80351635cdbc218f35c2b05f0 Mon Sep 17 00:00:00 2001 From: Moroine Date: Mon, 23 Oct 2023 15:40:21 +0200 Subject: [PATCH 05/15] chore: ci 1 cpu --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fd449f0bc..0e0936e3e 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "release:interactive": "./.bin/mna-tdb release:interactive", "postinstall": "husky install", "talisman:add-exception": "yarn node-talisman --githook pre-commit -i", - "test": "cross-env NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest -w 50%", + "test": "cross-env NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest", "test:ci": "yarn test --ci -w 1", "test:watch": "yarn test --watch", "typecheck": "yarn foreach:parallel run typecheck", From efbe65c299d20cdd513bd4723bfdb7980c5f2200 Mon Sep 17 00:00:00 2001 From: Moroine Date: Mon, 23 Oct 2023 15:48:38 +0200 Subject: [PATCH 06/15] chore: fix ci --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0e0936e3e..002669c94 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "postinstall": "husky install", "talisman:add-exception": "yarn node-talisman --githook pre-commit -i", "test": "cross-env NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest", - "test:ci": "yarn test --ci -w 1", + "test:ci": "yarn test --ci -w 2", "test:watch": "yarn test --watch", "typecheck": "yarn foreach:parallel run typecheck", "typecheck:ci": "yarn foreach:ci run typecheck", @@ -50,6 +50,9 @@ "foreach:parallel": "yarn foreach:seq -pi", "foreach:ci": "yarn foreach:seq -p" }, + "dependencies": { + "husky": "^8.0.3" + }, "devDependencies": { "@commitlint/cli": "^17.7.1", "@commitlint/config-conventional": "^17.7.0", @@ -69,7 +72,6 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", - "husky": "^8.0.3", "jest": "^29.6.4", "jest-environment-jsdom": "^29.6.4", "lint-staged": "^14.0.1", From e5efc44789f91cee77c2f3dda6e36a7958874157 Mon Sep 17 00:00:00 2001 From: Moroine Date: Mon, 23 Oct 2023 21:04:52 +0200 Subject: [PATCH 07/15] fix: job model --- server/src/common/model/job.model.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/common/model/job.model.ts b/server/src/common/model/job.model.ts index c9fd193d8..64343b80b 100644 --- a/server/src/common/model/job.model.ts +++ b/server/src/common/model/job.model.ts @@ -22,11 +22,11 @@ export const ZJobSimple = z .enum(["pending", "will_start", "running", "finished", "blocked", "errored"]) .describe("Statut courant du job"), sync: z.boolean().describe("Si le job est synchrone"), - payload: z.record(z.unknown()).optional().describe("La donnée liéé à la tâche"), - output: z.record(z.unknown()).optional().describe("Les valeurs de retours du job"), + payload: z.record(z.unknown()).nullish().describe("La donnée liéé à la tâche"), + output: z.record(z.unknown()).nullish().describe("Les valeurs de retours du job"), scheduled_for: z.date().describe("Date de lancement programmée"), - started_at: z.date().optional().describe("Date de lancement"), - ended_at: z.date().optional().describe("Date de fin d'execution"), + started_at: z.date().nullish().describe("Date de lancement"), + ended_at: z.date().nullish().describe("Date de fin d'execution"), updated_at: z.date().describe("Date de mise à jour en base de données"), created_at: z.date().describe("Date d'ajout en base de données"), }) From 614fcc52a34a3d808ca920f6a70104fcd2660609 Mon Sep 17 00:00:00 2001 From: Moroine Date: Mon, 23 Oct 2023 21:29:48 +0200 Subject: [PATCH 08/15] chore: fix mailpit --- .infra/ansible/tasks/preview_pr.yml | 2 +- .infra/docker-compose.preview-system.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.infra/ansible/tasks/preview_pr.yml b/.infra/ansible/tasks/preview_pr.yml index 1956dfd76..09f046be5 100644 --- a/.infra/ansible/tasks/preview_pr.yml +++ b/.infra/ansible/tasks/preview_pr.yml @@ -81,7 +81,7 @@ - name: "[{{ pr_number }}] Trigger ACME companion" shell: chdir: /opt/app - cmd: docker exec nginx-proxy-acme /app/force_renew + cmd: docker exec nginx-proxy-acme /app/signal_le_service - name: "[{{ pr_number }}] Seed database" shell: diff --git a/.infra/docker-compose.preview-system.yml b/.infra/docker-compose.preview-system.yml index 332a7117a..4a05a5b5d 100644 --- a/.infra/docker-compose.preview-system.yml +++ b/.infra/docker-compose.preview-system.yml @@ -4,7 +4,7 @@ x-default: &default deploy: resources: limits: - memory: 256m + memory: 1g restart: always networks: - mna_network @@ -91,7 +91,7 @@ services: - /opt/app/configs/mailpit/auth:/auth environment: - MP_DATA_FILE=/data/mailpit.db - - MP_UI_AUTH_FILE=/auth + - MP_UI_AUTH_FILE=/auth/auth - VIRTUAL_HOST=smtp.{{dns_name}} - VIRTUAL_PATH=/ - VIRTUAL_PORT=8025 From ab8819983d6cd4e9b550056317275acfdfe4e856 Mon Sep 17 00:00:00 2001 From: Moroine Date: Tue, 24 Oct 2023 08:55:50 +0200 Subject: [PATCH 09/15] fix: memory leak --- server/src/common/utils/asyncUtils.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/src/common/utils/asyncUtils.ts b/server/src/common/utils/asyncUtils.ts index cbe3ceedd..1d25cd40d 100644 --- a/server/src/common/utils/asyncUtils.ts +++ b/server/src/common/utils/asyncUtils.ts @@ -5,9 +5,11 @@ export const asyncForEach = async (array, callback) => { }; export function timeout(promise, millis) { - const timeout = new Promise((resolve, reject) => setTimeout(() => reject(`Timed out after ${millis} ms.`), millis)); - // @ts-expect-error - return Promise.race([promise, timeout]).finally(() => clearTimeout(timeout)); + let timeout: NodeJS.Timeout; + const timeoutPromise = new Promise((resolve, reject) => { + timeout = setTimeout(() => reject(`Timed out after ${millis} ms.`), millis); + }); + return Promise.race([promise, timeoutPromise]).finally(() => clearTimeout(timeout)); } export async function sleep(durationMs: number, signal?: AbortSignal): Promise { From 72b5cb624fd774a544fbeb9b082a4d60a4183cee Mon Sep 17 00:00:00 2001 From: Moroine Date: Tue, 24 Oct 2023 09:04:55 +0200 Subject: [PATCH 10/15] fix: open handles --- server/src/common/utils/cacheUtils.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/common/utils/cacheUtils.ts b/server/src/common/utils/cacheUtils.ts index 36aba1f3a..1a6c4bd1c 100644 --- a/server/src/common/utils/cacheUtils.ts +++ b/server/src/common/utils/cacheUtils.ts @@ -16,10 +16,13 @@ export async function tryCachedExecution( cachedResult = cache[cacheKey] = serviceFunc(); // invalidate the cache after some time - setTimeout(() => { + let timeout = setTimeout(() => { logger.debug({ cacheKey, expiration }, "clear cache"); delete cache[cacheKey]; }, expiration); + cachedResult.finally(() => { + clearTimeout(timeout); + }); } return await cachedResult; } From a3aec373b95c646456ced29b1ccf4d22591ab755 Mon Sep 17 00:00:00 2001 From: Moroine Date: Tue, 24 Oct 2023 09:54:21 +0200 Subject: [PATCH 11/15] chore: use runInBand --- package.json | 2 +- server/src/common/utils/cacheUtils.ts | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 002669c94..356665c2b 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "postinstall": "husky install", "talisman:add-exception": "yarn node-talisman --githook pre-commit -i", "test": "cross-env NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest", - "test:ci": "yarn test --ci -w 2", + "test:ci": "yarn test --ci --runInBand", "test:watch": "yarn test --watch", "typecheck": "yarn foreach:parallel run typecheck", "typecheck:ci": "yarn foreach:ci run typecheck", diff --git a/server/src/common/utils/cacheUtils.ts b/server/src/common/utils/cacheUtils.ts index 1a6c4bd1c..cafc1c320 100644 --- a/server/src/common/utils/cacheUtils.ts +++ b/server/src/common/utils/cacheUtils.ts @@ -16,13 +16,10 @@ export async function tryCachedExecution( cachedResult = cache[cacheKey] = serviceFunc(); // invalidate the cache after some time - let timeout = setTimeout(() => { + setTimeout(() => { logger.debug({ cacheKey, expiration }, "clear cache"); delete cache[cacheKey]; - }, expiration); - cachedResult.finally(() => { - clearTimeout(timeout); - }); + }, expiration).unref(); } return await cachedResult; } From c0a588c04dca1463fe7866a2e38231d7a138e128 Mon Sep 17 00:00:00 2001 From: Moroine Date: Tue, 24 Oct 2023 10:19:12 +0200 Subject: [PATCH 12/15] chore: upgrade deps --- package.json | 6 +- server/package.json | 4 +- shared/package.json | 1 - yarn.lock | 649 ++++++++++++++++++++++++++++++-------------- 4 files changed, 448 insertions(+), 212 deletions(-) diff --git a/package.json b/package.json index 356665c2b..b9bdcb808 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "postinstall": "husky install", "talisman:add-exception": "yarn node-talisman --githook pre-commit -i", "test": "cross-env NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest", - "test:ci": "yarn test --ci --runInBand", + "test:ci": "yarn test --ci -w 2", "test:watch": "yarn test --watch", "typecheck": "yarn foreach:parallel run typecheck", "typecheck:ci": "yarn foreach:ci run typecheck", @@ -72,8 +72,8 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", - "jest": "^29.6.4", - "jest-environment-jsdom": "^29.6.4", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "lint-staged": "^14.0.1", "next": "^13.4.19", "node-talisman": "^1.29.10", diff --git a/server/package.json b/server/package.json index 155dcb3af..f032b9877 100644 --- a/server/package.json +++ b/server/package.json @@ -122,12 +122,12 @@ "cross-env": "7.0.3", "dotenv": "16.0.1", "eslint-plugin-node": "11.1.0", - "jest": "^29.5.0", + "jest": "^29.7.0", "jest-date-mock": "^1.0.8", "json-schema-traverse": "1.0.0", "nock": "13.2.4", "sentry-testkit": "^5.0.5", - "ts-jest": "^29.1.0", + "ts-jest": "^29.1.1", "tsup": "^7.2.0", "typescript": "^5.0.4" } diff --git a/shared/package.json b/shared/package.json index 9f9263fba..8f5a23185 100644 --- a/shared/package.json +++ b/shared/package.json @@ -15,7 +15,6 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@asteasolutions/zod-to-openapi": "^6.2.0", "date-fns": "^2.30.0", "date-fns-tz": "^2.0.0", "json-schema-to-ts": "^2.9.2", diff --git a/yarn.lock b/yarn.lock index 29f54d03a..8b619f763 100644 --- a/yarn.lock +++ b/yarn.lock @@ -87,17 +87,6 @@ __metadata: languageName: node linkType: hard -"@asteasolutions/zod-to-openapi@npm:^6.2.0": - version: 6.2.0 - resolution: "@asteasolutions/zod-to-openapi@npm:6.2.0" - dependencies: - openapi3-ts: ^4.1.2 - peerDependencies: - zod: ^3.20.2 - checksum: 27106e47676fe87c8acf29ba8a9a61270d4a26ecd386c3fbe5f65b1517af9a2948544338a0e82de3091c112316ebc3c75adc1e7cf88a0e626b8680c21b8f5f17 - languageName: node - linkType: hard - "@aws-crypto/crc32@npm:3.0.0": version: 3.0.0 resolution: "@aws-crypto/crc32@npm:3.0.0" @@ -3066,28 +3055,28 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/console@npm:29.6.4" +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" dependencies: "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.6.3 - jest-util: ^29.6.3 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 - checksum: 1caf061a39266b86e96ca13358401839e4d930742cbaa9e87e79d7ce170a83195e52e5b2d22eb5aa9a949219b61a163a81e337ec98b8323d88d79853051df96c + checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 languageName: node linkType: hard -"@jest/core@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/core@npm:29.6.4" +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" dependencies: - "@jest/console": ^29.6.4 - "@jest/reporters": ^29.6.4 - "@jest/test-result": ^29.6.4 - "@jest/transform": ^29.6.4 + "@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": "*" ansi-escapes: ^4.2.1 @@ -3095,21 +3084,21 @@ __metadata: ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.6.3 - jest-config: ^29.6.4 - jest-haste-map: ^29.6.4 - jest-message-util: ^29.6.3 + jest-changed-files: ^29.7.0 + jest-config: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 jest-regex-util: ^29.6.3 - jest-resolve: ^29.6.4 - jest-resolve-dependencies: ^29.6.4 - jest-runner: ^29.6.4 - jest-runtime: ^29.6.4 - jest-snapshot: ^29.6.4 - jest-util: ^29.6.3 - jest-validate: ^29.6.3 - jest-watcher: ^29.6.4 + 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.4 - pretty-format: ^29.6.3 + pretty-format: ^29.7.0 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -3117,7 +3106,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 0f36532c909775814cb7d4310d61881beaefdec6229ef0b7493c6191dfca20ae5222120846ea5ef8cdeaa8cef265aae9cea8989dcab572d8daea9afd14247c7a + checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d languageName: node linkType: hard @@ -3133,6 +3122,18 @@ __metadata: languageName: node linkType: hard +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + languageName: node + linkType: hard + "@jest/expect-utils@npm:^29.6.4": version: 29.6.4 resolution: "@jest/expect-utils@npm:29.6.4" @@ -3142,6 +3143,15 @@ __metadata: languageName: node linkType: hard +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed + languageName: node + linkType: hard + "@jest/expect@npm:^29.6.4": version: 29.6.4 resolution: "@jest/expect@npm:29.6.4" @@ -3152,6 +3162,16 @@ __metadata: languageName: node linkType: hard +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: ^29.7.0 + jest-snapshot: ^29.7.0 + checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e + languageName: node + linkType: hard + "@jest/fake-timers@npm:^29.6.4": version: 29.6.4 resolution: "@jest/fake-timers@npm:29.6.4" @@ -3166,6 +3186,20 @@ __metadata: languageName: node linkType: hard +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 + languageName: node + linkType: hard + "@jest/globals@npm:^29.6.4": version: 29.6.4 resolution: "@jest/globals@npm:29.6.4" @@ -3178,14 +3212,26 @@ __metadata: languageName: node linkType: hard -"@jest/reporters@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/reporters@npm:29.6.4" +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/types": ^29.6.3 + jest-mock: ^29.7.0 + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.6.4 - "@jest/test-result": ^29.6.4 - "@jest/transform": ^29.6.4 + "@jest/console": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 "@jest/types": ^29.6.3 "@jridgewell/trace-mapping": ^0.3.18 "@types/node": "*" @@ -3199,9 +3245,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.6.3 - jest-util: ^29.6.3 - jest-worker: ^29.6.4 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -3211,7 +3257,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 9ee0db497f3a826f535d3af0575ceb67984f9708bc6386450359517c212c67218ae98b8ea93ab05df2f920aed9c4166ef64209d66a09b7e30fc0077c91347ad0 + checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 languageName: node linkType: hard @@ -3235,27 +3281,27 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/test-result@npm:29.6.4" +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" dependencies: - "@jest/console": ^29.6.4 + "@jest/console": ^29.7.0 "@jest/types": ^29.6.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: a13c82d29038e80059191a1a443240678c6934ea832fdabaec12b3ece397b6303022a064494a6bbd167a024f04e6b4d9ace1001300927ff70405ec9d854f1193 + checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/test-sequencer@npm:29.6.4" +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" dependencies: - "@jest/test-result": ^29.6.4 + "@jest/test-result": ^29.7.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.6.4 + jest-haste-map: ^29.7.0 slash: ^3.0.0 - checksum: 517fc66b74a87431a8a1429e4505d85bd09c11f2ba835e46c07c79911fbee23b89c01ec444c7c1d12d1b36f9eba60fcbbccc8e1bc1ae54a1a8b03b5f530ff81b + checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd languageName: node linkType: hard @@ -3282,6 +3328,29 @@ __metadata: languageName: node linkType: hard +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab + languageName: node + linkType: hard + "@jest/types@npm:^29.6.3": version: 29.6.3 resolution: "@jest/types@npm:29.6.3" @@ -6654,11 +6723,11 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.6.4": - version: 29.6.4 - resolution: "babel-jest@npm:29.6.4" +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" dependencies: - "@jest/transform": ^29.6.4 + "@jest/transform": ^29.7.0 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 babel-preset-jest: ^29.6.3 @@ -6667,7 +6736,7 @@ __metadata: slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: c574f1805ab6b51a7d0f5a028aad19eec4634be81e66e6f4631b79b34d8ea05dfb53629f3686c77345163872730aa0408c9e5937ed85f846984228f7ab5e5d96 + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 languageName: node linkType: hard @@ -8041,6 +8110,23 @@ __metadata: languageName: node linkType: hard +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + prompts: ^2.0.1 + bin: + create-jest: bin/create-jest.js + checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -9897,6 +9983,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -12213,60 +12312,59 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-changed-files@npm:29.6.3" +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" dependencies: execa: ^5.0.0 - jest-util: ^29.6.3 + jest-util: ^29.7.0 p-limit: ^3.1.0 - checksum: 55bc820a70c220a02fec214d5c48d5e0d829549e5c7b9959776b4ca3f76f5ff20c7c8ff816a847822766f1d712477ab3027f7a66ec61bf65de3f852e878b4dfd + checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 languageName: node linkType: hard -"jest-circus@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-circus@npm:29.6.4" +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" dependencies: - "@jest/environment": ^29.6.4 - "@jest/expect": ^29.6.4 - "@jest/test-result": ^29.6.4 + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/test-result": ^29.7.0 "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^1.0.0 is-generator-fn: ^2.0.0 - jest-each: ^29.6.3 - jest-matcher-utils: ^29.6.4 - jest-message-util: ^29.6.3 - jest-runtime: ^29.6.4 - jest-snapshot: ^29.6.4 - jest-util: ^29.6.3 + jest-each: ^29.7.0 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 p-limit: ^3.1.0 - pretty-format: ^29.6.3 + pretty-format: ^29.7.0 pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 31f64ddf6df4aefe30ef5f8de9da137c9cba58ab5e2a25cf749450735088dc88a9974591a4256d481af0fe64608173c921219f9fad9a7dd87cbe47a79e111be8 + checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 languageName: node linkType: hard -"jest-cli@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-cli@npm:29.6.4" +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" dependencies: - "@jest/core": ^29.6.4 - "@jest/test-result": ^29.6.4 + "@jest/core": ^29.7.0 + "@jest/test-result": ^29.7.0 "@jest/types": ^29.6.3 chalk: ^4.0.0 + create-jest: ^29.7.0 exit: ^0.1.2 - graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.6.4 - jest-util: ^29.6.3 - jest-validate: ^29.6.3 - prompts: ^2.0.1 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 yargs: ^17.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -12275,34 +12373,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 87a85a27eff0e502717b6ee0ce861d3e50d8c47d7298477f8ca10964b958f06c20241d28f1360ce2a85072763483e4924248106a8ed530ca460a56db3fdfc53e + checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 languageName: node linkType: hard -"jest-config@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-config@npm:29.6.4" +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.6.4 + "@jest/test-sequencer": ^29.7.0 "@jest/types": ^29.6.3 - babel-jest: ^29.6.4 + babel-jest: ^29.7.0 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.6.4 - jest-environment-node: ^29.6.4 + 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.6.4 - jest-runner: ^29.6.4 - jest-util: ^29.6.3 - jest-validate: ^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.4 parse-json: ^5.2.0 - pretty-format: ^29.6.3 + pretty-format: ^29.7.0 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -12313,7 +12411,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 177352658774344896df3988dbe892e0b117579f45cc43aebc588493665bf19a557e202f097f5b4a987314ec2d84afa0769299ac6e702c5923d1fd3cfa4692b0 + checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff languageName: node linkType: hard @@ -12336,60 +12434,72 @@ __metadata: languageName: node linkType: hard -"jest-docblock@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-docblock@npm:29.6.3" +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" dependencies: detect-newline: ^3.0.0 - checksum: 6f3213a1e79e7eedafeb462acfa9a41303f9c0167893b140f6818fa16d7eb6bf3f9b9cf4669097ca6b7154847793489ecd6b4f6cfb0e416b88cfa3b4b36715b6 + checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 languageName: node linkType: hard -"jest-each@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-each@npm:29.6.3" +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" dependencies: "@jest/types": ^29.6.3 chalk: ^4.0.0 jest-get-type: ^29.6.3 - jest-util: ^29.6.3 - pretty-format: ^29.6.3 - checksum: fe06e80b3554e2a8464f5f5c61943e02db1f8a7177139cb55b3201a1d1513cb089d8800401f102729a31bf8dd6f88229044e6088fea9dd5647ed11e841b6b88c + jest-util: ^29.7.0 + pretty-format: ^29.7.0 + checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c languageName: node linkType: hard -"jest-environment-jsdom@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-environment-jsdom@npm:29.6.4" +"jest-environment-jsdom@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-jsdom@npm:29.7.0" dependencies: - "@jest/environment": ^29.6.4 - "@jest/fake-timers": ^29.6.4 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 "@jest/types": ^29.6.3 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.6.3 - jest-util: ^29.6.3 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 2afe105f12d7d93ca56e2e6f67ab07ada3dd3da0516d1198f254930683ab9feb2b8c14417baaca53544eed88fd7fb5744f0dbce2e100269746187317ce0347df + checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 languageName: node linkType: hard -"jest-environment-node@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-environment-node@npm:29.6.4" +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" dependencies: - "@jest/environment": ^29.6.4 - "@jest/fake-timers": ^29.6.4 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^29.6.3 - jest-util: ^29.6.3 - checksum: 518221505af4bd32c84f2af2c03f9d771de2711bd69fe7723b648fcc2e05d95b4e75f493afa9010209e26a4a3309ebee971f9b18c45b540891771d3b68c3a16e + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 languageName: node linkType: hard @@ -12423,13 +12533,36 @@ __metadata: languageName: node linkType: hard -"jest-leak-detector@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-leak-detector@npm:29.6.3" +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" dependencies: jest-get-type: ^29.6.3 - pretty-format: ^29.6.3 - checksum: 27548fcfc7602fe1b88f8600185e35ffff71751f3631e52bbfdfc72776f5a13a430185cf02fc632b41320a74f99ae90e40ce101c8887509f0f919608a7175129 + pretty-format: ^29.7.0 + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 languageName: node linkType: hard @@ -12445,6 +12578,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd + languageName: node + linkType: hard + "jest-message-util@npm:^29.6.3": version: 29.6.3 resolution: "jest-message-util@npm:29.6.3" @@ -12462,6 +12607,23 @@ __metadata: languageName: node linkType: hard +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + languageName: node + linkType: hard + "jest-mock@npm:^29.6.3": version: 29.6.3 resolution: "jest-mock@npm:29.6.3" @@ -12473,6 +12635,17 @@ __metadata: languageName: node linkType: hard +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 + languageName: node + linkType: hard + "jest-pnp-resolver@npm:^1.2.2": version: 1.2.3 resolution: "jest-pnp-resolver@npm:1.2.3" @@ -12492,72 +12665,72 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-resolve-dependencies@npm:29.6.4" +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" dependencies: jest-regex-util: ^29.6.3 - jest-snapshot: ^29.6.4 - checksum: 34f81d22cbd72203130cc14cbb66d5783d9f59fba4d366b9653f8fb4f6feeaac25d89696f2f77c700659843d5440dc92f58ad443ba05da1da46c39234866d916 + jest-snapshot: ^29.7.0 + checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 languageName: node linkType: hard -"jest-resolve@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-resolve@npm:29.6.4" +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.6.4 + jest-haste-map: ^29.7.0 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.6.3 - jest-validate: ^29.6.3 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 resolve: ^1.20.0 resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 5f0ef260aec79ef00e16e0ba7b27d527054e1faed08a144279cd191b5c5b71af67c52b9ddfd24aa2f563d254618ce9bf7519809f23fb2abf6c4fa375503caa28 + checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 languageName: node linkType: hard -"jest-runner@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-runner@npm:29.6.4" +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" dependencies: - "@jest/console": ^29.6.4 - "@jest/environment": ^29.6.4 - "@jest/test-result": ^29.6.4 - "@jest/transform": ^29.6.4 + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^29.6.3 - jest-environment-node: ^29.6.4 - jest-haste-map: ^29.6.4 - jest-leak-detector: ^29.6.3 - jest-message-util: ^29.6.3 - jest-resolve: ^29.6.4 - jest-runtime: ^29.6.4 - jest-util: ^29.6.3 - jest-watcher: ^29.6.4 - jest-worker: ^29.6.4 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: ca977dd30262171fe000de8407a3187c16e7057ddf690bcc21068155aacd4824ee927b544e0fa9f2885948b47a5123b472da41e095e3bcbdebb79f1fa2f2fc56 + checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb languageName: node linkType: hard -"jest-runtime@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-runtime@npm:29.6.4" +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" dependencies: - "@jest/environment": ^29.6.4 - "@jest/fake-timers": ^29.6.4 - "@jest/globals": ^29.6.4 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/globals": ^29.7.0 "@jest/source-map": ^29.6.3 - "@jest/test-result": ^29.6.4 - "@jest/transform": ^29.6.4 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 @@ -12565,16 +12738,16 @@ __metadata: collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.6.4 - jest-message-util: ^29.6.3 - jest-mock: ^29.6.3 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 jest-regex-util: ^29.6.3 - jest-resolve: ^29.6.4 - jest-snapshot: ^29.6.4 - jest-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 93deacd06f8f2bb808dbfb8acbcbc0b724187b3d3fffafd497a32c939bf385ca21f5a3f03eebd5b958a0e93865d0e68a0db73bd0fe16dafbd5e922558aa7b359 + checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e languageName: node linkType: hard @@ -12606,6 +12779,34 @@ __metadata: languageName: node linkType: hard +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.7.0 + graceful-fs: ^4.2.9 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + natural-compare: ^1.4.0 + pretty-format: ^29.7.0 + semver: ^7.5.3 + checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad + languageName: node + linkType: hard + "jest-util@npm:^29.0.0, jest-util@npm:^29.6.3": version: 29.6.3 resolution: "jest-util@npm:29.6.3" @@ -12620,33 +12821,47 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-validate@npm:29.6.3" +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + languageName: node + linkType: hard + +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" dependencies: "@jest/types": ^29.6.3 camelcase: ^6.2.0 chalk: ^4.0.0 jest-get-type: ^29.6.3 leven: ^3.1.0 - pretty-format: ^29.6.3 - checksum: caa489ed11080441c636b8035ab71bafbdc0c052b1e452855e4d2dd24ac15e497710a270ea6fc5ef8926b22c1ce4d6e07ec2dc193f0810cff5851d7a2222c045 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae languageName: node linkType: hard -"jest-watcher@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-watcher@npm:29.6.4" +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" dependencies: - "@jest/test-result": ^29.6.4 + "@jest/test-result": ^29.7.0 "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.6.3 + jest-util: ^29.7.0 string-length: ^4.0.1 - checksum: 13c0f96f7e9212e4f3ef2daf3e787045bdcec414061bf286eca934c7f4083fb04d38df9ced9c0edfbe15f3521ca581eb2ed6108c338a0db1f3e1def65687992f + checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f languageName: node linkType: hard @@ -12662,14 +12877,26 @@ __metadata: languageName: node linkType: hard -"jest@npm:^29.5.0, jest@npm:^29.6.4": - version: 29.6.4 - resolution: "jest@npm:29.6.4" +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" dependencies: - "@jest/core": ^29.6.4 + "@types/node": "*" + jest-util: ^29.7.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + languageName: node + linkType: hard + +"jest@npm:^29.7.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" + dependencies: + "@jest/core": ^29.7.0 "@jest/types": ^29.6.3 import-local: ^3.0.2 - jest-cli: ^29.6.4 + jest-cli: ^29.7.0 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -12677,7 +12904,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: ba28ca7a86d029bcd742bb254c0c8d0119c1e002ddae128ff6409ebabc0b29c36f69dbf3fdd326aff16e7b2500c9a918bbc6a9a5db4d966e035127242239439f + checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b languageName: node linkType: hard @@ -15302,8 +15529,8 @@ md5@latest: eslint-plugin-simple-import-sort: ^10.0.0 eslint-plugin-unused-imports: ^3.0.0 husky: ^8.0.3 - jest: ^29.6.4 - jest-environment-jsdom: ^29.6.4 + jest: ^29.7.0 + jest-environment-jsdom: ^29.7.0 lint-staged: ^14.0.1 next: ^13.4.19 node-talisman: ^1.29.10 @@ -17088,6 +17315,17 @@ md5@latest: languageName: node linkType: hard +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -18542,7 +18780,7 @@ request-debug@latest: fast-xml-parser: ^4.2.7 fs-extra: 10.1.0 iconv-lite: 0.6.3 - jest: ^29.5.0 + jest: ^29.7.0 jest-date-mock: ^1.0.8 joi: 17.6.0 joi-password: 4.0.0 @@ -18585,7 +18823,7 @@ request-debug@latest: swagger-jsdoc: 6.2.8 swagger-ui-express: 4.6.2 tcp-port-used: 1.0.2 - ts-jest: ^29.1.0 + ts-jest: ^29.1.1 tsup: ^7.2.0 tsx: 3.12.6 type-fest: ^3.10.0 @@ -18627,7 +18865,6 @@ request-debug@latest: version: 0.0.0-use.local resolution: "shared@workspace:shared" dependencies: - "@asteasolutions/zod-to-openapi": ^6.2.0 bson: ^5.4.0 date-fns: ^2.30.0 date-fns-tz: ^2.0.0 @@ -19742,7 +19979,7 @@ request-debug@latest: languageName: node linkType: hard -"ts-jest@npm:^29.1.0, ts-jest@npm:^29.1.1": +"ts-jest@npm:^29.1.1": version: 29.1.1 resolution: "ts-jest@npm:29.1.1" dependencies: From a7fa3af8bb233812ea934a8395aa18395c665a1a Mon Sep 17 00:00:00 2001 From: Moroine Date: Tue, 24 Oct 2023 10:22:06 +0200 Subject: [PATCH 13/15] chore: dedupe --- yarn.lock | 241 +----------------------------------------------------- 1 file changed, 4 insertions(+), 237 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8b619f763..d9f60cab8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3110,18 +3110,6 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/environment@npm:29.6.4" - dependencies: - "@jest/fake-timers": ^29.6.4 - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-mock: ^29.6.3 - checksum: 810d8f1fc26d293acfc44927bcb78adc58ed4ea580a64c8d94aa6c67239dcb149186bf25b94ff28b79de15253e0c877ad8d330feac205f185f3517593168510c - languageName: node - linkType: hard - "@jest/environment@npm:^29.7.0": version: 29.7.0 resolution: "@jest/environment@npm:29.7.0" @@ -3134,15 +3122,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/expect-utils@npm:29.6.4" - dependencies: - jest-get-type: ^29.6.3 - checksum: a17059e02a4c0fca98e2abb7e9e58c70df3cd3d4ebcc6a960cb57c571726f7bd738c6cd008a9bf99770b77e92f7e21c75fe1f9ceec9b7a7710010f9340bb28ad - languageName: node - linkType: hard - "@jest/expect-utils@npm:^29.7.0": version: 29.7.0 resolution: "@jest/expect-utils@npm:29.7.0" @@ -3152,16 +3131,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/expect@npm:29.6.4" - dependencies: - expect: ^29.6.4 - jest-snapshot: ^29.6.4 - checksum: e9d7306a96e2f9f9f7a0d93d41850cbad987ebda951a5d9a63d3f5fb61da4c1e41adb54af7f7222e4a185454ecb17ddc77845e18001ee28ac114f7a7fe9e671d - languageName: node - linkType: hard - "@jest/expect@npm:^29.7.0": version: 29.7.0 resolution: "@jest/expect@npm:29.7.0" @@ -3172,20 +3141,6 @@ __metadata: languageName: node linkType: hard -"@jest/fake-timers@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/fake-timers@npm:29.6.4" - dependencies: - "@jest/types": ^29.6.3 - "@sinonjs/fake-timers": ^10.0.2 - "@types/node": "*" - jest-message-util: ^29.6.3 - jest-mock: ^29.6.3 - jest-util: ^29.6.3 - checksum: 3f06d1090cbaaf781920fe59b10509ad86b587c401818a066ee1550101c6203e0718f0f83bbd2afa8bdf7b43eb280f89fb9f8c98886094e53ccabe5e64de9be1 - languageName: node - linkType: hard - "@jest/fake-timers@npm:^29.7.0": version: 29.7.0 resolution: "@jest/fake-timers@npm:29.7.0" @@ -3200,19 +3155,7 @@ __metadata: languageName: node linkType: hard -"@jest/globals@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/globals@npm:29.6.4" - dependencies: - "@jest/environment": ^29.6.4 - "@jest/expect": ^29.6.4 - "@jest/types": ^29.6.3 - jest-mock: ^29.6.3 - checksum: a41b18871a248151264668a38b13cb305f03db112bfd89ec44e858af0e79066e0b03d6b68c8baf1ec6c578be6fdb87519389c83438608b91471d17a5724858e0 - languageName: node - linkType: hard - -"@jest/globals@npm:^29.7.0": +"@jest/globals@npm:^29.6.4, @jest/globals@npm:^29.7.0": version: 29.7.0 resolution: "@jest/globals@npm:29.7.0" dependencies: @@ -3305,29 +3248,6 @@ __metadata: languageName: node linkType: hard -"@jest/transform@npm:^29.6.4": - version: 29.6.4 - resolution: "@jest/transform@npm:29.6.4" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^29.6.3 - "@jridgewell/trace-mapping": ^0.3.18 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^2.0.0 - fast-json-stable-stringify: ^2.1.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.6.4 - jest-regex-util: ^29.6.3 - jest-util: ^29.6.3 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.2 - checksum: 0341a200a0bb926fc67ab9aede91c7b4009458206495e92057e72a115c55da5fed117457e68c6ea821e24c58b55da75c6a7b0f272ed63c2693db583d689a3383 - languageName: node - linkType: hard - "@jest/transform@npm:^29.7.0": version: 29.7.0 resolution: "@jest/transform@npm:29.7.0" @@ -9970,20 +9890,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.6.4": - version: 29.6.4 - resolution: "expect@npm:29.6.4" - dependencies: - "@jest/expect-utils": ^29.6.4 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.6.4 - jest-message-util: ^29.6.3 - jest-util: ^29.6.3 - checksum: 019b187d665562e4948b239e011a8791363e916f3076a229298d625e67fdadb06e8c2748798c49b4cf418ea223673eadd1de06537e08ba3c055c6f0efefc2306 - languageName: node - linkType: hard - -"expect@npm:^29.7.0": +"expect@npm:^29.0.0, expect@npm:^29.7.0": version: 29.7.0 resolution: "expect@npm:29.7.0" dependencies: @@ -12422,18 +12329,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-diff@npm:29.6.4" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.6.3 - jest-get-type: ^29.6.3 - pretty-format: ^29.6.3 - checksum: e205c45ab6dbcc660dc2a682cddb20f6a3cbbbdecd2821cce2050619f96dbd7560ee25f7f51d42c302596aeaddbea54390b78be3ab639340d24d67e4d270a8b0 - languageName: node - linkType: hard - "jest-diff@npm:^29.7.0": version: 29.7.0 resolution: "jest-diff@npm:29.7.0" @@ -12510,29 +12405,6 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-haste-map@npm:29.6.4" - dependencies: - "@jest/types": ^29.6.3 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^29.6.3 - jest-util: ^29.6.3 - jest-worker: ^29.6.4 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: 4f720fd3813bb38400b7a9a094e55664cbddd907ba1769457ed746f6c870c615167647a5b697a788183d832b1dcb1b66143e52990a6f4403283f6686077fa868 - languageName: node - linkType: hard - "jest-haste-map@npm:^29.7.0": version: 29.7.0 resolution: "jest-haste-map@npm:29.7.0" @@ -12566,18 +12438,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-matcher-utils@npm:29.6.4" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.6.4 - jest-get-type: ^29.6.3 - pretty-format: ^29.6.3 - checksum: 9e17bce282e74bdbba2ce5475c490e0bba4f464cd42132bfc5df0337e0853af4dba925c7f4f61cbb0a4818fa121d28d7ff0196ec8829773a22fce59a822976d2 - languageName: node - linkType: hard - "jest-matcher-utils@npm:^29.7.0": version: 29.7.0 resolution: "jest-matcher-utils@npm:29.7.0" @@ -12590,23 +12450,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-message-util@npm:29.6.3" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.6.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.6.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 59f5229a06c073a8877ba4d2e304cc07d63b0062bf5764d4bed14364403889e77f1825d1bd9017c19a840847d17dffd414dc06f1fcb537b5f9e03dbc65b84ada - languageName: node - linkType: hard - "jest-message-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-message-util@npm:29.7.0" @@ -12624,17 +12467,6 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-mock@npm:29.6.3" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-util: ^29.6.3 - checksum: 35772968010c0afb1bb1ef78570b9cbea907c6f967d24b4e95e1a596a1000c63d60e225fb9ddfdd5218674da4aa61d92a09927fc26310cecbbfaa8278d919e32 - languageName: node - linkType: hard - "jest-mock@npm:^29.7.0": version: 29.7.0 resolution: "jest-mock@npm:29.7.0" @@ -12751,34 +12583,6 @@ __metadata: languageName: node linkType: hard -"jest-snapshot@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-snapshot@npm:29.6.4" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-jsx": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.6.4 - "@jest/transform": ^29.6.4 - "@jest/types": ^29.6.3 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^29.6.4 - graceful-fs: ^4.2.9 - jest-diff: ^29.6.4 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.6.4 - jest-message-util: ^29.6.3 - jest-util: ^29.6.3 - natural-compare: ^1.4.0 - pretty-format: ^29.6.3 - semver: ^7.5.3 - checksum: 0c9b5ec640457fb780ac6c9b6caa814436e9e16bf744772eee3bfd055ae5f7a3085a6a09b2f30910e31915dafc3955d92357cc98189e4d5dcb417b5fdafda6e3 - languageName: node - linkType: hard - "jest-snapshot@npm:^29.7.0": version: 29.7.0 resolution: "jest-snapshot@npm:29.7.0" @@ -12807,21 +12611,7 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.0.0, jest-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-util@npm:29.6.3" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 7bf3ba3ac67ac6ceff7d8fdd23a86768e23ddd9133ecd9140ef87cc0c28708effabaf67a6cd45cd9d90a63d645a522ed0825d09ee59ac4c03b9c473b1fef4c7c - languageName: node - linkType: hard - -"jest-util@npm:^29.7.0": +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" dependencies: @@ -12865,18 +12655,6 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.6.4": - version: 29.6.4 - resolution: "jest-worker@npm:29.6.4" - dependencies: - "@types/node": "*" - jest-util: ^29.6.3 - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 05d19a5759ebfeb964036065be55ad8d8e8ddffa85d9b3a4c0b95765695efb1d8226ec824a4d8e660c38cda3389bfeb98d819f47232acf9fb0e79f553b7c0a76 - languageName: node - linkType: hard - "jest-worker@npm:^29.7.0": version: 29.7.0 resolution: "jest-worker@npm:29.7.0" @@ -17304,18 +17082,7 @@ md5@latest: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.6.3": - version: 29.6.3 - resolution: "pretty-format@npm:29.6.3" - dependencies: - "@jest/schemas": ^29.6.3 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: 4e1c0db48e65571c22e80ff92123925ff8b3a2a89b71c3a1683cfde711004d492de32fe60c6bc10eea8bf6c678e5cbe544ac6c56cb8096e1eb7caf856928b1c4 - languageName: node - linkType: hard - -"pretty-format@npm:^29.7.0": +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" dependencies: From ca471e0af113ffb2b29ada4f12d490b6515dc861 Mon Sep 17 00:00:00 2001 From: Moroine Date: Tue, 24 Oct 2023 10:41:41 +0200 Subject: [PATCH 14/15] chore: revert deps upgrades --- package.json | 4 +- server/package.json | 4 +- yarn.lock | 596 +++++++++++++++++++++----------------------- 3 files changed, 294 insertions(+), 310 deletions(-) diff --git a/package.json b/package.json index b9bdcb808..002669c94 100644 --- a/package.json +++ b/package.json @@ -72,8 +72,8 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", + "jest": "^29.6.4", + "jest-environment-jsdom": "^29.6.4", "lint-staged": "^14.0.1", "next": "^13.4.19", "node-talisman": "^1.29.10", diff --git a/server/package.json b/server/package.json index f032b9877..155dcb3af 100644 --- a/server/package.json +++ b/server/package.json @@ -122,12 +122,12 @@ "cross-env": "7.0.3", "dotenv": "16.0.1", "eslint-plugin-node": "11.1.0", - "jest": "^29.7.0", + "jest": "^29.5.0", "jest-date-mock": "^1.0.8", "json-schema-traverse": "1.0.0", "nock": "13.2.4", "sentry-testkit": "^5.0.5", - "ts-jest": "^29.1.1", + "ts-jest": "^29.1.0", "tsup": "^7.2.0", "typescript": "^5.0.4" } diff --git a/yarn.lock b/yarn.lock index d9f60cab8..2d3fdda04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3055,28 +3055,28 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/console@npm:29.7.0" +"@jest/console@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/console@npm:29.6.4" dependencies: "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 + jest-message-util: ^29.6.3 + jest-util: ^29.6.3 slash: ^3.0.0 - checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 + checksum: 1caf061a39266b86e96ca13358401839e4d930742cbaa9e87e79d7ce170a83195e52e5b2d22eb5aa9a949219b61a163a81e337ec98b8323d88d79853051df96c languageName: node linkType: hard -"@jest/core@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/core@npm:29.7.0" +"@jest/core@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/core@npm:29.6.4" dependencies: - "@jest/console": ^29.7.0 - "@jest/reporters": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 + "@jest/console": ^29.6.4 + "@jest/reporters": ^29.6.4 + "@jest/test-result": ^29.6.4 + "@jest/transform": ^29.6.4 "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 @@ -3084,21 +3084,21 @@ __metadata: ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.7.0 - jest-config: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 + jest-changed-files: ^29.6.3 + jest-config: ^29.6.4 + jest-haste-map: ^29.6.4 + jest-message-util: ^29.6.3 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 + jest-resolve: ^29.6.4 + jest-resolve-dependencies: ^29.6.4 + jest-runner: ^29.6.4 + jest-runtime: ^29.6.4 + jest-snapshot: ^29.6.4 + jest-util: ^29.6.3 + jest-validate: ^29.6.3 + jest-watcher: ^29.6.4 micromatch: ^4.0.4 - pretty-format: ^29.7.0 + pretty-format: ^29.6.3 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -3106,75 +3106,75 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d + checksum: 0f36532c909775814cb7d4310d61881beaefdec6229ef0b7493c6191dfca20ae5222120846ea5ef8cdeaa8cef265aae9cea8989dcab572d8daea9afd14247c7a languageName: node linkType: hard -"@jest/environment@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/environment@npm:29.7.0" +"@jest/environment@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/environment@npm:29.6.4" dependencies: - "@jest/fake-timers": ^29.7.0 + "@jest/fake-timers": ^29.6.4 "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^29.7.0 - checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + jest-mock: ^29.6.3 + checksum: 810d8f1fc26d293acfc44927bcb78adc58ed4ea580a64c8d94aa6c67239dcb149186bf25b94ff28b79de15253e0c877ad8d330feac205f185f3517593168510c languageName: node linkType: hard -"@jest/expect-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect-utils@npm:29.7.0" +"@jest/expect-utils@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/expect-utils@npm:29.6.4" dependencies: jest-get-type: ^29.6.3 - checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed + checksum: a17059e02a4c0fca98e2abb7e9e58c70df3cd3d4ebcc6a960cb57c571726f7bd738c6cd008a9bf99770b77e92f7e21c75fe1f9ceec9b7a7710010f9340bb28ad languageName: node linkType: hard -"@jest/expect@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect@npm:29.7.0" +"@jest/expect@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/expect@npm:29.6.4" dependencies: - expect: ^29.7.0 - jest-snapshot: ^29.7.0 - checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e + expect: ^29.6.4 + jest-snapshot: ^29.6.4 + checksum: e9d7306a96e2f9f9f7a0d93d41850cbad987ebda951a5d9a63d3f5fb61da4c1e41adb54af7f7222e4a185454ecb17ddc77845e18001ee28ac114f7a7fe9e671d languageName: node linkType: hard -"@jest/fake-timers@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/fake-timers@npm:29.7.0" +"@jest/fake-timers@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/fake-timers@npm:29.6.4" dependencies: "@jest/types": ^29.6.3 "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 + jest-message-util: ^29.6.3 + jest-mock: ^29.6.3 + jest-util: ^29.6.3 + checksum: 3f06d1090cbaaf781920fe59b10509ad86b587c401818a066ee1550101c6203e0718f0f83bbd2afa8bdf7b43eb280f89fb9f8c98886094e53ccabe5e64de9be1 languageName: node linkType: hard -"@jest/globals@npm:^29.6.4, @jest/globals@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/globals@npm:29.7.0" +"@jest/globals@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/globals@npm:29.6.4" dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 + "@jest/environment": ^29.6.4 + "@jest/expect": ^29.6.4 "@jest/types": ^29.6.3 - jest-mock: ^29.7.0 - checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 + jest-mock: ^29.6.3 + checksum: a41b18871a248151264668a38b13cb305f03db112bfd89ec44e858af0e79066e0b03d6b68c8baf1ec6c578be6fdb87519389c83438608b91471d17a5724858e0 languageName: node linkType: hard -"@jest/reporters@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/reporters@npm:29.7.0" +"@jest/reporters@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/reporters@npm:29.6.4" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 + "@jest/console": ^29.6.4 + "@jest/test-result": ^29.6.4 + "@jest/transform": ^29.6.4 "@jest/types": ^29.6.3 "@jridgewell/trace-mapping": ^0.3.18 "@types/node": "*" @@ -3188,9 +3188,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 + jest-message-util: ^29.6.3 + jest-util: ^29.6.3 + jest-worker: ^29.6.4 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -3200,7 +3200,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 + checksum: 9ee0db497f3a826f535d3af0575ceb67984f9708bc6386450359517c212c67218ae98b8ea93ab05df2f920aed9c4166ef64209d66a09b7e30fc0077c91347ad0 languageName: node linkType: hard @@ -3224,33 +3224,33 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-result@npm:29.7.0" +"@jest/test-result@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/test-result@npm:29.6.4" dependencies: - "@jest/console": ^29.7.0 + "@jest/console": ^29.6.4 "@jest/types": ^29.6.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa + checksum: a13c82d29038e80059191a1a443240678c6934ea832fdabaec12b3ece397b6303022a064494a6bbd167a024f04e6b4d9ace1001300927ff70405ec9d854f1193 languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-sequencer@npm:29.7.0" +"@jest/test-sequencer@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/test-sequencer@npm:29.6.4" dependencies: - "@jest/test-result": ^29.7.0 + "@jest/test-result": ^29.6.4 graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 + jest-haste-map: ^29.6.4 slash: ^3.0.0 - checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd + checksum: 517fc66b74a87431a8a1429e4505d85bd09c11f2ba835e46c07c79911fbee23b89c01ec444c7c1d12d1b36f9eba60fcbbccc8e1bc1ae54a1a8b03b5f530ff81b languageName: node linkType: hard -"@jest/transform@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/transform@npm:29.7.0" +"@jest/transform@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/transform@npm:29.6.4" dependencies: "@babel/core": ^7.11.6 "@jest/types": ^29.6.3 @@ -3260,14 +3260,14 @@ __metadata: convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 + jest-haste-map: ^29.6.4 jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 + jest-util: ^29.6.3 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.2 - checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab + checksum: 0341a200a0bb926fc67ab9aede91c7b4009458206495e92057e72a115c55da5fed117457e68c6ea821e24c58b55da75c6a7b0f272ed63c2693db583d689a3383 languageName: node linkType: hard @@ -6643,11 +6643,11 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "babel-jest@npm:29.7.0" +"babel-jest@npm:^29.6.4": + version: 29.6.4 + resolution: "babel-jest@npm:29.6.4" dependencies: - "@jest/transform": ^29.7.0 + "@jest/transform": ^29.6.4 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 babel-preset-jest: ^29.6.3 @@ -6656,7 +6656,7 @@ __metadata: slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 + checksum: c574f1805ab6b51a7d0f5a028aad19eec4634be81e66e6f4631b79b34d8ea05dfb53629f3686c77345163872730aa0408c9e5937ed85f846984228f7ab5e5d96 languageName: node linkType: hard @@ -8030,23 +8030,6 @@ __metadata: languageName: node linkType: hard -"create-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "create-jest@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - prompts: ^2.0.1 - bin: - create-jest: bin/create-jest.js - checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 - languageName: node - linkType: hard - "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -9890,16 +9873,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.7.0": - version: 29.7.0 - resolution: "expect@npm:29.7.0" +"expect@npm:^29.0.0, expect@npm:^29.6.4": + version: 29.6.4 + resolution: "expect@npm:29.6.4" dependencies: - "@jest/expect-utils": ^29.7.0 + "@jest/expect-utils": ^29.6.4 jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + jest-matcher-utils: ^29.6.4 + jest-message-util: ^29.6.3 + jest-util: ^29.6.3 + checksum: 019b187d665562e4948b239e011a8791363e916f3076a229298d625e67fdadb06e8c2748798c49b4cf418ea223673eadd1de06537e08ba3c055c6f0efefc2306 languageName: node linkType: hard @@ -12219,59 +12202,60 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-changed-files@npm:29.7.0" +"jest-changed-files@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-changed-files@npm:29.6.3" dependencies: execa: ^5.0.0 - jest-util: ^29.7.0 + jest-util: ^29.6.3 p-limit: ^3.1.0 - checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 + checksum: 55bc820a70c220a02fec214d5c48d5e0d829549e5c7b9959776b4ca3f76f5ff20c7c8ff816a847822766f1d712477ab3027f7a66ec61bf65de3f852e878b4dfd languageName: node linkType: hard -"jest-circus@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-circus@npm:29.7.0" +"jest-circus@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-circus@npm:29.6.4" dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 - "@jest/test-result": ^29.7.0 + "@jest/environment": ^29.6.4 + "@jest/expect": ^29.6.4 + "@jest/test-result": ^29.6.4 "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^1.0.0 is-generator-fn: ^2.0.0 - jest-each: ^29.7.0 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-runtime: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 + jest-each: ^29.6.3 + jest-matcher-utils: ^29.6.4 + jest-message-util: ^29.6.3 + jest-runtime: ^29.6.4 + jest-snapshot: ^29.6.4 + jest-util: ^29.6.3 p-limit: ^3.1.0 - pretty-format: ^29.7.0 + pretty-format: ^29.6.3 pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 + checksum: 31f64ddf6df4aefe30ef5f8de9da137c9cba58ab5e2a25cf749450735088dc88a9974591a4256d481af0fe64608173c921219f9fad9a7dd87cbe47a79e111be8 languageName: node linkType: hard -"jest-cli@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-cli@npm:29.7.0" +"jest-cli@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-cli@npm:29.6.4" dependencies: - "@jest/core": ^29.7.0 - "@jest/test-result": ^29.7.0 + "@jest/core": ^29.6.4 + "@jest/test-result": ^29.6.4 "@jest/types": ^29.6.3 chalk: ^4.0.0 - create-jest: ^29.7.0 exit: ^0.1.2 + graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 + jest-config: ^29.6.4 + jest-util: ^29.6.3 + jest-validate: ^29.6.3 + prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -12280,34 +12264,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 + checksum: 87a85a27eff0e502717b6ee0ce861d3e50d8c47d7298477f8ca10964b958f06c20241d28f1360ce2a85072763483e4924248106a8ed530ca460a56db3fdfc53e languageName: node linkType: hard -"jest-config@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-config@npm:29.7.0" +"jest-config@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-config@npm:29.6.4" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.7.0 + "@jest/test-sequencer": ^29.6.4 "@jest/types": ^29.6.3 - babel-jest: ^29.7.0 + babel-jest: ^29.6.4 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.7.0 - jest-environment-node: ^29.7.0 + jest-circus: ^29.6.4 + jest-environment-node: ^29.6.4 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 + jest-resolve: ^29.6.4 + jest-runner: ^29.6.4 + jest-util: ^29.6.3 + jest-validate: ^29.6.3 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.7.0 + pretty-format: ^29.6.3 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -12318,7 +12302,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff + checksum: 177352658774344896df3988dbe892e0b117579f45cc43aebc588493665bf19a557e202f097f5b4a987314ec2d84afa0769299ac6e702c5923d1fd3cfa4692b0 languageName: node linkType: hard @@ -12329,72 +12313,72 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" +"jest-diff@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-diff@npm:29.6.4" dependencies: chalk: ^4.0.0 diff-sequences: ^29.6.3 jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 + pretty-format: ^29.6.3 + checksum: e205c45ab6dbcc660dc2a682cddb20f6a3cbbbdecd2821cce2050619f96dbd7560ee25f7f51d42c302596aeaddbea54390b78be3ab639340d24d67e4d270a8b0 languageName: node linkType: hard -"jest-docblock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-docblock@npm:29.7.0" +"jest-docblock@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-docblock@npm:29.6.3" dependencies: detect-newline: ^3.0.0 - checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 + checksum: 6f3213a1e79e7eedafeb462acfa9a41303f9c0167893b140f6818fa16d7eb6bf3f9b9cf4669097ca6b7154847793489ecd6b4f6cfb0e416b88cfa3b4b36715b6 languageName: node linkType: hard -"jest-each@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-each@npm:29.7.0" +"jest-each@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-each@npm:29.6.3" dependencies: "@jest/types": ^29.6.3 chalk: ^4.0.0 jest-get-type: ^29.6.3 - jest-util: ^29.7.0 - pretty-format: ^29.7.0 - checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c + jest-util: ^29.6.3 + pretty-format: ^29.6.3 + checksum: fe06e80b3554e2a8464f5f5c61943e02db1f8a7177139cb55b3201a1d1513cb089d8800401f102729a31bf8dd6f88229044e6088fea9dd5647ed11e841b6b88c languageName: node linkType: hard -"jest-environment-jsdom@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-jsdom@npm:29.7.0" +"jest-environment-jsdom@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-environment-jsdom@npm:29.6.4" dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 + "@jest/environment": ^29.6.4 + "@jest/fake-timers": ^29.6.4 "@jest/types": ^29.6.3 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.7.0 - jest-util: ^29.7.0 + jest-mock: ^29.6.3 + jest-util: ^29.6.3 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 + checksum: 2afe105f12d7d93ca56e2e6f67ab07ada3dd3da0516d1198f254930683ab9feb2b8c14417baaca53544eed88fd7fb5744f0dbce2e100269746187317ce0347df languageName: node linkType: hard -"jest-environment-node@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-node@npm:29.7.0" +"jest-environment-node@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-environment-node@npm:29.6.4" dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 + "@jest/environment": ^29.6.4 + "@jest/fake-timers": ^29.6.4 "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 + jest-mock: ^29.6.3 + jest-util: ^29.6.3 + checksum: 518221505af4bd32c84f2af2c03f9d771de2711bd69fe7723b648fcc2e05d95b4e75f493afa9010209e26a4a3309ebee971f9b18c45b540891771d3b68c3a16e languageName: node linkType: hard @@ -12405,9 +12389,9 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-haste-map@npm:29.7.0" +"jest-haste-map@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-haste-map@npm:29.6.4" dependencies: "@jest/types": ^29.6.3 "@types/graceful-fs": ^4.1.3 @@ -12417,42 +12401,42 @@ __metadata: fsevents: ^2.3.2 graceful-fs: ^4.2.9 jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 + jest-util: ^29.6.3 + jest-worker: ^29.6.4 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 + checksum: 4f720fd3813bb38400b7a9a094e55664cbddd907ba1769457ed746f6c870c615167647a5b697a788183d832b1dcb1b66143e52990a6f4403283f6686077fa868 languageName: node linkType: hard -"jest-leak-detector@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-leak-detector@npm:29.7.0" +"jest-leak-detector@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-leak-detector@npm:29.6.3" dependencies: jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 + pretty-format: ^29.6.3 + checksum: 27548fcfc7602fe1b88f8600185e35ffff71751f3631e52bbfdfc72776f5a13a430185cf02fc632b41320a74f99ae90e40ce101c8887509f0f919608a7175129 languageName: node linkType: hard -"jest-matcher-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-matcher-utils@npm:29.7.0" +"jest-matcher-utils@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-matcher-utils@npm:29.6.4" dependencies: chalk: ^4.0.0 - jest-diff: ^29.7.0 + jest-diff: ^29.6.4 jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd + pretty-format: ^29.6.3 + checksum: 9e17bce282e74bdbba2ce5475c490e0bba4f464cd42132bfc5df0337e0853af4dba925c7f4f61cbb0a4818fa121d28d7ff0196ec8829773a22fce59a822976d2 languageName: node linkType: hard -"jest-message-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-message-util@npm:29.7.0" +"jest-message-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-message-util@npm:29.6.3" dependencies: "@babel/code-frame": ^7.12.13 "@jest/types": ^29.6.3 @@ -12460,21 +12444,21 @@ __metadata: chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.7.0 + pretty-format: ^29.6.3 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + checksum: 59f5229a06c073a8877ba4d2e304cc07d63b0062bf5764d4bed14364403889e77f1825d1bd9017c19a840847d17dffd414dc06f1fcb537b5f9e03dbc65b84ada languageName: node linkType: hard -"jest-mock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-mock@npm:29.7.0" +"jest-mock@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-mock@npm:29.6.3" dependencies: "@jest/types": ^29.6.3 "@types/node": "*" - jest-util: ^29.7.0 - checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 + jest-util: ^29.6.3 + checksum: 35772968010c0afb1bb1ef78570b9cbea907c6f967d24b4e95e1a596a1000c63d60e225fb9ddfdd5218674da4aa61d92a09927fc26310cecbbfaa8278d919e32 languageName: node linkType: hard @@ -12497,72 +12481,72 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve-dependencies@npm:29.7.0" +"jest-resolve-dependencies@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-resolve-dependencies@npm:29.6.4" dependencies: jest-regex-util: ^29.6.3 - jest-snapshot: ^29.7.0 - checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 + jest-snapshot: ^29.6.4 + checksum: 34f81d22cbd72203130cc14cbb66d5783d9f59fba4d366b9653f8fb4f6feeaac25d89696f2f77c700659843d5440dc92f58ad443ba05da1da46c39234866d916 languageName: node linkType: hard -"jest-resolve@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve@npm:29.7.0" +"jest-resolve@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-resolve@npm:29.6.4" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 + jest-haste-map: ^29.6.4 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 + jest-util: ^29.6.3 + jest-validate: ^29.6.3 resolve: ^1.20.0 resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 + checksum: 5f0ef260aec79ef00e16e0ba7b27d527054e1faed08a144279cd191b5c5b71af67c52b9ddfd24aa2f563d254618ce9bf7519809f23fb2abf6c4fa375503caa28 languageName: node linkType: hard -"jest-runner@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runner@npm:29.7.0" +"jest-runner@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-runner@npm:29.6.4" dependencies: - "@jest/console": ^29.7.0 - "@jest/environment": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 + "@jest/console": ^29.6.4 + "@jest/environment": ^29.6.4 + "@jest/test-result": ^29.6.4 + "@jest/transform": ^29.6.4 "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^29.7.0 - jest-environment-node: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-leak-detector: ^29.7.0 - jest-message-util: ^29.7.0 - jest-resolve: ^29.7.0 - jest-runtime: ^29.7.0 - jest-util: ^29.7.0 - jest-watcher: ^29.7.0 - jest-worker: ^29.7.0 + jest-docblock: ^29.6.3 + jest-environment-node: ^29.6.4 + jest-haste-map: ^29.6.4 + jest-leak-detector: ^29.6.3 + jest-message-util: ^29.6.3 + jest-resolve: ^29.6.4 + jest-runtime: ^29.6.4 + jest-util: ^29.6.3 + jest-watcher: ^29.6.4 + jest-worker: ^29.6.4 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb + checksum: ca977dd30262171fe000de8407a3187c16e7057ddf690bcc21068155aacd4824ee927b544e0fa9f2885948b47a5123b472da41e095e3bcbdebb79f1fa2f2fc56 languageName: node linkType: hard -"jest-runtime@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runtime@npm:29.7.0" +"jest-runtime@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-runtime@npm:29.6.4" dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/globals": ^29.7.0 + "@jest/environment": ^29.6.4 + "@jest/fake-timers": ^29.6.4 + "@jest/globals": ^29.6.4 "@jest/source-map": ^29.6.3 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 + "@jest/test-result": ^29.6.4 + "@jest/transform": ^29.6.4 "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 @@ -12570,50 +12554,50 @@ __metadata: collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 + jest-haste-map: ^29.6.4 + jest-message-util: ^29.6.3 + jest-mock: ^29.6.3 jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 + jest-resolve: ^29.6.4 + jest-snapshot: ^29.6.4 + jest-util: ^29.6.3 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e + checksum: 93deacd06f8f2bb808dbfb8acbcbc0b724187b3d3fffafd497a32c939bf385ca21f5a3f03eebd5b958a0e93865d0e68a0db73bd0fe16dafbd5e922558aa7b359 languageName: node linkType: hard -"jest-snapshot@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-snapshot@npm:29.7.0" +"jest-snapshot@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-snapshot@npm:29.6.4" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 "@babel/plugin-syntax-jsx": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.7.0 - "@jest/transform": ^29.7.0 + "@jest/expect-utils": ^29.6.4 + "@jest/transform": ^29.6.4 "@jest/types": ^29.6.3 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.7.0 + expect: ^29.6.4 graceful-fs: ^4.2.9 - jest-diff: ^29.7.0 + jest-diff: ^29.6.4 jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 + jest-matcher-utils: ^29.6.4 + jest-message-util: ^29.6.3 + jest-util: ^29.6.3 natural-compare: ^1.4.0 - pretty-format: ^29.7.0 + pretty-format: ^29.6.3 semver: ^7.5.3 - checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad + checksum: 0c9b5ec640457fb780ac6c9b6caa814436e9e16bf744772eee3bfd055ae5f7a3085a6a09b2f30910e31915dafc3955d92357cc98189e4d5dcb417b5fdafda6e3 languageName: node linkType: hard -"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-util@npm:29.7.0" +"jest-util@npm:^29.0.0, jest-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-util@npm:29.6.3" dependencies: "@jest/types": ^29.6.3 "@types/node": "*" @@ -12621,60 +12605,60 @@ __metadata: ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + checksum: 7bf3ba3ac67ac6ceff7d8fdd23a86768e23ddd9133ecd9140ef87cc0c28708effabaf67a6cd45cd9d90a63d645a522ed0825d09ee59ac4c03b9c473b1fef4c7c languageName: node linkType: hard -"jest-validate@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-validate@npm:29.7.0" +"jest-validate@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-validate@npm:29.6.3" dependencies: "@jest/types": ^29.6.3 camelcase: ^6.2.0 chalk: ^4.0.0 jest-get-type: ^29.6.3 leven: ^3.1.0 - pretty-format: ^29.7.0 - checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae + pretty-format: ^29.6.3 + checksum: caa489ed11080441c636b8035ab71bafbdc0c052b1e452855e4d2dd24ac15e497710a270ea6fc5ef8926b22c1ce4d6e07ec2dc193f0810cff5851d7a2222c045 languageName: node linkType: hard -"jest-watcher@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-watcher@npm:29.7.0" +"jest-watcher@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-watcher@npm:29.6.4" dependencies: - "@jest/test-result": ^29.7.0 + "@jest/test-result": ^29.6.4 "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.7.0 + jest-util: ^29.6.3 string-length: ^4.0.1 - checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f + checksum: 13c0f96f7e9212e4f3ef2daf3e787045bdcec414061bf286eca934c7f4083fb04d38df9ced9c0edfbe15f3521ca581eb2ed6108c338a0db1f3e1def65687992f languageName: node linkType: hard -"jest-worker@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-worker@npm:29.7.0" +"jest-worker@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-worker@npm:29.6.4" dependencies: "@types/node": "*" - jest-util: ^29.7.0 + jest-util: ^29.6.3 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + checksum: 05d19a5759ebfeb964036065be55ad8d8e8ddffa85d9b3a4c0b95765695efb1d8226ec824a4d8e660c38cda3389bfeb98d819f47232acf9fb0e79f553b7c0a76 languageName: node linkType: hard -"jest@npm:^29.7.0": - version: 29.7.0 - resolution: "jest@npm:29.7.0" +"jest@npm:^29.5.0, jest@npm:^29.6.4": + version: 29.6.4 + resolution: "jest@npm:29.6.4" dependencies: - "@jest/core": ^29.7.0 + "@jest/core": ^29.6.4 "@jest/types": ^29.6.3 import-local: ^3.0.2 - jest-cli: ^29.7.0 + jest-cli: ^29.6.4 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -12682,7 +12666,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b + checksum: ba28ca7a86d029bcd742bb254c0c8d0119c1e002ddae128ff6409ebabc0b29c36f69dbf3fdd326aff16e7b2500c9a918bbc6a9a5db4d966e035127242239439f languageName: node linkType: hard @@ -15307,8 +15291,8 @@ md5@latest: eslint-plugin-simple-import-sort: ^10.0.0 eslint-plugin-unused-imports: ^3.0.0 husky: ^8.0.3 - jest: ^29.7.0 - jest-environment-jsdom: ^29.7.0 + jest: ^29.6.4 + jest-environment-jsdom: ^29.6.4 lint-staged: ^14.0.1 next: ^13.4.19 node-talisman: ^1.29.10 @@ -17082,14 +17066,14 @@ md5@latest: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.6.3": + version: 29.6.3 + resolution: "pretty-format@npm:29.6.3" dependencies: "@jest/schemas": ^29.6.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + checksum: 4e1c0db48e65571c22e80ff92123925ff8b3a2a89b71c3a1683cfde711004d492de32fe60c6bc10eea8bf6c678e5cbe544ac6c56cb8096e1eb7caf856928b1c4 languageName: node linkType: hard @@ -18547,7 +18531,7 @@ request-debug@latest: fast-xml-parser: ^4.2.7 fs-extra: 10.1.0 iconv-lite: 0.6.3 - jest: ^29.7.0 + jest: ^29.5.0 jest-date-mock: ^1.0.8 joi: 17.6.0 joi-password: 4.0.0 @@ -18590,7 +18574,7 @@ request-debug@latest: swagger-jsdoc: 6.2.8 swagger-ui-express: 4.6.2 tcp-port-used: 1.0.2 - ts-jest: ^29.1.1 + ts-jest: ^29.1.0 tsup: ^7.2.0 tsx: 3.12.6 type-fest: ^3.10.0 @@ -19746,7 +19730,7 @@ request-debug@latest: languageName: node linkType: hard -"ts-jest@npm:^29.1.1": +"ts-jest@npm:^29.1.0, ts-jest@npm:^29.1.1": version: 29.1.1 resolution: "ts-jest@npm:29.1.1" dependencies: From 1a8930dde4409acbf6cccce462a1a375dbe7f6ba Mon Sep 17 00:00:00 2001 From: Moroine Date: Tue, 24 Oct 2023 14:07:47 +0200 Subject: [PATCH 15/15] chore: disable auto-preview --- .github/workflows/preview.yml | 64 +++-------------------------------- 1 file changed, 5 insertions(+), 59 deletions(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 293238fe5..83ac4c289 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -10,69 +10,15 @@ jobs: secrets: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - deploy: - if: github.event.pull_request.draft == false - concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - name: Deploy Preview ${{ github.event.pull_request.number }} + deploy_comment: + name: Add deploy comment runs-on: ubuntu-latest steps: - - name: Checkout project - uses: actions/checkout@v4 - with: - lfs: true - - - name: Install SSH key - uses: shimataro/ssh-key-action@v2 - with: - name: github_actions - key: ${{ secrets.DEPLOY_SSH_PRIVATE_KEY }} - known_hosts: ${{ vars.SSH_KNOWN_HOSTS }} - config: | - Host * - IdentityFile ~/.ssh/github_actions - - - name: Create vault pwd file - run: echo ${{ secrets.VAULT_PWD }} > .infra/.vault_pwd.txt - - - name: Install jmespath - run: | - sudo pipx inject ansible-core jmespath - - - name: Run playbook - run: .bin/mna-tdb deploy preview "${{ github.event.pull_request.number }}" - env: - ANSIBLE_VAULT_PASSWORD_FILE: .infra/.vault_pwd.txt - ANSIBLE_REMOTE_USER: deploy - ANSIBLE_BECOME_PASS: ${{ secrets.DEPLOY_PASS }} - - - name: Encrypt Error log on failure - run: .bin/mna-tdb deploy:log:encrypt - if: failure() - env: - ANSIBLE_VAULT_PASSWORD_FILE: .infra/.vault_pwd.txt - - - name: Upload failure artifacts on failure - if: failure() - uses: actions/upload-artifact@v3 - with: - name: error-logs - path: /tmp/deploy_error.log.gpg - - - name: Preview Summary when failed - if: failure() - run: echo 'You can get error logs using `.bin/mna-tdb deploy:log:decrypt ${{ github.run_id }}`' >> $GITHUB_STEP_SUMMARY - - - name: Preview Summary - run: echo 'https://${{ github.event.pull_request.number }}.tdb-preview.apprentissage.beta.gouv.fr/ 🚀' >> $GITHUB_STEP_SUMMARY - - name: Comment PR Preview if: github.event.pull_request.state != 'closed' uses: thollander/actions-comment-pull-request@v2 with: message: | - ### :rocket: Prévisualisation - https://${{ github.event.pull_request.number }}.tdb-preview.apprentissage.beta.gouv.fr/ - comment_tag: execution - mode: recreate + To deploy this PR just add a comment with a simple :rocket: + comment_tag: deployment_instructions + mode: upsert