From 61f7b5ad58711591098fd60354478ab967866b32 Mon Sep 17 00:00:00 2001 From: jmgasper Date: Fri, 17 Jul 2026 13:10:27 +1000 Subject: [PATCH 1/2] feat: migrate resource API to TypeScript and NestJS --- .circleci/config.yml | 245 +- .dockerignore | 11 +- .eslintrc.yaml | 1 - .gitignore | 8 +- ReadMe.md | 295 +- Verification.md | 181 +- app-bootstrap.js | 15 - app-bootstrap.ts | 72 + app-constants.js => app-constants.ts | 6 +- app-routes.js => app-routes.ts | 38 +- app.js => app.ts | 91 +- appStartUp.sh | 16 +- build.sh | 29 +- docker/Dockerfile | 59 +- eslint.config.mjs | 64 + main.ts | 90 + nest-cli.json | 10 + package.json | 102 +- pnpm-lock.yaml | 6029 +++++++++++------ prisma.config.ts | 19 + prisma/challenge-schema.prisma | 6 +- prisma/member-schema.prisma | 7 +- prisma/schema.prisma | 5 +- src/app.module.ts | 11 + src/common/errors.js | 42 - src/common/errors.ts | 53 + src/common/{helper.js => helper.ts} | 286 +- src/common/{logger.js => logger.ts} | 71 +- src/common/prisma-adapter.ts | 157 + src/common/prisma.js | 16 - src/common/prisma.ts | 154 + src/controllers/CleanUpController.js | 19 - src/controllers/CleanUpController.ts | 28 + src/controllers/HealthCheckController.js | 18 - src/controllers/HealthCheckController.ts | 26 + src/controllers/ResourceController.js | 77 - src/controllers/ResourceController.ts | 104 + src/controllers/ResourceRoleController.js | 43 - src/controllers/ResourceRoleController.ts | 58 + .../ResourceRolePhaseDependencyController.js | 54 - .../ResourceRolePhaseDependencyController.ts | 72 + src/{routes.js => routes.ts} | 5 +- .../{clear-tables.js => clear-tables.ts} | 9 + .../{seed-tables.js => seed-tables.ts} | 36 +- src/scripts/{view-data.js => view-data.ts} | 7 + .../{CleanUpService.js => CleanUpService.ts} | 17 +- src/services/HealthCheckService.js | 34 - src/services/HealthCheckService.ts | 26 + ... => ResourceRolePhaseDependencyService.ts} | 5 +- ...eRoleService.js => ResourceRoleService.ts} | 7 +- ...{ResourceService.js => ResourceService.ts} | 14 +- test/common/prepare.js | 74 +- test/unit/createResource.test.js | 24 +- test/unit/getResources.test.js | 11 +- test/unit/prisma-adapter.test.ts | 70 + tsconfig.build.json | 19 + tsconfig.json | 26 + 57 files changed, 5988 insertions(+), 3084 deletions(-) delete mode 100644 .eslintrc.yaml delete mode 100644 app-bootstrap.js create mode 100644 app-bootstrap.ts rename app-constants.js => app-constants.ts (62%) rename app-routes.js => app-routes.ts (69%) rename app.js => app.ts (53%) mode change 100644 => 100755 appStartUp.sh create mode 100644 eslint.config.mjs create mode 100644 main.ts create mode 100644 nest-cli.json create mode 100644 prisma.config.ts create mode 100644 src/app.module.ts delete mode 100644 src/common/errors.js create mode 100644 src/common/errors.ts rename src/common/{helper.js => helper.ts} (61%) rename src/common/{logger.js => logger.ts} (53%) create mode 100644 src/common/prisma-adapter.ts delete mode 100644 src/common/prisma.js create mode 100644 src/common/prisma.ts delete mode 100644 src/controllers/CleanUpController.js create mode 100644 src/controllers/CleanUpController.ts delete mode 100644 src/controllers/HealthCheckController.js create mode 100644 src/controllers/HealthCheckController.ts delete mode 100644 src/controllers/ResourceController.js create mode 100644 src/controllers/ResourceController.ts delete mode 100644 src/controllers/ResourceRoleController.js create mode 100644 src/controllers/ResourceRoleController.ts delete mode 100644 src/controllers/ResourceRolePhaseDependencyController.js create mode 100644 src/controllers/ResourceRolePhaseDependencyController.ts rename src/{routes.js => routes.ts} (93%) rename src/scripts/{clear-tables.js => clear-tables.ts} (63%) rename src/scripts/{seed-tables.js => seed-tables.ts} (77%) rename src/scripts/{view-data.js => view-data.ts} (77%) rename src/services/{CleanUpService.js => CleanUpService.ts} (57%) delete mode 100644 src/services/HealthCheckService.js create mode 100644 src/services/HealthCheckService.ts rename src/services/{ResourceRolePhaseDependencyService.js => ResourceRolePhaseDependencyService.ts} (95%) rename src/services/{ResourceRoleService.js => ResourceRoleService.ts} (94%) rename src/services/{ResourceService.js => ResourceService.ts} (98%) create mode 100644 test/unit/prisma-adapter.test.ts create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json diff --git a/.circleci/config.yml b/.circleci/config.yml index 2a0e79b..40c2aac 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,4 +1,5 @@ version: 2.1 + parameters: run_automatedtesting: default: false @@ -6,13 +7,18 @@ parameters: run_basedeployment: default: true type: boolean + defaults: &defaults docker: - - image: cimg/python:3.12.2-browsers + - image: cimg/python:3.12.2-browsers + install_dependency: &install_dependency name: Installation of build and deployment dependencies. command: | - pip3 install awscli --upgrade + sudo apt-get update + sudo apt-get install --yes jq python3-pip + sudo pip3 install awscli --upgrade + install_deploysuite: &install_deploysuite name: Installation of install_deploysuite. command: | @@ -21,126 +27,159 @@ install_deploysuite: &install_deploysuite cp ./../buildscript/buildenv.sh . cp ./../buildscript/awsconfiguration.sh . cp ./../buildscript/psvar-processor.sh . -restore_cache_settings_for_build: &restore_cache_settings_for_build - key: docker-node-modules-{{ checksum "yarn.lock" }} - -save_cache_settings: &save_cache_settings - key: docker-node-modules-{{ checksum "yarn.lock" }} - paths: - - node_modules finger_print_add: &finger_print_add - fingerprints: - - SHA256:KJYSvQh9CxkY9yRXxp+Geo6cllnfSiiKAH3LFQ/X9f4 + fingerprints: + - SHA256:KJYSvQh9CxkY9yRXxp+Geo6cllnfSiiKAH3LFQ/X9f4 + builddeploy_steps: &builddeploy_steps -- add_ssh_keys: *finger_print_add -- checkout -- setup_remote_docker -- run: *install_dependency -- run: *install_deploysuite -- restore_cache: *restore_cache_settings_for_build -- run: - name: "Build docker image" - command: | - ./awsconfiguration.sh ${DEPLOY_ENV} - source awsenvconf - ./psvar-processor.sh -t appenv -p /config/${APPNAME}/buildvar - source buildvar_env - rm -f awsenvconf - ./build.sh ${APPNAME} -- save_cache: *save_cache_settings -- deploy: - name: Running MasterScript. - command: "./awsconfiguration.sh $DEPLOY_ENV\nsource awsenvconf\n./psvar-processor.sh -t appenv -p /config/${APPNAME}/deployvar\nsource deployvar_env\n./master_deploy.sh -d ECS -e $DEPLOY_ENV -t latest -j /config/common/global-appvar,/config/${APPNAME}/appvar -i ${APPNAME} -p FARGATE\n#testing code changes\nif [[ true ]]; then\n ./psvar-processor.sh -t appenv -p /config/common/qa-appvar\n source qa-appvar_env \n curl --request POST \\\n --url https://circleci.com/api/v2/project/github/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/pipeline \\\n --header \"Circle-Token: ${QA_USER_TOKEN}\" \\\n --header 'content-type: application/json' \\\n --data '{\"branch\":\"'\"$CIRCLE_BRANCH\"'\",\"parameters\":{\"run_automatedtesting\":true , \"run_basedeployment\": false}}'\nfi \n #magic___^_^___line\n #magic___^_^___line\n" + - add_ssh_keys: *finger_print_add + - checkout + - setup_remote_docker + - run: *install_dependency + - run: *install_deploysuite + - run: + name: Build docker image + command: | + ./awsconfiguration.sh "${DEPLOY_ENV}" + source awsenvconf + ./psvar-processor.sh -t appenv -p "/config/${APPNAME}/buildvar" + source buildvar_env + rm -f awsenvconf + ./build.sh "${APPNAME}" + - deploy: + name: Running MasterScript. + command: | + ./awsconfiguration.sh "$DEPLOY_ENV" + source awsenvconf + ./psvar-processor.sh -t appenv -p "/config/${APPNAME}/deployvar" + source deployvar_env + ./master_deploy.sh \ + -d ECS \ + -e "$DEPLOY_ENV" \ + -t latest \ + -j "/config/common/global-appvar,/config/${APPNAME}/appvar" \ + -i "$APPNAME" \ + -p FARGATE + + ./psvar-processor.sh -t appenv -p /config/common/qa-appvar + source qa-appvar_env + curl --request POST \ + --url "https://circleci.com/api/v2/project/github/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/pipeline" \ + --header "Circle-Token: ${QA_USER_TOKEN}" \ + --header 'content-type: application/json' \ + --data '{"branch":"'"$CIRCLE_BRANCH"'","parameters":{"run_automatedtesting":true,"run_basedeployment":false}}' + jobs: - # Build & Deploy against development backend - "build-dev": - !!merge <<: *defaults + build-dev: + <<: *defaults environment: - DEPLOY_ENV: "DEV" - LOGICAL_ENV: "dev" - APPNAME: "resources-api-v6" + DEPLOY_ENV: DEV + LOGICAL_ENV: dev + APPNAME: resources-api-v6 steps: *builddeploy_steps - "build-prod": - !!merge <<: *defaults + build-prod: + <<: *defaults environment: - DEPLOY_ENV: "PROD" - LOGICAL_ENV: "prod" - APPNAME: "resources-api-v6" + DEPLOY_ENV: PROD + LOGICAL_ENV: prod + APPNAME: resources-api-v6 steps: *builddeploy_steps - "Run-Newman-Test": + Run-Newman-Test: docker: - - image: circleci/node:12 - environment: - DEPLOY_ENV: "DEV" - LOGICAL_ENV: "dev" - APPNAME: "resources-api-v6" - - image: tray/dynamodb-local - command: "-inMemory -port 7777" - - image: elasticsearch:6.8.13 - environment: - discovery.type: "single-node" + - image: cimg/node:22.13.1 + environment: + DEPLOY_ENV: DEV + LOGICAL_ENV: dev + APPNAME: resources-api-v6 steps: - - checkout - - setup_remote_docker - - run: *install_dependency - - run: *install_deploysuite - - run: - name: 'newman test' - command: | - ./awsconfiguration.sh $DEPLOY_ENV - source awsenvconf - ./psvar-processor.sh -t appenv -p /config/resources-api-v6/qaappvar - source qaappvar_env - ./psvar-processor.sh -t appenv -p /config/common/global-appvar - source global-appvar_env - npm i - cd mock - (npm run mock-challenge-api&) - (NODE_ENV=test npm start&) - npm run test:newman:clear - npm run test:newman - npm run test:newman:clear - - store_artifacts: - path: ./newman + - checkout + - run: *install_dependency + - run: *install_deploysuite + - restore_cache: + keys: + - pnpm-store-v1-{{ checksum "pnpm-lock.yaml" }} + - pnpm-store-v1- + - run: + name: Install pnpm dependencies + command: | + sudo npm install --global pnpm@10.33.2 + pnpm install --frozen-lockfile + pnpm build + - save_cache: + key: pnpm-store-v1-{{ checksum "pnpm-lock.yaml" }} + paths: + - ~/.local/share/pnpm/store + - run: + name: Newman test + command: | + ./awsconfiguration.sh "$DEPLOY_ENV" + source awsenvconf + ./psvar-processor.sh -t appenv -p /config/resources-api-v6/qaappvar + source qaappvar_env + ./psvar-processor.sh -t appenv -p /config/common/global-appvar + source global-appvar_env + + pnpm run mock-challenge-api > /tmp/mock-challenge-api.log 2>&1 & + mock_pid=$! + NODE_ENV=test pnpm start > /tmp/resource-api.log 2>&1 & + app_pid=$! + trap 'kill "$mock_pid" "$app_pid" 2>/dev/null || true' EXIT + + health_url="http://localhost:${PORT:-3000}/${API_VERSION:-v6}/resources/health" + for attempt in $(seq 1 30); do + if curl --fail --silent "$health_url" > /dev/null; then + break + fi + if [[ "$attempt" == 30 ]]; then + cat /tmp/mock-challenge-api.log + cat /tmp/resource-api.log + exit 1 + fi + sleep 1 + done + + pnpm run test:newman:clear + pnpm run test:newman + pnpm run test:newman:clear + - store_artifacts: + path: ./newman workflows: version: 2 build: when: << pipeline.parameters.run_basedeployment >> jobs: - # Development builds are executed on "develop" branch only. - - "build-dev": - context: org-global - filters: - branches: - only: - - develop - - hotfix/deploy - - PM-3458 - - # Production builds are exectuted only on tagged commits to the testing - # master branch. - - "build-prod": - context: org-global - filters: - branches: - only: - - master + - build-dev: + context: org-global + filters: + branches: + only: + - develop + - typescript + - hotfix/deploy + - PM-3458 + - build-prod: + context: org-global + filters: + branches: + only: + - master testingflow: when: << pipeline.parameters.run_automatedtesting >> jobs: - - Hold [Performance-Testing]: - type: approval - - "Run-Newman-Test": - context: org-global - requires: - - Hold [Performance-Testing] - filters: - branches: - only: - - develop - - dev-circleci + - Hold [Performance-Testing]: + type: approval + - Run-Newman-Test: + context: org-global + requires: + - Hold [Performance-Testing] + filters: + branches: + only: + - develop + - typescript + - dev-circleci diff --git a/.dockerignore b/.dockerignore index 861ea06..5f2a21e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,13 @@ -node_modules .git -coverage +.DS_Store +.env +.env.* .nyc_output +coverage +dist +env.sh +migrator +node_modules npm-debug.log* pnpm-debug.log* +src/generated diff --git a/.eslintrc.yaml b/.eslintrc.yaml deleted file mode 100644 index eab45db..0000000 --- a/.eslintrc.yaml +++ /dev/null @@ -1 +0,0 @@ -extends: standard diff --git a/.gitignore b/.gitignore index 8490318..9748e37 100644 --- a/.gitignore +++ b/.gitignore @@ -65,4 +65,10 @@ typings/ migrator/data -src/scripts/seed/*.json \ No newline at end of file +src/scripts/seed/*.json + +# Generated Prisma 7 clients are recreated during installation and builds. +src/generated/ + +# NestJS build output. +dist/ diff --git a/ReadMe.md b/ReadMe.md index d25b108..f216542 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,249 +1,164 @@ -# Topcoder Challenge Resources API +# Topcoder Challenge Resources API v6 -This microservice provides interaction with Challenge Resources. +This service manages challenge resources, resource roles, and resource-role phase dependencies while preserving the existing v6 HTTP and event contracts. -### Development deployment status -[![CircleCI](https://circleci.com/gh/topcoder-platform/resources-api/tree/develop.svg?style=svg)](https://circleci.com/gh/topcoder-platform/resources-api/tree/develop) +## Technology -### Production deployment status -[![CircleCI](https://circleci.com/gh/topcoder-platform/resources-api/tree/master.svg?style=svg)](https://circleci.com/gh/topcoder-platform/resources-api/tree/master) +- TypeScript 5 and NestJS 11 +- Prisma 7 with PostgreSQL driver adapters +- Node.js 22.13.1 +- pnpm 10.33.2 +- PostgreSQL for the resources, member, and challenge data sources -## Swagger definition -- [Swagger](https://github.com/topcoder-platform/resources-api/blob/develop/docs/swagger.yaml) +The exact local Node version is recorded in `.nvmrc`. Run `nvm use` after entering this project directory and before running pnpm or Node commands. -## Intended use +## Prerequisites -- Production API +- Node.js 22.13.1 through nvm +- pnpm 10.33.2 +- PostgreSQL databases accessible through the existing database URLs +- Docker with BuildKit when building the production image -## Related repos -- [Challenge API](https://github.com/topcoder-platform/challenge-api) -- [Frontend App](https://github.com/topcoder-platform/challenge-engine-ui) +## Installation and commands -## Prerequisites -- [NodeJS](https://nodejs.org/en/) (v10) -- [Docker](https://www.docker.com/) -- [Docker Compose](https://docs.docker.com/compose/) - -## Configuration - -Configuration for the application is at `config/default.js`. -The following parameters can be set in config files or in env variables: - -- LOG_LEVEL: the log level, default is 'debug' -- PORT: the server port, default is 3000 -- API_VERSION: the API version, default is v5 -- AUTH_SECRET: The authorization secret used during token verification. -- VALID_ISSUERS: The valid issuer of tokens, a json array contains valid issuer. -- AUTH0_URL: Auth0 URL, used to get TC M2M token -- AUTH0_AUDIENCE: Auth0 audience, used to get TC M2M token -- TOKEN_CACHE_TIME: Auth0 token cache time, used to get TC M2M token -- AUTH0_CLIENT_ID: Auth0 client id, used to get TC M2M token -- AUTH0_CLIENT_SECRET: Auth0 client secret, used to get TC M2M token -- AUTH0_PROXY_SERVER_URL: Proxy Auth0 URL, used to get TC M2M token -- TERMS_API_URL: Terms API url, default is 'https://api.topcoder-dev.com/v5/terms' -- MEMBER_API_URL: Member api url, default is 'https://api.topcoder-dev.com/v3/members' -- USER_API_URL: User api url, default is 'https://api.topcoder-dev.com/v3/users' -- CHALLENGE_API_URL: Challenge api url, default is 'http://localhost:4000/v5/challenges'. -- CHALLENGE_PHASES_API_URL: Challenge phases API URL, default is 'https://api.topcoder-dev.com/v5/challengephases'. -- SUBMISSIONS_API_URL: Submission API URL, default value is 'https://api.topcoder-dev.com/v5/submissions' -- SCOPES: The M2M scopes, refer `config/default.js` for more information -- BUSAPI_URL: the bus api, default value is 'https://api.topcoder-dev.com/v5' -- KAFKA_ERROR_TOPIC: Kafka error topic, default value is 'common.error.reporting', -- KAFKA_MESSAGE_ORIGINATOR: the Kafka message originator, default value is 'resources-api' -- RESOURCE_CREATE_TOPIC: the resource create Kafka topic, default value is 'challenge.action.resource.create', -- RESOURCE_DELETE_TOPIC: the resource delete Kafka topic, default value is 'challenge.action.resource.delete', -- RESOURCE_ROLE_CREATE_TOPIC: the resource role create topic, default value is 'challenge.action.resource.role.create', -- RESOURCE_ROLE_UPDATE_TOPIC: the resource role update topic, default value is 'challenge.action.resource.role.update' -- AUTOMATED_TESTING_NAME_PREFIX: the role name prefix for every `ResourceRole` record - -Configuration for testing is at `config/test.js`, only add such new configurations different from `config/default.js` -- WAIT_TIME: wait time used in test, default is 6000 or 6 seconds -- MOCK_CHALLENGE_API_PORT: the mock server port, default is 4000. -- AUTH_V2_URL: The auth v2 url -- AUTH_V2_CLIENT_ID: The auth v2 client id -- AUTH_V3_URL: The auth v3 url -- ADMIN_CREDENTIALS_USERNAME: The user's username with admin role -- ADMIN_CREDENTIALS_PASSWORD: The user's password with admin role -- COPILOT_CREDENTIALS_USERNAME: The user's username with copilot role -- COPILOT_CREDENTIALS_PASSWORD: The user's password with copilot role -- USER_CREDENTIALS_USERNAME: The user's username with user role -- USER_CREDENTIALS_PASSWORD: The user's password with user role -- AUTOMATED_TESTING_REPORTERS_FORMAT: indicates reporters format. It is an array of the formats. e.g. `['html']` produces html format. `['cli', 'json', 'junit', 'html']` is the full format. -*For the details of the supported format, please refer to https://www.npmjs.com/package/newman#reporters*. - -## Available commands -- Be sure to set correct value for environment variable `DATABASE_URL` first. -- Install dependencies `npm install` -- Run lint `npm run lint` -- Run lint fix `npm run lint:fix` -- Create tables `npm run create-tables` -- Reset tables `npm run drop-tables` -- Clear all data in db `npm run clear-tables` -- Create tables for test environment `npm run create-tables:test` -- Reset tables for test environment `npm run drop-tables:test` -- Clear and init db `npm run init-db` -- Start app `npm start` -- App is running at `http://localhost:3000` -- Start mock challenge api server for unit tests `npm run mock-challenge-api` -- Start mock api server for local dev `npm run mock-api` -- The mock challenge api server is running at `http://localhost:4000` -- The mock api server is running at `http://localhost:4001` -- Run the Postman tests `npm run test:newman` -- Clear the testing data by Postman tests: `npm run test:newman:clear` - -## Local Deployment -### Foreman Setup -To install foreman follow this [link](https://theforeman.org/manuals/1.24/#3.InstallingForeman) - -To know how to use foreman follow this [link](https://theforeman.org/manuals/1.24/#2.Quickstart) - - -### Database Setup - -We can use Postgres setup on Docker for testing purpose. Just run `docker-compose up` in `local` folder. - -You can also use docker to start it directly. ```bash -docker pull postgres:16.8 - -docker run -d --name resourceapi -p 5532:5432 \ - -e POSTGRES_USER=johndoe -e POSTGRES_DB=resourceapi \ - -e POSTGRES_PASSWORD=mypassword \ - postgres:16.8 +nvm use +pnpm install --frozen-lockfile +pnpm lint +pnpm build +pnpm test ``` -After that, please run -```bash -export DATABASE_URL="postgresql://johndoe:mypassword@localhost:5532/resourceapi?schema=public&statement_timeout=60000" -export MEMBER_DB_URL="postgresql://johndoe:mypassword@localhost:5632/memberdb" -export CHALLENGE_DB_URL="postgresql://johndoe:mypassword@localhost:5732/challengedb" -``` +`pnpm install` runs the `postinstall` hook and generates the service's resources, member, and challenge Prisma 7 clients. `pnpm prisma:generate` intentionally generates only those three service clients. The committed `packages/resources-prisma-client` directory remains the existing Prisma 6-compatible external artifact used by sibling services; it is not regenerated as part of this rollout. -### Create Tables +Useful commands are: -1. Make sure Postgres are running as per instructions above. -2. Make sure you have configured all config parameters. Refer [Configuration](#configuration) -3. Run `npm run create-tables` to create tables and `npm run seed-tables` to create test data. +- `pnpm start` starts the compiled application from `dist/main.js`. +- `pnpm start:dev` starts Nest in watch mode. +- `pnpm build` compiles the TypeScript application. +- `pnpm lint` checks TypeScript source and tests. +- `pnpm prisma:generate` regenerates the three internal clients. +- `pnpm exec prisma migrate deploy` applies the existing resources migration history. +- `pnpm seed-tables` seeds resource tables. +- `pnpm view-data ` displays resource data. +- `pnpm run mock-challenge-api` starts the challenge mock on port 4000. +- `pnpm run mock-api` starts the local API mock on port 4001. +- `pnpm run test:newman` runs the Postman regression suite. +- `pnpm run test:newman:clear` removes Postman test data. -### Mock API +The API listens on port 3000 by default. Swagger UI is available at `/v6/resources/api-docs`, and the source definition is `docs/swagger.yaml`. -This mock service is designed for local development. +## Configuration compatibility -You can run mock api with `npm run mock-api` +The TypeScript conversion retains the existing environment-variable names and defaults. No deployment parameter rename is required. -It will setup local environment for Challenge API, Submission API and Member API. +### Application and authentication -### Mock Challenge V5 API +- `LOG_LEVEL`, `PORT`, `API_VERSION`, `DEFAULT_PAGE_SIZE`, and `API_BASE_URL` +- `AUTH_SECRET` and `VALID_ISSUERS` +- `AUTH0_URL`, `AUTH0_AUDIENCE`, `TOKEN_CACHE_TIME`, `AUTH0_CLIENT_ID`, `AUTH0_CLIENT_SECRET`, and `AUTH0_PROXY_SERVER_URL` +- `SCOPE_READ`, `SCOPE_CREATE`, `SCOPE_DELETE`, `SCOPE_UPDATE`, and `SCOPE_ALL` +- `SUBMITTER_RESOURCE_ROLE_ID`, `REVIEWER_RESOURCE_ROLE_ID`, and `ITERATIVE_REVIEWER_RESOURCE_ROLE_ID` -This mock service is designed for unit tests. +Defaults remain port `3000`, API version `v6`, and page size `1000`. -The `GET /v5/challenges/{id}` is mocked. It is a simple server app, the code is under mock folder. -You can start the mock server using command `npm run mock-challenge-api`. +### Databases -### Scripts -1. Creating tables: `npm run create-tables` -2. Drop/delete tables: `npm run drop-tables` -3. Seed/Insert data to tables: `npm run seed-tables` -4. Initialize database in default environment, it will clear all data: `npm run init-db` -5. View table data in default environment: `npm run view-data `, ModelName can be `Resource`, `ResourceRole` or `ResourceRolePhaseDependency` +- `DATABASE_URL` connects to the resources database and is used by `prisma migrate deploy`. +- `MEMBER_DB_URL` connects the read-only member client. +- `CHALLENGE_DB_URL` connects the challenge client used for challenge lookups and registrant-count updates. +- `RESOURCE_SERVICE_PRISMA_TIMEOUT` retains the existing Prisma timeout setting. +All three URLs are required for application behavior that touches their corresponding data source. They remain separate parameters; this upgrade does not introduce replacement URL names. -## Production deployment +### Downstream APIs -- TBD +- `TERMS_API_URL` +- `MEMBER_API_URL` +- `USER_API_URL` +- `CHALLENGE_API_URL` +- `CHALLENGE_PHASES_API_URL` +- `SUBMISSIONS_API_URL` +- `GROUPS_API_URL` -## Running tests +### Bus API and event topics -### Configuration -Test configuration is at `config/test.js`. You don't need to change them. +This service publishes events through the existing Bus API HTTP client. It does not consume Kafka messages, so it does not use `@platformatic/kafka` and requires no Kafka broker configuration. -The following test parameters can be set in config file or in env variables: +The retained publishing parameters are: -- WAIT_TIME: wait time -- MOCK_CHALLENGE_API_PORT: mock challenge api port -- AUTH_V2_URL: The auth v2 url -- AUTH_V2_CLIENT_ID: The auth v2 client id -- AUTH_V3_URL: The auth v3 url -- ADMIN_CREDENTIALS_USERNAME: The user's username with admin role -- ADMIN_CREDENTIALS_PASSWORD: The user's password with admin role -- COPILOT_CREDENTIALS_USERNAME: The user's username with copilot role -- COPILOT_CREDENTIALS_PASSWORD: The user's password with copilot role -- USER_CREDENTIALS_USERNAME: The user's username with user role -- USER_CREDENTIALS_PASSWORD: The user's password with user role +- `BUSAPI_URL` +- `KAFKA_ERROR_TOPIC` +- `KAFKA_MESSAGE_ORIGINATOR` +- `RESOURCE_CREATE_TOPIC` +- `RESOURCE_DELETE_TOPIC` +- `RESOURCE_ROLE_CREATE_TOPIC` +- `RESOURCE_ROLE_UPDATE_TOPIC` +- `EMAIL_NOTIFICATIN_TOPIC` +`EMAIL_NOTIFICATIN_TOPIC` intentionally retains its existing spelling for deployment compatibility. The `KAFKA_*` parameter names are also retained even though this service reaches Kafka indirectly through Bus API. -### Prepare +Registration email payloads continue to use `EMAIL_FROM`, `SENDGRID_TEMPLATE_ID`, `SENDGRID_TEMPLATE_ID_NO_FORUM`, `SUBMIT_URL`, `REVIEW_APP_URL`, `HELP_URL`, and `SUPPORT_EMAIL`. `TOPCROWD_CHALLENGE_TEMPLATE_ID` continues to control whether the registration email event is emitted. -- Start Local Postgres. -- Create Postgres tables and create test dat. -- Config `DATABASE_URL` -- Various config parameters should be properly set. +Publishing remains synchronous. A command that emits an event waits for Bus API to accept it, preserving the existing endpoint success and failure behavior. -### Running unit tests +### Automated-test settings -#### Setup Database for Tests +The existing test-only settings remain supported: `WAIT_TIME`, `MOCK_CHALLENGE_API_PORT`, `MOCK_API_PORT`, `AUTH_V2_URL`, `AUTH_V2_CLIENT_ID`, `AUTH_V3_URL`, the admin/copilot/user credential variables, `AUTOMATED_TESTING_REPORTERS_FORMAT`, and `AUTOMATED_TESTING_NAME_PREFIX`. -The Unit tests will clear all data in db. So it's better to setup db for test environment. +## Local database setup -If you are using docker, you can run -```bash -docker run -d --name testdb -p 5430:5432 \ - -e POSTGRES_USER=johndoe -e POSTGRES_DB=testdb \ - -e POSTGRES_PASSWORD=mypassword \ - postgres:16.8 +Start or connect to the three existing PostgreSQL databases, then export their URLs without changing the variable names: -export DATABASE_URL="postgresql://johndoe:mypassword@localhost:5430/testdb?schema=public&statement_timeout=60000" +```bash +export DATABASE_URL="postgresql://user:password@localhost:5532/resourceapi?schema=resources" +export MEMBER_DB_URL="postgresql://user:password@localhost:5632/memberdb" +export CHALLENGE_DB_URL="postgresql://user:password@localhost:5732/challengedb" ``` -It will start a Postgres and listens to port `5430`. Technically you can run tests and application at the same time. - -Be sure to export `DATABASE_URL` new value before running tests. - -#### Running unit tests. - -To run unit tests and generate coverage report. +Apply the checked-in resources migrations and build the application: ```bash -npm run test +pnpm exec prisma migrate deploy +pnpm build +pnpm start ``` -### Running E2E tests with Postman +## Prisma migration policy -#### `Start` the app server and mock API server before running e2e tests. You may need to set the env variables by calling `source env.sh` before calling `NODE_ENV=test npm start`. +This upgrade is designed for existing databases. The SQL files and migration lock under `prisma/migrations` are the deployment history and must remain unchanged. Do not reset the database, run `prisma migrate dev`, generate a new migration for this conversion, or use `prisma db push` against a deployed environment. -- Make sure the db and es are started -```bash - $ cd resources-api +The production entrypoint runs `pnpm exec prisma migrate deploy` before starting `dist/main.js`. This applies only pending migrations from the unchanged history and does not recreate the schema. - # NOTE: - # if tables and data already exist, please run first +## Docker - # $ npm run drop-tables +Build the Node 22 production image with: + +```bash +./build.sh resources-api-v6 +``` - # to drop data and tables +The multi-stage build performs a frozen pnpm install, Prisma generation through `postinstall`, lint, and TypeScript compilation. The runtime image contains the compiled application, production dependencies, Prisma CLI and configuration, unchanged migrations, Swagger documentation, the three generated internal clients, and the committed external client. It runs as the non-root `node` user. - # Then re-initialize the es server and the database. +Runtime configuration continues to be injected through the existing environment variables. The default configuration is included in the image; local `env.sh` files remain excluded. - $ npm run create-tables - $ npm run init-db -``` +## Testing -To run postman e2e tests. +Unit tests require the configured resources, member, and challenge databases as exercised by the relevant test cases: ```bash -npm run test:newman +nvm use +pnpm test ``` -To clear the testing data from postman e2e tests. +For the Postman suite, build and start the service and challenge mock, then run: ```bash -npm run test:newman:clear +pnpm run test:newman:clear +pnpm run test:newman +pnpm run test:newman:clear ``` -## Running tests in CI - -- TBD - -## Verification +CircleCI performs the Docker build and deployment using the existing `APPNAME`, `DEPLOY_ENV`, and parameter-store paths. The automated-test workflow uses Node 22.13.1, pnpm 10.33.2, and the same deployment environment names. -Refer to the verification document `Verification.md`. +See `Verification.md` for the regression checklist. diff --git a/Verification.md b/Verification.md index b3c9650..9643614 100644 --- a/Verification.md +++ b/Verification.md @@ -1,96 +1,93 @@ -# Topcoder Challenge Resources API - -## Postman test -- import Postman collection and environment in the docs folder to Postman -- Refer `ReadMe.md` to start postgres, create tables, start the app and mock server -- run `npm run init-db` to clear and setup the database before testing. -- Just run the whole test cases under provided environment. -- For each success POST/PUT/DELETE request, it will also send an event using bus api. You can also check the app console, it will have info log like `Publish event to Kafka topic `. Go to https://lauscher.topcoder-dev.com/ view topics `challenge.action.resource.create`, `challenge.action.resource.delete`, `challenge.action.resource.role.create` and `challenge.action.resource.role.update`, to verify the Kafka message have successfully received. - -## Unit test Coverage - - 127 passing (1m) - -File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -----------------------------------------|----------|----------|----------|----------|------------------- -All files | 88.69 | 83.7 | 90.43 | 88.48 | - resources-api | 100 | 100 | 100 | 100 | - app-bootstrap.js | 100 | 100 | 100 | 100 | - app-constants.js | 100 | 100 | 100 | 100 | - resources-api/config | 100 | 98.78 | 100 | 100 | - default.js | 100 | 98.78 | 100 | 100 | 35 - test.js | 100 | 100 | 100 | 100 | - resources-api/src/common | 74.45 | 52.17 | 83.02 | 75.11 | - errors.js | 100 | 50 | 100 | 100 | 23 - helper.js | 65.13 | 50 | 76.32 | 65.75 |... 46,364,374,390 - logger.js | 92.31 | 60 | 100 | 92.31 | 31,53,58,82,116 - resources-api/src/models | 100 | 50 | 100 | 100 | - MemberProfile.js | 100 | 100 | 100 | 100 | - MemberStats.js | 100 | 100 | 100 | 100 | - Resource.js | 100 | 100 | 100 | 100 | - ResourceRole.js | 100 | 100 | 100 | 100 | - ResourceRolePhaseDependency.js | 100 | 100 | 100 | 100 | - index.js | 100 | 50 | 100 | 100 | 8,18 - resources-api/src/services | 98.23 | 96.45 | 100 | 98.05 | - ResourceRolePhaseDependencyService.js | 94.83 | 87.5 | 100 | 94.74 | 77,113,136 - ResourceRoleService.js | 96.55 | 90 | 100 | 95.35 | 60,96 - ResourceService.js | 100 | 100 | 100 | 100 | - -## E2E testing with Postman - -You should be able to find the tests result from the command window of running `npm run test:newman` for each test case. - -Below is a sample output result of finding resources by member. +# Resource API v6 verification +Use this checklist to verify the TypeScript, NestJS, Prisma 7, and Node 22 conversion without changing the service's external behavior. + +## Static verification + +From the project directory: + +```bash +nvm use +pnpm install --frozen-lockfile +pnpm lint +pnpm build +pnpm test ``` -resource-api - -Iteration 1/4 - -❏ Resources / list challenge by member -↳ get challenges by member with resource role - GET http://localhost:3000/v5/resources/16096823/challenges?resourceRoleId=c943cb74-37bb-409a-994e-1cd28fbbb7b5 [200 OK, 702B, 11ms] - ✓ Status code is 200 - -Iteration 2/4 - -↳ get challenges by member with resource role - GET http://localhost:3000/v5/resources/16096823/challenges?resourceRoleId=c943cb74-37bb-409a-994e-1cd28fbbb7b5 [200 OK, 702B, 17ms] - ✓ Status code is 200 - -Iteration 3/4 - -↳ get challenges by member with resource role - GET http://localhost:3000/v5/resources/16096823/challenges?resourceRoleId=c943cb74-37bb-409a-994e-1cd28fbbb7b5 [200 OK, 702B, 21ms] - ✓ Status code is 200 - -Iteration 4/4 - -↳ get challenges by member with resource role - GET http://localhost:3000/v5/resources/not_exist_user/challenges?resourceRoleId=c943cb74-37bb-409a-994e-1cd28fbbb7b5 [200 OK, 397B, 24ms] - ✓ Status code is 200 - -┌─────────────────────────┬──────────────────┬──────────────────┐ -│ │ executed │ failed │ -├─────────────────────────┼──────────────────┼──────────────────┤ -│ iterations │ 4 │ 0 │ -├─────────────────────────┼──────────────────┼──────────────────┤ -│ requests │ 4 │ 0 │ -├─────────────────────────┼──────────────────┼──────────────────┤ -│ test-scripts │ 4 │ 0 │ -├─────────────────────────┼──────────────────┼──────────────────┤ -│ prerequest-scripts │ 0 │ 0 │ -├─────────────────────────┼──────────────────┼──────────────────┤ -│ assertions │ 4 │ 0 │ -├─────────────────────────┴──────────────────┴──────────────────┤ -│ total run duration: 207ms │ -├───────────────────────────────────────────────────────────────┤ -│ total data received: 122B (approx) │ -├───────────────────────────────────────────────────────────────┤ -│ average response time: 18ms [min: 11ms, max: 24ms, s.d.: 4ms] │ -└───────────────────────────────────────────────────────────────┘ + +The generated application entrypoint must be `dist/main.js`. Dependency installation must generate the resources, member, and challenge Prisma 7 clients. It must not regenerate or alter the committed Prisma 6-compatible `packages/resources-prisma-client` artifact. + +## Database verification + +Configure the existing `DATABASE_URL`, `MEMBER_DB_URL`, and `CHALLENGE_DB_URL` values. Check migration state with: + +```bash +pnpm exec prisma migrate status ``` -Then you can run `npm run test:newman:clear` to delete all testing data by above postman tests. -If 'socket hang up' appears while running the `npm run test:newman`. You can increase the `WAIT_TIME` from the `default/test.js`. - Then run `npm run test:newman:clear` before calling `npm run test:newman` again. \ No newline at end of file +Start the production container or run `pnpm exec prisma migrate deploy` and confirm that Prisma reports the checked-in migration history as applied or applies only genuinely pending migrations. + +Verification must not use `prisma migrate dev`, `prisma db push`, a database reset, or modified migration SQL. Compare `git diff -- prisma/migrations` and confirm there are no migration changes from this conversion. + +## Runtime smoke test + +Build the same image used by CircleCI: + +```bash +./build.sh resources-api-v6 +``` + +Run it with the existing deployment variables and confirm the logs show migration deployment before `resource-api-v6` starts. The container must run on Node 22.13.1, start `dist/main.js`, and answer: + +```text +GET /v6/resources/health +GET /v6/resources/api-docs +``` + +Also confirm pagination headers, error status codes and bodies, authentication behavior, and the documented v6 route casing remain unchanged. + +## API regression verification + +Run the unit and Postman suites, then exercise at least these successful flows: + +- List, create, and delete a resource. +- List, create, and update a resource role. +- List, create, update, and delete a resource-role phase dependency. +- List challenges for a member. +- Update a resource's phase-change notification preference. +- Create a submitter resource with registration email enabled and disabled. + +Compare response bodies, pagination metadata, validation messages, authorization failures, and side effects with the pre-conversion API. + +## Bus API event verification + +The service has no Kafka consumer. It publishes through Bus API and therefore must not require Kafka brokers or `@platformatic/kafka` configuration. + +For successful create, update, and delete operations, confirm Bus API receives the configured topics: + +- `challenge.action.resource.create` +- `challenge.action.resource.delete` +- `challenge.action.resource.role.create` +- `challenge.action.resource.role.update` +- `external.action.email` when a registration email is required + +Each event must retain the existing envelope fields: `topic`, `originator`, ISO `timestamp`, `'mime-type': 'application/json'`, and `payload`. Error reporting must continue to use `KAFKA_ERROR_TOPIC` through the same Bus API publisher. + +Publishing is intentionally awaited. Verify that a Bus API publishing failure still fails the calling operation in the same way as before the conversion. + +In development, published topics can be inspected with the existing event-observation tooling. Unit tests and the challenge mock continue to emulate `POST /v5/bus/events`. + +## Configuration verification + +Deploy without renaming or adding parameter-store keys. In particular, confirm the service reads the existing Auth0, scope, downstream API, role ID, Bus API, topic, email, database, and Prisma timeout variables documented in `ReadMe.md`. + +Keep the legacy `EMAIL_NOTIFICATIN_TOPIC` spelling and the existing `KAFKA_*` names. No direct Kafka connection parameters should be required. + +## CircleCI verification + +On the `typescript` branch, confirm that: + +- The development workflow builds the nested `docker/Dockerfile` with BuildKit. +- The Docker build completes frozen pnpm installation, Prisma generation, lint, and Nest compilation. +- Deployment still uses `APPNAME=resources-api-v6` and the existing DEV/PROD parameter-store paths. +- The Newman job runs on Node 22.13.1 with pnpm 10.33.2 from the repository root. +- The health wait succeeds before the Postman scripts run and Newman artifacts are retained. diff --git a/app-bootstrap.js b/app-bootstrap.js deleted file mode 100644 index 4e9008a..0000000 --- a/app-bootstrap.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * App bootstrap - */ - -global.Promise = require('bluebird') -const config = require('config') -const Joi = require('joi') - -Joi.optionalId = () => Joi.string().uuid() -Joi.id = () => Joi.optionalId().required() -Joi.page = () => Joi.number().integer().min(1).default(1) -Joi.perPage = () => Joi.number().integer().min(1).max(10000).default(config.DEFAULT_PAGE_SIZE) - -// eslint-disable-next-line -BigInt.prototype.toJSON = function () { return this.toString() } diff --git a/app-bootstrap.ts b/app-bootstrap.ts new file mode 100644 index 0000000..cde8667 --- /dev/null +++ b/app-bootstrap.ts @@ -0,0 +1,72 @@ +/** + * Installs process-wide compatibility helpers used by the legacy service layer. + * + * This module is loaded before controllers and services so their Joi schemas and + * BigInt values retain the behavior exposed by the original JavaScript runtime. + */ + +global.Promise = require('bluebird') + +const config = require('config') +const Joi = require('joi') + +/** + * Creates the optional UUID schema used for resource and relationship identifiers. + * + * @returns A Joi string schema that accepts UUID values and rejects invalid GUIDs. + * @throws Does not throw while constructing the schema. + */ +function optionalIdSchema () { + return Joi.string().uuid() +} + +/** + * Creates the required UUID schema used for mandatory identifiers. + * + * @returns A required Joi UUID schema. + * @throws Does not throw while constructing the schema. + */ +function requiredIdSchema () { + return Joi.optionalId().required() +} + +/** + * Creates the page-number schema used by paginated endpoints. + * + * Query-string numbers are converted by Joi, values must be positive integers, + * and omitted values default to the first page. + * + * @returns A Joi number schema for a one-based page number. + * @throws Does not throw while constructing the schema. + */ +function pageSchema () { + return Joi.number().integer().min(1).default(1) +} + +/** + * Creates the page-size schema used by paginated endpoints. + * + * @returns A Joi number schema bounded from 1 through 10,000 and defaulted from + * the existing DEFAULT_PAGE_SIZE configuration value. + * @throws Does not throw while constructing the schema. + */ +function perPageSchema () { + return Joi.number().integer().min(1).max(10000).default(config.DEFAULT_PAGE_SIZE) +} + +/** + * Serializes a BigInt as its decimal string representation for JSON responses. + * + * @returns The BigInt value represented as a base-10 string. + * @throws Does not throw for a BigInt receiver. + */ +function bigIntToJSON (this: bigint): string { + return this.toString() +} + +Joi.optionalId = optionalIdSchema +Joi.id = requiredIdSchema +Joi.page = pageSchema +Joi.perPage = perPageSchema + +;(BigInt.prototype as any).toJSON = bigIntToJSON diff --git a/app-constants.js b/app-constants.ts similarity index 62% rename from app-constants.js rename to app-constants.ts index 967fad3..4cf3f76 100644 --- a/app-constants.js +++ b/app-constants.ts @@ -1,7 +1,6 @@ /** - * App constants + * Role names recognized by route authorization and resource access checks. */ - const UserRoles = { Admin: 'administrator', Copilot: 'copilot', @@ -9,6 +8,9 @@ const UserRoles = { User: 'Topcoder User' } +/** + * Challenge statuses that alter resource creation and deletion behavior. + */ const ChallengeStatuses = { Completed: 'COMPLETED', Active: 'ACTIVE' diff --git a/app-routes.js b/app-routes.ts similarity index 69% rename from app-routes.js rename to app-routes.ts index e7bd9c7..4d219d5 100644 --- a/app-routes.js +++ b/app-routes.ts @@ -1,5 +1,9 @@ /** - * Configure all routes for express app + * Registers the legacy Express route table and authorization middleware. + * + * NestJS mounts the completed Express application through ExpressAdapter, so + * this module deliberately retains the original middleware ordering and edge + * cases for anonymous, human, and machine callers. */ const _ = require('lodash') @@ -7,31 +11,38 @@ const config = require('config') const HttpStatus = require('http-status-codes') const helper = require('./src/common/helper') const errors = require('./src/common/errors') -// const logger = require('./src/common/logger') const routes = require('./src/routes') const authenticator = require('tc-core-library-js').middleware.jwtAuthenticator /** - * Configure all routes for express app - * @param app the express app + * Configures every public API route on the supplied Express application. + * + * The compatibility app calls this once during module initialization. It loads + * controller functions from the route table, applies JWT, IP-block, role, and + * scope checks in their historical order, and installs the custom 404/405 + * fallback. + * + * @param app The Express application that NestJS mounts through ExpressAdapter. + * @returns Nothing. + * @throws If a configured controller method cannot be loaded, or if synchronous + * authorization middleware raises an application error. */ -module.exports = (app) => { - // Load all routes +function configureRoutes (app: any): void { _.each(routes, (verbs, path) => { _.each(verbs, (def, verb) => { const controllerPath = `./src/controllers/${def.controller}` - const method = require(controllerPath)[def.method]; // eslint-disable-line + const method = require(controllerPath)[def.method] if (!method) { throw new Error(`${def.method} is undefined`) } - const actions = [] + const actions: any[] = [] actions.push((req, res, next) => { req.signature = `${def.controller}#${def.method}` next() }) - // add Authenticator check if route has auth + // Add the authenticator check if the route has auth metadata. if (def.auth) { actions.push((req, res, next) => { let token @@ -48,7 +59,7 @@ module.exports = (app) => { if (def.blockByIp) { actions.push((req, res, next) => { req.authUser.blockIP = _.find(req.authUser, (value, key) => { - return (key.indexOf('blockIP') !== -1) + return key.indexOf('blockIP') !== -1 }) if (req.authUser.blockIP) { throw new errors.ForbiddenError('Access denied') @@ -61,15 +72,12 @@ module.exports = (app) => { if (!def.allowAnonymous) { actions.push((req, res, next) => { if (req.authUser.isMachine) { - // logger.warn(`Request Auth User ${req.authUser} calling ${controllerPath} ${method}`) - // M2M if (!req.authUser.scopes || !helper.checkIfExists(def.scopes, req.authUser.scopes)) { next(new errors.ForbiddenError('You are not allowed to perform this action!')) } else { next() } } else { - // User req.authUser.userId = String(req.authUser.userId) console.log(req.authUser) if (!req.authUser.roles || !helper.checkIfExists(def.access, req.authUser.roles)) { @@ -87,7 +95,7 @@ module.exports = (app) => { }) }) - // Check if the route is not found or HTTP method is not supported + // Preserve the original distinction between unsupported methods and paths. app.use('*', (req, res) => { const route = routes[req.baseUrl.replace(`/${config.API_VERSION}`, '')] if (route) { @@ -97,3 +105,5 @@ module.exports = (app) => { } }) } + +module.exports = configureRoutes diff --git a/app.js b/app.ts similarity index 53% rename from app.js rename to app.ts index 773fe02..3648a1d 100644 --- a/app.js +++ b/app.ts @@ -1,5 +1,8 @@ /** - * The application entry point + * Builds the compatibility-preserving Express application mounted by NestJS. + * + * Middleware, Swagger, routing, authentication interception, error formatting, + * and response behavior remain on Express while Nest owns startup and shutdown. */ require('./app-bootstrap') @@ -16,22 +19,24 @@ const YAML = require('yamljs') const swaggerUi = require('swagger-ui-express') const resourcesAPISwaggerDoc = YAML.load('./docs/swagger.yaml') -// setup express app -const app = express() - -// serve resources V6 API swagger definition -app.use('/v6/resources/api-docs', swaggerUi.serve, swaggerUi.setup(resourcesAPISwaggerDoc)) - -app.use(cors({ - // Allow browsers access pagination data in headers - exposedHeaders: ['X-Page', 'X-Per-Page', 'X-Total', 'X-Total-Pages', 'X-Prev-Page', 'X-Next-Page'] -})) -app.use(bodyParser.json()) -app.use(bodyParser.urlencoded({ extended: true })) -app.set('port', config.PORT) +interface ErrorResponse { + message?: any + metadata?: any +} -// intercept the response body from jwtAuthenticator -app.use(interceptor((req, res) => { +/** + * Creates the response interceptor used after the shared JWT authenticator. + * + * The authenticator writes legacy nested 403 responses for authentication + * failures. This interceptor converts only those responses to the API's public + * 401 `{ message }` shape and leaves application-level 403 responses unchanged. + * + * @param req The active Express request. + * @param res The active Express response. + * @returns The express-interceptor hooks for deciding and transforming a body. + * @throws Propagates response mutation or interceptor callback errors. + */ +function createJwtResponseInterceptor (req: any, res: any): any { return { isInterceptable: () => { return res.statusCode === 403 @@ -53,16 +58,26 @@ app.use(interceptor((req, res) => { } } } -})) - -// Register routes -require('./app-routes')(app) +} -// The error handler -// eslint-disable-next-line no-unused-vars -app.use((err, req, res, next) => { +/** + * Formats all errors forwarded by route middleware and controller functions. + * + * Joi failures become 400 responses, custom and downstream status codes are + * preserved, downstream API messages are unwrapped, and unexpected failures are + * masked. Optional custom metadata is included unchanged. + * + * @param err The Joi, application, Prisma, or downstream HTTP error. + * @param req The Express request used for contextual logging. + * @param res The Express response that receives the compatibility error body. + * @param next The Express continuation argument required for error middleware. + * @returns Nothing after sending the JSON error response. + * @throws Propagates errors raised by the response object's `status` or `json` + * methods. + */ +function handleApplicationError (err: any, req: any, res: any, next: any): void { logger.logFullError(err, req.signature || `${req.method} ${req.url}`) - const errorResponse = {} + const errorResponse: ErrorResponse = {} const status = err.isJoi ? HttpStatus.BAD_REQUEST : (err.status || err.httpStatus || HttpStatus.INTERNAL_SERVER_ERROR) if (_.isArray(err.details)) { @@ -80,7 +95,7 @@ app.use((err, req, res, next) => { } if (err.response) { - // extract error message from V3 API(first _.get method) or V5 API(second _.get method) + // Extract error messages from the established V3 and V5 API response shapes. errorResponse.message = _.get(err, 'response.body.result.content') || _.get(err, 'response.body.message') } @@ -97,12 +112,24 @@ app.use((err, req, res, next) => { } res.status(status).json(errorResponse) -}) +} -const server = app.listen(app.get('port'), () => { - logger.info(`Express server listening on port ${app.get('port')}`) -}) +const app = express() -if (process.env.NODE_ENV === 'test') { - module.exports = server -} +// Serve the existing Resources API Swagger definition at its fixed public path. +app.use('/v6/resources/api-docs', swaggerUi.serve, swaggerUi.setup(resourcesAPISwaggerDoc)) + +app.use(cors({ + exposedHeaders: ['X-Page', 'X-Per-Page', 'X-Total', 'X-Total-Pages', 'X-Prev-Page', 'X-Next-Page'] +})) +app.use(bodyParser.json()) +app.use(bodyParser.urlencoded({ extended: true })) +app.set('port', config.PORT) + +app.use(interceptor(createJwtResponseInterceptor)) + +require('./app-routes')(app) + +app.use(handleApplicationError) + +module.exports = app diff --git a/appStartUp.sh b/appStartUp.sh old mode 100644 new mode 100755 index 29a903d..3e01f77 --- a/appStartUp.sh +++ b/appStartUp.sh @@ -1,10 +1,14 @@ -#!/bin/bash -set -eo pipefail +#!/usr/bin/env bash +set -euo pipefail -export DATABASE_URL=$(echo -e ${DATABASE_URL}) +# Deployment parameters can contain escaped characters when loaded from the +# parameter store. Preserve the existing normalization before Prisma reads it. +if [[ -n "${DATABASE_URL:-}" ]]; then + export DATABASE_URL="$(printf '%b' "$DATABASE_URL")" +fi -echo "Database - running migrations." -npx prisma migrate deploy +echo "Database - applying existing migrations." +pnpm exec prisma migrate deploy echo "Starting resource-api-v6." -npm start \ No newline at end of file +exec node dist/main.js diff --git a/build.sh b/build.sh index 797880e..2d28bef 100755 --- a/build.sh +++ b/build.sh @@ -1,23 +1,10 @@ -#!/bin/bash -set -eo pipefail -APP_NAME=$1 -UPDATE_CACHE="" -FOLDER_NAME="resources-api" -docker-compose -f docker/docker-compose.yml build $APP_NAME -docker create --name app $APP_NAME:latest +#!/usr/bin/env bash +set -euo pipefail -if [ -d node_modules ] -then - mv yarn.lock old-yarn.lock - docker cp app:/$FOLDER_NAME/yarn.lock yarn.lock - set +eo pipefail - UPDATE_CACHE=$(cmp yarn.lock old-yarn.lock) - set -eo pipefail -else - UPDATE_CACHE=1 -fi +APP_NAME="${1:-resources-api-v6}" -if [ "$UPDATE_CACHE" == 1 ] -then - docker cp app:/$FOLDER_NAME/node_modules . -fi \ No newline at end of file +export DOCKER_BUILDKIT=1 +docker build \ + --file docker/Dockerfile \ + --tag "${APP_NAME}:latest" \ + . diff --git a/docker/Dockerfile b/docker/Dockerfile index 3998fa3..0234b53 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,18 +1,49 @@ -# Use the base image with Node.js -FROM node:22.13.1-alpine -RUN apk add --update --no-cache bash openssh-client git -RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts -# Copy the current directory into the Docker image -COPY . /resources-api - -# Set working directory for future use +# syntax=docker/dockerfile:1 + +FROM node:22.13.1-alpine AS build + +ENV CI=true WORKDIR /resources-api -RUN npm install -g pnpm@10.33.2 -# Install the dependencies from package.json +RUN apk add --no-cache bash git openssh-client openssl \ + && npm install --global pnpm@10.33.2 + +# Install from the lockfile before copying the rest of the application. The +# package postinstall hook generates the three Prisma 7 service clients +# without connecting to a database. The committed external client is copied +# later with the rest of the source tree and is not regenerated. +COPY package.json pnpm-lock.yaml prisma.config.ts tsconfig.json tsconfig.build.json ./ +COPY prisma ./prisma RUN pnpm install --frozen-lockfile -RUN pnpm lint -RUN pnpm lint:fix -RUN chmod +x appStartUp.sh -CMD [ "./appStartUp.sh" ] +COPY . . +RUN mkdir -p src/scripts/seed \ + && pnpm lint \ + && pnpm build \ + && pnpm prune --prod + +FROM node:22.13.1-alpine AS production + +ENV NODE_ENV=production +WORKDIR /resources-api + +RUN apk add --no-cache bash openssl \ + && npm install --global pnpm@10.33.2 + +COPY --from=build --chown=node:node /resources-api/dist ./dist +COPY --from=build --chown=node:node /resources-api/node_modules ./node_modules +COPY --from=build --chown=node:node /resources-api/package.json ./package.json +COPY --from=build --chown=node:node /resources-api/pnpm-lock.yaml ./pnpm-lock.yaml +COPY --from=build --chown=node:node /resources-api/config ./config +COPY --from=build --chown=node:node /resources-api/prisma.config.ts ./prisma.config.ts +COPY --from=build --chown=node:node /resources-api/prisma ./prisma +COPY --from=build --chown=node:node /resources-api/docs ./docs +COPY --from=build --chown=node:node /resources-api/packages/resources-prisma-client ./packages/resources-prisma-client +COPY --from=build --chown=node:node /resources-api/src/generated ./src/generated +COPY --from=build --chown=node:node /resources-api/src/scripts/seed ./src/scripts/seed +COPY --from=build --chown=node:node --chmod=755 /resources-api/appStartUp.sh ./appStartUp.sh + +USER node +EXPOSE 3000 + +CMD ["./appStartUp.sh"] diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..1077400 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,64 @@ +import eslint from '@eslint/js' +import eslintConfigPrettier from 'eslint-config-prettier' +import globals from 'globals' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { + ignores: [ + 'coverage/**', + 'dist/**', + 'migrator/**', + 'node_modules/**', + 'packages/**', + 'src/generated/**' + ] + }, + eslint.configs.recommended, + ...tseslint.configs.recommended, + eslintConfigPrettier, + { + files: ['**/*.ts'], + languageOptions: { + globals: { + ...globals.node, + ...globals.mocha + }, + parserOptions: { + ecmaVersion: 2022, + sourceType: 'commonjs' + } + }, + rules: { + 'no-empty': 'off', + 'no-prototype-builtins': 'off', + 'no-self-assign': 'off', + 'no-undef': 'off', + 'no-unused-vars': 'off', + 'prefer-rest-params': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-require-imports': 'off', + '@typescript-eslint/no-unused-vars': 'off' + } + }, + { + files: [ + 'test/common/prepare.js', + 'test/unit/createResource.test.js', + 'test/unit/getResources.test.js' + ], + languageOptions: { + globals: { + ...globals.node, + ...globals.mocha + }, + parserOptions: { + ecmaVersion: 2022, + sourceType: 'commonjs' + } + }, + rules: { + '@typescript-eslint/no-require-imports': 'off' + } + } +) diff --git a/main.ts b/main.ts new file mode 100644 index 0000000..62afe2e --- /dev/null +++ b/main.ts @@ -0,0 +1,90 @@ +import 'reflect-metadata' + +import type { INestApplication } from '@nestjs/common' +import { NestFactory } from '@nestjs/core' +import { ExpressAdapter } from '@nestjs/platform-express' +import { AppModule } from './src/app.module' + +const config = require('config') +const expressApplication = require('./app') +const logger = require('./src/common/logger') +const { disconnectClients } = require('./src/common/prisma') + +let shutdownStarted = false + +/** + * Gracefully closes the Nest-owned HTTP listener and all shared Prisma clients. + * + * Signal handlers invoke this once. A ten-second fallback prevents shutdown from + * hanging indefinitely if an HTTP connection or database disconnect stalls. + * + * @param app The initialized Nest application that owns the HTTP listener. + * @param signal The operating-system signal that initiated shutdown. + * @returns A promise that resolves after the process has been terminated. + * @throws Does not propagate shutdown errors; they are logged before exiting. + */ +async function gracefulShutdown (app: INestApplication, signal: NodeJS.Signals): Promise { + if (shutdownStarted) { + return + } + shutdownStarted = true + + logger.info(`[${signal}] Received. Starting graceful shutdown...`) + const timeout = setTimeout(() => { + logger.error('Forced shutdown due to timeout.') + process.exit(1) + }, 10_000) + timeout.unref() + + try { + await app.close() + await disconnectClients() + clearTimeout(timeout) + logger.info('HTTP server and Prisma clients closed.') + process.exit(0) + } catch (error) { + clearTimeout(timeout) + logger.error('Error during graceful shutdown:', error) + process.exit(1) + } +} + +/** + * Registers one-shot operating-system signal handlers for the Nest application. + * + * @param app The initialized Nest application to close on SIGTERM or SIGINT. + * @returns Nothing. + * @throws Propagates errors raised while registering process listeners. + */ +function installShutdownHandlers (app: INestApplication): void { + process.once('SIGTERM', () => void gracefulShutdown(app, 'SIGTERM')) + process.once('SIGINT', () => void gracefulShutdown(app, 'SIGINT')) +} + +/** + * Starts Resources API v6 through NestJS using the compatibility Express app. + * + * Nest body parsing is disabled because the Express application already installs + * JSON and URL-encoded parsers in the established order. Nest logging is disabled + * so the existing Winston logger and log configuration remain authoritative. + * + * @returns The initialized, listening Nest application. Tests may close the + * returned application without terminating their process. + * @throws Propagates Nest application creation or listener startup failures. + */ +export async function bootstrap (): Promise { + const adapter = new ExpressAdapter(expressApplication) + const app = await NestFactory.create(AppModule, adapter, { + bodyParser: false, + logger: false + }) + + await app.listen(Number(config.PORT)) + logger.info(`NestJS server listening on port ${config.PORT}`) + installShutdownHandlers(app) + return app +} + +if (require.main === module) { + void bootstrap() +} diff --git a/nest-cli.json b/nest-cli.json new file mode 100644 index 0000000..23faed1 --- /dev/null +++ b/nest-cli.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "entryFile": "main", + "sourceRoot": ".", + "compilerOptions": { + "deleteOutDir": true, + "tsConfigPath": "tsconfig.build.json" + } +} diff --git a/package.json b/package.json index dd3ce32..5e1bed8 100644 --- a/package.json +++ b/package.json @@ -1,48 +1,69 @@ { "name": "topcoder-challenge-recources-api", "version": "1.0.0", - "description": "TopCoder Challenge Resources V5 API", - "main": "app.js", + "description": "Topcoder Challenge Resources API v6", + "main": "dist/main.js", "packageManager": "pnpm@10.33.2", "scripts": { - "start": "node app.js", - "start:dev": "nodemon app.js", - "postinstall": "npm run prisma:generate", - "lint": "standard", - "lint:fix": "standard --fix", - "prisma:generate:resource": "npx prisma generate --schema=./prisma/schema.prisma", - "prisma:generate:member": "npx prisma generate --schema=./prisma/member-schema.prisma", - "prisma:generate:challenge": "npx prisma generate --schema=./prisma/challenge-schema.prisma", - "prisma:generate": "npm run prisma:generate:resource && npm run prisma:generate:member && npm run prisma:generate:challenge", - "seed-tables": "node src/scripts/seed-tables.js", - "view-data": "node src/scripts/view-data.js", - "mock-api": "NODE_ENV=test node mock/mock-api", - "mock-challenge-api": "NODE_ENV=test node mock/mock-challenge-api", - "test": "nyc --reporter=html --reporter=text mocha test/unit/test.js --require test/common/prepare.js --timeout 60000 --exit", - "test:newman": "NODE_ENV=test node test/postman/newman.js", - "test:newman:clear": "node test/postman/clearTestData.js" + "build": "nest build", + "start": "node dist/main.js", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main.js", + "postinstall": "pnpm run prisma:generate", + "lint": "eslint --no-error-on-unmatched-pattern \"*.ts\" \"src/**/*.ts\" \"prisma/**/*.ts\" \"test/**/*.ts\" \"test/common/prepare.js\" \"test/unit/createResource.test.js\" \"test/unit/getResources.test.js\"", + "lint:fix": "pnpm lint --fix", + "format": "prettier --write \"*.ts\" \"src/**/*.ts\" \"prisma/**/*.ts\" \"test/**/*.ts\"", + "prisma:generate:resource": "prisma generate --schema=./prisma/schema.prisma --generator client", + "prisma:generate:member": "prisma generate --schema=./prisma/member-schema.prisma --generator client", + "prisma:generate:challenge": "prisma generate --schema=./prisma/challenge-schema.prisma --generator client", + "prisma:generate": "pnpm run prisma:generate:resource && pnpm run prisma:generate:member && pnpm run prisma:generate:challenge", + "seed-tables": "node dist/src/scripts/seed-tables.js", + "view-data": "node dist/src/scripts/view-data.js", + "mock-api": "NODE_ENV=test node --require ts-node/register/transpile-only mock/mock-api.js", + "mock-challenge-api": "NODE_ENV=test node --require ts-node/register/transpile-only mock/mock-challenge-api.js", + "test": "nyc --reporter=html --reporter=text mocha --require ts-node/register/transpile-only test/unit/prisma-adapter.test.ts test/unit/test.js --require test/common/prepare.js --timeout 60000 --exit", + "test:adapter": "mocha --require ts-node/register/transpile-only test/unit/prisma-adapter.test.ts", + "test:newman": "NODE_ENV=test node --require ts-node/register/transpile-only test/postman/newman.js", + "test:newman:clear": "node --require ts-node/register/transpile-only test/postman/clearTestData.js" }, "author": "TCSCODER", "license": "none", "devDependencies": { - "mocha": "^5.2.0", - "mocha-prepare": "^0.1.0", - "nock": "^10.0.6", + "@eslint/js": "^9.18.0", + "@nestjs/cli": "^11.0.0", + "@nestjs/schematics": "^11.0.0", + "@types/express": "^4.17.21", + "@types/node": "^22.10.7", + "@types/pg": "^8.15.5", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.1", + "globals": "^15.14.0", + "mocha": "^11.7.4", + "nock": "^14.0.16", "nodemon": "^3.1.9", - "nyc": "^14.0.0", - "prisma": "^6.5.0", + "nyc": "^17.1.0", + "prettier": "^3.6.2", "should": "^13.2.3", - "standard": "^12.0.1", - "tc-api-testing-lib": "topcoder-platform/api-automated-testing.git" + "tc-api-testing-lib": "https://codeload.github.com/topcoder-platform/api-automated-testing/tar.gz/dd0118f41612764bed344c31affb40b7448949c5", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.2", + "typescript": "5.9.3", + "typescript-eslint": "^8.20.0" }, "dependencies": { - "@prisma/client": "^6.5.0", + "@nestjs/common": "^11.1.8", + "@nestjs/core": "^11.1.8", + "@nestjs/platform-express": "^11.1.8", + "@prisma/adapter-pg": "7.4.2", + "@prisma/client": "7.4.2", "aws-sdk": "^2.466.0", "bluebird": "^3.5.1", "body-parser": "^1.15.1", "config": "^3.0.1", "cors": "^2.7.1", - "express": "^4.16.4", + "dotenv": "^17.2.3", + "express": "^4.21.2", "express-interceptor": "^1.2.0", "get-parameter-names": "^0.3.0", "http-json-response": "^1.0.1", @@ -50,11 +71,15 @@ "joi": "^14.0.0", "lodash": "^4.17.19", "moment": "^2.30.1", - "superagent": "^8.0.9", + "pg": "^8.16.3", + "prisma": "7.4.2", + "reflect-metadata": "^0.2.2", + "rxjs": "^7.8.1", + "superagent": "^10.3.0", "swagger-ui-express": "^4.1.3", "tc-bus-api-wrapper": "github:topcoder-platform/tc-bus-api-wrapper.git", - "tc-core-library-js": "github:topcoder-platform/tc-core-library-js.git#master", - "uuid": "^8.3.0", + "tc-core-library-js": "https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4", + "uuid": "^11.0.3", "winston": "^3.2.1", "xss": "^1.0.7", "yamljs": "^0.3.0" @@ -63,6 +88,9 @@ "schema": "./prisma/schema.prisma" }, "pnpm": { + "overrides": { + "@topcoder-platform/topcoder-bus-api-wrapper>tc-core-library-js": "https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4" + }, "onlyBuiltDependencies": [ "@prisma/client", "@prisma/engines", @@ -76,16 +104,7 @@ ] }, "engines": { - "node": ">=18 <23" - }, - "standard": { - "env": [ - "mocha" - ], - "ignore": [ - "migrator/**", - "packages/**" - ] + "node": "22.x" }, "nyc": { "exclude": [ @@ -96,7 +115,6 @@ ] }, "volta": { - "node": "22", - "yarn": "1.22.19" + "node": "22.13.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd5e39b..df5769c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,13 +4,28 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@topcoder-platform/topcoder-bus-api-wrapper>tc-core-library-js': https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4 + importers: .: dependencies: + '@nestjs/common': + specifier: ^11.1.8 + version: 11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': + specifier: ^11.1.8 + version: 11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.28)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/platform-express': + specifier: ^11.1.8 + version: 11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28) + '@prisma/adapter-pg': + specifier: 7.4.2 + version: 7.4.2 '@prisma/client': - specifier: ^6.5.0 - version: 6.19.1(prisma@6.19.1) + specifier: 7.4.2 + version: 7.4.2(prisma@7.4.2(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3))(typescript@5.9.3) aws-sdk: specifier: ^2.466.0 version: 2.1693.0 @@ -26,8 +41,11 @@ importers: cors: specifier: ^2.7.1 version: 2.8.5 + dotenv: + specifier: ^17.2.3 + version: 17.4.2 express: - specifier: ^4.16.4 + specifier: ^4.21.2 version: 4.22.1 express-interceptor: specifier: ^1.2.0 @@ -50,9 +68,21 @@ importers: moment: specifier: ^2.30.1 version: 2.30.1 + pg: + specifier: ^8.16.3 + version: 8.22.0 + prisma: + specifier: 7.4.2 + version: 7.4.2(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3) + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + rxjs: + specifier: ^7.8.1 + version: 7.8.2 superagent: - specifier: ^8.0.9 - version: 8.1.2 + specifier: ^10.3.0 + version: 10.3.0 swagger-ui-express: specifier: ^4.1.3 version: 4.6.3(express@4.22.1) @@ -60,11 +90,11 @@ importers: specifier: github:topcoder-platform/tc-bus-api-wrapper.git version: '@topcoder-platform/topcoder-bus-api-wrapper@https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833' tc-core-library-js: - specifier: github:topcoder-platform/tc-core-library-js.git#master + specifier: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4 version: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4 uuid: - specifier: ^8.3.0 - version: 8.3.2 + specifier: ^11.0.3 + version: 11.1.1 winston: specifier: ^3.2.1 version: 3.19.0 @@ -75,80 +105,270 @@ importers: specifier: ^0.3.0 version: 0.3.0 devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.5 + '@nestjs/cli': + specifier: ^11.0.0 + version: 11.0.24(@types/node@22.20.1)(prettier@3.9.5) + '@nestjs/schematics': + specifier: ^11.0.0 + version: 11.1.0(chokidar@4.0.3)(prettier@3.9.5)(typescript@5.9.3) + '@types/express': + specifier: ^4.17.21 + version: 4.17.25 + '@types/node': + specifier: ^22.10.7 + version: 22.20.1 + '@types/pg': + specifier: ^8.15.5 + version: 8.20.0 + eslint: + specifier: ^9.18.0 + version: 9.39.5(jiti@2.6.1) + eslint-config-prettier: + specifier: ^10.0.1 + version: 10.1.8(eslint@9.39.5(jiti@2.6.1)) + globals: + specifier: ^15.14.0 + version: 15.15.0 mocha: - specifier: ^5.2.0 - version: 5.2.0 - mocha-prepare: - specifier: ^0.1.0 - version: 0.1.0(mocha@5.2.0) + specifier: ^11.7.4 + version: 11.7.6 nock: - specifier: ^10.0.6 - version: 10.0.6 + specifier: ^14.0.16 + version: 14.0.16 nodemon: specifier: ^3.1.9 version: 3.1.11 nyc: - specifier: ^14.0.0 - version: 14.1.1 - prisma: - specifier: ^6.5.0 - version: 6.19.1 + specifier: ^17.1.0 + version: 17.1.0 + prettier: + specifier: ^3.6.2 + version: 3.9.5 should: specifier: ^13.2.3 version: 13.2.3 - standard: - specifier: ^12.0.1 - version: 12.0.1 tc-api-testing-lib: - specifier: topcoder-platform/api-automated-testing.git + specifier: https://codeload.github.com/topcoder-platform/api-automated-testing/tar.gz/dd0118f41612764bed344c31affb40b7448949c5 version: https://codeload.github.com/topcoder-platform/api-automated-testing/tar.gz/dd0118f41612764bed344c31affb40b7448949c5 + ts-loader: + specifier: ^9.5.2 + version: 9.6.2(typescript@5.9.3)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.20.1)(typescript@5.9.3) + typescript: + specifier: 5.9.3 + version: 5.9.3 + typescript-eslint: + specifier: ^8.20.0 + version: 8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) packages: + '@angular-devkit/core@19.2.24': + resolution: {integrity: sha512-Kd49warf6U/EyWe5BszF/eebN3zQ3bk7tgfEljAw8q/rX95UUtriJubWvp6pgzHfzBA4jwq8f+QiNZB8eBEXPA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^4.0.0 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/core@19.2.27': + resolution: {integrity: sha512-3amNzoCVSKd7ah6l6lBQL4onwwJvqvam7FMoQBILrxtW5LB5ezh8gMSPuA4zJjKjoRzf9uoWdlzqv/84I52xZA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^4.0.0 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/schematics-cli@19.2.27': + resolution: {integrity: sha512-wHYH6SVXVykhLzovUHtYor3Nl4SpIiITi7r9DQDaKYUD4hpRBx25W6N9eGuakT9Vd5tV/x6wmvQFWQZQwFB7eA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + + '@angular-devkit/schematics@19.2.24': + resolution: {integrity: sha512-lnw+ZM1Io+cJAkReC0NPDjqObL8NtKzKIkdgEEKC8CUmkhurYhedbicN8Y8NYHgG1uLd2GozW3+/QqPRZaN+Lw==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@angular-devkit/schematics@19.2.27': + resolution: {integrity: sha512-/PZmyAlb2NGWPikRRuiWLdfHQd8Wrx6lX4HqvTcaDhlU43M3T0ud4PH2T3QDp7BzHYY92xtD8iPxX2asg67G1A==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.28.5': resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} '@babel/types@7.28.5': resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + + '@chevrotain/cst-dts-gen@10.5.0': + resolution: {integrity: sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==} + + '@chevrotain/gast@10.5.0': + resolution: {integrity: sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==} + + '@chevrotain/types@10.5.0': + resolution: {integrity: sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==} + + '@chevrotain/utils@10.5.0': + resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@dabh/diagnostics@2.0.8': resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} + '@electric-sql/pglite-socket@0.0.20': + resolution: {integrity: sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg==} + hasBin: true + peerDependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite-tools@0.2.20': + resolution: {integrity: sha512-BK50ZnYa3IG7ztXhtgYf0Q7zijV32Iw1cYS8C+ThdQlwx12V5VZ9KRJ42y82Hyb4PkTxZQklVQA9JHyUlex33A==} + peerDependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite@0.3.15': + resolution: {integrity: sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ==} + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.6': + resolution: {integrity: sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.5': + resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@hapi/address@5.1.1': resolution: {integrity: sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==} engines: {node: '>=14.0.0'} @@ -175,26 +395,300 @@ packages: '@hapi/topo@6.0.2': resolution: {integrity: sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==} + '@hono/node-server@1.19.9': + resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@inquirer/ansi@1.0.2': + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.3.2': + resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.21': + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.3.2': + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.23': + resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.23': + resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + + '@inquirer/input@4.3.1': + resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.23': + resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.23': + resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.10.1': + resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.3.2': + resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.11': + resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.2.2': + resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.4.2': + resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.10': + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.6': + resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} + engines: {node: '>=8'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@mrleebo/prisma-ast@0.13.1': + resolution: {integrity: sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw==} + engines: {node: '>=16'} + + '@mswjs/interceptors@0.41.9': + resolution: {integrity: sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w==} + engines: {node: '>=18'} + + '@nestjs/cli@11.0.24': + resolution: {integrity: sha512-aIHxQLSYtXShifA3zwWIeznEsZnNa3Iz2QRykFj+sl9IcbERBHr5nH87FRgywM+He3NxoF5WazHfR8FsmVeWxw==} + engines: {node: '>= 20.11'} + hasBin: true + peerDependencies: + '@swc/cli': ^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0 || ^0.8.0 + '@swc/core': ^1.3.62 + peerDependenciesMeta: + '@swc/cli': + optional: true + '@swc/core': + optional: true + + '@nestjs/common@11.1.28': + resolution: {integrity: sha512-bRImsxibie+AM7xjdwcrm/gr5YeacI65kSBNzTufa1Ib5iwziaY/lqMtRh9THq6pbV4e1HP9aI2ZxGUumnmaoQ==} + peerDependencies: + class-transformer: '>=0.4.1' + class-validator: '>=0.13.2' + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/core@11.1.28': + resolution: {integrity: sha512-06m63xIRj8+l8uOeh/8LnYupGubkyu4f+bPKIadaSui6vK9KpXgoz7HveT1yOVLcEt0M0oCOEW5EuEXZkEmBBQ==} + engines: {node: '>= 20'} + peerDependencies: + '@nestjs/common': ^11.0.0 + '@nestjs/microservices': ^11.0.0 + '@nestjs/platform-express': ^11.0.0 + '@nestjs/websockets': ^11.0.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + + '@nestjs/platform-express@11.1.28': + resolution: {integrity: sha512-hU+9Sz4m+onHrR5AmelI59QKmY/Re546bPnygnpqqeQdHDiJpBgjWbL4t6Jr73CBpS60cpyng7WzjgphNB9iwA==} + peerDependencies: + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 + + '@nestjs/schematics@11.1.0': + resolution: {integrity: sha512-lVxGZ46tcdItFMoXr6vyKWlnOsm1SZm/GUqAEDvy2RL4Q4O+3bkziAhrO7Y8JLssFUUvNFEGqAizI52WAxhjDw==} + peerDependencies: + prettier: ^3.0.0 + typescript: '>=4.8.2' + peerDependenciesMeta: + prettier: + optional: true + '@noble/hashes@1.8.0': resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@paralleldrive/cuid2@2.3.1': resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@postman/form-data@3.1.1': resolution: {integrity: sha512-vjh8Q2a8S6UCm/KKs31XFJqEEgmbjBmpPNVV2eVav6905wyFAwaUOBGA1NPBI4ERH9MMZc6w0umFgM6WbEPMdg==} engines: {node: '>= 6'} @@ -202,35 +696,63 @@ packages: '@postman/tunnel-agent@0.6.8': resolution: {integrity: sha512-2U42SmZW5G+suEcS++zB94sBWNO4qD4bvETGFRFDTqSpYl5ksfjcPqzYpgQgXgUmb6dfz+fAGbkcRamounGm0w==} - '@prisma/client@6.19.1': - resolution: {integrity: sha512-4SXj4Oo6HyQkLUWT8Ke5R0PTAfVOKip5Roo+6+b2EDTkFg5be0FnBWiuRJc0BC0sRQIWGMLKW1XguhVfW/z3/A==} - engines: {node: '>=18.18'} + '@prisma/adapter-pg@7.4.2': + resolution: {integrity: sha512-oUo2Zhe9Tf6YwVL8kLPuOLTK1Z2pwi/Ua77t2PuGyBan2w7shRKqHvYK+3XXmRH9RWhPJ4SMtHZKpNo6Ax/4bQ==} + + '@prisma/client-runtime-utils@7.4.2': + resolution: {integrity: sha512-cID+rzOEb38VyMsx5LwJMEY4NGIrWCNpKu/0ImbeooQ2Px7TI+kOt7cm0NelxUzF2V41UVVXAmYjANZQtCu1/Q==} + + '@prisma/client@7.4.2': + resolution: {integrity: sha512-ts2mu+cQHriAhSxngO3StcYubBGTWDtu/4juZhXCUKOwgh26l+s4KD3vT2kMUzFyrYnll9u/3qWrtzRv9CGWzA==} + engines: {node: ^20.19 || ^22.12 || >=24.0} peerDependencies: prisma: '*' - typescript: '>=5.1.0' + typescript: '>=5.4.0' peerDependenciesMeta: prisma: optional: true typescript: optional: true - '@prisma/config@6.19.1': - resolution: {integrity: sha512-bUL/aYkGXLwxVGhJmQMtslLT7KPEfUqmRa919fKI4wQFX4bIFUKiY8Jmio/2waAjjPYrtuDHa7EsNCnJTXxiOw==} + '@prisma/config@7.4.2': + resolution: {integrity: sha512-CftBjWxav99lzY1Z4oDgomdb1gh9BJFAOmWF6P2v1xRfXqQb56DfBub+QKcERRdNoAzCb3HXy3Zii8Vb4AsXhg==} + + '@prisma/debug@7.2.0': + resolution: {integrity: sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==} + + '@prisma/debug@7.4.2': + resolution: {integrity: sha512-aP7qzu+g/JnbF6U69LMwHoUkELiserKmWsE2shYuEpNUJ4GrtxBCvZwCyCBHFSH2kLTF2l1goBlBh4wuvRq62w==} + + '@prisma/dev@0.20.0': + resolution: {integrity: sha512-ovlBYwWor0OzG+yH4J3Ot+AneD818BttLA+Ii7wjbcLHUrnC4tbUPVGyNd3c/+71KETPKZfjhkTSpdS15dmXNQ==} + + '@prisma/driver-adapter-utils@7.4.2': + resolution: {integrity: sha512-REdjFpT/ye9KdDs+CXAXPIbMQkVLhne9G5Pe97sNY4Ovx4r2DAbWM9hOFvvB1Oq8H8bOCdu0Ri3AoGALquQqVw==} + + '@prisma/engines-version@7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919': + resolution: {integrity: sha512-5FIKY3KoYQlBuZC2yc16EXfVRQ8HY+fLqgxkYfWCtKhRb3ajCRzP/rPeoSx11+NueJDANdh4hjY36mdmrTcGSg==} + + '@prisma/engines@7.4.2': + resolution: {integrity: sha512-B+ZZhI4rXlzjVqRw/93AothEKOU5/x4oVyJFGo9RpHPnBwaPwk4Pi0Q4iGXipKxeXPs/dqljgNBjK0m8nocOJA==} - '@prisma/debug@6.19.1': - resolution: {integrity: sha512-h1JImhlAd/s5nhY/e9qkAzausWldbeT+e4nZF7A4zjDYBF4BZmKDt4y0jK7EZapqOm1kW7V0e9agV/iFDy3fWw==} + '@prisma/fetch-engine@7.4.2': + resolution: {integrity: sha512-f/c/MwYpdJO7taLETU8rahEstLeXfYgQGlz5fycG7Fbmva3iPdzGmjiSWHeSWIgNnlXnelUdCJqyZnFocurZuA==} - '@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': - resolution: {integrity: sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==} + '@prisma/get-platform@7.2.0': + resolution: {integrity: sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==} - '@prisma/engines@6.19.1': - resolution: {integrity: sha512-xy95dNJ7DiPf9IJ3oaVfX785nbFl7oNDzclUF+DIiJw6WdWCvPl0LPU0YqQLsrwv8N64uOQkH391ujo3wSo+Nw==} + '@prisma/get-platform@7.4.2': + resolution: {integrity: sha512-UTnChXRwiauzl/8wT4hhe7Xmixja9WE28oCnGpBtRejaHhvekx5kudr3R4Y9mLSA0kqGnAMeyTiKwDVMjaEVsw==} - '@prisma/fetch-engine@6.19.1': - resolution: {integrity: sha512-mmgcotdaq4VtAHO6keov3db+hqlBzQS6X7tR7dFCbvXjLVTxBYdSJFRWz+dq7F9p6dvWyy1X0v8BlfRixyQK6g==} + '@prisma/query-plan-executor@7.2.0': + resolution: {integrity: sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==} - '@prisma/get-platform@6.19.1': - resolution: {integrity: sha512-zsg44QUiQAnFUyh6Fbt7c9HjMXHwFTqtrgcX7DAZmRgnkPyYT7Sh8Mn8D5PuuDYNtMOYcpLGg576MLfIORsBYw==} + '@prisma/studio-core@0.13.1': + resolution: {integrity: sha512-agdqaPEePRHcQ7CexEfkX1RvSH9uWDb6pXrZnhCRykhDFAV0/0P3d07WtfiY8hZWb7oRU4v+NkT4cGFHkQJIPg==} + peerDependencies: + '@types/react': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} @@ -250,6 +772,13 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@tootallnate/once@1.1.2': resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} @@ -258,21 +787,39 @@ packages: resolution: {tarball: https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833} version: 1.2.0 + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/express-jwt@0.0.42': resolution: {integrity: sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==} '@types/express-serve-static-core@4.19.7': resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==} - '@types/express-serve-static-core@5.1.0': - resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==} - '@types/express-unless@2.0.3': resolution: {integrity: sha512-iJbM7nsyBgnxCrCe7VjWIi4nyyhlaKUl7jxeHDpK+KXk3sYrUZViMkgFv9qSZmxDleB8dfpQR9gK5MGNyM/M6w==} deprecated: This is a stub types definition. express-unless provides its own type definitions, so you do not need this installed. @@ -280,12 +827,12 @@ packages: '@types/express@4.17.25': resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} - '@types/express@5.0.6': - resolution: {integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==} - '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/jsonwebtoken@9.0.10': resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} @@ -295,8 +842,11 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@25.0.3': - resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} + '@types/node@22.20.1': + resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} + + '@types/pg@8.20.0': + resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==} '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -304,6 +854,9 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + '@types/react@19.2.17': + resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} + '@types/send@0.17.6': resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} @@ -313,94 +866,245 @@ packages: '@types/serve-static@1.15.10': resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} - '@types/serve-static@2.2.0': - resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} - '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + '@typescript-eslint/eslint-plugin@8.64.0': + resolution: {integrity: sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.64.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + '@typescript-eslint/parser@8.64.0': + resolution: {integrity: sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - acorn@6.4.2: - resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} - engines: {node: '>=0.4.0'} - hasBin: true + '@typescript-eslint/project-service@8.64.0': + resolution: {integrity: sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + '@typescript-eslint/scope-manager@8.64.0': + resolution: {integrity: sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + '@typescript-eslint/tsconfig-utils@8.64.0': + resolution: {integrity: sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - ajv: ^6.9.1 + typescript: '>=4.8.4 <6.1.0' - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + '@typescript-eslint/type-utils@8.64.0': + resolution: {integrity: sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - ansi-escapes@3.2.0: - resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} - engines: {node: '>=4'} + '@typescript-eslint/types@8.64.0': + resolution: {integrity: sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} - engines: {node: '>=0.10.0'} + '@typescript-eslint/typescript-estree@8.64.0': + resolution: {integrity: sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' - ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} + '@typescript-eslint/utils@8.64.0': + resolution: {integrity: sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} - engines: {node: '>=6'} + '@typescript-eslint/visitor-keys@8.64.0': + resolution: {integrity: sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - ansi-styles@2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} - engines: {node: '>=0.10.0'} + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - anymatch@3.1.3: + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + acorn-import-phases@1.0.4: + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} + peerDependencies: + acorn: ^8.14.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} + engines: {node: '>=0.4.0'} + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + engines: {node: '>=14'} + + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - append-transform@1.0.0: - resolution: {integrity: sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==} - engines: {node: '>=4'} + append-field@1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + + append-transform@2.0.0: + resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} + engines: {node: '>=8'} archy@1.0.0: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -412,13 +1116,6 @@ packages: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - async@3.2.3: resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} @@ -435,10 +1132,15 @@ packages: aws-sdk@2.1693.0: resolution: {integrity: sha512-cJmb8xEnVLT+R6fBS5sn/EFJiX7tUnDaPtOPZ1vFbOJtd0fnZn/Ky2XGgsvvoeliWeH7mL3TWSX5zXXGSQV6gQ==} engines: {node: '>= 10.0.0'} + deprecated: The AWS SDK for JavaScript (v2) has reached end-of-support, and no longer receives updates. Please migrate your code to use AWS SDK for JavaScript (v3). More info https://a.co/cUPnyil aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + aws-ssl-profiles@1.1.2: + resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} + engines: {node: '>= 6.0.0'} + aws4@1.11.0: resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} @@ -455,9 +1157,6 @@ packages: axios@0.30.2: resolution: {integrity: sha512-0pE4RQ4UQi1jKY6p7u6i1Tkzqmu+d+/tHS7Q7rKunWLB9WyilBTpHHpXzPNMDj5hTbK0B0PTLSz07yqMBiF6xg==} - babel-code-frame@6.26.0: - resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} - babel-runtime@6.6.1: resolution: {integrity: sha512-5pdhO3jaxqh9L42oBfbrqy58swDhciM47sRGoODURdRxwfiqttEvK87LX27W/PYY6f4cJt2mEdyoLcr/+cM/iw==} @@ -468,9 +1167,18 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.43: + resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==} + engines: {node: '>=6.0.0'} + hasBin: true + bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -478,6 +1186,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bluebird@2.11.0: resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==} @@ -488,9 +1199,20 @@ packages: resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.3.0: + resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} + engines: {node: '>=18'} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@2.1.2: + resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} + + brace-expansion@5.0.7: + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -501,17 +1223,32 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + browserslist@4.28.6: + resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@4.9.2: resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bunyan@1.8.15: resolution: {integrity: sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==} engines: {'0': node >=0.10.0} hasBin: true + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -524,9 +1261,9 @@ packages: magicast: optional: true - caching-transform@3.0.2: - resolution: {integrity: sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==} - engines: {node: '>=6'} + caching-transform@4.0.0: + resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} + engines: {node: '>=8'} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} @@ -540,45 +1277,40 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - caller-path@0.1.0: - resolution: {integrity: sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==} - engines: {node: '>=0.10.0'} - - callsites@0.2.0: - resolution: {integrity: sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==} - engines: {node: '>=0.10.0'} + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - - chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} - engines: {node: '>=4'} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} - chalk@1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} - engines: {node: '>=0.10.0'} + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - chardet@0.4.2: - resolution: {integrity: sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} chardet@1.4.0: resolution: {integrity: sha512-NpwMDdSIprbYx1CLnfbxEIarI0Z+s9MssEgggMNheGM+WD68yOhV7IEA/3r6tr0yTRgQD0HuZJDw32s99i6L+A==} + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} + charset@1.0.1: resolution: {integrity: sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==} engines: {node: '>=4.0.0'} - check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + chevrotain@10.5.0: + resolution: {integrity: sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -588,30 +1320,51 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - circular-json@0.3.3: - resolution: {integrity: sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==} - deprecated: CircularJSON is in maintenance only, flatted is its successor. + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - cli-cursor@2.1.0: - resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} - engines: {node: '>=4'} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} cli-progress@3.10.0: resolution: {integrity: sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==} engines: {node: '>=4'} + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + cli-table3@0.6.1: resolution: {integrity: sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==} engines: {node: 10.* || >= 12.*} - cli-width@2.2.1: - resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} - cliui@5.0.0: - resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} codependency@0.1.4: resolution: {integrity: sha512-26yAvd3+17xSfDADtnzpnL5GK+8+x4QeZ3DegekkHyno6LWeHqXuSU7q8w/IrAur7SY6ISPApOWtWTfuIF0Xpg==} @@ -619,15 +1372,16 @@ packages: codependency@2.1.0: resolution: {integrity: sha512-JIdmYkE8Z6jwH1OUf4a5H5jk9YShPQkaYPUAiN+ktyChmPP77LGbeKrxWGPqdCnpTmt0hRIn8TXBVu01U3HDhg==} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} color-convert@3.1.3: resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==} engines: {node: '>=14.6'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} color-name@2.1.0: resolution: {integrity: sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==} @@ -649,12 +1403,13 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@2.15.1: - resolution: {integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -663,6 +1418,10 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + comment-json@5.0.0: + resolution: {integrity: sha512-uiqLcOiVDJtBP8WGkZHEP+FZIhTzP1dxvn59EfoYUi9gqupjrBWVQkO2atDrbnKPwLeotFYDsuNb26uBMqB+hw==} + engines: {node: '>= 6'} + commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -672,6 +1431,10 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + confbox@0.2.2: resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} @@ -683,24 +1446,35 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - contains-path@0.1.0: - resolution: {integrity: sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==} - engines: {node: '>=0.10.0'} - content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.1.0: + resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} + engines: {node: '>=18'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.0.7: resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -719,20 +1493,32 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} - cp-file@6.2.0: - resolution: {integrity: sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==} - engines: {node: '>=6'} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true - cross-spawn@4.0.2: - resolution: {integrity: sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==} + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} cssfilter@0.0.10: resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + csv-parse@4.16.3: resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} @@ -740,22 +1526,6 @@ packages: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug-log@1.0.1: - resolution: {integrity: sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA==} - engines: {node: '>=0.10.0'} - debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -772,14 +1542,6 @@ packages: supports-color: optional: true - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -793,13 +1555,9 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} - engines: {node: '>=6'} - - deep-equal@1.1.2: - resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==} - engines: {node: '>= 0.4'} + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -808,28 +1566,32 @@ packages: resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} engines: {node: '>=16.0.0'} - default-require-extensions@2.0.0: - resolution: {integrity: sha512-B0n2zDIXpzLzKeoEozorDSa1cHc1t0NjmxP0zuAxbizNU2MBqYJJKYXrrFdKuQliojXynrxgd7l4ahfg/+aA5g==} - engines: {node: '>=4'} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-require-extensions@3.0.1: + resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} + engines: {node: '>=8'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - deglob@2.1.1: - resolution: {integrity: sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -844,22 +1606,22 @@ packages: dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - diff@3.5.0: - resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + diff@4.0.4: + resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} - doctrine@1.5.0: - resolution: {integrity: sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==} - engines: {node: '>=0.10.0'} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + diff@7.0.0: + resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} + engines: {node: '>=0.3.1'} dotenv@16.6.1: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} + engines: {node: '>=12'} + dtrace-provider@0.8.8: resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==} engines: {node: '>=0.10'} @@ -868,6 +1630,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} @@ -880,12 +1645,15 @@ packages: effect@3.18.4: resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==} - emoji-regex@7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + electron-to-chromium@1.5.392: + resolution: {integrity: sha512-1yQq3VQCZRwsnYc67Oc+1fge6Lwtn0hzi6zmEVkB61Zx21kTbwJAW4dFLadl5Rc1tKhG/kSpYXnfiAhu0f0a1g==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + empathic@2.0.0: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} @@ -897,13 +1665,13 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + enhanced-resolve@5.24.2: + resolution: {integrity: sha512-rpsZEGT1jFuve6QlpyRp9ckQ+kN61hvF9BzCPyMdaKTm8UJce96KBn3sorXOFXlzjPrs3Vc4T1NsSroZ3PxlFw==} + engines: {node: '>=10.13.0'} + error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-abstract@1.24.1: - resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -912,6 +1680,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -920,117 +1691,59 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} - eslint-config-standard-jsx@6.0.2: - resolution: {integrity: sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true peerDependencies: - eslint: '>=5.0.0' - eslint-plugin-react: '>=7.11.1' + eslint: '>=7.0.0' - eslint-config-standard@12.0.0: - resolution: {integrity: sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==} - peerDependencies: - eslint: '>=5.0.0' - eslint-plugin-import: '>=2.13.0' - eslint-plugin-node: '>=7.0.0' - eslint-plugin-promise: '>=4.0.0' - eslint-plugin-standard: '>=4.0.0' + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-module-utils@2.12.1: - resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-plugin-es@1.4.1: - resolution: {integrity: sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-plugin-import@2.14.0: - resolution: {integrity: sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==} - engines: {node: '>=4'} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.5: + resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true peerDependencies: - '@typescript-eslint/parser': '*' - eslint: 2.x - 5.x + jiti: '*' peerDependenciesMeta: - '@typescript-eslint/parser': + jiti: optional: true - eslint-plugin-node@7.0.1: - resolution: {integrity: sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==} - engines: {node: '>=6'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-promise@4.0.1: - resolution: {integrity: sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==} - engines: {node: '>=6'} - - eslint-plugin-react@7.11.1: - resolution: {integrity: sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 - - eslint-plugin-standard@4.0.2: - resolution: {integrity: sha512-nKptN8l7jksXkwFk++PhJB3cCDTcXOEyhISIN86Ue2feJ1LFyY3PrY3/xT2keXlJSY5bpmbiTG0f885/YKAvTA==} - peerDependencies: - eslint: '>=5.0.0' - - eslint-scope@4.0.3: - resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} - engines: {node: '>=4.0.0'} - - eslint-utils@1.4.3: - resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==} - engines: {node: '>=6'} - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - - eslint@5.4.0: - resolution: {integrity: sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==} - engines: {node: ^6.14.0 || ^8.10.0 || >=9.10.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - espree@4.1.0: - resolution: {integrity: sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==} - engines: {node: '>=6.0.0'} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -1068,6 +1781,10 @@ packages: resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} engines: {node: '>=0.4.x'} + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + express-interceptor@1.2.0: resolution: {integrity: sha512-fCbcJv8ZwabDg0M/3PmHUxfr/WKHGMpAicR9TfGdhANV4M1GBDSrBTenHIK3aegyRN5S6eDwlvyNFiLynnc19w==} @@ -1078,16 +1795,16 @@ packages: resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - external-editor@2.2.0: - resolution: {integrity: sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==} - engines: {node: '>=0.12'} - extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} @@ -1111,16 +1828,28 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@3.1.3: + resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fecha@4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - figures@2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} - engines: {node: '>=4'} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} - file-entry-cache@2.0.0: - resolution: {integrity: sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==} - engines: {node: '>=0.10.0'} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} file-type@3.9.0: resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} @@ -1142,28 +1871,36 @@ packages: resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} - find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} - find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} - flat-cache@1.3.4: - resolution: {integrity: sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==} - engines: {node: '>=0.10.0'} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true flatted@3.1.1: resolution: {integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -1184,12 +1921,24 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@1.5.6: - resolution: {integrity: sha512-3TOY+4TKV0Ml83PXJQY+JFQaHNV38lzQDIzzXYg1kWdBLenGgoZhAs0CKgzI31vi2pWEpQMq/Yi4bpKwCPkw7g==} + foreground-child@2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + fork-ts-checker-webpack-plugin@9.1.0: + resolution: {integrity: sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==} + engines: {node: '>=14.21.3'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} @@ -1198,9 +1947,6 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} - formidable@2.1.5: - resolution: {integrity: sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==} - formidable@3.5.4: resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} engines: {node: '>=14.0.0'} @@ -1213,6 +1959,20 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fromentries@1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-monkey@1.1.0: + resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1224,47 +1984,40 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functional-red-black-tree@1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + get-parameter-names@0.3.0: resolution: {integrity: sha512-KkR1dX7U1TynXFkqveVE/XoRn9qRAsM2q4Eu2WsGTFzoaSdnNQEfxbcK+LMv8DcFoQQT9BFjNL+bf9ZyTLkWpg==} engines: {node: '>= 0.4.0'} + get-port-please@3.2.0: + resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stdin@6.0.0: - resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} - engines: {node: '>=4'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} @@ -1276,25 +2029,37 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} + glob@6.0.4: resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} - deprecated: Glob versions prior to v9 are no longer supported - - glob@7.1.2: - resolution: {integrity: sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} @@ -1303,9 +2068,11 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - growl@1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} + grammex@3.1.13: + resolution: {integrity: sha512-LnPnhOBLEJEVKS8WFDVaA397L9Kq55Q9oSITJiVLHVdhAclfUkWzQv74KhvZHKL2Q09Pb1XdsrOsZ4LfTFFTEg==} + + graphmatch@1.1.1: + resolution: {integrity: sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==} handlebars@4.5.3: resolution: {integrity: sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==} @@ -1331,25 +2098,17 @@ packages: engines: {node: '>=6'} deprecated: this library is no longer supported - has-ansi@2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} - engines: {node: '>=0.10.0'} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -1358,28 +2117,25 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - - hasha@3.0.0: - resolution: {integrity: sha512-w0Kz8lJFBoyaurBiNrIvxPqr/gJ6fOfSkpAPOepN3oECqGJag37xPbOv57izi/KP8auHgNYxn5fXtAb+1LsJ6w==} - engines: {node: '>=4'} + hasha@5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - he@1.1.1: - resolution: {integrity: sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true hoek@6.1.3: resolution: {integrity: sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==} deprecated: This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues. - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + hono@4.11.4: + resolution: {integrity: sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==} + engines: {node: '>=16.9.0'} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -1409,6 +2165,9 @@ packages: http-status-codes@1.4.0: resolution: {integrity: sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==} + http-status-codes@2.3.0: + resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + httpntlm@1.7.7: resolution: {integrity: sha512-Pv2Rvrz8H0qv1Dne5mAdZ9JegG1uc6Vu5lwLflIY6s8RKHdZQbW39L4dYswSgqMDT0pkJILUTKjeyU0VPNRZjA==} engines: {node: '>=0.8.0'} @@ -1429,23 +2188,39 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} + engines: {node: '>=0.10.0'} + ieee754@1.1.13: resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore-by-default@1.0.1: resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - ignore@3.3.10: - resolution: {integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} - ignore@4.0.6: - resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + ignore@7.0.6: + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} engines: {node: '>= 4'} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -1453,14 +2228,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - inquirer@5.2.0: - resolution: {integrity: sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==} - engines: {node: '>=6.0.0'} - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - ip-regex@2.1.0: resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} engines: {node: '>=4'} @@ -1473,57 +2240,21 @@ packages: resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -1536,53 +2267,39 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} - is-resolvable@1.1.0: - resolution: {integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==} + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -1590,24 +2307,17 @@ packages: is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isemail@3.2.0: resolution: {integrity: sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==} engines: {node: '>=4.0.0'} @@ -1618,30 +2328,45 @@ packages: isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - istanbul-lib-coverage@2.0.5: - resolution: {integrity: sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==} - engines: {node: '>=6'} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} - istanbul-lib-hook@2.0.7: - resolution: {integrity: sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==} - engines: {node: '>=6'} + istanbul-lib-hook@3.0.0: + resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} + engines: {node: '>=8'} - istanbul-lib-instrument@3.3.0: - resolution: {integrity: sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==} - engines: {node: '>=6'} + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} - istanbul-lib-report@2.0.8: - resolution: {integrity: sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==} - engines: {node: '>=6'} + istanbul-lib-processinfo@2.0.3: + resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} + engines: {node: '>=8'} - istanbul-lib-source-maps@3.0.6: - resolution: {integrity: sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==} - engines: {node: '>=6'} + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} - istanbul-reports@2.2.7: - resolution: {integrity: sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==} + iterare@1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} engines: {node: '>=6'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -1667,9 +2392,6 @@ packages: js-sha512@0.8.0: resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==} - js-tokens@3.0.2: - resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1677,6 +2399,10 @@ packages: resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} @@ -1685,12 +2411,18 @@ packages: engines: {node: '>=6'} hasBin: true - json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -1705,6 +2437,12 @@ packages: engines: {node: '>=6'} hasBin: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + jsonwebtoken@8.5.1: resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} engines: {node: '>=4', npm: '>=1.4.28'} @@ -1721,10 +2459,6 @@ packages: resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} engines: {'0': node >=0.6.0} - jsx-ast-utils@2.4.1: - resolution: {integrity: sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==} - engines: {node: '>=4.0'} - jwa@1.4.2: resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} @@ -1744,35 +2478,45 @@ packages: jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + limiter@1.1.5: resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + liquid-json@0.3.1: resolution: {integrity: sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==} engines: {node: '>=4'} - load-json-file@2.0.0: - resolution: {integrity: sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==} - engines: {node: '>=4'} + load-esm@1.0.3: + resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==} + engines: {node: '>=13.2.0'} - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} + loader-runner@4.3.2: + resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==} + engines: {node: '>=6.11.5'} - locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} @@ -1798,6 +2542,9 @@ packages: lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} @@ -1807,19 +2554,26 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + logform@2.7.0: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -1828,9 +2582,23 @@ packages: lru-memoizer@2.3.0: resolution: {integrity: sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==} - make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} + lru.min@1.1.4: + resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} + engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} @@ -1840,11 +2608,23 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - merge-source-map@1.1.0: - resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} @@ -1861,6 +2641,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-format@2.0.1: resolution: {integrity: sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==} @@ -1872,6 +2656,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -1882,29 +2670,33 @@ packages: engines: {node: '>=4.0.0'} hasBin: true - mimic-fn@1.2.0: - resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} - engines: {node: '>=4'} + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} - minimatch@3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@0.0.10: resolution: {integrity: sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==} - minimist@0.0.8: - resolution: {integrity: sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - mkdirp@0.5.1: - resolution: {integrity: sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==} - deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) - hasBin: true + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} @@ -1915,14 +2707,9 @@ packages: engines: {node: '>=10'} hasBin: true - mocha-prepare@0.1.0: - resolution: {integrity: sha512-ZSa/Zq+CQv9ZS7kfgsB3iRbfM4WBLn+Oy3EHDp3IXxbUVmVrcu+cs2YOELH77Gj3amkHjhCpM5CAZHV6jz6scg==} - peerDependencies: - mocha: '>=1.0.0' - - mocha@5.2.0: - resolution: {integrity: sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==} - engines: {node: '>= 4.0.0'} + mocha@11.7.6: + resolution: {integrity: sha512-nS9xOGbw2I3cjCpxwZAEJ9xK9lmJ08vEkQvLtz4du9ZrF9UrjRpeJGiIgl2Z+Qs++pmB4ecDe48Fwsh+j+j7xA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true moment@2.30.1: @@ -1934,13 +2721,26 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@0.0.7: - resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} + multer@2.2.0: + resolution: {integrity: sha512-6rdyFg2kLrMh9Jee7/BMPuV9lEAd7lLW2YUpF9/YxR7njyoUwwQ0ZPh3TaIY50Sw6vlyD2HW3wGOkTS4P79xrQ==} + engines: {node: '>= 10.16.0'} + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} mv@2.1.1: resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} engines: {node: '>=0.8.0'} + mysql2@3.15.3: + resolution: {integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==} + engines: {node: '>= 8.0'} + + named-placeholders@1.1.6: + resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} + engines: {node: '>=8.0.0'} + nan@2.24.0: resolution: {integrity: sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==} @@ -1955,12 +2755,13 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - nested-error-stacks@2.1.1: - resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - newman-reporter-html@1.0.5: resolution: {integrity: sha512-Kz8ejzJqDaasyqNuP8F7bBYzsts7JP3wBfdRQDOYPCUchVQF63KsbxtxbGadyzOeXcZsXs6YT3pe4FFlN51jcw==} engines: {node: '>=6'} @@ -1972,12 +2773,15 @@ packages: engines: {node: '>=10'} hasBin: true - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + nock@14.0.16: + resolution: {integrity: sha512-8r4KEc6nT1D/fdLD/R1BO1CPaVEL8o40u/guFRJlXabN7vr3RmMqyjsY5Krt0nMwhsOAwXQ/mtN5vy5Jh3aErg==} + engines: {node: '>=18.20.0 <20 || >=20.12.1'} - nock@10.0.6: - resolution: {integrity: sha512-b47OWj1qf/LqSQYnmokNWM8D88KvUl2y7jT0567NB3ZBAZFz2bWp2PC81Xn7u8F2/vJxzkzNZybnemeFa7AZ2w==} - engines: {node: '>= 6.0'} + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-emoji@1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -1985,21 +2789,26 @@ packages: node-oauth1@1.3.0: resolution: {integrity: sha512-0yggixNfrA1KcBwvh/Hy2xAS1Wfs9dcg6TdFf2zN7gilcAigMdrtZ4ybrBSXBgLvGDw9V1p2MRnGBMq7XjTWLg==} + node-preload@0.2.1: + resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} + engines: {node: '>=8'} + + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} + engines: {node: '>=18'} + nodemon@3.1.11: resolution: {integrity: sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==} engines: {node: '>=10'} hasBin: true - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - nyc@14.1.1: - resolution: {integrity: sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==} - engines: {node: '>=6'} + nyc@17.1.0: + resolution: {integrity: sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==} + engines: {node: '>=18'} hasBin: true nypm@0.6.2: @@ -2022,18 +2831,6 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -2047,64 +2844,62 @@ packages: one-time@1.0.0: resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - onetime@2.0.1: - resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} - engines: {node: '>=4'} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} optimist@0.6.1: resolution: {integrity: sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==} - optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - os-homedir@1.0.2: - resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} - engines: {node: '>=0.10.0'} - - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} - p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} - p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} - p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-hash@3.0.0: - resolution: {integrity: sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==} - engines: {node: '>=6'} + package-hash@4.0.0: + resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} + engines: {node: '>=8'} - parse-json@2.2.0: - resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} - engines: {node: '>=0.10.0'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} parse-ms@2.1.0: resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} @@ -2114,47 +2909,79 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - path-type@2.0.0: - resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} - engines: {node: '>=4'} + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} - path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + pg-cloudflare@1.4.0: + resolution: {integrity: sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==} + + pg-connection-string@2.14.0: + resolution: {integrity: sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-pool@3.14.0: + resolution: {integrity: sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.15.0: + resolution: {integrity: sha512-cq9sECI5s0+uPUXjbz8ioyPJni6RzsRib0US67i5IoTZKw8fNeYlVE7u8F4dG7vEJJtc5wdD1K189lCCUwqWTQ==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg@8.22.0: + resolution: {integrity: sha512-8wih1vVIBMxoUM2oB4soJsD9tDnDpLv4OXBJ+EJzFsvycD+lfyIreC2gGHq78f8jbLLt+bvlPTFdFZfJkOuzAA==} + engines: {node: '>= 16.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2162,43 +2989,55 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - - pkg-conf@2.1.0: - resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} - engines: {node: '>=4'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} - pkg-config@1.1.1: - resolution: {integrity: sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw==} - engines: {node: '>=0.10'} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} - pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - pluralize@7.0.0: - resolution: {integrity: sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postman-collection-transformer@4.1.6: - resolution: {integrity: sha512-xvdQb6sZoWcG9xZXUPSuxocjcd6WCZlINlGGiuHdSfxhgiwQhj9qhF0JRFbagZ8xB0+pYUairD5MiCENc6DEVA==} + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-array@3.0.4: + resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} + engines: {node: '>=12'} + + postgres-bytea@1.0.1: + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} + engines: {node: '>=0.10.0'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + + postgres@3.4.7: + resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} + engines: {node: '>=12'} + + postman-collection-transformer@4.1.6: + resolution: {integrity: sha512-xvdQb6sZoWcG9xZXUPSuxocjcd6WCZlINlGGiuHdSfxhgiwQhj9qhF0JRFbagZ8xB0+pYUairD5MiCENc6DEVA==} engines: {node: '>=10'} hasBin: true @@ -2226,10 +3065,15 @@ packages: resolution: {integrity: sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==} engines: {node: '>= 0.6'} - prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@3.9.5: + resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==} + engines: {node: '>=14'} + hasBin: true + pretty-ms@5.1.0: resolution: {integrity: sha512-4gaK1skD2gwscCfkswYQRmddUb2GJZtzDGRjHWadVHtK/DIKFufa12MvES6/xu1tVbUYeia5bmLcwJtZJQUqnw==} engines: {node: '>=8'} @@ -2238,26 +3082,29 @@ packages: resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} engines: {node: '>=10'} - prisma@6.19.1: - resolution: {integrity: sha512-XRfmGzh6gtkc/Vq3LqZJcS2884dQQW3UhPo6jNRoiTW95FFQkXFg8vkYEy6og+Pyv0aY7zRQ7Wn1Cvr56XjhQQ==} - engines: {node: '>=18.18'} + prisma@7.4.2: + resolution: {integrity: sha512-2bP8Ruww3Q95Z2eH4Yqh4KAENRsj/SxbdknIVBfd6DmjPwmpsC4OVFMLOeHt6tM3Amh8ebjvstrUz3V/hOe1dA==} + engines: {node: ^20.19 || ^22.12 || >=24.0} hasBin: true peerDependencies: - typescript: '>=5.1.0' + better-sqlite3: '>=9.0.0' + typescript: '>=5.4.0' peerDependenciesMeta: + better-sqlite3: + optional: true typescript: optional: true - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} + process-on-spawn@1.1.0: + resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} + engines: {node: '>=8'} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + propagate@2.0.1: + resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} + engines: {node: '>= 8'} - propagate@1.0.0: - resolution: {integrity: sha512-T/rqCJJaIPYObiLSmaDsIf4PGA7y+pkgYFHmwoXQyOHiDDSO1YCxcztNiRBmV4EZha4QIbID3vQIHkqKu5k0Xg==} - engines: {'0': node >= 0.8.1} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} @@ -2266,9 +3113,6 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -2289,6 +3133,10 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} + qs@6.15.3: + resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} + engines: {node: '>=0.6'} + qs@6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} @@ -2298,9 +3146,6 @@ packages: engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - r7insight_node@1.8.4: resolution: {integrity: sha512-6cQrzLkaOxdv/SRFXWRJjgFr8a3nXUOT/4IMFuBv+mWzBnu5DJl+HzONAsWYvclrlZnvfa54PaIPqPuPRSlbrQ==} engines: {iojs: '>=0.10', node: '>=0.8.0', npm: '>=1.4.6'} @@ -2309,6 +3154,9 @@ packages: resolution: {integrity: sha512-xx0kgFxSHWY9aG1109uv4w2b+JLwHseSowOWo1bzCTDBpUk3er2rZdtQ90mAjUYbkh6Hus9DAwWvmHsX5pHaIQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -2317,27 +3165,21 @@ packages: resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - read-pkg-up@2.0.0: - resolution: {integrity: sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==} - engines: {node: '>=4'} - - read-pkg-up@4.0.0: - resolution: {integrity: sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==} - engines: {node: '>=6'} - - read-pkg@2.0.0: - resolution: {integrity: sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==} - engines: {node: '>=4'} + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} + peerDependencies: + react: ^19.2.7 - read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} + engines: {node: '>=0.10.0'} readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} @@ -2354,22 +3196,19 @@ packages: reconnect-core@1.3.0: resolution: {integrity: sha512-+gLKwmyRf2tjl6bLR03DoeWELzyN6LW9Xgr3vh7NXHHwPi0JC0N2TwPyf90oUEBkCRcD+bgQ+s3HORoG3nwHDg==} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - regexpp@2.0.1: - resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==} - engines: {node: '>=6.5.0'} + regexp-to-ast@0.5.0: + resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} release-zalgo@1.0.0: resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} engines: {node: '>=4'} + remeda@2.33.4: + resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} + request@2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} @@ -2379,59 +3218,48 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - - require-uncached@1.0.3: - resolution: {integrity: sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - resolve-from@1.0.1: - resolution: {integrity: sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==} - engines: {node: '>=0.10.0'} + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} - restore-cursor@2.0.0: - resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} - engines: {node: '>=4'} + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} rimraf@2.4.5: resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} - rxjs@5.5.12: - resolution: {integrity: sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==} - engines: {npm: '>=2.0.0'} + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -2439,10 +3267,6 @@ packages: safe-json-stringify@1.2.0: resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - safe-regex-test@1.1.0: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} @@ -2457,6 +3281,17 @@ packages: sax@1.2.1: resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} + semver@5.0.1: resolution: {integrity: sha512-Ne6/HdGZvvpXBdjW3o8J0pvxC2jnmVNBK7MKkMgsOBfrsIdTXfA5x+H9DUbQ2xzyvnLv0A0v9x8R4B40xNZIRQ==} hasBin: true @@ -2487,13 +3322,27 @@ packages: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + seq-queue@0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + serialised-error@1.1.3: resolution: {integrity: sha512-vybp3GItaR1ZtO2nxZZo8eOo7fnVaNtP3XE2vJKgzkKR2bagCkdJ1EpYYhEMd3qu/80DwQk9KjsNSxE3fXWq0g==} + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serve-static@1.16.3: resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -2501,24 +3350,16 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} should-equal@2.0.0: resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==} @@ -2542,6 +3383,10 @@ packages: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + side-channel-map@1.0.1: resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} engines: {node: '>= 0.4'} @@ -2554,39 +3399,51 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - slice-ansi@1.0.0: - resolution: {integrity: sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==} - engines: {node: '>=4'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - spawn-wrap@1.4.3: - resolution: {integrity: sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spawn-wrap@2.0.0: + resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} + engines: {node: '>=8'} - spdx-license-ids@3.0.22: - resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} @@ -2598,108 +3455,73 @@ packages: stack-trace@0.0.9: resolution: {integrity: sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==} - standard-engine@9.0.0: - resolution: {integrity: sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==} - - standard@12.0.1: - resolution: {integrity: sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==} - engines: {node: '>=4'} - hasBin: true - statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stream-length@1.0.2: resolution: {integrity: sha512-aI+qKFiwoDV4rsXiS7WRoCt+v2RX1nUj17+KJC5r2gfh5xoSJIfP6Y3Do/HtvesFcTSWthIuJ3l1cvKQY/+nZg==} - string-width@2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} - string-width@3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} - engines: {node: '>=6'} + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} - engines: {node: '>=0.10.0'} - - strip-ansi@4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} - engines: {node: '>=4'} - - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - superagent@10.2.3: - resolution: {integrity: sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==} - engines: {node: '>=14.18.0'} - - superagent@8.1.2: - resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} - engines: {node: '>=6.4.0 <13 || >=14'} - deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net - - supports-color@2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} - engines: {node: '>=0.8.0'} + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} - supports-color@5.4.0: - resolution: {integrity: sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==} - engines: {node: '>=4'} + superagent@10.3.0: + resolution: {integrity: sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==} + engines: {node: '>=14.18.0'} supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} - supports-color@6.1.0: - resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} - engines: {node: '>=6'} + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} swagger-ui-dist@5.31.0: resolution: {integrity: sha512-zSUTIck02fSga6rc0RZP3b7J7wgHXwLea8ZjgLA3Vgnb8QeOl3Wou2/j5QkzSGeoz6HusP/coYuJl33aQxQZpg==} @@ -2710,13 +3532,13 @@ packages: peerDependencies: express: '>=4.0.0 || >=5.0.0-beta' - symbol-observable@1.0.1: - resolution: {integrity: sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==} - engines: {node: '>=0.10.0'} + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} - table@4.0.3: - resolution: {integrity: sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==} - engines: {node: '>=4.0.0'} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} tc-api-testing-lib@https://codeload.github.com/topcoder-platform/api-automated-testing/tar.gz/dd0118f41612764bed344c31affb40b7448949c5: resolution: {tarball: https://codeload.github.com/topcoder-platform/api-automated-testing/tar.gz/dd0118f41612764bed344c31affb40b7448949c5} @@ -2735,26 +3557,68 @@ packages: teleport-javascript@1.0.0: resolution: {integrity: sha512-j1llvWVFyEn/6XIFDfX5LAU43DXe0GCt3NfXDwJ8XpRRMkS+i50SAkonAONBy+vxwPFBd50MFU8a2uj8R/ccLg==} - test-exclude@5.2.3: - resolution: {integrity: sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==} - engines: {node: '>=6'} + terser-webpack-plugin@5.6.1: + resolution: {integrity: sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@minify-html/node': '*' + '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' + esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@minify-html/node': + optional: true + '@swc/core': + optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true + esbuild: + optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true + uglify-js: + optional: true - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + terser@5.49.0: + resolution: {integrity: sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==} + engines: {node: '>=10'} + hasBin: true - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} tinyexec@1.0.2: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -2764,6 +3628,10 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} + engines: {node: '>=14.16'} + topo@3.0.3: resolution: {integrity: sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==} deprecated: This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues. @@ -2784,48 +3652,100 @@ packages: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-loader@9.6.2: + resolution: {integrity: sha512-R4iuczmtgxvtuI556s+hTZ6/7Ee03VCAk/l/M8LY1OAsUgB7YydsCxkgq9D9pKRaD7GJqUi2u8fp9zZP/ufjKA==} + engines: {node: '>=12.0.0'} + peerDependencies: + loader-utils: '*' + typescript: '*' + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + loader-utils: + optional: true + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths-webpack-plugin@4.2.0: + resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==} + engines: {node: '>=10.13.0'} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} + type-is@2.1.0: + resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} + engines: {node: '>= 18'} - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} + typescript-eslint@8.64.0: + resolution: {integrity: sha512-0qg+pDNMnqYzqH9AnNK+39tejHvsShUOUUoRUgtnTGE7QuMZhiFDnozq8nHJVq+Wae6NMLKNWLg5WmkcC/ndyQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + uid@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} @@ -2833,16 +3753,23 @@ packages: underscore@1.12.1: resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - uniq@1.0.1: - resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2859,25 +3786,39 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@11.1.1: + resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} + hasBin: true + uuid@3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@8.0.0: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uvm@2.0.2: resolution: {integrity: sha512-Ra+aPiS5GXAbwXmyNExqdS42sTqmmx4XWEDF8uJlsTfOkKf9Rd9xNgav1Yckv4HfVEZg4iOFODWHFYuJ+9Fzfg==} engines: {node: '>=10'} - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + valibot@1.2.0: + resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} @@ -2887,17 +3828,30 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + watchpack@2.5.2: + resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==} + engines: {node: '>=10.13.0'} - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + webpack-node-externals@3.0.0: + resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} + engines: {node: '>=6'} + + webpack-sources@3.5.1: + resolution: {integrity: sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==} + engines: {node: '>=10.13.0'} + + webpack@5.106.2: + resolution: {integrity: sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} @@ -2906,8 +3860,9 @@ packages: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true winston-transport@4.9.0: @@ -2933,19 +3888,26 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - wrap-ansi@5.1.0: - resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} - engines: {node: '>=6'} + workerpool@9.3.4: + resolution: {integrity: sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@2.4.3: - resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} - - write@0.2.1: - resolution: {integrity: sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==} - engines: {node: '>=0.10.0'} + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} xml2js@0.6.2: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} @@ -2971,8 +3933,12 @@ packages: y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -2981,52 +3947,202 @@ packages: resolution: {integrity: sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==} hasBin: true - yargs-parser@13.1.2: - resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} - yargs@13.3.2: - resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} + zeptomatch@2.1.0: + resolution: {integrity: sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==} snapshots: + '@angular-devkit/core@19.2.24(chokidar@4.0.3)': + dependencies: + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + jsonc-parser: 3.3.1 + picomatch: 4.0.4 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 4.0.3 + + '@angular-devkit/core@19.2.27(chokidar@4.0.3)': + dependencies: + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + jsonc-parser: 3.3.1 + picomatch: 4.0.4 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 4.0.3 + + '@angular-devkit/schematics-cli@19.2.27(@types/node@22.20.1)(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.2.27(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.27(chokidar@4.0.3) + '@inquirer/prompts': 7.3.2(@types/node@22.20.1) + ansi-colors: 4.1.3 + symbol-observable: 4.0.0 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - '@types/node' + - chokidar + + '@angular-devkit/schematics@19.2.24(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.2.24(chokidar@4.0.3) + jsonc-parser: 3.3.1 + magic-string: 0.30.17 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/schematics@19.2.27(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.2.27(chokidar@4.0.3) + jsonc-parser: 3.3.1 + magic-string: 0.30.17 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/generator@7.28.5': + '@babel/code-frame@7.29.7': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.7': {} + + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@5.5.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.7': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-globals@7.28.0': {} + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.6 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.29.7': {} + + '@babel/helper-module-imports@7.29.7': + dependencies: + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 + transitivePeerDependencies: + - supports-color '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helpers@7.29.7': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + '@babel/parser@7.28.5': dependencies: '@babel/types': 7.28.5 - '@babel/template@7.27.2': + '@babel/parser@7.29.7': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/types': 7.29.7 - '@babel/traverse@7.28.5': + '@babel/template@7.29.7': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/traverse@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -3036,14 +4152,99 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@borewit/text-codec@0.2.2': {} + + '@chevrotain/cst-dts-gen@10.5.0': + dependencies: + '@chevrotain/gast': 10.5.0 + '@chevrotain/types': 10.5.0 + lodash: 4.17.21 + + '@chevrotain/gast@10.5.0': + dependencies: + '@chevrotain/types': 10.5.0 + lodash: 4.17.21 + + '@chevrotain/types@10.5.0': {} + + '@chevrotain/utils@10.5.0': {} + + '@colors/colors@1.5.0': + optional: true + '@colors/colors@1.6.0': {} + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@dabh/diagnostics@2.0.8': dependencies: '@so-ric/colorspace': 1.1.6 enabled: 2.0.0 kuler: 2.0.0 + '@electric-sql/pglite-socket@0.0.20(@electric-sql/pglite@0.3.15)': + dependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite-tools@0.2.20(@electric-sql/pglite@0.3.15)': + dependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite@0.3.15': {} + + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.5(jiti@2.6.1))': + dependencies: + eslint: 9.39.5(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3(supports-color@5.5.0) + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.6': + dependencies: + ajv: 6.15.0 + debug: 4.4.3(supports-color@5.5.0) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.3.0 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.5': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + '@hapi/address@5.1.1': dependencies: '@hapi/hoek': 11.0.7 @@ -3056,23 +4257,212 @@ snapshots: '@hapi/pinpoint@2.0.1': {} - '@hapi/tlds@1.1.4': {} + '@hapi/tlds@1.1.4': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + + '@hapi/topo@6.0.2': + dependencies: + '@hapi/hoek': 11.0.7 + + '@hono/node-server@1.19.9(hono@4.11.4)': + dependencies: + hono: 4.11.4 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@inquirer/ansi@1.0.2': {} + + '@inquirer/checkbox@4.3.2(@types/node@22.20.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/confirm@5.1.21(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/core@10.3.2(@types/node@22.20.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.20.1) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/editor@4.2.23(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/external-editor': 1.0.3(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/expand@4.0.23(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/external-editor@1.0.3(@types/node@22.20.1)': + dependencies: + chardet: 2.2.0 + iconv-lite: 0.7.3 + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/figures@1.0.15': {} + + '@inquirer/input@4.3.1(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/number@3.0.23(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/password@4.0.23(@types/node@22.20.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/prompts@7.10.1(@types/node@22.20.1)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@22.20.1) + '@inquirer/confirm': 5.1.21(@types/node@22.20.1) + '@inquirer/editor': 4.2.23(@types/node@22.20.1) + '@inquirer/expand': 4.0.23(@types/node@22.20.1) + '@inquirer/input': 4.3.1(@types/node@22.20.1) + '@inquirer/number': 3.0.23(@types/node@22.20.1) + '@inquirer/password': 4.0.23(@types/node@22.20.1) + '@inquirer/rawlist': 4.1.11(@types/node@22.20.1) + '@inquirer/search': 3.2.2(@types/node@22.20.1) + '@inquirer/select': 4.4.2(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/prompts@7.3.2(@types/node@22.20.1)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@22.20.1) + '@inquirer/confirm': 5.1.21(@types/node@22.20.1) + '@inquirer/editor': 4.2.23(@types/node@22.20.1) + '@inquirer/expand': 4.0.23(@types/node@22.20.1) + '@inquirer/input': 4.3.1(@types/node@22.20.1) + '@inquirer/number': 3.0.23(@types/node@22.20.1) + '@inquirer/password': 4.0.23(@types/node@22.20.1) + '@inquirer/rawlist': 4.1.11(@types/node@22.20.1) + '@inquirer/search': 3.2.2(@types/node@22.20.1) + '@inquirer/select': 4.4.2(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/rawlist@4.1.11(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/search@3.2.2(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/select@4.4.2(@types/node@22.20.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + + '@inquirer/type@3.0.10(@types/node@22.20.1)': + optionalDependencies: + '@types/node': 22.20.1 - '@hapi/topo@5.1.0': + '@isaacs/cliui@8.0.2': dependencies: - '@hapi/hoek': 9.3.0 + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 - '@hapi/topo@6.0.2': + '@istanbuljs/load-nyc-config@1.1.0': dependencies: - '@hapi/hoek': 11.0.7 + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.2 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.6': {} '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.31': @@ -3080,12 +4470,131 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@lukeed/csprng@1.1.0': {} + + '@mrleebo/prisma-ast@0.13.1': + dependencies: + chevrotain: 10.5.0 + lilconfig: 2.1.0 + + '@mswjs/interceptors@0.41.9': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@nestjs/cli@11.0.24(@types/node@22.20.1)(prettier@3.9.5)': + dependencies: + '@angular-devkit/core': 19.2.27(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.27(chokidar@4.0.3) + '@angular-devkit/schematics-cli': 19.2.27(@types/node@22.20.1)(chokidar@4.0.3) + '@inquirer/prompts': 7.10.1(@types/node@22.20.1) + '@nestjs/schematics': 11.1.0(chokidar@4.0.3)(prettier@3.9.5)(typescript@5.9.3) + ansis: 4.2.0 + chokidar: 4.0.3 + cli-table3: 0.6.5 + commander: 4.1.1 + fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.106.2) + glob: 13.0.6 + node-emoji: 1.11.0 + ora: 5.4.1 + tsconfig-paths: 4.2.0 + tsconfig-paths-webpack-plugin: 4.2.0 + typescript: 5.9.3 + webpack: 5.106.2 + webpack-node-externals: 3.0.0 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/css' + - '@swc/html' + - '@types/node' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - prettier + - uglify-js + - webpack-cli + + '@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2)': + dependencies: + file-type: 21.3.4 + iterare: 1.2.1 + load-esm: 1.0.3 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + transitivePeerDependencies: + - supports-color + + '@nestjs/core@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.28)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + dependencies: + '@nestjs/common': 11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2) + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 8.4.2 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + optionalDependencies: + '@nestjs/platform-express': 11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28) + + '@nestjs/platform-express@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28)': + dependencies: + '@nestjs/common': 11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.28)(reflect-metadata@0.2.2)(rxjs@7.8.2) + cors: 2.8.6 + express: 5.2.1 + multer: 2.2.0 + path-to-regexp: 8.4.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@nestjs/schematics@11.1.0(chokidar@4.0.3)(prettier@3.9.5)(typescript@5.9.3)': + dependencies: + '@angular-devkit/core': 19.2.24(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.24(chokidar@4.0.3) + comment-json: 5.0.0 + jsonc-parser: 3.3.1 + pluralize: 8.0.0 + typescript: 5.9.3 + optionalDependencies: + prettier: 3.9.5 + transitivePeerDependencies: + - chokidar + '@noble/hashes@1.8.0': {} + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + '@paralleldrive/cuid2@2.3.1': dependencies: '@noble/hashes': 1.8.0 + '@pkgjs/parseargs@0.11.0': + optional: true + '@postman/form-data@3.1.1': dependencies: asynckit: 0.4.0 @@ -3096,11 +4605,24 @@ snapshots: dependencies: safe-buffer: 5.2.1 - '@prisma/client@6.19.1(prisma@6.19.1)': + '@prisma/adapter-pg@7.4.2': + dependencies: + '@prisma/driver-adapter-utils': 7.4.2 + pg: 8.22.0 + postgres-array: 3.0.4 + transitivePeerDependencies: + - pg-native + + '@prisma/client-runtime-utils@7.4.2': {} + + '@prisma/client@7.4.2(prisma@7.4.2(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3))(typescript@5.9.3)': + dependencies: + '@prisma/client-runtime-utils': 7.4.2 optionalDependencies: - prisma: 6.19.1 + prisma: 7.4.2(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3) + typescript: 5.9.3 - '@prisma/config@6.19.1': + '@prisma/config@7.4.2': dependencies: c12: 3.1.0 deepmerge-ts: 7.1.5 @@ -3109,26 +4631,66 @@ snapshots: transitivePeerDependencies: - magicast - '@prisma/debug@6.19.1': {} + '@prisma/debug@7.2.0': {} + + '@prisma/debug@7.4.2': {} + + '@prisma/dev@0.20.0(typescript@5.9.3)': + dependencies: + '@electric-sql/pglite': 0.3.15 + '@electric-sql/pglite-socket': 0.0.20(@electric-sql/pglite@0.3.15) + '@electric-sql/pglite-tools': 0.2.20(@electric-sql/pglite@0.3.15) + '@hono/node-server': 1.19.9(hono@4.11.4) + '@mrleebo/prisma-ast': 0.13.1 + '@prisma/get-platform': 7.2.0 + '@prisma/query-plan-executor': 7.2.0 + foreground-child: 3.3.1 + get-port-please: 3.2.0 + hono: 4.11.4 + http-status-codes: 2.3.0 + pathe: 2.0.3 + proper-lockfile: 4.1.2 + remeda: 2.33.4 + std-env: 3.10.0 + valibot: 1.2.0(typescript@5.9.3) + zeptomatch: 2.1.0 + transitivePeerDependencies: + - typescript + + '@prisma/driver-adapter-utils@7.4.2': + dependencies: + '@prisma/debug': 7.4.2 + + '@prisma/engines-version@7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919': {} - '@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': {} + '@prisma/engines@7.4.2': + dependencies: + '@prisma/debug': 7.4.2 + '@prisma/engines-version': 7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919 + '@prisma/fetch-engine': 7.4.2 + '@prisma/get-platform': 7.4.2 + + '@prisma/fetch-engine@7.4.2': + dependencies: + '@prisma/debug': 7.4.2 + '@prisma/engines-version': 7.5.0-10.94a226be1cf2967af2541cca5529f0f7ba866919 + '@prisma/get-platform': 7.4.2 - '@prisma/engines@6.19.1': + '@prisma/get-platform@7.2.0': dependencies: - '@prisma/debug': 6.19.1 - '@prisma/engines-version': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 - '@prisma/fetch-engine': 6.19.1 - '@prisma/get-platform': 6.19.1 + '@prisma/debug': 7.2.0 - '@prisma/fetch-engine@6.19.1': + '@prisma/get-platform@7.4.2': dependencies: - '@prisma/debug': 6.19.1 - '@prisma/engines-version': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 - '@prisma/get-platform': 6.19.1 + '@prisma/debug': 7.4.2 + + '@prisma/query-plan-executor@7.2.0': {} - '@prisma/get-platform@6.19.1': + '@prisma/studio-core@0.13.1(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@prisma/debug': 6.19.1 + '@types/react': 19.2.17 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) '@scarf/scarf@1.4.0': {} @@ -3147,42 +4709,64 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@tokenizer/inflate@0.4.1': + dependencies: + debug: 4.4.3(supports-color@5.5.0) + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color + + '@tokenizer/token@0.3.0': {} + '@tootallnate/once@1.1.2': {} '@topcoder-platform/topcoder-bus-api-wrapper@https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833': dependencies: joi: 18.0.2 lodash: 4.17.21 - superagent: 10.2.3 + superagent: 10.3.0 tc-core-library-js: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4 transitivePeerDependencies: - debug - supports-color + '@tsconfig/node10@1.0.12': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.0.3 + '@types/node': 22.20.1 '@types/connect@3.4.38': dependencies: - '@types/node': 25.0.3 + '@types/node': 22.20.1 + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.9 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.9': {} '@types/express-jwt@0.0.42': dependencies: - '@types/express': 5.0.6 + '@types/express': 4.17.25 '@types/express-unless': 2.0.3 '@types/express-serve-static-core@4.19.7': dependencies: - '@types/node': 25.0.3 - '@types/qs': 6.14.0 - '@types/range-parser': 1.2.7 - '@types/send': 1.2.1 - - '@types/express-serve-static-core@5.1.0': - dependencies: - '@types/node': 25.0.3 + '@types/node': 22.20.1 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -3198,63 +4782,248 @@ snapshots: '@types/qs': 6.14.0 '@types/serve-static': 1.15.10 - '@types/express@5.0.6': - dependencies: - '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 5.1.0 - '@types/serve-static': 2.2.0 - '@types/http-errors@2.0.5': {} + '@types/json-schema@7.0.15': {} + '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 25.0.3 + '@types/node': 22.20.1 '@types/mime@1.3.5': {} '@types/ms@2.1.0': {} - '@types/node@25.0.3': + '@types/node@22.20.1': + dependencies: + undici-types: 6.21.0 + + '@types/pg@8.20.0': dependencies: - undici-types: 7.16.0 + '@types/node': 22.20.1 + pg-protocol: 1.15.0 + pg-types: 2.2.0 '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} + '@types/react@19.2.17': + dependencies: + csstype: 3.2.3 + '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 25.0.3 + '@types/node': 22.20.1 '@types/send@1.2.1': dependencies: - '@types/node': 25.0.3 + '@types/node': 22.20.1 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.0.3 + '@types/node': 22.20.1 '@types/send': 0.17.6 - '@types/serve-static@2.2.0': + '@types/triple-beam@1.3.5': {} + + '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@types/http-errors': 2.0.5 - '@types/node': 25.0.3 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/type-utils': 8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.64.0 + eslint: 9.39.5(jiti@2.6.1) + ignore: 7.0.6 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color - '@types/triple-beam@1.3.5': {} + '@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.64.0 + debug: 4.4.3(supports-color@5.5.0) + eslint: 9.39.5(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.64.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@5.9.3) + '@typescript-eslint/types': 8.64.0 + debug: 4.4.3(supports-color@5.5.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.64.0': + dependencies: + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 + + '@typescript-eslint/tsconfig-utils@8.64.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3(supports-color@5.5.0) + eslint: 9.39.5(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.64.0': {} + + '@typescript-eslint/typescript-estree@8.64.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.64.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@5.9.3) + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 + debug: 4.4.3(supports-color@5.5.0) + minimatch: 10.2.5 + semver: 7.7.3 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.9.3) + eslint: 9.39.5(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.64.0': + dependencies: + '@typescript-eslint/types': 8.64.0 + eslint-visitor-keys: 5.0.1 + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@6.4.2): + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + + acorn-import-phases@1.0.4(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + + acorn-walk@8.3.5: dependencies: - acorn: 6.4.2 + acorn: 8.17.0 - acorn@6.4.2: {} + acorn@8.17.0: {} agent-base@6.0.2: dependencies: @@ -3262,10 +5031,28 @@ snapshots: transitivePeerDependencies: - supports-color + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-formats@2.1.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + + ajv-formats@3.0.1(ajv@8.18.0): + optionalDependencies: + ajv: 8.18.0 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 + ajv-keywords@5.1.0(ajv@8.20.0): + dependencies: + ajv: 8.20.0 + fast-deep-equal: 3.1.3 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -3273,64 +5060,65 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-escapes@3.2.0: {} + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 - ansi-regex@2.1.1: {} + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 - ansi-regex@3.0.1: {} + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 - ansi-regex@4.1.1: {} + ansi-colors@4.1.3: {} ansi-regex@5.0.1: {} - ansi-styles@2.2.1: {} + ansi-regex@6.2.2: {} - ansi-styles@3.2.1: + ansi-styles@4.3.0: dependencies: - color-convert: 1.9.3 + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + ansis@4.2.0: {} anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - append-transform@1.0.0: + append-field@1.0.0: {} + + append-transform@2.0.0: dependencies: - default-require-extensions: 2.0.0 + default-require-extensions: 3.0.1 archy@1.0.0: {} + arg@4.1.3: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 + argparse@2.0.1: {} array-flatten@1.1.1: {} - array-includes@3.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 + array-timsort@1.0.3: {} asap@2.0.6: {} @@ -3340,10 +5128,6 @@ snapshots: assert-plus@1.0.0: {} - assertion-error@1.1.0: {} - - async-function@1.0.0: {} - async@3.2.3: {} async@3.2.6: {} @@ -3369,6 +5153,8 @@ snapshots: aws-sign2@0.7.0: {} + aws-ssl-profiles@1.1.2: {} + aws4@1.11.0: {} aws4@1.13.2: {} @@ -3393,12 +5179,6 @@ snapshots: transitivePeerDependencies: - debug - babel-code-frame@6.26.0: - dependencies: - chalk: 1.1.3 - esutils: 2.0.3 - js-tokens: 3.0.2 - babel-runtime@6.6.1: dependencies: core-js: 2.6.12 @@ -3409,14 +5189,24 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} + baseline-browser-mapping@2.10.43: {} + bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 binary-extensions@2.3.0: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + bluebird@2.11.0: {} bluebird@3.7.2: {} @@ -3438,11 +5228,33 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.3.0: + dependencies: + bytes: 3.1.2 + content-type: 2.0.0 + debug: 4.4.3(supports-color@5.5.0) + http-errors: 2.0.1 + iconv-lite: 0.7.3 + on-finished: 2.4.1 + qs: 6.15.3 + raw-body: 3.0.2 + type-is: 2.1.0 + transitivePeerDependencies: + - supports-color + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + brace-expansion@2.1.2: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.7: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -3453,14 +5265,29 @@ snapshots: browser-stdout@1.3.1: {} + browserslist@4.28.6: + dependencies: + baseline-browser-mapping: 2.10.43 + caniuse-lite: 1.0.30001806 + electron-to-chromium: 1.5.392 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.6) + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} + buffer@4.9.2: dependencies: base64-js: 1.5.1 ieee754: 1.1.13 isarray: 1.0.0 + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.1.13 + bunyan@1.8.15: optionalDependencies: dtrace-provider: 0.8.8 @@ -3468,6 +5295,10 @@ snapshots: mv: 2.1.1 safe-json-stringify: 1.2.0 + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + bytes@3.1.2: {} c12@3.1.0: @@ -3485,12 +5316,12 @@ snapshots: pkg-types: 2.3.0 rc9: 2.1.2 - caching-transform@3.0.2: + caching-transform@4.0.0: dependencies: - hasha: 3.0.0 - make-dir: 2.1.0 - package-hash: 3.0.0 - write-file-atomic: 2.4.3 + hasha: 5.2.2 + make-dir: 3.1.0 + package-hash: 4.0.0 + write-file-atomic: 3.0.3 call-bind-apply-helpers@1.0.2: dependencies: @@ -3509,49 +5340,35 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - caller-path@0.1.0: - dependencies: - callsites: 0.2.0 - - callsites@0.2.0: {} + callsites@3.1.0: {} camelcase@5.3.1: {} - caseless@0.12.0: {} + camelcase@6.3.0: {} - chai@4.5.0: - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.4 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.1.0 + caniuse-lite@1.0.30001806: {} - chalk@1.1.3: - dependencies: - ansi-styles: 2.2.1 - escape-string-regexp: 1.0.5 - has-ansi: 2.0.0 - strip-ansi: 3.0.1 - supports-color: 2.0.0 + caseless@0.12.0: {} - chalk@2.4.2: + chalk@4.1.2: dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chardet@0.4.2: {} + ansi-styles: 4.3.0 + supports-color: 7.2.0 chardet@1.4.0: {} + chardet@2.2.0: {} + charset@1.0.1: {} - check-error@1.0.3: + chevrotain@10.5.0: dependencies: - get-func-name: 2.0.2 + '@chevrotain/cst-dts-gen': 10.5.0 + '@chevrotain/gast': 10.5.0 + '@chevrotain/types': 10.5.0 + '@chevrotain/utils': 10.5.0 + lodash: 4.17.21 + regexp-to-ast: 0.5.0 chokidar@3.6.0: dependencies: @@ -3569,33 +5386,51 @@ snapshots: dependencies: readdirp: 4.1.2 - circular-json@0.3.3: {} + chrome-trace-event@1.0.4: {} citty@0.1.6: dependencies: consola: 3.4.2 - cli-cursor@2.1.0: + clean-stack@2.2.0: {} + + cli-cursor@3.1.0: dependencies: - restore-cursor: 2.0.0 + restore-cursor: 3.1.0 cli-progress@3.10.0: dependencies: string-width: 4.2.3 + cli-spinners@2.9.2: {} + cli-table3@0.6.1: dependencies: string-width: 4.2.3 optionalDependencies: colors: 1.4.0 - cli-width@2.2.1: {} + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-width@4.1.0: {} + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 - cliui@5.0.0: + cliui@8.0.1: dependencies: - string-width: 3.1.0 - strip-ansi: 5.2.0 - wrap-ansi: 5.1.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} codependency@0.1.4: dependencies: @@ -3605,15 +5440,15 @@ snapshots: dependencies: semver: 5.7.2 - color-convert@1.9.3: + color-convert@2.0.1: dependencies: - color-name: 1.1.3 + color-name: 1.1.4 color-convert@3.1.3: dependencies: color-name: 2.1.0 - color-name@1.1.3: {} + color-name@1.1.4: {} color-name@2.1.0: {} @@ -3632,20 +5467,32 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@2.15.1: {} - commander@2.20.3: {} + commander@4.1.1: {} + commander@7.2.0: {} commander@8.3.0: {} + comment-json@5.0.0: + dependencies: + array-timsort: 1.0.3 + esprima: 4.0.1 + commondir@1.0.1: {} component-emitter@1.3.1: {} concat-map@0.0.1: {} + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + confbox@0.2.2: {} config@3.3.12: @@ -3654,18 +5501,24 @@ snapshots: consola@3.4.2: {} - contains-path@0.1.0: {} - content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 + content-disposition@1.1.0: {} + content-type@1.0.5: {} + content-type@2.0.0: {} + convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} + cookie-signature@1.0.7: {} + cookie-signature@1.2.2: {} + cookie@0.7.2: {} cookiejar@2.1.4: {} @@ -3679,97 +5532,75 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cp-file@6.2.0: + cors@2.8.6: dependencies: - graceful-fs: 4.2.11 - make-dir: 2.1.0 - nested-error-stacks: 2.1.1 - pify: 4.0.1 - safe-buffer: 5.2.1 + object-assign: 4.1.1 + vary: 1.1.2 - cross-spawn@4.0.2: + cosmiconfig@8.3.6(typescript@5.9.3): dependencies: - lru-cache: 4.1.5 - which: 1.3.1 + import-fresh: 3.3.1 + js-yaml: 4.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.9.3 + + create-require@1.1.1: {} - cross-spawn@6.0.6: + cross-spawn@7.0.6: dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 cssfilter@0.0.10: {} + csstype@3.2.3: {} + csv-parse@4.16.3: {} dashdash@1.14.1: dependencies: assert-plus: 1.0.0 - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug-log@1.0.1: {} - debug@2.6.9: dependencies: ms: 2.0.0 - debug@3.1.0(supports-color@5.4.0): + debug@3.1.0: dependencies: ms: 2.0.0 - optionalDependencies: - supports-color: 5.4.0 - debug@3.2.7: + debug@4.4.3(supports-color@5.5.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 - debug@4.4.3(supports-color@5.5.0): + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: - supports-color: 5.5.0 + supports-color: 8.1.1 decamelize@1.2.0: {} - deep-eql@4.1.4: - dependencies: - type-detect: 4.1.0 - - deep-equal@1.1.2: - dependencies: - is-arguments: 1.2.0 - is-date-object: 1.1.0 - is-regex: 1.2.1 - object-is: 1.1.6 - object-keys: 1.1.1 - regexp.prototype.flags: 1.5.4 + decamelize@4.0.0: {} deep-is@0.1.4: {} deepmerge-ts@7.1.5: {} - default-require-extensions@2.0.0: + deepmerge@4.3.1: {} + + default-require-extensions@3.0.1: dependencies: - strip-bom: 3.0.0 + strip-bom: 4.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 define-data-property@1.1.4: dependencies: @@ -3777,25 +5608,12 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - defu@6.1.4: {} - deglob@2.1.1: - dependencies: - find-root: 1.1.0 - glob: 7.2.3 - ignore: 3.3.10 - pkg-config: 1.1.1 - run-parallel: 1.2.0 - uniq: 1.0.1 - delayed-stream@1.0.0: {} + denque@2.1.0: {} + depd@2.0.0: {} destr@2.0.5: {} @@ -3807,19 +5625,14 @@ snapshots: asap: 2.0.6 wrappy: 1.0.2 - diff@3.5.0: {} - - doctrine@1.5.0: - dependencies: - esutils: 2.0.3 - isarray: 1.0.0 + diff@4.0.4: {} - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 + diff@7.0.0: {} dotenv@16.6.1: {} + dotenv@17.4.2: {} + dtrace-provider@0.8.8: dependencies: nan: 2.24.0 @@ -3831,6 +5644,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + ecc-jsbn@0.1.2: dependencies: jsbn: 0.1.1 @@ -3847,81 +5662,33 @@ snapshots: '@standard-schema/spec': 1.1.0 fast-check: 3.23.2 - emoji-regex@7.0.3: {} + electron-to-chromium@1.5.392: {} emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + empathic@2.0.0: {} enabled@2.0.0: {} encodeurl@2.0.0: {} - error-ex@1.3.4: + enhanced-resolve@5.24.2: dependencies: - is-arrayish: 0.2.1 + graceful-fs: 4.2.11 + tapable: 2.3.3 - es-abstract@1.24.1: + error-ex@1.3.4: dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 + is-arrayish: 0.2.1 es-define-property@1.0.1: {} es-errors@1.3.0: {} + es-module-lexer@2.3.1: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -3933,156 +5700,80 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - es6-error@4.1.1: {} - escape-html@1.0.3: {} - - escape-string-regexp@1.0.5: {} - - eslint-config-standard-jsx@6.0.2(eslint-plugin-react@7.11.1(eslint@5.4.0))(eslint@5.4.0): - dependencies: - eslint: 5.4.0 - eslint-plugin-react: 7.11.1(eslint@5.4.0) - - eslint-config-standard@12.0.0(eslint-plugin-import@2.14.0(eslint@5.4.0))(eslint-plugin-node@7.0.1(eslint@5.4.0))(eslint-plugin-promise@4.0.1)(eslint-plugin-standard@4.0.2(eslint@5.4.0))(eslint@5.4.0): - dependencies: - eslint: 5.4.0 - eslint-plugin-import: 2.14.0(eslint@5.4.0) - eslint-plugin-node: 7.0.1(eslint@5.4.0) - eslint-plugin-promise: 4.0.1 - eslint-plugin-standard: 4.0.2(eslint@5.4.0) - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.11 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint@5.4.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - eslint: 5.4.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-plugin-es@1.4.1(eslint@5.4.0): - dependencies: - eslint: 5.4.0 - eslint-utils: 1.4.3 - regexpp: 2.0.1 - - eslint-plugin-import@2.14.0(eslint@5.4.0): - dependencies: - contains-path: 0.1.0 - debug: 2.6.9 - doctrine: 1.5.0 - eslint: 5.4.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint@5.4.0) - has: 1.0.4 - lodash: 4.17.21 - minimatch: 3.1.2 - read-pkg-up: 2.0.0 - resolve: 1.22.11 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-node@7.0.1(eslint@5.4.0): - dependencies: - eslint: 5.4.0 - eslint-plugin-es: 1.4.1(eslint@5.4.0) - eslint-utils: 1.4.3 - ignore: 4.0.6 - minimatch: 3.1.2 - resolve: 1.22.11 - semver: 5.7.2 + escalade@3.2.0: {} - eslint-plugin-promise@4.0.1: {} + escape-html@1.0.3: {} - eslint-plugin-react@7.11.1(eslint@5.4.0): - dependencies: - array-includes: 3.1.9 - doctrine: 2.1.0 - eslint: 5.4.0 - has: 1.0.4 - jsx-ast-utils: 2.4.1 - prop-types: 15.8.1 + escape-string-regexp@4.0.0: {} - eslint-plugin-standard@4.0.2(eslint@5.4.0): + eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@2.6.1)): dependencies: - eslint: 5.4.0 + eslint: 9.39.5(jiti@2.6.1) - eslint-scope@4.0.3: + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-utils@1.4.3: + eslint-scope@8.4.0: dependencies: - eslint-visitor-keys: 1.3.0 - - eslint-visitor-keys@1.3.0: {} + esrecurse: 4.3.0 + estraverse: 5.3.0 - eslint@5.4.0: - dependencies: - ajv: 6.12.6 - babel-code-frame: 6.26.0 - chalk: 2.4.2 - cross-spawn: 6.0.6 - debug: 3.2.7 - doctrine: 2.1.0 - eslint-scope: 4.0.3 - eslint-utils: 1.4.3 - eslint-visitor-keys: 1.3.0 - espree: 4.1.0 + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.5(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.6 + '@eslint/js': 9.39.5 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 - file-entry-cache: 2.0.0 - functional-red-black-tree: 1.0.1 - glob: 7.2.3 - globals: 11.12.0 - ignore: 4.0.6 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 imurmurhash: 0.1.4 - inquirer: 5.2.0 - is-resolvable: 1.1.0 - js-yaml: 3.14.2 + is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.3.0 - lodash: 4.17.21 - minimatch: 3.1.2 - mkdirp: 0.5.6 + lodash.merge: 4.6.2 + minimatch: 3.1.5 natural-compare: 1.4.0 - optionator: 0.8.3 - path-is-inside: 1.0.2 - pluralize: 7.0.0 - progress: 2.0.3 - regexpp: 2.0.1 - require-uncached: 1.0.3 - semver: 5.7.2 - strip-ansi: 4.0.0 - strip-json-comments: 2.0.1 - table: 4.0.3 - text-table: 0.2.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 transitivePeerDependencies: - supports-color - espree@4.1.0: + espree@10.4.0: dependencies: - acorn: 6.4.2 - acorn-jsx: 5.3.2(acorn@6.4.2) - eslint-visitor-keys: 1.3.0 + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} @@ -4106,6 +5797,8 @@ snapshots: events@1.1.1: {} + events@3.3.0: {} + express-interceptor@1.2.0: dependencies: debug: 2.6.9 @@ -4150,16 +5843,43 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.3.0 + content-disposition: 1.1.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3(supports-color@5.5.0) + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.1.0 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + exsolve@1.0.8: {} extend@3.0.2: {} - external-editor@2.2.0: - dependencies: - chardet: 0.4.2 - iconv-lite: 0.4.24 - tmp: 0.0.33 - extsprintf@1.3.0: {} faker@5.5.3: {} @@ -4176,16 +5896,26 @@ snapshots: fast-safe-stringify@2.1.1: {} + fast-uri@3.1.3: {} + + fdir@6.5.0(picomatch@4.0.5): + optionalDependencies: + picomatch: 4.0.5 + fecha@4.2.3: {} - figures@2.0.0: + file-entry-cache@8.0.0: dependencies: - escape-string-regexp: 1.0.5 + flat-cache: 4.0.1 - file-entry-cache@2.0.0: + file-type@21.3.4: dependencies: - flat-cache: 1.3.4 - object-assign: 4.1.1 + '@tokenizer/inflate': 0.4.1 + strtok3: 10.3.5 + token-types: 6.1.2 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color file-type@3.9.0: {} @@ -4209,31 +5939,44 @@ snapshots: transitivePeerDependencies: - supports-color - find-cache-dir@2.1.0: + finalhandler@2.1.1: dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 + debug: 4.4.3(supports-color@5.5.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color - find-root@1.1.0: {} + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 - find-up@2.1.0: + find-up@4.1.0: dependencies: - locate-path: 2.0.0 + locate-path: 5.0.0 + path-exists: 4.0.0 - find-up@3.0.0: + find-up@5.0.0: dependencies: - locate-path: 3.0.0 + locate-path: 6.0.0 + path-exists: 4.0.0 - flat-cache@1.3.4: + flat-cache@4.0.1: dependencies: - circular-json: 0.3.3 - graceful-fs: 4.2.11 - rimraf: 2.6.3 - write: 0.2.1 + flatted: 3.4.2 + keyv: 4.5.4 + + flat@5.0.2: {} flatted@3.1.1: {} + flatted@3.4.2: {} + fn.name@1.1.0: {} follow-redirects@1.15.11(debug@4.4.3): @@ -4242,7 +5985,7 @@ snapshots: follow-redirects@1.5.10: dependencies: - debug: 3.1.0(supports-color@5.4.0) + debug: 3.1.0 transitivePeerDependencies: - supports-color @@ -4250,13 +5993,35 @@ snapshots: dependencies: is-callable: 1.2.7 - foreground-child@1.5.6: + foreground-child@2.0.0: dependencies: - cross-spawn: 4.0.2 + cross-spawn: 7.0.6 signal-exit: 3.0.7 + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + forever-agent@0.6.1: {} + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.106.2): + dependencies: + '@babel/code-frame': 7.27.1 + chalk: 4.1.2 + chokidar: 4.0.3 + cosmiconfig: 8.3.6(typescript@5.9.3) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.7.3 + tapable: 2.3.3 + typescript: 5.9.3 + webpack: 5.106.2 + form-data@2.3.3: dependencies: asynckit: 0.4.0 @@ -4271,13 +6036,6 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 - formidable@2.1.5: - dependencies: - '@paralleldrive/cuid2': 2.3.1 - dezalgo: 1.0.4 - once: 1.4.0 - qs: 6.14.0 - formidable@3.5.4: dependencies: '@paralleldrive/cuid2': 2.3.1 @@ -4288,6 +6046,18 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + + fromentries@1.3.2: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + + fs-monkey@1.1.0: {} + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -4295,24 +6065,15 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.8: + generate-function@2.3.1: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functional-red-black-tree@1.0.1: {} - - functions-have-names@1.2.3: {} + is-property: 1.0.2 generator-function@2.0.1: {} - get-caller-file@2.0.5: {} + gensync@1.0.0-beta.2: {} - get-func-name@2.0.2: {} + get-caller-file@2.0.5: {} get-intrinsic@1.3.0: dependencies: @@ -4327,21 +6088,17 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-package-type@0.1.0: {} + get-parameter-names@0.3.0: {} + get-port-please@3.2.0: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stdin@6.0.0: {} - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - getpass@0.1.7: dependencies: assert-plus: 1.0.0 @@ -4359,23 +6116,35 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@6.0.4: + glob-parent@6.0.2: dependencies: - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - optional: true + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} - glob@7.1.2: + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@13.0.6: + dependencies: + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 + + glob@6.0.4: dependencies: - fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.4 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 + optional: true glob@7.2.3: dependencies: @@ -4386,18 +6155,17 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - globals@11.12.0: {} + globals@14.0.0: {} - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 + globals@15.15.0: {} gopd@1.2.0: {} graceful-fs@4.2.11: {} - growl@1.10.5: {} + grammex@3.1.13: {} + + graphmatch@1.1.1: {} handlebars@4.5.3: dependencies: @@ -4429,46 +6197,37 @@ snapshots: har-validator@5.1.5: dependencies: - ajv: 6.12.6 + ajv: 6.15.0 har-schema: 2.0.0 - has-ansi@2.0.0: - dependencies: - ansi-regex: 2.1.1 - - has-bigints@1.1.0: {} - has-flag@3.0.0: {} + has-flag@4.0.0: {} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: has-symbols: 1.1.0 - has@1.0.4: {} - - hasha@3.0.0: + hasha@5.2.2: dependencies: - is-stream: 1.1.0 + is-stream: 2.0.1 + type-fest: 0.8.1 hasown@2.0.2: dependencies: function-bind: 1.1.2 - he@1.1.1: {} + he@1.2.0: {} hoek@6.1.3: {} - hosted-git-info@2.8.9: {} + hono@4.11.4: {} html-escaper@2.0.2: {} @@ -4506,6 +6265,8 @@ snapshots: http-status-codes@1.4.0: {} + http-status-codes@2.3.0: {} + httpntlm@1.7.7: dependencies: httpreq: 1.1.1 @@ -4528,16 +6289,29 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.3: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.1.13: {} + ieee754@1.2.1: {} + ignore-by-default@1.0.1: {} - ignore@3.3.10: {} + ignore@5.3.2: {} + + ignore@7.0.6: {} - ignore@4.0.6: {} + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -4545,28 +6319,6 @@ snapshots: inherits@2.0.4: {} - inquirer@5.2.0: - dependencies: - ansi-escapes: 3.2.0 - chalk: 2.4.2 - cli-cursor: 2.1.0 - cli-width: 2.2.1 - external-editor: 2.2.0 - figures: 2.0.0 - lodash: 4.17.21 - mute-stream: 0.0.7 - run-async: 2.4.1 - rxjs: 5.5.12 - string-width: 2.1.1 - strip-ansi: 4.0.0 - through: 2.3.8 - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - ip-regex@2.1.0: {} ipaddr.js@1.9.1: {} @@ -4576,60 +6328,16 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-arrayish@0.2.1: {} - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-callable@1.2.7: {} - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@2.0.0: {} - is-fullwidth-code-point@3.0.0: {} is-generator-function@1.1.2: @@ -4644,46 +6352,28 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-map@2.0.3: {} + is-interactive@1.0.0: {} - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + is-node-process@1.2.0: {} is-number@7.0.0: {} - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-resolvable@1.1.0: {} - - is-set@2.0.3: {} + is-path-inside@3.0.3: {} - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 + is-plain-obj@2.1.0: {} - is-stream@1.1.0: {} + is-promise@4.0.0: {} - is-stream@2.0.1: {} + is-property@1.0.2: {} - is-string@1.1.1: + is-regex@1.2.1: dependencies: call-bound: 1.0.4 + gopd: 1.2.0 has-tostringtag: 1.0.2 + hasown: 2.0.2 - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 + is-stream@2.0.1: {} is-typed-array@1.1.15: dependencies: @@ -4691,21 +6381,12 @@ snapshots: is-typedarray@1.0.0: {} - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 + is-unicode-supported@0.1.0: {} - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 + is-windows@1.0.2: {} isarray@1.0.0: {} - isarray@2.0.5: {} - isemail@3.2.0: dependencies: punycode: 2.3.1 @@ -4714,43 +6395,63 @@ snapshots: isstream@0.1.2: {} - istanbul-lib-coverage@2.0.5: {} + istanbul-lib-coverage@3.2.2: {} - istanbul-lib-hook@2.0.7: + istanbul-lib-hook@3.0.0: dependencies: - append-transform: 1.0.0 + append-transform: 2.0.0 - istanbul-lib-instrument@3.3.0: + istanbul-lib-instrument@6.0.3: dependencies: - '@babel/generator': 7.28.5 + '@babel/core': 7.29.7 '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - istanbul-lib-coverage: 2.0.5 - semver: 6.3.1 + '@istanbuljs/schema': 0.1.6 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color - istanbul-lib-report@2.0.8: + istanbul-lib-processinfo@2.0.3: + dependencies: + archy: 1.0.0 + cross-spawn: 7.0.6 + istanbul-lib-coverage: 3.2.2 + p-map: 3.0.0 + rimraf: 3.0.2 + uuid: 8.3.2 + + istanbul-lib-report@3.0.1: dependencies: - istanbul-lib-coverage: 2.0.5 - make-dir: 2.1.0 - supports-color: 6.1.0 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 - istanbul-lib-source-maps@3.0.6: + istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.4.3(supports-color@5.5.0) - istanbul-lib-coverage: 2.0.5 - make-dir: 2.1.0 - rimraf: 2.7.1 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color - istanbul-reports@2.2.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterare@1.2.1: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-worker@27.5.1: + dependencies: + '@types/node': 22.20.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 jiti@2.6.1: {} @@ -4784,8 +6485,6 @@ snapshots: js-sha512@0.8.0: {} - js-tokens@3.0.2: {} - js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -4793,14 +6492,22 @@ snapshots: argparse: 1.0.10 esprima: 4.0.1 + js-yaml@4.3.0: + dependencies: + argparse: 2.0.1 + jsbn@0.1.1: {} jsesc@3.1.0: {} - json-parse-better-errors@1.0.2: {} + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-schema@0.4.0: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -4809,6 +6516,14 @@ snapshots: json5@2.2.3: {} + jsonc-parser@3.3.1: {} + + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonwebtoken@8.5.1: dependencies: jws: 3.2.3 @@ -4849,11 +6564,6 @@ snapshots: json-schema: 0.4.0 verror: 1.10.0 - jsx-ast-utils@2.4.1: - dependencies: - array-includes: 3.1.9 - object.assign: 4.1.7 - jwa@1.4.2: dependencies: buffer-equal-constant-time: 1.0.1 @@ -4902,40 +6612,36 @@ snapshots: jwa: 2.0.1 safe-buffer: 5.2.1 + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + kuler@2.0.0: {} - levn@0.3.0: + levn@0.4.1: dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} limiter@1.1.5: {} + lines-and-columns@1.2.4: {} + liquid-json@0.3.1: {} - load-json-file@2.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 2.2.0 - pify: 2.3.0 - strip-bom: 3.0.0 + load-esm@1.0.3: {} - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 + loader-runner@4.3.2: {} - locate-path@2.0.0: + locate-path@5.0.0: dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 + p-locate: 4.1.0 - locate-path@3.0.0: + locate-path@6.0.0: dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 + p-locate: 5.0.0 lodash.clonedeep@4.5.0: {} @@ -4953,12 +6659,19 @@ snapshots: lodash.isstring@4.0.1: {} + lodash.merge@4.6.2: {} + lodash.once@4.1.1: {} lodash@4.17.15: {} lodash@4.17.21: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + logform@2.7.0: dependencies: '@colors/colors': 1.6.0 @@ -4968,18 +6681,15 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 + long@5.3.2: {} - loupe@2.3.7: - dependencies: - get-func-name: 2.0.2 + lru-cache@10.4.3: {} + + lru-cache@11.5.2: {} - lru-cache@4.1.5: + lru-cache@5.1.1: dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 + yallist: 3.1.1 lru-cache@6.0.0: dependencies: @@ -4990,20 +6700,37 @@ snapshots: lodash.clonedeep: 4.5.0 lru-cache: 6.0.0 - make-dir@2.1.0: + lru.min@1.1.4: {} + + magic-string@0.30.17: dependencies: - pify: 4.0.1 - semver: 5.7.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + make-dir@4.0.0: + dependencies: + semver: 7.7.3 + + make-error@1.3.6: {} math-intrinsics@1.1.0: {} media-typer@0.3.0: {} - merge-descriptors@1.0.3: {} + media-typer@1.1.0: {} - merge-source-map@1.1.0: + memfs@3.5.3: dependencies: - source-map: 0.6.1 + fs-monkey: 1.1.0 + + merge-descriptors@1.0.3: {} + + merge-descriptors@2.0.0: {} + + merge-stream@2.0.0: {} methods@1.1.2: {} @@ -5013,6 +6740,8 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-format@2.0.1: dependencies: charset: 1.0.1 @@ -5025,53 +6754,68 @@ snapshots: dependencies: mime-db: 1.52.0 + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mime@2.6.0: {} - mimic-fn@1.2.0: {} + mimic-fn@2.1.0: {} - minimatch@3.0.4: + minimatch@10.2.5: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 5.0.7 minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 - minimist@0.0.10: {} + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.2 - minimist@0.0.8: {} + minimist@0.0.10: {} minimist@1.2.8: {} - mkdirp@0.5.1: - dependencies: - minimist: 0.0.8 + minipass@7.1.3: {} mkdirp@0.5.6: dependencies: minimist: 1.2.8 + optional: true mkdirp@1.0.4: {} - mocha-prepare@0.1.0(mocha@5.2.0): - dependencies: - mocha: 5.2.0 - - mocha@5.2.0: + mocha@11.7.6: dependencies: browser-stdout: 1.3.1 - commander: 2.15.1 - debug: 3.1.0(supports-color@5.4.0) - diff: 3.5.0 - escape-string-regexp: 1.0.5 - glob: 7.1.2 - growl: 1.10.5 - he: 1.1.1 - minimatch: 3.0.4 - mkdirp: 0.5.1 - supports-color: 5.4.0 + chokidar: 4.0.3 + debug: 4.4.3(supports-color@8.1.1) + diff: 7.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 10.5.0 + he: 1.2.0 + is-path-inside: 3.0.3 + js-yaml: 4.3.0 + log-symbols: 4.1.0 + minimatch: 9.0.9 + ms: 2.1.3 + picocolors: 1.1.1 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 9.3.4 + yargs: 17.7.3 + yargs-parser: 21.1.1 + yargs-unparser: 2.0.0 moment@2.30.1: {} @@ -5079,7 +6823,14 @@ snapshots: ms@2.1.3: {} - mute-stream@0.0.7: {} + multer@2.2.0: + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 2.0.0 + type-is: 1.6.18 + + mute-stream@2.0.0: {} mv@2.1.1: dependencies: @@ -5088,6 +6839,22 @@ snapshots: rimraf: 2.4.5 optional: true + mysql2@3.15.3: + dependencies: + aws-ssl-profiles: 1.1.2 + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.7.3 + long: 5.3.2 + lru.min: 1.1.4 + named-placeholders: 1.1.6 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + named-placeholders@1.1.6: + dependencies: + lru.min: 1.1.4 + nan@2.24.0: optional: true @@ -5098,9 +6865,9 @@ snapshots: negotiator@0.6.3: {} - neo-async@2.6.2: {} + negotiator@1.0.0: {} - nested-error-stacks@2.1.1: {} + neo-async@2.6.2: {} newman-reporter-html@1.0.5(newman@5.3.2): dependencies: @@ -5134,26 +6901,28 @@ snapshots: word-wrap: 1.2.3 xmlbuilder: 15.1.1 - nice-try@1.0.5: {} - - nock@10.0.6: + nock@14.0.16: dependencies: - chai: 4.5.0 - debug: 4.4.3(supports-color@5.5.0) - deep-equal: 1.1.2 + '@mswjs/interceptors': 0.41.9 json-stringify-safe: 5.0.1 + propagate: 2.0.1 + + node-abort-controller@3.1.1: {} + + node-emoji@1.11.0: + dependencies: lodash: 4.17.21 - mkdirp: 0.5.6 - propagate: 1.0.0 - qs: 6.14.0 - semver: 5.7.2 - transitivePeerDependencies: - - supports-color node-fetch-native@1.6.7: {} node-oauth1@1.3.0: {} + node-preload@0.2.1: + dependencies: + process-on-spawn: 1.1.0 + + node-releases@2.0.51: {} + nodemon@3.1.11: dependencies: chokidar: 3.6.0 @@ -5167,42 +6936,37 @@ snapshots: touch: 3.1.1 undefsafe: 2.0.5 - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.11 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} - nyc@14.1.1: + nyc@17.1.0: dependencies: - archy: 1.0.0 - caching-transform: 3.0.2 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.6 + caching-transform: 4.0.0 convert-source-map: 1.9.0 - cp-file: 6.2.0 - find-cache-dir: 2.1.0 - find-up: 3.0.0 - foreground-child: 1.5.6 + decamelize: 1.2.0 + find-cache-dir: 3.3.2 + find-up: 4.1.0 + foreground-child: 3.3.1 + get-package-type: 0.1.0 glob: 7.2.3 - istanbul-lib-coverage: 2.0.5 - istanbul-lib-hook: 2.0.7 - istanbul-lib-instrument: 3.3.0 - istanbul-lib-report: 2.0.8 - istanbul-lib-source-maps: 3.0.6 - istanbul-reports: 2.2.7 - js-yaml: 3.14.2 - make-dir: 2.1.0 - merge-source-map: 1.1.0 - resolve-from: 4.0.0 - rimraf: 2.7.1 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-hook: 3.0.0 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-processinfo: 2.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.2.0 + make-dir: 3.1.0 + node-preload: 0.2.1 + p-map: 3.0.0 + process-on-spawn: 1.1.0 + resolve-from: 5.0.0 + rimraf: 3.0.2 signal-exit: 3.0.7 - spawn-wrap: 1.4.3 - test-exclude: 5.2.3 - uuid: 3.4.0 - yargs: 13.3.2 - yargs-parser: 13.1.2 + spawn-wrap: 2.0.0 + test-exclude: 6.0.0 + yargs: 15.4.1 transitivePeerDependencies: - supports-color @@ -5222,22 +6986,6 @@ snapshots: object-inspect@1.13.4: {} - object-is@1.1.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - ohash@2.0.11: {} on-finished@2.4.1: @@ -5252,126 +7000,158 @@ snapshots: dependencies: fn.name: 1.1.0 - onetime@2.0.1: + onetime@5.1.2: dependencies: - mimic-fn: 1.2.0 + mimic-fn: 2.1.0 optimist@0.6.1: dependencies: minimist: 0.0.10 wordwrap: 0.0.3 - optionator@0.8.3: + optionator@0.9.4: dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 word-wrap: 1.2.5 - os-homedir@1.0.2: {} - - os-tmpdir@1.0.2: {} - - own-keys@1.0.1: + ora@5.4.1: dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 - p-limit@1.3.0: - dependencies: - p-try: 1.0.0 + outvariant@1.4.3: {} p-limit@2.3.0: dependencies: p-try: 2.2.0 - p-locate@2.0.0: + p-limit@3.1.0: dependencies: - p-limit: 1.3.0 + yocto-queue: 0.1.0 - p-locate@3.0.0: + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - p-try@1.0.0: {} + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@3.0.0: + dependencies: + aggregate-error: 3.1.0 p-try@2.2.0: {} - package-hash@3.0.0: + package-hash@4.0.0: dependencies: graceful-fs: 4.2.11 - hasha: 3.0.0 + hasha: 5.2.2 lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 - parse-json@2.2.0: + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: dependencies: - error-ex: 1.3.4 + callsites: 3.1.0 - parse-json@4.0.0: + parse-json@5.2.0: dependencies: + '@babel/code-frame': 7.27.1 error-ex: 1.3.4 - json-parse-better-errors: 1.0.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 parse-ms@2.1.0: {} parseurl@1.3.3: {} - path-exists@3.0.0: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} - path-is-inside@1.0.2: {} + path-key@3.1.1: {} - path-key@2.0.1: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.3 - path-parse@1.0.7: {} + path-scurry@2.0.2: + dependencies: + lru-cache: 11.5.2 + minipass: 7.1.3 path-to-regexp@0.1.12: {} - path-type@2.0.0: - dependencies: - pify: 2.3.0 + path-to-regexp@8.4.2: {} - path-type@3.0.0: - dependencies: - pify: 3.0.0 + path-type@4.0.0: {} pathe@2.0.3: {} - pathval@1.1.1: {} - perfect-debounce@1.0.0: {} performance-now@2.1.0: {} - picocolors@1.1.1: {} + pg-cloudflare@1.4.0: + optional: true - picomatch@2.3.1: {} + pg-connection-string@2.14.0: {} + + pg-int8@1.0.1: {} - pify@2.3.0: {} + pg-pool@3.14.0(pg@8.22.0): + dependencies: + pg: 8.22.0 - pify@3.0.0: {} + pg-protocol@1.15.0: {} - pify@4.0.1: {} + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.1 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 - pkg-conf@2.1.0: + pg@8.22.0: dependencies: - find-up: 2.1.0 - load-json-file: 4.0.0 + pg-connection-string: 2.14.0 + pg-pool: 3.14.0(pg@8.22.0) + pg-protocol: 1.15.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.4.0 - pkg-config@1.1.1: + pgpass@1.0.5: dependencies: - debug-log: 1.0.1 - find-root: 1.1.0 - xtend: 4.0.2 + split2: 4.2.0 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} - pkg-dir@3.0.0: + picomatch@4.0.4: {} + + picomatch@4.0.5: {} + + pkg-dir@4.2.0: dependencies: - find-up: 3.0.0 + find-up: 4.1.0 pkg-types@2.3.0: dependencies: @@ -5379,10 +7159,24 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 - pluralize@7.0.0: {} + pluralize@8.0.0: {} possible-typed-array-names@1.1.0: {} + postgres-array@2.0.0: {} + + postgres-array@3.0.4: {} + + postgres-bytea@1.0.1: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + postgres@3.4.7: {} + postman-collection-transformer@4.1.6: dependencies: commander: 8.3.0 @@ -5461,7 +7255,9 @@ snapshots: precond@0.2.3: {} - prelude-ls@1.1.2: {} + prelude-ls@1.2.1: {} + + prettier@3.9.5: {} pretty-ms@5.1.0: dependencies: @@ -5471,22 +7267,33 @@ snapshots: dependencies: parse-ms: 2.1.0 - prisma@6.19.1: + prisma@7.4.2(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3): dependencies: - '@prisma/config': 6.19.1 - '@prisma/engines': 6.19.1 + '@prisma/config': 7.4.2 + '@prisma/dev': 0.20.0(typescript@5.9.3) + '@prisma/engines': 7.4.2 + '@prisma/studio-core': 0.13.1(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + mysql2: 3.15.3 + postgres: 3.4.7 + optionalDependencies: + typescript: 5.9.3 transitivePeerDependencies: + - '@types/react' - magicast + - react + - react-dom - progress@2.0.3: {} - - prop-types@15.8.1: + process-on-spawn@1.1.0: dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 + fromentries: 1.3.2 - propagate@1.0.0: {} + propagate@2.0.1: {} + + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 proxy-addr@2.0.7: dependencies: @@ -5495,8 +7302,6 @@ snapshots: proxy-from-env@1.1.0: {} - pseudomap@1.0.2: {} - psl@1.15.0: dependencies: punycode: 2.3.1 @@ -5513,12 +7318,15 @@ snapshots: dependencies: side-channel: 1.1.0 + qs@6.15.3: + dependencies: + es-define-property: 1.0.1 + side-channel: 1.1.1 + qs@6.5.3: {} querystring@0.2.0: {} - queue-microtask@1.2.3: {} - r7insight_node@1.8.4: dependencies: babel-runtime: 6.6.1 @@ -5535,13 +7343,24 @@ snapshots: lodash: 4.17.21 reconnect-core: 1.3.0 + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + range-parser@1.2.1: {} - raw-body@2.5.3: + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + raw-body@3.0.2: dependencies: bytes: 3.1.2 http-errors: 2.0.1 - iconv-lite: 0.4.24 + iconv-lite: 0.7.3 unpipe: 1.0.0 rc9@2.1.2: @@ -5549,29 +7368,12 @@ snapshots: defu: 6.1.4 destr: 2.0.5 - react-is@16.13.1: {} - - read-pkg-up@2.0.0: - dependencies: - find-up: 2.1.0 - read-pkg: 2.0.0 - - read-pkg-up@4.0.0: - dependencies: - find-up: 3.0.0 - read-pkg: 3.0.0 - - read-pkg@2.0.0: + react-dom@19.2.7(react@19.2.7): dependencies: - load-json-file: 2.0.0 - normalize-package-data: 2.5.0 - path-type: 2.0.0 + react: 19.2.7 + scheduler: 0.27.0 - read-pkg@3.0.0: - dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 + react@19.2.7: {} readable-stream@3.6.2: dependencies: @@ -5589,32 +7391,16 @@ snapshots: dependencies: backoff: 2.5.0 - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 + reflect-metadata@0.2.2: {} - regexpp@2.0.1: {} + regexp-to-ast@0.5.0: {} release-zalgo@1.0.0: dependencies: es6-error: 4.1.1 + remeda@2.33.4: {} + request@2.88.2: dependencies: aws-sign2: 0.7.0 @@ -5640,69 +7426,53 @@ snapshots: require-directory@2.1.1: {} - require-main-filename@2.0.0: {} - - require-uncached@1.0.3: - dependencies: - caller-path: 0.1.0 - resolve-from: 1.0.1 + require-from-string@2.0.2: {} - resolve-from@1.0.1: {} + require-main-filename@2.0.0: {} resolve-from@4.0.0: {} - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + resolve-from@5.0.0: {} - restore-cursor@2.0.0: + restore-cursor@3.1.0: dependencies: - onetime: 2.0.1 + onetime: 5.1.2 signal-exit: 3.0.7 + retry@0.12.0: {} + rimraf@2.4.5: dependencies: glob: 6.0.4 optional: true - rimraf@2.6.3: + rimraf@3.0.2: dependencies: glob: 7.2.3 - rimraf@2.7.1: - dependencies: - glob: 7.2.3 - - run-async@2.4.1: {} - - run-parallel@1.2.0: + router@2.2.0: dependencies: - queue-microtask: 1.2.3 + debug: 4.4.3(supports-color@5.5.0) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.4.2 + transitivePeerDependencies: + - supports-color - rxjs@5.5.12: + rxjs@7.8.1: dependencies: - symbol-observable: 1.0.1 + tslib: 2.8.1 - safe-array-concat@1.1.3: + rxjs@7.8.2: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 + tslib: 2.8.1 safe-buffer@5.2.1: {} safe-json-stringify@1.2.0: optional: true - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - safe-regex-test@1.1.0: dependencies: call-bound: 1.0.4 @@ -5715,6 +7485,21 @@ snapshots: sax@1.2.1: {} + scheduler@0.27.0: {} + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@4.3.3: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) + ajv-keywords: 5.1.0(ajv@8.20.0) + semver@5.0.1: {} semver@5.1.0: {} @@ -5747,12 +7532,34 @@ snapshots: transitivePeerDependencies: - supports-color + send@1.2.1: + dependencies: + debug: 4.4.3(supports-color@5.5.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + seq-queue@0.0.5: {} + serialised-error@1.1.3: dependencies: object-hash: 1.3.1 stack-trace: 0.0.9 uuid: 3.4.0 + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + serve-static@1.16.3: dependencies: encodeurl: 2.0.0 @@ -5762,6 +7569,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + set-blocking@2.0.0: {} set-function-length@1.2.2: @@ -5773,26 +7589,13 @@ snapshots: gopd: 1.2.0 has-property-descriptors: 1.0.2 - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - setprototypeof@1.2.0: {} - shebang-command@1.2.0: + shebang-command@2.0.0: dependencies: - shebang-regex: 1.0.0 + shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} + shebang-regex@3.0.0: {} should-equal@2.0.0: dependencies: @@ -5825,6 +7628,11 @@ snapshots: es-errors: 1.3.0 object-inspect: 1.13.4 + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-map@1.0.1: dependencies: call-bound: 1.0.4 @@ -5848,43 +7656,48 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} + simple-update-notifier@2.0.0: dependencies: semver: 7.7.3 - slice-ansi@1.0.0: + source-map-support@0.5.21: dependencies: - is-fullwidth-code-point: 2.0.0 + buffer-from: 1.1.2 + source-map: 0.6.1 source-map@0.6.1: {} - spawn-wrap@1.4.3: - dependencies: - foreground-child: 1.5.6 - mkdirp: 0.5.6 - os-homedir: 1.0.2 - rimraf: 2.7.1 - signal-exit: 3.0.7 - which: 1.3.1 - - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.22 + source-map@0.7.4: {} - spdx-exceptions@2.5.0: {} + source-map@0.7.6: {} - spdx-expression-parse@3.0.1: + spawn-wrap@2.0.0: dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + which: 2.0.2 - spdx-license-ids@3.0.22: {} + split2@4.2.0: {} sprintf-js@1.0.3: {} + sqlstring@2.3.3: {} + sshpk@1.18.0: dependencies: asn1: 0.2.6 @@ -5901,51 +7714,17 @@ snapshots: stack-trace@0.0.9: {} - standard-engine@9.0.0: - dependencies: - deglob: 2.1.1 - get-stdin: 6.0.0 - minimist: 1.2.8 - pkg-conf: 2.1.0 - - standard@12.0.1: - dependencies: - eslint: 5.4.0 - eslint-config-standard: 12.0.0(eslint-plugin-import@2.14.0(eslint@5.4.0))(eslint-plugin-node@7.0.1(eslint@5.4.0))(eslint-plugin-promise@4.0.1)(eslint-plugin-standard@4.0.2(eslint@5.4.0))(eslint@5.4.0) - eslint-config-standard-jsx: 6.0.2(eslint-plugin-react@7.11.1(eslint@5.4.0))(eslint@5.4.0) - eslint-plugin-import: 2.14.0(eslint@5.4.0) - eslint-plugin-node: 7.0.1(eslint@5.4.0) - eslint-plugin-promise: 4.0.1 - eslint-plugin-react: 7.11.1(eslint@5.4.0) - eslint-plugin-standard: 4.0.2(eslint@5.4.0) - standard-engine: 9.0.0 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - statuses@2.0.2: {} - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 + std-env@3.10.0: {} stream-length@1.0.2: dependencies: bluebird: 2.11.0 - string-width@2.1.1: - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 + streamsearch@1.1.0: {} - string-width@3.1.0: - dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 + strict-event-emitter@0.5.1: {} string-width@4.2.3: dependencies: @@ -5953,99 +7732,59 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string.prototype.trim@1.2.10: + string-width@5.1.2: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - strip-ansi@3.0.1: - dependencies: - ansi-regex: 2.1.1 - - strip-ansi@4.0.0: - dependencies: - ansi-regex: 3.0.1 - - strip-ansi@5.2.0: - dependencies: - ansi-regex: 4.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-bom@3.0.0: {} - strip-json-comments@2.0.1: {} + strip-bom@4.0.0: {} strip-json-comments@3.1.1: {} - superagent@10.2.3: + strtok3@10.3.5: dependencies: - component-emitter: 1.3.1 - cookiejar: 2.1.4 - debug: 4.4.3(supports-color@5.5.0) - fast-safe-stringify: 2.1.1 - form-data: 4.0.5 - formidable: 3.5.4 - methods: 1.1.2 - mime: 2.6.0 - qs: 6.14.0 - transitivePeerDependencies: - - supports-color + '@tokenizer/token': 0.3.0 - superagent@8.1.2: + superagent@10.3.0: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 debug: 4.4.3(supports-color@5.5.0) fast-safe-stringify: 2.1.1 form-data: 4.0.5 - formidable: 2.1.5 + formidable: 3.5.4 methods: 1.1.2 mime: 2.6.0 - qs: 6.14.0 - semver: 7.7.3 + qs: 6.15.3 transitivePeerDependencies: - supports-color - supports-color@2.0.0: {} - - supports-color@5.4.0: - dependencies: - has-flag: 3.0.0 - supports-color@5.5.0: dependencies: has-flag: 3.0.0 - supports-color@6.1.0: + supports-color@7.2.0: dependencies: - has-flag: 3.0.0 + has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 swagger-ui-dist@5.31.0: dependencies: @@ -6056,16 +7795,9 @@ snapshots: express: 4.22.1 swagger-ui-dist: 5.31.0 - symbol-observable@1.0.1: {} + symbol-observable@4.0.0: {} - table@4.0.3: - dependencies: - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - chalk: 2.4.2 - lodash: 4.17.21 - slice-ansi: 1.0.0 - string-width: 2.1.1 + tapable@2.3.3: {} tc-api-testing-lib@https://codeload.github.com/topcoder-platform/api-automated-testing/tar.gz/dd0118f41612764bed344c31affb40b7448949c5: dependencies: @@ -6110,24 +7842,35 @@ snapshots: teleport-javascript@1.0.0: {} - test-exclude@5.2.3: + terser-webpack-plugin@5.6.1(webpack@5.106.2): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.49.0 + webpack: 5.106.2 + + terser@5.49.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.17.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: dependencies: + '@istanbuljs/schema': 0.1.6 glob: 7.2.3 minimatch: 3.1.2 - read-pkg-up: 4.0.0 - require-main-filename: 2.0.0 text-hex@1.0.0: {} - text-table@0.2.0: {} - - through@2.3.8: {} - tinyexec@1.0.2: {} - tmp@0.0.33: + tinyglobby@0.2.17: dependencies: - os-tmpdir: 1.0.2 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 to-regex-range@5.0.1: dependencies: @@ -6135,6 +7878,12 @@ snapshots: toidentifier@1.0.1: {} + token-types@6.1.2: + dependencies: + '@borewit/text-codec': 0.2.2 + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + topo@3.0.3: dependencies: hoek: 6.1.3 @@ -6154,76 +7903,118 @@ snapshots: triple-beam@1.4.1: {} + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + ts-loader@9.6.2(typescript@5.9.3)(webpack@5.106.2): + dependencies: + chalk: 4.1.2 + picomatch: 4.0.5 + source-map: 0.7.6 + typescript: 5.9.3 + webpack: 5.106.2 + + ts-node@10.9.2(@types/node@22.20.1)(typescript@5.9.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.20.1 + acorn: 8.17.0 + acorn-walk: 8.3.5 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.4 + make-error: 1.3.6 + typescript: 5.9.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tsconfig-paths-webpack-plugin@4.2.0: + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.24.2 + tapable: 2.3.3 + tsconfig-paths: 4.2.0 + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 tweetnacl@0.14.5: {} - type-check@0.3.2: + type-check@0.4.0: dependencies: - prelude-ls: 1.1.2 + prelude-ls: 1.2.1 - type-detect@4.1.0: {} + type-fest@0.8.1: {} type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typed-array-buffer@1.0.3: + type-is@2.1.0: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 + content-type: 2.0.0 + media-typer: 1.1.0 + mime-types: 3.0.2 - typed-array-byte-length@1.0.3: + typedarray-to-buffer@3.1.5: dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 + is-typedarray: 1.0.0 - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 + typedarray@0.0.6: {} - typed-array-length@1.0.7: + typescript-eslint@8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3): dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.5(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} uglify-js@3.19.3: optional: true - unbox-primitive@1.1.0: + uid@2.0.2: dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 + '@lukeed/csprng': 1.1.0 + + uint8array-extras@1.5.0: {} undefsafe@2.0.5: {} underscore@1.12.1: {} - undici-types@7.16.0: {} + undici-types@6.21.0: {} - uniq@1.0.1: {} + universalify@2.0.1: {} unpipe@1.0.0: {} + update-browserslist-db@1.2.3(browserslist@4.28.6): + dependencies: + browserslist: 4.28.6 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -6245,6 +8036,8 @@ snapshots: utils-merge@1.0.1: {} + uuid@11.1.1: {} + uuid@3.4.0: {} uuid@8.0.0: {} @@ -6255,10 +8048,11 @@ snapshots: dependencies: flatted: 3.1.1 - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 + v8-compile-cache-lib@3.0.1: {} + + valibot@1.2.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 vary@1.1.2: {} @@ -6268,36 +8062,57 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - which-boxed-primitive@1.1.1: + watchpack@2.5.2: dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 + graceful-fs: 4.2.11 - which-builtin-type@1.2.1: + wcwidth@1.0.1: dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 + defaults: 1.0.4 + + webpack-node-externals@3.0.0: {} - which-collection@1.0.2: + webpack-sources@3.5.1: {} + + webpack@5.106.2: dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.6 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.24.2 + es-module-lexer: 2.3.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + loader-runner: 4.3.2 + mime-db: 1.54.0 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.3 + terser-webpack-plugin: 5.6.1(webpack@5.106.2) + watchpack: 2.5.2 + webpack-sources: 3.5.1 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - uglify-js which-module@2.0.1: {} @@ -6311,7 +8126,7 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 - which@1.3.1: + which@2.0.2: dependencies: isexe: 2.0.0 @@ -6343,23 +8158,34 @@ snapshots: wordwrap@1.0.0: {} - wrap-ansi@5.1.0: + workerpool@9.3.4: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: dependencies: - ansi-styles: 3.2.1 - string-width: 3.1.0 - strip-ansi: 5.2.0 + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 wrappy@1.0.2: {} - write-file-atomic@2.4.3: + write-file-atomic@3.0.3: dependencies: - graceful-fs: 4.2.11 imurmurhash: 0.1.4 + is-typedarray: 1.0.0 signal-exit: 3.0.7 - - write@0.2.1: - dependencies: - mkdirp: 0.5.6 + typedarray-to-buffer: 3.1.5 xml2js@0.6.2: dependencies: @@ -6379,7 +8205,9 @@ snapshots: y18n@4.0.3: {} - yallist@2.1.2: {} + y18n@5.0.8: {} + + yallist@3.1.1: {} yallist@4.0.0: {} @@ -6388,20 +8216,51 @@ snapshots: argparse: 1.0.10 glob: 7.2.3 - yargs-parser@13.1.2: + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - yargs@13.3.2: + yargs-parser@21.1.1: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@15.4.1: dependencies: - cliui: 5.0.0 - find-up: 3.0.0 + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 get-caller-file: 2.0.5 require-directory: 2.1.1 require-main-filename: 2.0.0 set-blocking: 2.0.0 - string-width: 3.1.0 + string-width: 4.2.3 which-module: 2.0.1 y18n: 4.0.3 - yargs-parser: 13.1.2 + yargs-parser: 18.1.3 + + yargs@17.7.3: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + yoctocolors-cjs@2.1.3: {} + + zeptomatch@2.1.0: + dependencies: + grammex: 3.1.13 + graphmatch: 1.1.1 diff --git a/prisma.config.ts b/prisma.config.ts new file mode 100644 index 0000000..e51314f --- /dev/null +++ b/prisma.config.ts @@ -0,0 +1,19 @@ +import 'dotenv/config' +import { defineConfig } from 'prisma/config' + +/** + * Configures Prisma CLI commands for the existing resources database. + * + * Client generation does not require a live database. Migration deployment + * continues to read the existing DATABASE_URL variable and the unchanged + * migration history under prisma/migrations. + */ +export default defineConfig({ + schema: 'prisma/schema.prisma', + migrations: { + path: 'prisma/migrations' + }, + datasource: { + url: process.env.DATABASE_URL ?? '' + } +}) diff --git a/prisma/challenge-schema.prisma b/prisma/challenge-schema.prisma index 2f57e94..6f7b861 100644 --- a/prisma/challenge-schema.prisma +++ b/prisma/challenge-schema.prisma @@ -1,11 +1,11 @@ generator client { - provider = "prisma-client-js" - output = "../node_modules/@prisma/client-challenge" // Relative path from this file to root node_modules + provider = "prisma-client" + output = "../src/generated/challenge" + moduleFormat = "cjs" } datasource db { provider = "postgresql" - url = env("CHALLENGE_DB_URL") } model Challenge { diff --git a/prisma/member-schema.prisma b/prisma/member-schema.prisma index b3bf6ca..9a2aad5 100644 --- a/prisma/member-schema.prisma +++ b/prisma/member-schema.prisma @@ -1,11 +1,11 @@ generator client { - provider = "prisma-client-js" - output = "../node_modules/@prisma/client-member" // Relative path from *this file* to root node_modules + provider = "prisma-client" + output = "../src/generated/member" + moduleFormat = "cjs" } datasource db { provider = "postgresql" - url = env("MEMBER_DB_URL") } enum MemberStatus { @@ -919,4 +919,3 @@ model memberSkillLevel { @@id([memberSkillId, skillLevelId]) } - diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ff82bee..9f404b0 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,5 +1,7 @@ generator client { - provider = "prisma-client-js" + provider = "prisma-client" + output = "../src/generated/resources" + moduleFormat = "cjs" } generator externalClient { @@ -10,7 +12,6 @@ generator externalClient { datasource db { provider = "postgresql" - url = env("DATABASE_URL") } model ResourceRole { diff --git a/src/app.module.ts b/src/app.module.ts new file mode 100644 index 0000000..6125672 --- /dev/null +++ b/src/app.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common' + +/** + * Root NestJS module for Resources API v6. + * + * HTTP behavior remains registered on the compatibility Express application and + * mounted through Nest's Express adapter. The empty module lets Nest own startup + * and application lifecycle without changing the public API contract. + */ +@Module({}) +export class AppModule {} diff --git a/src/common/errors.js b/src/common/errors.js deleted file mode 100644 index bdd7ffe..0000000 --- a/src/common/errors.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * This file defines application errors - */ -const util = require('util') - -/** - * Helper function to create generic error object with http status code - * @param {String} name the error name - * @param {Number} statusCode the http status code - * @returns {Function} the error constructor - * @private - */ -function createError (name, statusCode) { - /** - * The error constructor - * @param {String} message the error message - * @param {String} [cause] the error cause - * @param {Object} metadata the metadata - * @constructor - */ - function ErrorCtor (message, cause, metadata) { - Error.call(this) - Error.captureStackTrace(this) - this.message = message || name - this.cause = cause - this.metadata = metadata - this.httpStatus = statusCode - } - - util.inherits(ErrorCtor, Error) - ErrorCtor.prototype.name = name - return ErrorCtor -} - -module.exports = { - BadRequestError: createError('BadRequestError', 400), - UnauthorizedError: createError('UnauthorizedError', 401), - ForbiddenError: createError('ForbiddenError', 403), - NotFoundError: createError('NotFoundError', 404), - ConflictError: createError('ConflictError', 409), - ServiceUnavailable: createError('ServiceUnavailable', 503) -} diff --git a/src/common/errors.ts b/src/common/errors.ts new file mode 100644 index 0000000..861af15 --- /dev/null +++ b/src/common/errors.ts @@ -0,0 +1,53 @@ +/** + * HTTP-aware application error constructors used by the legacy and NestJS + * request pipelines. + * + * The constructor shape, prototype names, metadata, and `httpStatus` property + * are retained so existing error handling and tests continue to behave + * identically after TypeScript compilation. + */ +const util = require('util') + +/** + * Create an Error-compatible constructor with a fixed HTTP status code. + * + * @param name Error name exposed through the prototype. + * @param statusCode HTTP status exposed as `httpStatus` on each instance. + * @returns An error constructor accepting message, cause, and metadata. + * @throws Does not throw while creating the constructor. Instances retain + * normal V8 stack-capture behavior when constructed. + * @private + */ +function createError (name, statusCode) { + /** + * Construct an HTTP-aware application error. + * + * @param message Error message, defaulting to the configured error name. + * @param cause Optional underlying cause retained without transformation. + * @param metadata Optional structured metadata included in API responses. + * @returns A new error instance when invoked with `new`. + * @throws Does not intentionally throw during normal Node.js construction. + * @constructor + */ + function ErrorCtor (message, cause, metadata) { + Error.call(this) + Error.captureStackTrace(this) + this.message = message || name + this.cause = cause + this.metadata = metadata + this.httpStatus = statusCode + } + + util.inherits(ErrorCtor, Error) + ErrorCtor.prototype.name = name + return ErrorCtor +} + +module.exports = { + BadRequestError: createError('BadRequestError', 400), + UnauthorizedError: createError('UnauthorizedError', 401), + ForbiddenError: createError('ForbiddenError', 403), + NotFoundError: createError('NotFoundError', 404), + ConflictError: createError('ConflictError', 409), + ServiceUnavailable: createError('ServiceUnavailable', 503) +} diff --git a/src/common/helper.js b/src/common/helper.ts similarity index 61% rename from src/common/helper.js rename to src/common/helper.ts index 5e30a2c..9d9c138 100644 --- a/src/common/helper.js +++ b/src/common/helper.ts @@ -1,8 +1,10 @@ /** - * This file defines helper methods + * Shared application helpers for authorization, HTTP integrations, database + * lookups, pagination, validation, and Bus API event publication. + * + * The CommonJS export surface is retained so existing services and tests can + * monkeypatch helpers such as `postEvent` without changing runtime behavior. */ -const { PrismaClient } = require('@prisma/client-member') -const { PrismaClient: ChallengePrismaClient } = require('@prisma/client-challenge') const _ = require('lodash') const config = require('config') @@ -18,22 +20,32 @@ const busApi = require('tc-bus-api-wrapper') const busApiClient = busApi(_.pick(config, ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME', 'AUTH0_CLIENT_ID', 'AUTH0_CLIENT_SECRET', 'BUSAPI_URL', 'KAFKA_ERROR_TOPIC', 'AUTH0_PROXY_SERVER_URL'])) -const prisma = require('./prisma').getClient() -const prismaMember = new PrismaClient() -const prismaChallenge = new ChallengePrismaClient() +const prismaClients = require('./prisma') +const prisma = prismaClients.getClient() +const prismaMember = prismaClients.getMemberClient() +const prismaChallenge = prismaClients.getChallengeClient() /** - * Check the error is custom error. - * @returns {Boolean} true if error is custom error, false otherwise + * Determine whether an error is one of the API's custom HTTP errors. + * + * @param err Error-like value whose name should be checked. + * @returns `true` for an error exported by `errors.ts`; otherwise `false`. + * @throws Does not throw for an error-like object with a readable name. */ function isCustomError (err) { return _.keys(errors).includes(err.name) } /** - * Send Kafka event message - * @params {String} topic the topic name - * @params {Object} payload the payload + * Publish an event through the existing Bus API client. + * + * The established event envelope and field names are intentionally retained. + * The Bus API remains responsible for forwarding the message to Kafka. + * + * @param topic Topic name placed in the event envelope. + * @param payload Event payload forwarded without transformation. + * @returns A promise that resolves when the Bus API accepts the event. + * @throws Authentication, network, or Bus API errors from the wrapper client. */ async function postEvent (topic, payload) { logger.info(`Publish event to Kafka topic ${topic}`) @@ -48,9 +60,14 @@ async function postEvent (topic, payload) { } /** - * Wrap async function to standard express function - * @param {Function} fn the async function - * @returns {Function} the wrapped function + * Wrap an asynchronous function as an Express-compatible request handler. + * + * Promise rejections are forwarded to Express through `next`. + * + * @param fn Asynchronous request handler to wrap. + * @returns An Express-style handler accepting request, response, and `next`. + * @throws Synchronous errors raised before `fn` returns a promise are not + * intercepted and retain the legacy behavior. */ function wrapExpress (fn) { return function (req, res, next) { @@ -59,9 +76,13 @@ function wrapExpress (fn) { } /** - * Wrap all functions from object - * @param obj the object (controller exports) - * @returns {Object|Array} the wrapped object + * Recursively wrap asynchronous functions contained in an export object. + * + * Objects are updated in place; arrays are returned as mapped copies. + * + * @param obj Controller export, function, array, or nested object to process. + * @returns The processed function, array, or object. + * @throws Any error raised while reading or assigning properties on `obj`. */ function autoWrapExpress (obj) { if (_.isArray(obj)) { @@ -80,8 +101,11 @@ function autoWrapExpress (obj) { } /** - * Check if the user has admin role - * @param {Object} authUser the user + * Check whether an authenticated user has the configured administrator role. + * + * @param authUser Authentication payload containing an optional roles array. + * @returns `true` for a case-insensitive administrator role match. + * @throws Does not throw for missing or malformed role arrays. */ function hasAdminRole (authUser) { if (!authUser || !Array.isArray(authUser.roles)) { @@ -96,30 +120,38 @@ function hasAdminRole (authUser) { } /** - * Get user handle from token + * Get the preferred user identifier from an authentication token. * - * @param {Object} authUser request auth user - * @returns user handle or sub + * @param authUser Authenticated user payload. + * @returns The user handle when present, otherwise the token subject. + * @throws A property-access error when `authUser` is null or undefined. */ function getUserHandleOrSub (authUser) { return authUser.handle || authUser.sub } /** - * Get user id from token + * Get the numeric or string user id from an authentication token. * - * @param {Object} authUser request auth user - * @returns user id + * @param authUser Authenticated user payload. + * @returns The payload's `userId` value. + * @throws A property-access error when `authUser` is null or undefined. */ function getUserIdFromToken (authUser) { return authUser.userId } /** - * Check if exists. + * Check whether any requested term exists in a source list. * - * @param {Array} source the array in which to search for the term - * @param {Array | String} term the term to search + * Source entries and array terms are compared case-insensitively. String terms + * are split on spaces, retaining the legacy handling of their original case. + * + * @param source Array in which to search. + * @param term A term string or an array of terms. + * @returns `true` when at least one term is present; otherwise `false`. + * @throws {Error} When `source` is not an array or `term` is neither a string + * nor an array. */ function checkIfExists (source, term) { let terms @@ -148,10 +180,13 @@ function checkIfExists (source, term) { } /** - * Get Data by model id - * @param {Object} modelName The model name - * @param {String} id The id value - * @returns {Promise} + * Fetch a resources-database record by its primary id. + * + * @param modelName Prisma model name in its exported PascalCase form. + * @param id Primary id to find. + * @returns The matching Prisma record. + * @throws {NotFoundError} When the record does not exist. + * @throws A Prisma driver error when the lookup fails. */ async function getById (modelName, id) { const prismaModel = _.camelCase(modelName) @@ -163,18 +198,26 @@ async function getById (modelName, id) { } /** - * Get Member Stats by id llist - * @param {Array} idList The id list - * @returns {Promise<[]>} + * Fetch member records and maximum ratings for a list of user ids. + * + * @param idList Member ids accepted by the members Prisma BigInt filter. + * @returns Member records with their optional `maxRating` relation. + * @throws A Prisma driver error when the members lookup fails. */ async function getMemberInfoByIdList (idList) { return prismaMember.member.findMany({ where: { userId: { in: idList } }, include: { maxRating: true } }) } /** - * Get Data by model id - * @param {String} handle The member handle - * @returns {Promise} + * Resolve member details by handle. + * + * The members database is attempted first. Any database miss or error retains + * the legacy fallback to the configured Members API. + * + * @param handle Member handle to resolve case-insensitively in the database. + * @returns Member id, email, and handle. + * @throws {BadRequestError} When neither source contains the member. + * @throws Authentication, network, or API errors other than a fallback 404. */ async function getMemberDetailsByHandle (handle) { try { @@ -200,9 +243,15 @@ async function getMemberDetailsByHandle (handle) { } /** - * Get Data by model id - * @param {String} memberId The member id - * @returns {Promise} + * Resolve member details by member id. + * + * The members database is attempted first. Any database miss or error retains + * the legacy fallback to the configured Members API. + * + * @param memberId Member id to resolve, or a falsey value to skip lookup. + * @returns Member details, or `null` for a falsey member id. + * @throws {BadRequestError} When neither source contains the member. + * @throws Authentication, network, or API errors other than a fallback 404. */ async function getMemberDetailsById (memberId) { if (!memberId) { @@ -245,7 +294,7 @@ async function getMemberDetailsById (memberId) { * @returns {Promise} the challenge record or detailed Challenge API payload * @throws {NotFoundError} when includeDetails is false and the challenge database record is missing */ -async function getChallengeById (challengeId, options = {}) { +async function getChallengeById (challengeId, options: { includeDetails?: boolean } = {}) { const { includeDetails = false } = options if (includeDetails) { @@ -269,6 +318,7 @@ async function getChallengeById (challengeId, options = {}) { * * @param {Object} currentUser the user who performs the operation * @returns {Boolean} true when whitelist rules should be applied + * @throws Does not throw. */ function shouldApplyChallengeWhitelist (currentUser) { return !_.get(currentUser, 'isMachine', false) @@ -282,6 +332,8 @@ function shouldApplyChallengeWhitelist (currentUser) { * @param {Object} currentUser the user who performs the operation * @param {Array} challengeIds challenge ids to filter * @returns {Promise>} challenge ids visible to the caller + * @throws Does not throw for database evaluation failures; those failures are + * logged and fail closed with an empty list. */ async function filterChallengeIdsByWhitelist (currentUser, challengeIds) { const ids = _.uniq((challengeIds || []).map(id => _.toString(id).trim()).filter(Boolean)) @@ -325,6 +377,14 @@ async function ensureChallengeWhitelistAccess (currentUser, challengeId) { } } +/** + * Resolve member details by handle through the configured Members API. + * + * @param handle Member handle passed in the request path. + * @returns Member id, email, and canonical API handle. + * @throws {BadRequestError} When the API returns 404 or no user id. + * @throws Authentication, network, and non-404 API errors. + */ async function getMemberDetailsByHandleFromV3Members (handle) { let memberId let email @@ -353,9 +413,12 @@ async function getMemberDetailsByHandleFromV3Members (handle) { } /** - * Get member detail by id from member api - * @param {String} userId user id - * @returns member detail + * Resolve member details by id through the configured Members API. + * + * @param userId Member id passed as the API query parameter. + * @returns Member id, email, and handle. + * @throws {BadRequestError} When the API returns 404 or no user id. + * @throws Authentication, network, and non-404 API errors. */ async function getMemberDetailsByIdFromMemberApi (userId) { let memberId @@ -388,10 +451,17 @@ async function getMemberDetailsByIdFromMemberApi (userId) { } /** - * Update item in database - * @param {Object} dbItem The database item - * @param {Object} data The updated data object - * @returns {Promise} + * Update an existing resources-database record and its audit fields. + * + * The supplied record is mutated before the complete object is passed to + * Prisma, matching the established update semantics. + * + * @param authUser Authenticated user supplying `updatedBy`. + * @param modelName Prisma model name in its exported PascalCase form. + * @param dbItem Existing Prisma record; mutated in place. + * @param data Fields to merge into the existing record. + * @returns The updated Prisma record. + * @throws A Prisma validation or driver error when the update fails. */ async function update (authUser, modelName, dbItem, data) { Object.keys(data).forEach((key) => { @@ -408,11 +478,14 @@ async function update (authUser, modelName, dbItem, data) { } /** - * Check duplication of specified model - * @param {Object} modelName The dynamoose model name - * @param {Object} queryParams The query parameters object - * @param {String} errorMessage the error message if duplication exist. - * @returns {Boolean} true if duplication exist, throws error otherwise. + * Reject an operation when matching resources-database records already exist. + * + * @param modelName Prisma model name in its exported PascalCase form. + * @param queryParams Prisma `where` filter used for the count. + * @param errorMessage Conflict message used when a duplicate is found. + * @returns A promise that resolves with no value when no duplicate exists. + * @throws {ConflictError} When at least one matching record exists. + * @throws A Prisma driver error when the count fails. */ async function validateDuplicate (modelName, queryParams, errorMessage) { const prismaModel = _.camelCase(modelName) @@ -423,12 +496,14 @@ async function validateDuplicate (modelName, queryParams, errorMessage) { } /** - * Uses superagent to proxy get request - * @param {String} url the url - * @param {Object} query the query parameters, optional - * @returns {Object} the response + * Send an authenticated GET request with the service's M2M token. + * + * @param url Target URL. + * @param query Optional query parameters. + * @returns The SuperAgent response. + * @throws M2M authentication, network, or HTTP response errors. */ -async function getRequest (url, query) { +async function getRequest (url, query?: any) { const m2mToken = await m2m.getMachineToken(config.AUTH0_CLIENT_ID, config.AUTH0_CLIENT_SECRET) logger.debug(`GET ${url} with query ${JSON.stringify(query)}`) return request @@ -440,12 +515,17 @@ async function getRequest (url, query) { } /** - * Uses superagent to proxy post request - * @param {String} url the url - * @param {Object} data the query parameters, optional - * @returns {Object} the response + * Send an authenticated POST request with the service's M2M token. + * + * Errors are logged to the console and rethrown unchanged to preserve the + * existing API integration behavior. + * + * @param url Target URL. + * @param data Optional request body. + * @returns The SuperAgent response. + * @throws M2M authentication, network, or HTTP response errors. */ -async function postRequest (url, data) { +async function postRequest (url, data?: any) { try { const m2mToken = await m2m.getMachineToken(config.AUTH0_CLIENT_ID, config.AUTH0_CLIENT_SECRET) @@ -464,10 +544,12 @@ async function postRequest (url, data) { } /** - * Get link for a given page. - * @param {Object} req the HTTP request - * @param {Number} page the page number - * @returns {String} link for the page + * Build an absolute pagination link while retaining existing query parameters. + * + * @param req HTTP request containing `path` and `query`. + * @param page Page number to place in the link. + * @returns Absolute page URL based on `API_BASE_URL`. + * @throws A serialization error for unsupported query values. */ function getPageLink (req, page) { const q = _.assignIn({}, req.query, { page }) @@ -475,10 +557,13 @@ function getPageLink (req, page) { } /** - * Set HTTP response headers from result. - * @param {Object} req the HTTP request - * @param {Object} res the HTTP response - * @param {Object} result the operation result + * Set pagination and RFC 5988-style Link headers on an HTTP response. + * + * @param req HTTP request used to generate page links. + * @param res HTTP response exposing a `set` method. + * @param result Result containing `total`, `page`, and `perPage`. + * @returns No value; headers are written to `res`. + * @throws Errors from response header assignment or link generation. */ function setResHeaders (req, res, result) { const totalPages = Math.ceil(result.total / result.perPage) @@ -506,12 +591,14 @@ function setResHeaders (req, res, result) { } /** - * Get all pages from TC API. - * @param {String} url the url - * @param {Object} query the query parameters, optional, it should not include page and perPage - * @returns {Array} the result records + * Fetch and concatenate all pages from a Topcoder API endpoint. + * + * @param url Endpoint URL. + * @param query Optional query parameters excluding `page` and `perPage`. + * @returns All array records returned before an empty page or reported total. + * @throws M2M authentication, network, or HTTP response errors. */ -async function getAllPages (url, query) { +async function getAllPages (url, query?: any) { const perPage = 100 let page = 1 let result = [] @@ -535,9 +622,11 @@ async function getAllPages (url, query) { } /** - * Get all user group ids - * @param {String} userId the user id - * @returns {Promise} the user group ids + * Fetch all group ids assigned to a member. + * + * @param userId Member id used by the Groups API. + * @returns The Groups API response body. + * @throws M2M authentication, network, or Groups API errors. */ async function getUserGroupIds (userId) { const url = config.GROUPS_API_URL + `/memberGroups/${userId}` @@ -546,9 +635,15 @@ async function getUserGroupIds (userId) { } /** - * Check user has permission on challenge groups. Throw 403 if user is forbidden. - * @param {Object} authUser auth user - * @param {Array} groups challenge.groups + * Check whether a user may access every group assigned to a challenge. + * + * Machine users and administrators bypass group lookup. Despite the legacy + * comment, this helper returns a boolean and does not itself throw a 403. + * + * @param authUser Authenticated user payload. + * @param groups Challenge group ids. + * @returns `true` when access is allowed; otherwise `false`. + * @throws M2M authentication, network, or Groups API errors. */ async function checkChallengeGroupAccess (authUser, groups) { // allow admin user @@ -569,9 +664,14 @@ async function checkChallengeGroupAccess (authUser, groups) { } /** - * Check if the user has agreed to all challenge terms - * @param {Number} userId the user ID - * @param {Array} terms an array of term UUIDs to check + * Ensure a member has agreed to all terms required for a resource role. + * + * @param userId Member id supplied to the Terms API. + * @param terms Term objects containing ids and role ids. + * @returns A promise that resolves with no value when all terms are agreed. + * @throws {ForbiddenError} With missing-term metadata when agreements are + * incomplete. + * @throws M2M authentication, network, or Terms API errors. */ async function checkAgreedTerms (userId, terms) { const unAgreedTerms = [] @@ -592,6 +692,20 @@ async function checkAgreedTerms (userId, terms) { } } +/** + * Request a challenge phase transition, retrying failed attempts after five + * seconds. + * + * The initial request plus up to three retries retain the existing behavior. + * After the final failed attempt the function resolves with `undefined`. + * + * @param challengeId Challenge id used in the API path. + * @param phase Phase name to transition. + * @param operation Transition operation, such as `close`. + * @param numAttempts Current one-based attempt number used by recursive retries. + * @returns The successful response body, or `undefined` after all failures. + * @throws {Error} Immediately when a required argument is missing. + */ async function advanceChallengePhase (challengeId, phase, operation, numAttempts = 1) { if (!challengeId || !phase || !operation) { throw new Error('Invalid arguments') diff --git a/src/common/logger.js b/src/common/logger.ts similarity index 53% rename from src/common/logger.js rename to src/common/logger.ts index 1011716..eb599d5 100644 --- a/src/common/logger.js +++ b/src/common/logger.ts @@ -1,5 +1,8 @@ /** - * This module contains the winston logger configuration. + * Winston logging plus the legacy service validation/logging decorators. + * + * The logger remains a mutable CommonJS export because tests replace logging + * methods and services are decorated in place during module initialization. */ const _ = require('lodash') @@ -9,7 +12,7 @@ const config = require('config') const getParams = require('get-parameter-names') const { createLogger, format, transports } = require('winston') -const logger = createLogger({ +const logger: any = createLogger({ level: config.LOG_LEVEL, transports: [ new transports.Console({ @@ -22,9 +25,15 @@ const logger = createLogger({ }) /** - * Log error details with signature - * @param err the error - * @param signature the signature + * Log complete error details, optionally prefixed with an operation signature. + * + * Each error object is marked as logged so repeated handling does not emit its + * stack more than once. + * + * @param err Error-like object to log. + * @param signature Optional operation or request signature. + * @returns No value. + * @throws Logger transport errors, if a configured transport throws. */ logger.logFullError = (err, signature) => { if (!err) { @@ -41,9 +50,15 @@ logger.logFullError = (err, signature) => { } /** - * Remove invalid properties from the object and hide long arrays - * @param {Object} obj the object - * @returns {Object} the new object with removed properties + * Produce a log-safe representation and abbreviate arrays longer than 30 + * entries. + * + * Serialization errors preserve the original object, matching legacy logging. + * + * @param obj Value to sanitize. + * @returns A JSON-compatible clone when serialization succeeds, otherwise the + * original value. + * @throws Does not throw; serialization errors are caught. * @private */ const _sanitizeObject = (obj) => { @@ -60,9 +75,12 @@ const _sanitizeObject = (obj) => { } /** - * Convert array with arguments to object - * @param {Array} params the name of parameters - * @param {Array} arr the array with values + * Associate positional arguments with their parameter names. + * + * @param params Parameter names in declaration order. + * @param arr Argument values in call order. + * @returns Object keyed by parameter name. + * @throws Does not intentionally throw for ordinary arrays. * @private */ const _combineObject = (params, arr) => { @@ -74,8 +92,14 @@ const _combineObject = (params, arr) => { } /** - * Decorate all functions of a service and log debug information if DEBUG is enabled - * @param {Object} service the service + * Decorate every service function with debug input/output/error logging. + * + * Decoration is skipped unless `LOG_LEVEL` is exactly `debug`. The supplied + * export object is mutated in place. + * + * @param service Service export object whose functions should be wrapped. + * @returns No value; `service` is updated in place. + * @throws Errors from parameter introspection or property assignment. */ logger.decorateWithLogging = (service) => { if (config.LOG_LEVEL !== 'debug') { @@ -105,10 +129,16 @@ logger.decorateWithLogging = (service) => { } /** - * Decorate all functions of a service and validate input values - * and replace input arguments with sanitized result form Joi - * Service method must have a `schema` property with Joi schema - * @param {Object} service the service + * Decorate service functions with their attached Joi validation schemas. + * + * Validated and converted values replace the original positional arguments. + * Functions without a `schema` property are left unchanged. The supplied + * export object is mutated in place. + * + * @param service Service export object whose functions should be validated. + * @returns No value; `service` is updated in place. + * @throws Joi validation errors when a wrapped function is later invoked, or + * property-assignment errors during decoration. */ logger.decorateWithValidators = function (service) { _.each(service, (method, name) => { @@ -135,8 +165,11 @@ logger.decorateWithValidators = function (service) { } /** - * Apply logger and validation decorators - * @param {Object} service the service to wrap + * Apply validation first and debug logging second to a service export object. + * + * @param service Service export object to decorate in place. + * @returns No value. + * @throws Errors raised by either decorator during setup. */ logger.buildService = (service) => { logger.decorateWithValidators(service) diff --git a/src/common/prisma-adapter.ts b/src/common/prisma-adapter.ts new file mode 100644 index 0000000..8eb5584 --- /dev/null +++ b/src/common/prisma-adapter.ts @@ -0,0 +1,157 @@ +/** + * PostgreSQL driver-adapter configuration for Prisma 7. + * + * Existing deployments encode the target PostgreSQL schema and optional pool + * overrides in their database URLs. Prisma's `pg` adapter needs the schema as + * a separate adapter option, while node-postgres needs pool settings as + * explicit configuration. This module bridges those formats without changing + * or replacing the configured connection string. + */ + +import { PrismaPg } from '@prisma/adapter-pg' +import type { PoolConfig } from 'pg' + +const DEFAULT_POSTGRES_SCHEMA = 'public' +const PRISMA_V6_CONNECTION_TIMEOUT_MS = 5_000 +const PRISMA_V6_IDLE_TIMEOUT_MS = 300_000 + +/** + * Prisma adapter options derived from an existing PostgreSQL URL. + */ +export interface PostgresAdapterConfiguration { + /** node-postgres pool configuration, including the original URL verbatim. */ + poolConfig: PoolConfig + /** Prisma adapter options that select the schema used to qualify queries. */ + adapterOptions: { + schema: string + } +} + +/** + * Parse a non-negative numeric URL parameter. + * + * Invalid values are deliberately ignored here and left in the untouched + * connection string for the underlying PostgreSQL driver to validate. + * + * @param value Raw URL parameter value. + * @returns The parsed number, or `undefined` when the value is absent, + * negative, or not finite. + * @throws Does not throw. + */ +function parseNonNegativeNumber (value: string | null): number | undefined { + if (value === null || value.trim() === '') { + return undefined + } + + const parsed = Number(value) + if (!Number.isFinite(parsed) || parsed < 0) { + return undefined + } + + return parsed +} + +/** + * Convert a URL parameter expressed in seconds to milliseconds. + * + * @param value Raw URL parameter value. + * @returns The duration in milliseconds, or `undefined` for an invalid value. + * @throws Does not throw. + */ +function secondsToMilliseconds (value: string | null): number | undefined { + const seconds = parseNonNegativeNumber(value) + return seconds === undefined ? undefined : seconds * 1_000 +} + +/** + * Resolve Prisma 7 adapter and node-postgres pool settings from an existing + * PostgreSQL connection string. + * + * The original connection string is preserved verbatim so settings already + * understood by node-postgres, including TLS, `statement_timeout`, and + * `application_name`, continue to work. Prisma 6 pool overrides are copied to + * their closest node-postgres equivalents when one exists. If both + * `connect_timeout` and `pool_timeout` are present, `connect_timeout` wins + * because node-postgres exposes a single timeout for both connection and pool + * acquisition. + * + * @param connectionString Existing PostgreSQL connection string. + * @param variableName Environment-variable name used in configuration errors. + * @returns Pool and adapter settings suitable for `PrismaPg`. + * @throws {Error} When the connection string is missing, malformed, or does + * not use the PostgreSQL protocol. + */ +export function resolvePostgresAdapterConfiguration ( + connectionString: string | undefined, + variableName = 'DATABASE_URL' +): PostgresAdapterConfiguration { + if (!connectionString) { + throw new Error(`${variableName} must be set`) + } + + let parsedUrl: URL + try { + parsedUrl = new URL(connectionString) + } catch (cause) { + throw new Error(`${variableName} must be a valid PostgreSQL connection URL`, { cause }) + } + + if (parsedUrl.protocol !== 'postgresql:' && parsedUrl.protocol !== 'postgres:') { + throw new Error(`${variableName} must use the postgresql:// or postgres:// protocol`) + } + + const schema = parsedUrl.searchParams.get('schema')?.trim() || DEFAULT_POSTGRES_SCHEMA + const poolConfig: PoolConfig = { + connectionString, + connectionTimeoutMillis: PRISMA_V6_CONNECTION_TIMEOUT_MS, + idleTimeoutMillis: PRISMA_V6_IDLE_TIMEOUT_MS + } + + const connectionLimit = parseNonNegativeNumber(parsedUrl.searchParams.get('connection_limit')) + if (connectionLimit !== undefined && connectionLimit > 0 && Number.isInteger(connectionLimit)) { + poolConfig.max = connectionLimit + } + + const connectTimeout = secondsToMilliseconds(parsedUrl.searchParams.get('connect_timeout')) + const poolTimeout = secondsToMilliseconds(parsedUrl.searchParams.get('pool_timeout')) + if (connectTimeout !== undefined) { + poolConfig.connectionTimeoutMillis = connectTimeout + } else if (poolTimeout !== undefined) { + poolConfig.connectionTimeoutMillis = poolTimeout + } + + const idleTimeout = secondsToMilliseconds(parsedUrl.searchParams.get('max_idle_connection_lifetime')) + if (idleTimeout !== undefined) { + poolConfig.idleTimeoutMillis = idleTimeout + } + + const maximumLifetime = parseNonNegativeNumber(parsedUrl.searchParams.get('max_connection_lifetime')) + if (maximumLifetime !== undefined) { + poolConfig.maxLifetimeSeconds = maximumLifetime + } + + return { + poolConfig, + adapterOptions: { schema } + } +} + +/** + * Create a PostgreSQL driver adapter for a generated Prisma 7 client. + * + * Constructing the adapter does not establish a database connection. Prisma + * retains its existing lazy behavior and opens the pool on the first query. + * + * @param connectionString Existing PostgreSQL connection string. + * @param variableName Environment-variable name used in configuration errors. + * @returns A configured Prisma PostgreSQL driver adapter. + * @throws {Error} When the connection string cannot be resolved by + * `resolvePostgresAdapterConfiguration`. + */ +export function createPostgresAdapter ( + connectionString: string | undefined, + variableName = 'DATABASE_URL' +): PrismaPg { + const { poolConfig, adapterOptions } = resolvePostgresAdapterConfiguration(connectionString, variableName) + return new PrismaPg(poolConfig, adapterOptions) +} diff --git a/src/common/prisma.js b/src/common/prisma.js deleted file mode 100644 index 7b85a85..0000000 --- a/src/common/prisma.js +++ /dev/null @@ -1,16 +0,0 @@ -const { PrismaClient } = require('@prisma/client') - -// Following Prisma best practice to create one instance of PrismaClient -const prisma = new PrismaClient({ - log: [ - { level: 'query', emit: 'event' }, - { level: 'info', emit: 'event' }, - { level: 'warn', emit: 'event' }, - { level: 'error', emit: 'event' } - ] -}) - -// By running the first query, prisma calls $connect() under the hood -module.exports.getClient = () => { - return prisma -} diff --git a/src/common/prisma.ts b/src/common/prisma.ts new file mode 100644 index 0000000..fffd284 --- /dev/null +++ b/src/common/prisma.ts @@ -0,0 +1,154 @@ +/** + * Singleton Prisma 7 clients for the resources, members, and challenges + * PostgreSQL databases. + * + * Each singleton is exposed through a lazy proxy so missing or malformed URLs + * fail only when the corresponding database is first used, as they did with + * the generated Prisma 6 clients. Each initialized client receives its own + * adapter and connection pool. + */ + +import { PrismaClient as ResourcesPrismaClient } from '../generated/resources/client' +import { PrismaClient as MemberPrismaClient } from '../generated/member/client' +import { PrismaClient as ChallengePrismaClient } from '../generated/challenge/client' +import { createPostgresAdapter } from './prisma-adapter' + +let resourcesClient: ResourcesPrismaClient | undefined +let memberClient: MemberPrismaClient | undefined +let challengeClient: ChallengePrismaClient | undefined + +/** + * Expose a singleton client whose factory runs on its first property access. + * Service modules keep stable client references while adapter validation and + * pool allocation remain deferred until that database is actually used. + * + * @param factory Creates or returns the database-specific singleton client. + * @returns A proxy forwarding properties and bound methods to that client. + * @throws Errors raised by the factory, including invalid database URLs, on + * the first operation against the proxied client. + */ +function createLazyClient (factory: () => T): T { + return new Proxy({} as T, { + get (_target, property) { + const client = factory() + const value = Reflect.get(client, property, client) + return typeof value === 'function' ? value.bind(client) : value + } + }) +} + +/** + * Create or return the resources database singleton. + * + * @returns The initialized resources Prisma client. + * @throws {Error} When `DATABASE_URL` is missing or invalid. + */ +function resolveResourcesClient (): ResourcesPrismaClient { + resourcesClient ??= new ResourcesPrismaClient({ + adapter: createPostgresAdapter(process.env.DATABASE_URL, 'DATABASE_URL'), + log: [ + { level: 'query', emit: 'event' }, + { level: 'info', emit: 'event' }, + { level: 'warn', emit: 'event' }, + { level: 'error', emit: 'event' } + ] + }) + return resourcesClient +} + +/** + * Create or return the members database singleton. + * + * @returns The initialized members Prisma client. + * @throws {Error} When `MEMBER_DB_URL` is missing or invalid. + */ +function resolveMemberClient (): MemberPrismaClient { + memberClient ??= new MemberPrismaClient({ + adapter: createPostgresAdapter(process.env.MEMBER_DB_URL, 'MEMBER_DB_URL') + }) + return memberClient +} + +/** + * Create or return the challenges database singleton. + * + * @returns The initialized challenges Prisma client. + * @throws {Error} When `CHALLENGE_DB_URL` is missing or invalid. + */ +function resolveChallengeClient (): ChallengePrismaClient { + challengeClient ??= new ChallengePrismaClient({ + adapter: createPostgresAdapter(process.env.CHALLENGE_DB_URL, 'CHALLENGE_DB_URL') + }) + return challengeClient +} + +const prisma = createLazyClient(resolveResourcesClient) +const prismaMember = createLazyClient(resolveMemberClient) +const prismaChallenge = createLazyClient(resolveChallengeClient) + +/** + * Return the singleton resources database client. + * + * The first query made through this client opens its PostgreSQL connection + * pool; calling this accessor alone performs no network I/O. + * + * @returns The generated resources Prisma client. + * @throws Does not throw; URL validation remains deferred until first use. + */ +function getClient (): ResourcesPrismaClient { + return prisma +} + +/** + * Return the singleton members database client. + * + * The first query made through this client opens its PostgreSQL connection + * pool; calling this accessor alone performs no network I/O. + * + * @returns The generated members Prisma client. + * @throws Does not throw; URL validation remains deferred until first use. + */ +function getMemberClient (): MemberPrismaClient { + return prismaMember +} + +/** + * Return the singleton challenges database client. + * + * The first query made through this client opens its PostgreSQL connection + * pool; calling this accessor alone performs no network I/O. + * + * @returns The generated challenges Prisma client. + * @throws Does not throw; URL validation remains deferred until first use. + */ +function getChallengeClient (): ChallengePrismaClient { + return prismaChallenge +} + +/** + * Disconnect all Prisma clients during application shutdown. + * + * Every initialized client's disconnect operation is started together. Lazy + * clients that were never used are skipped so shutdown does not require their + * database URLs. The returned promise rejects if a disconnect operation fails. + * + * @returns A promise that resolves after every Prisma client disconnects. + * @throws A Prisma or driver error when a client cannot disconnect cleanly. + */ +async function disconnectClients (): Promise { + await Promise.all([ + resourcesClient, + memberClient, + challengeClient + ].filter((client): client is ResourcesPrismaClient | MemberPrismaClient | ChallengePrismaClient => Boolean(client)) + .map(client => client.$disconnect())) +} + +module.exports = { + getClient, + getMemberClient, + getChallengeClient, + disconnectClients, + // Descriptive alias retained for direct callers of the common layer. + disconnectAllClients: disconnectClients +} diff --git a/src/controllers/CleanUpController.js b/src/controllers/CleanUpController.js deleted file mode 100644 index b8c6bc0..0000000 --- a/src/controllers/CleanUpController.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Controller for cleaning up test data - */ - -const service = require('../services/CleanUpService') - -/** - * Get all resources of a challenge - * @param {Object} req the request - * @param {Object} res the response - */ -async function cleanUpTestData (req, res) { - await service.cleanUpTestData() - res.sendStatus(200) -} - -module.exports = { - cleanUpTestData -} diff --git a/src/controllers/CleanUpController.ts b/src/controllers/CleanUpController.ts new file mode 100644 index 0000000..4b6de67 --- /dev/null +++ b/src/controllers/CleanUpController.ts @@ -0,0 +1,28 @@ +/** + * Express controller for the internal automated-test cleanup endpoint. + */ + +import type { Request, Response } from 'express' + +const service = require('../services/CleanUpService') + +/** + * Removes resource data created by the Postman automation suite. + * + * The route registry invokes this handler for the protected internal cleanup + * endpoint. It intentionally returns Express's text `OK` response with status + * 200 after the service completes. + * + * @param req The authenticated Express request; its body is not used. + * @param res The Express response used to send status 200. + * @returns A promise that resolves after the cleanup response is sent. + * @throws Propagates database errors to the application error middleware. + */ +async function cleanUpTestData (req: Request, res: Response): Promise { + await service.cleanUpTestData() + res.sendStatus(200) +} + +module.exports = { + cleanUpTestData +} diff --git a/src/controllers/HealthCheckController.js b/src/controllers/HealthCheckController.js deleted file mode 100644 index ae6aba1..0000000 --- a/src/controllers/HealthCheckController.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Health Check Controller - */ - -const service = require('../services/HealthCheckService') - -/** - * Health check - * @param req the http request - * @param res the http response - */ -async function check (req, res) { - res.json(await service.check()) -} - -module.exports = { - check -} diff --git a/src/controllers/HealthCheckController.ts b/src/controllers/HealthCheckController.ts new file mode 100644 index 0000000..c023598 --- /dev/null +++ b/src/controllers/HealthCheckController.ts @@ -0,0 +1,26 @@ +/** + * Express controller for the public Resources API health endpoint. + */ + +import type { Request, Response } from 'express' + +const service = require('../services/HealthCheckService') + +/** + * Returns the service's lightweight health summary. + * + * app-routes.ts invokes this handler without authentication for + * `GET /resources/health`. + * + * @param req The Express health request; no request data is consumed. + * @param res The Express response that receives the JSON health summary. + * @returns A promise that resolves after the response is sent. + * @throws Propagates health-service errors to application error middleware. + */ +async function check (req: Request, res: Response): Promise { + res.json(await service.check()) +} + +module.exports = { + check +} diff --git a/src/controllers/ResourceController.js b/src/controllers/ResourceController.js deleted file mode 100644 index dc6e875..0000000 --- a/src/controllers/ResourceController.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Controller for resource endpoints - */ - -const service = require('../services/ResourceService') -const helper = require('../common/helper') - -/** - * Get all resources of a challenge - * @param {Object} req the request - * @param {Object} res the response - */ -async function getResources (req, res) { - const result = await service.getResources(req.authUser, req.query.challengeId, req.query.roleId, req.query.memberId, req.query.memberHandle, req.query.page, req.query.perPage, req.query.sortBy, req.query.sortOrder) - helper.setResHeaders(req, res, result) - res.send(result.data) -} - -/** - * Create resource for a challenge. - * @param {Object} req the request - * @param {Object} res the response - */ -async function createResource (req, res) { - const result = await service.createResource(req.authUser, req.body) - res.send(result) -} - -/** - * Delete resource from a challenge. - * @param {Object} req the request - * @param {Object} res the response - */ -async function deleteResource (req, res) { - const result = await service.deleteResource(req.authUser, req.body) - res.send(result) -} - -/** - * Update the phase change notifications preference for a resource. - * @param {Object} req the request - * @param {Object} res the response - */ -async function updatePhaseChangeNotifications (req, res) { - const result = await service.updatePhaseChangeNotifications(req.authUser, req.params.resourceId, req.body) - res.send(result) -} - -/** - * List all challenge ids that given member has access to. - * @param {Object} req the request - * @param {Object} res the response - */ -async function listChallengesByMember (req, res) { - const result = await service.listChallengesByMember(req.params.memberId, req.query, req.authUser) - helper.setResHeaders(req, res, result) - res.send(result.data) -} - -/** - * Get resource count of a challenge - * @param {Object} req the request - * @param {Object} res the response - */ -async function getResourceCount (req, res) { - const result = await service.getResourceCount(req.query.challengeId, req.query.roleId, req.authUser) - res.send(result) -} - -module.exports = { - getResources, - createResource, - deleteResource, - updatePhaseChangeNotifications, - listChallengesByMember, - getResourceCount -} diff --git a/src/controllers/ResourceController.ts b/src/controllers/ResourceController.ts new file mode 100644 index 0000000..6604442 --- /dev/null +++ b/src/controllers/ResourceController.ts @@ -0,0 +1,104 @@ +/** + * Express controllers for resource assignment endpoints. + */ + +import type { Request, Response } from 'express' + +const service = require('../services/ResourceService') +const helper = require('../common/helper') + +interface AuthenticatedRequest extends Request { + authUser?: any +} + +/** + * Lists resources matching the established query filters and caller access. + * + * The handler forwards known query properties individually so unknown resource + * query parameters remain ignored, then attaches legacy pagination headers. + * + * @param req The optional-auth Express request containing resource filters. + * @param res The Express response that receives pagination headers and an array. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, access, lookup, and database errors. + */ +async function getResources (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.getResources(req.authUser, req.query.challengeId, req.query.roleId, req.query.memberId, req.query.memberHandle, req.query.page, req.query.perPage, req.query.sortBy, req.query.sortOrder) + helper.setResHeaders(req, res, result) + res.send(result.data) +} + +/** + * Creates a resource assignment for a challenge. + * + * @param req The authenticated Express request containing the resource body. + * @param res The Express response that receives the created resource with status 200. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, authorization, downstream API, event, and database errors. + */ +async function createResource (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.createResource(req.authUser, req.body) + res.send(result) +} + +/** + * Deletes the resource assignment described by the request body. + * + * @param req The authenticated Express request containing the deletion body. + * @param res The Express response that receives the deleted resource with status 200. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, authorization, downstream API, event, and database errors. + */ +async function deleteResource (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.deleteResource(req.authUser, req.body) + res.send(result) +} + +/** + * Updates one resource's phase-change notification preference. + * + * @param req The authenticated request containing the resource ID and boolean payload. + * @param res The Express response that receives the updated resource. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, ownership, whitelist, lookup, and database errors. + */ +async function updatePhaseChangeNotifications (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.updatePhaseChangeNotifications(req.authUser, req.params.resourceId, req.body) + res.send(result) +} + +/** + * Lists sorted, unique challenge IDs assigned to the requested member. + * + * @param req The authenticated request containing member ID and list criteria. + * @param res The Express response that receives pagination headers and challenge IDs. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, whitelist, and database errors. + */ +async function listChallengesByMember (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.listChallengesByMember(req.params.memberId, req.query, req.authUser) + helper.setResHeaders(req, res, result) + res.send(result.data) +} + +/** + * Returns resource counts grouped by role for one challenge. + * + * @param req The authenticated request containing challenge and optional role IDs. + * @param res The Express response that receives a role-ID-to-count object. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, whitelist, and database errors. + */ +async function getResourceCount (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.getResourceCount(req.query.challengeId, req.query.roleId, req.authUser) + res.send(result) +} + +module.exports = { + getResources, + createResource, + deleteResource, + updatePhaseChangeNotifications, + listChallengesByMember, + getResourceCount +} diff --git a/src/controllers/ResourceRoleController.js b/src/controllers/ResourceRoleController.js deleted file mode 100644 index 8c6b174..0000000 --- a/src/controllers/ResourceRoleController.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Controller for resource role endpoints - */ - -const service = require('../services/ResourceRoleService') -const helper = require('../common/helper') - -/** - * Get resource roles. - * @param {Object} req the request - * @param {Object} res the response - */ -async function getResourceRoles (req, res) { - const result = await service.getResourceRoles(req.query) - helper.setResHeaders(req, res, result) - res.send(result.data) -} - -/** - * Create resource role. - * @param {Object} req the request - * @param {Object} res the response - */ -async function createResourceRole (req, res) { - const result = await service.createResourceRole(req.authUser, req.body) - res.send(result) -} - -/** - * Update resource role. - * @param {Object} req the request - * @param {Object} res the response - */ -async function updateResourceRole (req, res) { - const result = await service.updateResourceRole(req.authUser, req.params.resourceRoleId, req.body) - res.send(result) -} - -module.exports = { - getResourceRoles, - createResourceRole, - updateResourceRole -} diff --git a/src/controllers/ResourceRoleController.ts b/src/controllers/ResourceRoleController.ts new file mode 100644 index 0000000..70d4c14 --- /dev/null +++ b/src/controllers/ResourceRoleController.ts @@ -0,0 +1,58 @@ +/** + * Express controllers for resource-role endpoints. + */ + +import type { Request, Response } from 'express' + +const service = require('../services/ResourceRoleService') +const helper = require('../common/helper') + +interface AuthenticatedRequest extends Request { + authUser?: any +} + +/** + * Lists resource roles matching the supplied query criteria. + * + * @param req The public Express request containing optional role filters. + * @param res The Express response that receives pagination headers and roles. + * @returns A promise that resolves after the response is sent. + * @throws Propagates query validation and database errors. + */ +async function getResourceRoles (req: Request, res: Response): Promise { + const result = await service.getResourceRoles(req.query) + helper.setResHeaders(req, res, result) + res.send(result.data) +} + +/** + * Creates a resource role using the authenticated caller for audit data. + * + * @param req The authenticated request containing the complete role body. + * @param res The Express response that receives the created role with status 200. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, duplicate, event, and database errors. + */ +async function createResourceRole (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.createResourceRole(req.authUser, req.body) + res.send(result) +} + +/** + * Fully updates an existing resource role. + * + * @param req The authenticated request containing role ID and complete update body. + * @param res The Express response that receives the updated role. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, not-found, duplicate, event, and database errors. + */ +async function updateResourceRole (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.updateResourceRole(req.authUser, req.params.resourceRoleId, req.body) + res.send(result) +} + +module.exports = { + getResourceRoles, + createResourceRole, + updateResourceRole +} diff --git a/src/controllers/ResourceRolePhaseDependencyController.js b/src/controllers/ResourceRolePhaseDependencyController.js deleted file mode 100644 index 3a115e6..0000000 --- a/src/controllers/ResourceRolePhaseDependencyController.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Controller for resource role phase dependency endpoints - */ - -const service = require('../services/ResourceRolePhaseDependencyService') -const helper = require('../common/helper') - -/** - * Get dependencies. - * @param {Object} req the request - * @param {Object} res the response - */ -async function getDependencies (req, res) { - const result = await service.getDependencies(req.query) - helper.setResHeaders(req, res, result) - res.send(result.data) -} - -/** - * Create dependency. - * @param {Object} req the request - * @param {Object} res the response - */ -async function createDependency (req, res) { - const result = await service.createDependency(req.authUser, req.body) - res.send(result) -} - -/** - * Update dependency. - * @param {Object} req the request - * @param {Object} res the response - */ -async function updateDependency (req, res) { - const result = await service.updateDependency(req.authUser, req.params.id, req.body) - res.send(result) -} - -/** - * Delete dependency. - * @param {Object} req the request - * @param {Object} res the response - */ -async function deleteDependency (req, res) { - const result = await service.deleteDependency(req.params.id) - res.send(result) -} - -module.exports = { - getDependencies, - createDependency, - updateDependency, - deleteDependency -} diff --git a/src/controllers/ResourceRolePhaseDependencyController.ts b/src/controllers/ResourceRolePhaseDependencyController.ts new file mode 100644 index 0000000..9f4f3c2 --- /dev/null +++ b/src/controllers/ResourceRolePhaseDependencyController.ts @@ -0,0 +1,72 @@ +/** + * Express controllers for resource-role phase-dependency endpoints. + */ + +import type { Request, Response } from 'express' + +const service = require('../services/ResourceRolePhaseDependencyService') +const helper = require('../common/helper') + +interface AuthenticatedRequest extends Request { + authUser?: any +} + +/** + * Lists phase dependencies matching the supplied query criteria. + * + * @param req The authenticated request containing optional dependency filters. + * @param res The Express response that receives headers and dependency records. + * @returns A promise that resolves after the response is sent. + * @throws Propagates query validation and database errors. + */ +async function getDependencies (req: Request, res: Response): Promise { + const result = await service.getDependencies(req.query) + helper.setResHeaders(req, res, result) + res.send(result.data) +} + +/** + * Creates a phase dependency for a resource role. + * + * @param req The authenticated request containing the dependency body. + * @param res The Express response that receives the created dependency with status 200. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, phase/role lookup, conflict, and database errors. + */ +async function createDependency (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.createDependency(req.authUser, req.body) + res.send(result) +} + +/** + * Fully updates an existing phase dependency. + * + * @param req The authenticated request containing dependency ID and update body. + * @param res The Express response that receives the updated dependency. + * @returns A promise that resolves after the response is sent. + * @throws Propagates validation, not-found, conflict, and database errors. + */ +async function updateDependency (req: AuthenticatedRequest, res: Response): Promise { + const result = await service.updateDependency(req.authUser, req.params.id, req.body) + res.send(result) +} + +/** + * Deletes and returns one phase dependency. + * + * @param req The authenticated request containing the dependency ID. + * @param res The Express response that receives the deleted dependency. + * @returns A promise that resolves after the response is sent. + * @throws Propagates identifier validation, not-found, and database errors. + */ +async function deleteDependency (req: Request, res: Response): Promise { + const result = await service.deleteDependency(req.params.id) + res.send(result) +} + +module.exports = { + getDependencies, + createDependency, + updateDependency, + deleteDependency +} diff --git a/src/routes.js b/src/routes.ts similarity index 93% rename from src/routes.js rename to src/routes.ts index 2090cbb..a14a0a8 100644 --- a/src/routes.js +++ b/src/routes.ts @@ -1,5 +1,8 @@ /** - * Contains all routes + * Declares the compatibility Express routes and their authorization metadata. + * + * app-routes.ts consumes this table to register the same paths, methods, roles, + * scopes, anonymous access, and IP-block behavior as the original service. */ const constants = require('../app-constants') diff --git a/src/scripts/clear-tables.js b/src/scripts/clear-tables.ts similarity index 63% rename from src/scripts/clear-tables.js rename to src/scripts/clear-tables.ts index 8b70f04..6e1ed6e 100644 --- a/src/scripts/clear-tables.js +++ b/src/scripts/clear-tables.ts @@ -1,6 +1,15 @@ const logger = require('../common/logger') const prisma = require('../common/prisma').getClient() +/** + * Deletes resources, phase dependencies, and roles in foreign-key-safe order. + * + * This maintenance entrypoint uses the shared resources Prisma client and is + * intended for explicitly requested environment cleanup. + * + * @returns A promise that resolves after all three tables have been cleared. + * @throws Propagates any Prisma delete failure to the process-level handler. + */ async function main () { logger.debug('Clearing Resource data') await prisma.resource.deleteMany({}) diff --git a/src/scripts/seed-tables.js b/src/scripts/seed-tables.ts similarity index 77% rename from src/scripts/seed-tables.js rename to src/scripts/seed-tables.ts index 7c616b5..dcc689a 100644 --- a/src/scripts/seed-tables.js +++ b/src/scripts/seed-tables.ts @@ -11,9 +11,16 @@ const prisma = require('../common/prisma').getClient() logger.info('Requesting to seed data to the resources tables...') const createdBy = 'seed-data' +const seedDirectory = path.resolve(process.cwd(), 'src', 'scripts', 'seed') +/** + * Imports resource-role seed records after applying legacy default fields. + * + * @returns A promise that resolves after the role batch is inserted. + * @throws Propagates Prisma validation or database failures. + */ async function importResourceRole () { - let data = require('./seed/ResourceRole.json') + let data = require(path.join(seedDirectory, 'ResourceRole.json')) data = _.map(data, d => { const r = { ...d, @@ -32,8 +39,14 @@ async function importResourceRole () { logger.info('Imported ResourceRole data') } +/** + * Imports resource-role phase-dependency seed records with audit metadata. + * + * @returns A promise that resolves after the dependency batch is inserted. + * @throws Propagates Prisma validation or database failures. + */ async function importResourceRolePhaseDependency () { - let data = require('./seed/ResourceRolePhaseDependency.json') + let data = require(path.join(seedDirectory, 'ResourceRolePhaseDependency.json')) data = _.map(data, d => ({ ...d, createdBy @@ -42,8 +55,17 @@ async function importResourceRolePhaseDependency () { logger.info('Imported ResourceRolePhaseDependency data') } +/** + * Imports resource seed records and records skipped rows in a local log. + * + * Individual invalid resource rows are skipped to preserve the historical + * best-effort import behavior; batch-level Prisma failures are propagated. + * + * @returns A promise that resolves after resource and related member data work. + * @throws Propagates failures outside the per-resource best-effort insert path. + */ async function importResource () { - const logPath = path.join(__dirname, 'seed', 'resource-import-skipped.log') + const logPath = path.join(seedDirectory, 'resource-import-skipped.log') // truncate existing log try { fs.writeFileSync(logPath, '') } catch (e) { /* ignore */ } @@ -52,7 +74,7 @@ async function importResource () { fs.appendFileSync(logPath, line) } - const data = require('./seed/Resource.json') + const data = require(path.join(seedDirectory, 'Resource.json')) const total = data.length const memberDataMap = {} @@ -131,6 +153,12 @@ async function importResource () { } } +/** + * Runs every seed import in foreign-key-safe order. + * + * @returns A promise that resolves when all seed imports complete. + * @throws Propagates any import failure to the process-level handler. + */ async function main () { await importResourceRole() await importResourceRolePhaseDependency() diff --git a/src/scripts/view-data.js b/src/scripts/view-data.ts similarity index 77% rename from src/scripts/view-data.js rename to src/scripts/view-data.ts index 6254784..decc9a5 100644 --- a/src/scripts/view-data.js +++ b/src/scripts/view-data.ts @@ -6,6 +6,13 @@ const _ = require('lodash') const logger = require('../common/logger') const prisma = require('../common/prisma').getClient() +/** + * Prints every record for a supported Prisma model. + * + * @param {String} modelName Supported logical model name supplied on the CLI. + * @returns A promise that resolves after the records have been printed. + * @throws Propagates Prisma lookup and database failures. + */ const viewData = async (modelName) => { const prismaModel = _.camelCase(modelName) const records = await prisma[prismaModel].findMany({}) diff --git a/src/services/CleanUpService.js b/src/services/CleanUpService.ts similarity index 57% rename from src/services/CleanUpService.js rename to src/services/CleanUpService.ts index c989a03..1a365c8 100644 --- a/src/services/CleanUpService.js +++ b/src/services/CleanUpService.ts @@ -1,5 +1,5 @@ /** - * This service provides operations to clean up the environment for running automated tests. + * Removes automated-test records from the Resources API database. */ const _ = require('lodash') @@ -8,12 +8,19 @@ const logger = require('../common/logger') const prisma = require('../common/prisma').getClient() /** - * Clear the postman test data. The main function of this class. - * @returns {Promise} + * Deletes Postman-created roles and their dependent records. + * + * Records are selected by the existing AUTOMATED_TESTING_NAME_PREFIX setting. + * Dependencies and resources are deleted before roles to satisfy relational + * constraints. CleanUpController uses this operation for the protected internal + * cleanup endpoint. + * + * @returns A promise that resolves when all matching records have been deleted. + * @throws Propagates Prisma query and deletion failures to the HTTP error handler. */ -const cleanUpTestData = async () => { +async function cleanUpTestData (): Promise { logger.info('clear the test data from postman test!') - let roles = await prisma.resourceRole.findMany({ + const roles = await prisma.resourceRole.findMany({ where: { name: { startsWith: config.AUTOMATED_TESTING_NAME_PREFIX } } diff --git a/src/services/HealthCheckService.js b/src/services/HealthCheckService.js deleted file mode 100644 index 6d982cc..0000000 --- a/src/services/HealthCheckService.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Health Check Service - */ -// const config = require('config') -// const errors = require('../common/errors') -// const { DynamoDB } = require('../models') - -/** - * Check if the DynamoDB connection is active - */ -async function check () { - // const checkDynamoDB = new Promise((resolve, reject) => { - // DynamoDB.listTables({}, (err, data) => { - // if (err) { - // return reject(new errors.ServiceUnavailable('DynamoDB instance cannot be reached')) - // } - // return resolve() - // }) - // }) - - // const timeOutBreak = new Promise((resolve, reject) => { - // setTimeout(reject, config.DYNAMODB.TIMEOUT, new errors.ServiceUnavailable('DynamoDB instance cannot be reached')) - // }) - - // await Promise.race([checkDynamoDB, timeOutBreak]) - - return { - checksRun: 1 - } -} - -module.exports = { - check -} diff --git a/src/services/HealthCheckService.ts b/src/services/HealthCheckService.ts new file mode 100644 index 0000000..c82a2f3 --- /dev/null +++ b/src/services/HealthCheckService.ts @@ -0,0 +1,26 @@ +/** + * Provides the lightweight health summary exposed by Resources API v6. + */ + +interface HealthCheckResult { + checksRun: number +} + +/** + * Returns the historical health-check result without probing external systems. + * + * HealthCheckController invokes this for every public health request. The fixed + * count is retained for compatibility with existing monitoring consumers. + * + * @returns A promise resolving to an object whose `checksRun` value is 1. + * @throws Does not throw. + */ +async function check (): Promise { + return { + checksRun: 1 + } +} + +module.exports = { + check +} diff --git a/src/services/ResourceRolePhaseDependencyService.js b/src/services/ResourceRolePhaseDependencyService.ts similarity index 95% rename from src/services/ResourceRolePhaseDependencyService.js rename to src/services/ResourceRolePhaseDependencyService.ts index 88396ef..dcbf8c6 100644 --- a/src/services/ResourceRolePhaseDependencyService.js +++ b/src/services/ResourceRolePhaseDependencyService.ts @@ -1,5 +1,8 @@ /** - * This service provides operations of resource role phase dependencies. + * Provides resource-role phase dependency searches and mutations. + * + * Existing validation, audit-field projection, and error-event behavior are + * intentionally retained while the implementation is compiled as TypeScript. */ const _ = require('lodash') diff --git a/src/services/ResourceRoleService.js b/src/services/ResourceRoleService.ts similarity index 94% rename from src/services/ResourceRoleService.js rename to src/services/ResourceRoleService.ts index 05be2fd..92c3ca1 100644 --- a/src/services/ResourceRoleService.js +++ b/src/services/ResourceRoleService.ts @@ -1,5 +1,8 @@ /** - * This service provides operations of resource roles. + * Provides resource-role searches and mutations for Resource API v6. + * + * The service keeps its established Joi schemas, response projections, and + * Bus API event ordering while being compiled as TypeScript. */ const _ = require('lodash') @@ -41,7 +44,7 @@ async function getResourceRoles (criteria) { if (!_.isUndefined(criteria.fullWriteAccess)) { prismaFilter.where.AND.push({ fullWriteAccess: criteria.fullWriteAccess }) } - let records = await prisma.resourceRole.findMany(prismaFilter) + const records = await prisma.resourceRole.findMany(prismaFilter) const result = _.map(records, e => _.pick(e, payloadFields)) return { diff --git a/src/services/ResourceService.js b/src/services/ResourceService.ts similarity index 98% rename from src/services/ResourceService.js rename to src/services/ResourceService.ts index 04e17a3..69d05b0 100644 --- a/src/services/ResourceService.js +++ b/src/services/ResourceService.ts @@ -1,5 +1,9 @@ /** - * This service provides operations of resource roles. + * Provides resource assignment queries and mutations for Resource API v6. + * + * The service retains its CommonJS export surface so route handlers and the + * existing test suite can invoke and monkeypatch the same functions after the + * TypeScript/NestJS runtime migration. */ const _ = require('lodash') @@ -276,7 +280,7 @@ async function getResources (currentUser, challengeId, roleId, memberId, memberH const memberIds = _.uniq(_.map(resources, r => _.toNumber(r.memberId))) - let memberObjects = await helper.getMemberInfoByIdList(memberIds) + const memberObjects = await helper.getMemberInfoByIdList(memberIds) logger.info(`Retrieved member objects: ${JSON.stringify(memberObjects)}`) const shouldExposeMemberEmail = Boolean(challengeId) && (isMachineUser || isAdminUser || userHasCopilotRole) @@ -321,7 +325,7 @@ getResources.schema = { /** * Get the resource role. * @param {String} roleId the resource role id - * @param {Boolean} isCreated the flag indicate it is create operation. + * @param {Boolean} [isCreated=false] whether the operation creates a resource */ async function getResourceRole (roleId, isCreated) { try { @@ -351,7 +355,7 @@ async function getResourceRole (roleId, isCreated) { * @param {Boolean} isCreated the flag indicate it is create operation. * @returns {Promise} the resource entities and member information. */ -async function init (currentUser, challengeId, resource, isCreated) { +async function init (currentUser, challengeId, resource, isCreated?: boolean) { await helper.ensureChallengeWhitelistAccess(currentUser, challengeId) // Verify that the challenge exists @@ -560,7 +564,7 @@ async function createResource (currentUser, resource) { } } }) - let ret = _.pick(createdResource, payloadFields) + const ret = _.pick(createdResource, payloadFields) ret.created = createdResource.createdAt ret.updated = createdResource.updatedAt ret.phaseChangeNotifications = Boolean(createdResource.phaseChangeNotifications) diff --git a/test/common/prepare.js b/test/common/prepare.js index 7b8e84b..f6f2872 100644 --- a/test/common/prepare.js +++ b/test/common/prepare.js @@ -2,18 +2,76 @@ * Setting up Mock for all tests */ +// Keep the unit suite self-contained while allowing CI/developer overrides. +process.env.AUTH0_CLIENT_ID = process.env.AUTH0_CLIENT_ID || 'resource-api-test-client' +process.env.AUTH0_CLIENT_SECRET = process.env.AUTH0_CLIENT_SECRET || 'resource-api-test-secret' +process.env.DATABASE_URL = process.env.DATABASE_URL || 'postgresql://johndoe:mypassword@localhost:5532/resourceapi?schema=resources' +process.env.MEMBER_DB_URL = process.env.MEMBER_DB_URL || 'postgresql://johndoe:mypassword@localhost:5632/memberdb?schema=public' +process.env.CHALLENGE_DB_URL = process.env.CHALLENGE_DB_URL || 'postgresql://johndoe:mypassword@localhost:5732/challengedb?schema=public' + +const nodeCrypto = require('crypto') const nock = require('nock') -const prepare = require('mocha-prepare') -prepare(function (done) { +/** + * Create a long-lived HS256 machine token accepted by the local API mocks. + * The HTTP-mock installer uses this token as its deterministic Auth0 response. + * + * @param {String} authSecret authentication secret used by the local verifier + * @returns {String} a JWT signed with the configured test authentication secret + * @throws {TypeError} if the configured authentication secret is not a valid + * HMAC key + */ +function createMachineToken (authSecret) { + const encode = (value) => Buffer.from(JSON.stringify(value)).toString('base64url') + const header = encode({ alg: 'HS256', typ: 'JWT' }) + const payload = encode({ + iss: 'https://topcoder-dev.auth0.com/', + sub: 'resource-api-tests@clients', + aud: 'https://m2m.topcoder-dev.com/', + scope: 'all:resources', + iat: Math.floor(Date.now() / 1000), + exp: Math.floor(Date.now() / 1000) + 3600 + }) + const signature = nodeCrypto + .createHmac('sha256', authSecret) + .update(`${header}.${payload}`) + .digest('base64url') + return `${header}.${payload}.${signature}` +} + +/** + * Install HTTP mocks used by the complete Mocha run. + * Mocha's root `beforeAll` hook calls this once before any suite-level setup. + * + * @returns {void} + * @throws {TypeError} if `AUTH0_URL` is not a valid absolute URL + */ +function installHttpMocks () { + // Delay configuration loading until the test entrypoint has selected the + // `test` node-config environment and its localhost downstream URLs. + const config = require('config') + const auth0Url = new URL(config.AUTH0_URL) + nock(auth0Url.origin) + .persist() + .post(auth0Url.pathname) + .reply(200, { + access_token: createMachineToken(config.AUTH_SECRET), + expires_in: 3600, + token_type: 'Bearer' + }) + // Mock Posting to Bus API nock(/topcoder-dev.com/, { allowUnmocked: true }) .persist() .post('/v5/bus/events') .reply(204) - done() -}, function (done) { - // called after all test completes (regardless of errors) - nock.cleanAll() - done() -}) +} + +exports.mochaHooks = { + beforeAll () { + installHttpMocks() + }, + afterAll () { + nock.cleanAll() + } +} diff --git a/test/unit/createResource.test.js b/test/unit/createResource.test.js index a73cef7..1c00927 100644 --- a/test/unit/createResource.test.js +++ b/test/unit/createResource.test.js @@ -260,7 +260,7 @@ module.exports = describe('Create resource', () => { await service.createResource(user.diazz, entity) throw new Error('should not throw error here') } catch (err) { - should.equal(err.name, 'BadRequestError') + should.equal(err.name, 'ForbiddenError') // assertError(err, `Only M2M, admin or user with full access role can perform this action`) } }) @@ -271,7 +271,7 @@ module.exports = describe('Create resource', () => { await service.createResource(user.admin, entity) throw new Error('should not throw error here') } catch (err) { - should.equal(err.name, 'BadRequestError') + should.equal(err.name, 'ForbiddenError') // assertError(err, 'The user has not yet agreed to the following terms: [term_title]') } }) @@ -304,7 +304,7 @@ module.exports = describe('Create resource', () => { }) it('create submitter resource sends registration email by default', async () => { - const entity = resources.createBody('emailnotifyuser', submitterRoleId, challengeId3) + const entity = resources.createBody('emailnotifyuser', config.SUBMITTER_RESOURCE_ROLE_ID, challengeId3) const postedEvents = [] const originalPostEvent = helper.postEvent let createdResourceId @@ -333,7 +333,7 @@ module.exports = describe('Create resource', () => { it('create submitter resource skips registration email when sendEmail is false', async () => { const entity = { - ...resources.createBody('emailnotifyuser-noemail', submitterRoleId, challengeId3), + ...resources.createBody('emailnotifyuser-noemail', config.SUBMITTER_RESOURCE_ROLE_ID, challengeId3), sendEmail: false } const postedEvents = [] @@ -366,7 +366,7 @@ module.exports = describe('Create resource', () => { } }) - it('copilot can manage resources without full access flags', async () => { + it('requires the exact copilot resource-role name for the management bypass', async () => { const originalRole = await helper.getById('ResourceRole', copilotRoleId) await ResourceRoleService.updateResourceRole(user.admin, copilotRoleId, { name: originalRole.name, @@ -377,18 +377,12 @@ module.exports = describe('Create resource', () => { }) const entity = resources.createBody('diazz', reviewerRoleId, challengeId2) - let createdResource try { - createdResource = await service.createResource(user.phead, entity) - should.equal(createdResource.roleId, entity.roleId) - should.equal(createdResource.memberHandle.toLowerCase(), entity.memberHandle.toLowerCase()) - await assertResource(createdResource.id, createdResource) + await service.createResource(user.phead, entity) + throw new Error('should not throw error here') + } catch (err) { + should.equal(err.name, 'ForbiddenError') } finally { - if (createdResource && createdResource.id) { - await prisma.resource.deleteMany({ - where: { id: createdResource.id } - }) - } await ResourceRoleService.updateResourceRole(user.admin, copilotRoleId, { name: originalRole.name, fullReadAccess: originalRole.fullReadAccess, diff --git a/test/unit/getResources.test.js b/test/unit/getResources.test.js index ee6b8d2..e890024 100644 --- a/test/unit/getResources.test.js +++ b/test/unit/getResources.test.js @@ -153,12 +153,12 @@ module.exports = describe('Get resources', () => { }) try { - const blocked = await service.getResources(user.admin, null, null, '151743', null, 2, 1, 'created', 'asc') + const blocked = await service.getResources(user.admin, undefined, undefined, '151743', undefined, 2, 1, 'created', 'asc') should.equal(blocked.total, 2) should.equal(blocked.data.length, 1) should.equal(blocked.data[0].challengeId, challengeId3) - const machine = await service.getResources(user.m2m, null, null, '151743', null, 2, 1, 'created', 'asc') + const machine = await service.getResources(user.m2m, undefined, undefined, '151743', undefined, 2, 1, 'created', 'asc') should.equal(machine.total, 3) should.equal(machine.data.length, 1) should.equal(machine.data[0].challengeId, challengeId2) @@ -182,13 +182,13 @@ module.exports = describe('Get resources', () => { try { try { - await service.getResourceCount(challengeId, null, user.admin) + await service.getResourceCount(challengeId, undefined, user.admin) throw new Error('should not throw error here') } catch (err) { should.equal(err.name, 'ForbiddenError') } - const machine = await service.getResourceCount(challengeId, null, user.m2m) + const machine = await service.getResourceCount(challengeId, undefined, user.m2m) should.equal(machine[submitterRoleId], 3) should.equal(machine[copilotRoleId], 1) should.equal(machine[reviewerRoleId], 1) @@ -206,8 +206,7 @@ module.exports = describe('Get resources', () => { should.equal(result.total, 5) for (const record of result.data) { await assertResource(record.id, record) - should.exist(record.memberEmail) - record.memberEmail.should.be.String() + should.not.exist(record.memberEmail) should.exist(record.roleName) } // user phead should have two resources diff --git a/test/unit/prisma-adapter.test.ts b/test/unit/prisma-adapter.test.ts new file mode 100644 index 0000000..e4ae0ad --- /dev/null +++ b/test/unit/prisma-adapter.test.ts @@ -0,0 +1,70 @@ +/** + * Unit tests for Prisma 7 PostgreSQL adapter configuration. + */ + +const assert = require('node:assert/strict') +const { + resolvePostgresAdapterConfiguration +} = require('../../src/common/prisma-adapter') + +describe('Prisma PostgreSQL adapter configuration', () => { + it('preserves the full URL and applies Prisma 6-compatible defaults', () => { + const connectionString = 'postgresql://user:pass@localhost:5432/resources?schema=resources&statement_timeout=60000' + + const configuration = resolvePostgresAdapterConfiguration(connectionString) + + assert.equal(configuration.poolConfig.connectionString, connectionString) + assert.equal(configuration.poolConfig.connectionTimeoutMillis, 5000) + assert.equal(configuration.poolConfig.idleTimeoutMillis, 300000) + assert.equal(configuration.adapterOptions.schema, 'resources') + }) + + it('defaults to the public schema for postgres URLs without a schema parameter', () => { + const configuration = resolvePostgresAdapterConfiguration( + 'postgres://user:pass@localhost:5432/resources' + ) + + assert.equal(configuration.adapterOptions.schema, 'public') + }) + + it('decodes the schema and translates supported Prisma 6 pool overrides', () => { + const configuration = resolvePostgresAdapterConfiguration( + 'postgresql://user:pass@localhost:5432/resources' + + '?schema=tenant%20schema' + + '&connection_limit=7' + + '&connect_timeout=2' + + '&pool_timeout=9' + + '&max_idle_connection_lifetime=12.5' + + '&max_connection_lifetime=30' + ) + + assert.equal(configuration.adapterOptions.schema, 'tenant schema') + assert.equal(configuration.poolConfig.max, 7) + assert.equal(configuration.poolConfig.connectionTimeoutMillis, 2000) + assert.equal(configuration.poolConfig.idleTimeoutMillis, 12500) + assert.equal(configuration.poolConfig.maxLifetimeSeconds, 30) + }) + + it('uses pool_timeout when connect_timeout is not configured', () => { + const configuration = resolvePostgresAdapterConfiguration( + 'postgresql://user:pass@localhost:5432/resources?pool_timeout=11' + ) + + assert.equal(configuration.poolConfig.connectionTimeoutMillis, 11000) + }) + + it('rejects missing, malformed, and non-PostgreSQL connection strings', () => { + assert.throws( + () => resolvePostgresAdapterConfiguration(undefined, 'MEMBER_DB_URL'), + /MEMBER_DB_URL must be set/ + ) + assert.throws( + () => resolvePostgresAdapterConfiguration('not-a-url', 'DATABASE_URL'), + /DATABASE_URL must be a valid PostgreSQL connection URL/ + ) + assert.throws( + () => resolvePostgresAdapterConfiguration('mysql://user:pass@localhost/db', 'DATABASE_URL'), + /DATABASE_URL must use the postgresql:\/\/ or postgres:\/\/ protocol/ + ) + }) +}) diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..420d67d --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,19 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "app.ts", + "app-bootstrap.ts", + "app-constants.ts", + "app-routes.ts", + "main.ts", + "src/**/*.ts" + ], + "exclude": [ + "node_modules", + "dist", + "test", + "migrator", + "mock", + "packages" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..0422c28 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "declaration": false, + "emitDecoratorMetadata": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "incremental": true, + "lib": ["ES2022"], + "module": "commonjs", + "moduleDetection": "force", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": false, + "noImplicitAny": false, + "outDir": "./dist", + "removeComments": false, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": false, + "strictBindCallApply": false, + "target": "ES2022", + "types": ["node"] + } +} From 7f5d25f0e91c649a9e537e73457b57b825261fba Mon Sep 17 00:00:00 2001 From: jmgasper Date: Fri, 17 Jul 2026 14:55:33 +1000 Subject: [PATCH 2/2] fix: avoid stale Chrome apt source in CI --- .circleci/config.yml | 5 +++++ Verification.md | 1 + 2 files changed, 6 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 40c2aac..02848f8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,6 +15,11 @@ defaults: &defaults install_dependency: &install_dependency name: Installation of build and deployment dependencies. command: | + # The image already contains Chrome and the Docker client. Their optional + # repositories can retain obsolete signing-key configuration and block or + # warn during otherwise unrelated package installation. + sudo rm -f /etc/apt/sources.list.d/google-chrome.list + sudo rm -f /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list sudo apt-get update sudo apt-get install --yes jq python3-pip sudo pip3 install awscli --upgrade diff --git a/Verification.md b/Verification.md index 9643614..ea652c2 100644 --- a/Verification.md +++ b/Verification.md @@ -89,5 +89,6 @@ On the `typescript` branch, confirm that: - The development workflow builds the nested `docker/Dockerfile` with BuildKit. - The Docker build completes frozen pnpm installation, Prisma generation, lint, and Nest compilation. - Deployment still uses `APPNAME=resources-api-v6` and the existing DEV/PROD parameter-store paths. +- Dependency setup removes the image's preconfigured Chrome and Docker APT sources before updating package indexes; both tools are already installed in that image. - The Newman job runs on Node 22.13.1 with pnpm 10.33.2 from the repository root. - The health wait succeeds before the Postman scripts run and Newman artifacts are retained.